Funções Utilitárias
Funções utilitárias JavaScript/TypeScript disponíveis no design system para manipulação de classes CSS, cores e outros utilitários.
cn(...inputs: ClassValue[])
Função utilitária para combinar classes CSS de forma inteligente, resolvendo conflitos e removendo duplicatas.
Import:
import { cn } from "@convertcompany/ui/utils";
Exemplo:
import { cn } from "@convertcompany/ui/utils";
// Combinação básica
const className = cn("text-red-500", "bg-blue-100");
// Resultado: "text-red-500 bg-blue-100"
// Com condicionais
const buttonClass = cn(
"px-4 py-2 rounded font-medium",
isPrimary && "bg-blue-500 text-white hover:bg-blue-600",
isDisabled && "opacity-50 cursor-not-allowed"
);
// Resolvendo conflitos
const finalClass = cn("text-red-500", "text-blue-500");
// Resultado: "text-blue-500" (última classe vence)
// Com arrays e objetos
const classes = cn([
"flex items-center gap-2",
{ "justify-center": isCentered, "justify-between": !isCentered }
]);
// Exemplo prático em componente
function Button({ variant, size, disabled, className, children }) {
const buttonClass = cn(
"inline-flex items-center justify-center rounded-md transition-colors",
variant === "primary" && "bg-blue-500 text-white hover:bg-blue-600",
variant === "secondary" && "bg-gray-200 text-gray-900 hover:bg-gray-300",
size === "sm" && "px-3 py-1.5 text-sm",
size === "lg" && "px-6 py-3 text-lg",
disabled && "opacity-50 cursor-not-allowed",
className
);
return <button className={buttonClass}>{children}</button>;
}
isBright(color: string): boolean
Determina se uma cor é clara ou escura baseada na luminância.
Import:
import { isBright } from "@convertcompany/ui/utils";
Exemplo:
import { isBright } from "@convertcompany/ui/utils";
// Cores claras
isBright("#ffffff"); // true
isBright("#f0f0f0"); // true
isBright("white"); // true
// Cores escuras
isBright("#000000"); // false
isBright("#333333"); // false
isBright("black"); // false
// Cores hexadecimais de 3 dígitos
isBright("#fff"); // true
isBright("#000"); // false
// Exemplo prático em componente
function Card({ backgroundColor, children }) {
const isLightBackground = isBright(backgroundColor);
const cardClass = cn(
"p-6 rounded-lg border shadow-sm",
isLightBackground
? "text-gray-900 border-gray-200"
: "text-white border-gray-700"
);
return (
<div
className={cardClass}
style={{ backgroundColor }}
>
{children}
</div>
);
}
// Exemplo de uso
<Card backgroundColor="#f8fafc">
<h3>Card com fundo claro</h3>
<p>Texto escuro para contraste</p>
</Card>
<Card backgroundColor="#1e293b">
<h3>Card com fundo escuro</h3>
<p>Texto claro para contraste</p>
</Card>
Características:
- Suporte a múltiplos formatos de cor (hex 3/6 dígitos, nomes)
- Algoritmo de luminância baseado no padrão WCAG
- Threshold ajustável (0.65 como padrão)
- Cálculo rápido e eficiente