Componentes UI
Tokens de Design Tokens do sistema de design Cookest — cores, tipografia, espaçamento, raio, sombras, transições e z-index
Os tokens de design são a única fonte de verdade para todas as decisões visuais no CUCL. São definidos em src/tokens/ como constantes TypeScript e expostos como propriedades CSS personalizadas em tempo de execução através de @cookest/ui/styles.css.
import { colors, spacing, typography, effects } from "@cookest/ui/tokens" ;
Cada ficheiro de tokens exporta também tipos TypeScript para total segurança de tipos:
import type { ColorToken, SpacingToken, FontFamilyToken } from "@cookest/ui/tokens" ;
Paleta de marca ancorada no verde-salva (#7A9A65). Todos os tokens têm variantes para modo claro e escuro.
Token Claro Escuro Utilização primary.DEFAULT#7A9A65#8AB575Botões, estados ativos, anéis de foco primary.light#B4CC9E#6B9A55Destaques ao passar o rato primary.dark#4E7A3A#A8D490Estados de pressão
A escala completa do primário vai de primary.50 (#F0F5EC) a primary.950 (#1A2B14).
Token Claro Escuro Variável CSS background#F5F5F0#0E1512--ck-bgcard#FAFAF6#172019--ck-bg-cardheading#1C3A2A#E0EDE4--ck-headingtext#3D5040#B0C8B5--ck-textmuted#7A8E74#6A8A70--ck-text-mutedborder#E4EBE0#253D2E--ck-bordersurface#FFFFFF#1A261E--ck-surface
Token Hex Variável CSS Utilização status.success#4CAF50--ck-successBadges e alertas de sucesso status.warning#FF9800--ck-warningBadges e alertas de aviso status.error#F44336--ck-errorMensagens de erro, botões danger status.info#2196F3--ck-infoBadges e alertas informativos
Os componentes referenciam propriedades CSS personalizadas — nunca valores hexadecimais codificados. O modo escuro funciona automaticamente quando a classe .dark é aplicada a um elemento pai:
// ✅ Correto — usa token
className = "text-[var(--ck-heading)]"
// ❌ Errado — cor codificada
className = "text-[#1C3A2A]"
Dois tipos de letra são utilizados em todo o sistema:
Token Valor Utilização fontFamily.serif'Playfair Display', Georgia, …Cabeçalhos, títulos, texto de destaque fontFamily.sans'Inter', -apple-system, …Corpo de texto, rótulos, texto de interface fontFamily.mono'JetBrains Mono', 'Fira Code', …Blocos de código
Regra: Playfair Display está reservado apenas para títulos de Modal e cabeçalhos de grande destaque. Todos os elementos de interface utilizam Inter.
Token Tamanho Altura de linha Utilização fontSize.xs12px 16px Legendas, texto auxiliar fontSize.sm14px 20px Rótulos, metadados fontSize.base16px 24px Corpo de texto fontSize.lg18px 28px Sub-cabeçalhos fontSize.xl20px 28px Títulos de cartão fontSize.2xl24px 32px Cabeçalhos de secção fontSize.3xl30px 36px Cabeçalhos de página fontSize.4xl36px 40px Texto hero fontSize.5xl48px 1 Texto de destaque
Token Valor fontWeight.light300 fontWeight.normal400 fontWeight.medium500 fontWeight.semibold600 fontWeight.bold700
Baseado numa grelha de 4px com aliases semânticos para margens e preenchimentos de componentes.
Token Valor Equivalente em px spacing[1]0.25rem4px spacing[2]0.5rem8px spacing[3]0.75rem12px spacing[4]1rem16px spacing[5]1.25rem20px spacing[6]1.5rem24px spacing[8]2rem32px spacing[10]2.5rem40px spacing[12]3rem48px
Alias Valor px Utilização típica componentSpacing.xs0.25rem4px Preenchimento de badges componentSpacing.sm0.5rem8px Campos compactos, espaços pequenos componentSpacing.md0.75rem12px Preenchimento padrão de componentes componentSpacing.lg1rem16px Preenchimento espaçoso componentSpacing.xl1.5rem24px Preenchimento de cartões, espaços entre secções componentSpacing["2xl"]2rem32px Espaçamento de secções grandes componentSpacing["3xl"]3rem48px Espaçamento ao nível da página
Token Valor Utilização radius.sm4px Chips pequenos, elementos compactos radius.md8px Campos de entrada, botões radius.lg12px Rodapés de modal, contentores internos radius.xl16px Cartões, modais radius["2xl"]24px Painéis flutuantes radius.full9999px Badges, avatares, pílulas
Token Valor Utilização shadow.sm0 1px 2px rgba(0,0,0,0.05)Elevação subtil de cartão shadow.md0 4px 6px -1px rgba(0,0,0,0.1)Dropdowns shadow.lg0 10px 15px -3px rgba(0,0,0,0.1)Modais shadow.primary0 4px 16px rgba(122,154,101,0.35)Botões primários shadow.primaryHover0 8px 28px rgba(122,154,101,0.5)Botões primários ao passar o rato
Token Valor Utilização transition.fast150ms easeAlterações de cor ao passar o rato transition.normal250ms easeMostrar/ocultar componentes transition.slow350ms easeTransições ao nível da página transition.bounce500ms cubic-bezier(0.34, 1.56, 0.64, 1)Microinterações lúdicas
Token Valor Utilização zIndex.dropdown10 Painéis dropdown do Select zIndex.sticky20 Cabeçalhos fixos zIndex.overlay30 Fundos de modal zIndex.modal40 Diálogos modais zIndex.popover50 Popovers zIndex.tooltip60 Tooltips
Todos os tokens semânticos mapeiam para variáveis CSS aplicadas em :root (claro) e .dark:
:root {
--ck-primary : #7a9a65 ;
--ck-primary-light : #b4cc9e ;
--ck-primary-dark : #4e7a3a ;
--ck-bg : #f5f5f0 ;
--ck-bg-card : #fafaf6 ;
--ck-heading : #1c3a2a ;
--ck-text : #3d5040 ;
--ck-text-muted : #7a8e74 ;
--ck-border : #e4ebe0 ;
--ck-surface : #ffffff ;
--ck-success : #4caf50 ;
--ck-warning : #ff9800 ;
--ck-error : #f44336 ;
--ck-info : #2196f3 ;
}
Utilize sempre as propriedades personalizadas var(--ck-*) nos nomes de classe dos componentes em vez de importar as constantes de token. As constantes de token destinam-se à lógica TypeScript; as variáveis CSS destinam-se à estilização.