Tokens
Os nomes de todo valor do Feitio: de onde vêm, como usar no CSS e no TypeScript, e a lista inteira.
Nesta página
O que são
Todo valor do Feitio (cor, espaço, letra, canto, duração) é um token com nome. Ninguém escreve um valor à mão: escreve o nome, e o valor vem do tema e do modo.
De onde vêm
- A fonte é JSON no formato aberto DTCG, em
tokens/:base.tokens.jsonpara o que não muda com o tema, e um arquivo por tema e modo emtokens/themes/. bun run buildgera as variáveis CSS (css/tokens.css) e os nomes em TypeScript (js/tokens.ts).bun run checktesta o contraste de cada par de cor e se toda cor cabe numa tela comum (sRGB).
Como usar
CSS
.minha-area {
padding: var(--feitio-space-5) var(--feitio-space-4);
border-radius: var(--feitio-radius);
background: var(--feitio-color-surface-raised);
}TypeScript
js/tokens.ts exporta cada nome com a variável dele, e o tipo TokenName: um nome errado não compila.
import { tokens, type TokenName } from '@feitio/core/js/tokens.ts';
const gap: TokenName = 'space.4';
element.style.gap = tokens[gap]; // 'var(--feitio-space-4)'Os tokens de base
Os mesmos em todo tema e modo.
| Token | Valor | Grupo |
|---|---|---|
--feitio-font-text | "Alegreya", "Georgia", serif | Letra |
--feitio-font-ui | "Alegreya Sans", "Gill Sans", sans-serif | Letra |
--feitio-font-weight-regular | 400 | Letra |
--feitio-font-weight-medium | 500 | Letra |
--feitio-font-weight-bold | 700 | Letra |
--feitio-font-weight-heavy | 800 | Letra |
--feitio-font-size-small | 1rem | Letra |
--feitio-font-size-body | 1.25rem | Letra |
--feitio-font-size-h3 | 1.5rem | Letra |
--feitio-font-size-h2 | 2rem | Letra |
--feitio-font-size-h1 | 2.75rem | Letra |
--feitio-font-size-display | 4rem | Letra |
--feitio-line-height-text | 1.6 | Entrelinha |
--feitio-line-height-heading | 1.08 | Entrelinha |
--feitio-space-1 | 0.25rem | Espaço |
--feitio-space-2 | 0.5rem | Espaço |
--feitio-space-3 | 1rem | Espaço |
--feitio-space-4 | 1.5rem | Espaço |
--feitio-space-5 | 2.5rem | Espaço |
--feitio-space-6 | 4rem | Espaço |
--feitio-space-7 | 6rem | Espaço |
--feitio-measure-reading | 46rem | Medida |
--feitio-radius-top-left | 6px | Cantos |
--feitio-radius-top-right | 10px | Cantos |
--feitio-radius-bottom-right | 6px | Cantos |
--feitio-radius-bottom-left | 8px | Cantos |
--feitio-border-width | 1px | Traço |
--feitio-focus-width | 3px | Foco |
--feitio-focus-offset | 3px | Foco |
--feitio-duration-place | 260ms | Duração |
--feitio-duration-change | 320ms | Duração |
--feitio-easing-place | cubic-bezier(0.2, 0.9, 0.3, 1.25) | Curva |
--feitio-easing-change | cubic-bezier(0.3, 0, 0.2, 1) | Curva |
Os papéis de cor
Os valores da casa, de dia e à noite. Uma fachada preenche os mesmos nomes com outros valores.
| Token | Dia | Noite |
|---|---|---|
--feitio-color-surface | oklch(96% 0.018 80) | oklch(22% 0.016 55) |
--feitio-color-surface-raised | oklch(92.5% 0.026 76) | oklch(27.5% 0.02 55) |
--feitio-color-surface-top | oklch(98.5% 0.01 85) | oklch(31% 0.022 55) |
--feitio-color-text | oklch(26% 0.022 55) | oklch(93% 0.022 80) |
--feitio-color-text-soft | oklch(46% 0.025 55) | oklch(76% 0.03 72) |
--feitio-color-accent | oklch(54% 0.165 40) | oklch(54% 0.165 40) |
--feitio-color-accent-strong | oklch(50% 0.16 38) | oklch(77% 0.15 52) |
--feitio-color-on-accent | oklch(97% 0.015 80) | oklch(97% 0.015 80) |
--feitio-color-line | oklch(26% 0.022 55 / 0.15) | oklch(93% 0.022 80 / 0.15) |
--feitio-color-shadow | oklch(26% 0.022 55 / 0.9) | oklch(12% 0.01 55 / 0.95) |
--feitio-color-ok | oklch(45% 0.09 140) | oklch(78% 0.1 140) |
--feitio-color-ok-surface | oklch(91% 0.04 135) | oklch(30% 0.04 140) |
--feitio-color-warn | oklch(50% 0.1 85) | oklch(83% 0.11 88) |
--feitio-color-warn-surface | oklch(92% 0.06 90) | oklch(32% 0.05 85) |
--feitio-color-error | oklch(45% 0.15 15) | oklch(76% 0.12 15) |
--feitio-color-error-surface | oklch(91% 0.04 15) | oklch(31% 0.06 15) |
Regras
- Nada de valor escrito à mão onde existe um token.
- Um token novo entra no JSON, nunca no CSS gerado: o build sobrescreve o que for editado à mão.
- Cor nova passa pelo teste de contraste antes de entrar.