Tokens
Los nombres de cada valor Feitio: de dónde provienen, cómo usarlos en CSS y TypeScript, y la lista completa.
En esta página
What they are
Cada valor Feitio (color, espacio, tipo, esquina, duración) es un token con nombre. Nadie escribe un valor a mano: escribís el nombre y el valor viene del tema y modo.
Where they come from
- La fuente es JSON en abierto DTCG, en
tokens/:base.tokens.jsonpara lo que no cambia con el tema, y un archivo por tema y modo entokens/themes/. bun run buildgenera las variables CSS (css/tokens.css) y los nombres TypeScript (js/tokens.ts).bun run checkprueba el contraste de cada par de color y si cada color se ajusta a una pantalla ordinaria (sRGB).
How to use
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 nombre con su variable, y el tipo TokenName: un nombre incorrecto no se 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)'Los tokens base
Lo mismo en cada tema y modo.
| Token | Valor | Grupo |
|---|---|---|
--feitio-font-text | "Alegreya", "Georgia", serif | Tipo |
--feitio-font-ui | "Alegreya Sans", "Gill Sans", sans-serif | Tipo |
--feitio-font-weight-regular | 400 | Tipo |
--feitio-font-weight-medium | 500 | Tipo |
--feitio-font-weight-bold | 700 | Tipo |
--feitio-font-weight-heavy | 800 | Tipo |
--feitio-font-size-small | 1rem | Tipo |
--feitio-font-size-body | 1.25rem | Tipo |
--feitio-font-size-h3 | 1.5rem | Tipo |
--feitio-font-size-h2 | 2rem | Tipo |
--feitio-font-size-h1 | 2.75rem | Tipo |
--feitio-font-size-display | 4rem | Tipo |
--feitio-line-height-text | 1.6 | Altura de línea |
--feitio-line-height-heading | 1.08 | Altura de línea |
--feitio-space-1 | 0.25rem | Espacio |
--feitio-space-2 | 0.5rem | Espacio |
--feitio-space-3 | 1rem | Espacio |
--feitio-space-4 | 1.5rem | Espacio |
--feitio-space-5 | 2.5rem | Espacio |
--feitio-space-6 | 4rem | Espacio |
--feitio-space-7 | 6rem | Espacio |
--feitio-measure-reading | 46rem | Medida |
--feitio-radius-top-left | 6px | Bordes |
--feitio-radius-top-right | 10px | Bordes |
--feitio-radius-bottom-right | 6px | Bordes |
--feitio-radius-bottom-left | 8px | Bordes |
--feitio-border-width | 1px | Línea |
--feitio-focus-width | 3px | Enfoque |
--feitio-focus-offset | 3px | Enfoque |
--feitio-duration-place | 260ms | Duración |
--feitio-duration-change | 320ms | Duración |
--feitio-easing-place | cubic-bezier(0.2, 0.9, 0.3, 1.25) | Suavizado |
--feitio-easing-change | cubic-bezier(0.3, 0, 0.2, 1) | Suavizado |
Los roles de color
Los valores del tema principal, durante el día y por la noche. Una fachada rellena los mismos nombres con otros valores.
| Token | Día | Noche |
|---|---|---|
--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) |
Reglas
- No hay valor escrito a mano donde exista un token.
- Un nuevo token va en el JSON, nunca en el CSS generado: la compilación sobrescribe las ediciones manuales.
- Un nuevo color pasa por la prueba de contraste antes de entrar.