Nombrar
La convención de DesignToken101
El orden de niveles, las reglas y el vocabulario con los que DesignToken101 nombra sus tokens, por qué las paletas se nombran por su tono, cómo se nombran los tamaños y cómo se nombraría un token de componente.
Última revisión:
Una convención de nombres es un documento corto: un orden de niveles, unas reglas y una lista de palabras permitidas en cada nivel. En esta lección verás la de DesignToken101 completa, con el motivo de cada regla. Es la que seguirás, o adaptarás, en el ejercicio del módulo.
En esta página
- El orden de los niveles
- Las reglas
- El vocabulario
- Las paletas se nombran por su tono
- Los semánticos de tamaño
- Los tokens de componente
- Cómo queda en el archivo
- Lo que te llevas
El orden de los niveles
Los semánticos de color de DesignToken101 siguen siempre este orden (los de tamaño tienen el suyo, que verás más abajo):
categoría / propiedad / rol / énfasis / estado
| Token | Categoría | Propiedad | Rol | Énfasis | Estado |
|---|---|---|---|---|---|
color/background/neutral/default | color | background | neutral | default | No tiene |
color/text/neutral/subtle | color | text | neutral | subtle | No tiene |
color/background/accent/strong/hover | color | background | accent | strong | hover |
color/text/on-accent | color | text | on-accent | No tiene | No tiene |
color/border/focus | color | border | focus | No tiene | No tiene |
El orden no cambia nunca. Un nivel puede faltar (regla 3), pero los que están aparecen siempre en el mismo sitio. Así, quien ve …/strong/hover sabe que strong es el énfasis y hover el estado, sin tener que adivinarlo.
Las reglas
La especificación del sistema tiene siete reglas. Cinco son sobre la forma del nombre; las otras dos tienen lección propia o ya las has visto.
- Minúsculas y palabras completas, separadas por guiones dentro de cada nivel (
on-accent,max-width). Nada de abreviaturas:background, nobg. El curso de Figma lo aconseja porque una abreviatura se puede interpretar de varias formas (Figma: Update 1). Sin valores ni temas en el nombre, con la excepción de los pesos tipográficos (font-weight/600). /separa los niveles en Figma. Al exportar, cada/es un grupo de DTCG; en CSS, un guion. Lo verás en Un nombre en Figma, DTCG y CSS.- Orden fijo, sin niveles de relleno. Un nivel que no aporta información no se escribe (Anatomía de un nombre).
- Hoja explícita. Si un nombre fuera a la vez token y grupo, el token lleva
/default. Tiene lección propia: Estados en el nombre. - Primitivos: categoría / paleta / paso, con las paletas nombradas por su tono, nunca por su rol. Lo retomas más abajo.
- Los semánticos son alias, con un máximo de dos saltos. Lo viste en el módulo 3, con sus excepciones (Cuando un semántico no es alias).
- Pares
on-para el texto sobre un fondo de color fuerte, con su contraste comprobado (Los pares on).
El vocabulario
Cada nivel admite una lista cerrada de palabras. Si una palabra no está en la lista, no se usa hasta que se añade a la convención.
| Nivel | Palabras | Notas |
|---|---|---|
| Categoría | color, space, radius, border-width, font-family, font-size, font-weight, line-height, size | size es para las medidas de maquetación |
| Propiedad (color) | background, text, border | Sin icon: los iconos usan los tokens de texto |
| Rol | neutral, accent, info, success, warning, danger | danger y no error |
| Rol que no depende de un color de rol | focus, overlay | El anillo de foco y la capa sobre el contenido son iguales en toda la interfaz |
| Par sobre un rol | on-accent | Ocupa el lugar del rol (regla 7) |
| Énfasis | default, subtle, strong, translucent | subtle, menos énfasis; strong, más; translucent, un fondo con transparencia |
| Estado | default, hover, active | disabled se añadiría como rol, no como estado |
| Elemento (tamaño) | control, container, content, sidebar | Lo verás más abajo |
| Medida (tamaño) | max-width, width | El nombre de la propiedad CSS en la que se aplican |
Cuatro de esas elecciones merecen una explicación:
dangery noerror. Es la palabra que usa el SDS de Figma (--sds-color-text-danger-default, SDS: theme.css), y la que usa Atlassian al hablar del botón de una acción peligrosa (Atlassian: Design tokens).focusyoverlayen el lugar del rol. El anillo de foco y la capa que oscurece la página tras el panel móvil no cambian con el rol: son los mismos en toda la interfaz. Por eso no llevan un rol de color delante, sino que ocupan su lugar. Es el mismo criterio que seguiríadisabled(lo verás en Estados en el nombre). Atlassian pone su token de foco en la misma posición, justo después de la propiedad:color.border.focused(Atlassian: Design tokens, lista completa).- Sin propiedad
icon. Atlassian sí la tiene (color.icon.success). DesignToken101 la descartó: en esta web, los iconos usan el token de texto de su contexto. Los tokens de texto llevan el scope de forma para poder colorear iconos (Un scope por propiedad). Si un día hace falta separarlos, se añadeiconsin romper nada. activees "pulsado". Es el estado mientras se pulsa un control, como la pseudoclase:activede CSS (MDN: :active). Por eso la variante que marca la sección actual del sidebar se llamacurrenty noactive: conactive, el mismo nombre significaría dos cosas.
Recomendación
Usa el vocabulario también fuera de los tokens: en los nombres de las propiedades de los componentes, en las variantes y en la documentación. En DesignToken101, la variante del sidebar se llamó current precisamente porque active ya tenía dueño en los tokens.
Las paletas se nombran por su tono
En el módulo 2 viste que las paletas primitivas se nombran por su tono (emerald, red, amber, blue) o por su naturaleza (neutral), nunca por su rol (El nombre dice qué valor es). Con la convención completa se ve por qué esa regla importa: el rol ya tiene su sitio, y es el nombre semántico.
| Semántico (dice el rol) | Primitivo en Light (dice el valor) |
|---|---|
color/text/accent/default | color/emerald/700 |
color/text/success/default | color/emerald/700 |
color/text/danger/default | color/red/700 |
Si la paleta del acento se llamara brand, el token de éxito apuntaría a brand/700. El nombre diría que el éxito es "de marca", que no es lo que significa. Con los nombres por tono, cada capa dice una cosa: el primitivo, qué color es; el semántico, para qué se usa.
Los semánticos de tamaño
Los semánticos de la colección Semantic size no tienen propiedad, rol ni énfasis: se aplican siempre a la misma propiedad y no tienen variantes de color. Siguen otro orden, categoría / elemento / medida, con los niveles necesarios:
| Token | Categoría | Elemento | Medida | Valor |
|---|---|---|---|---|
radius/control | radius | control | No tiene | 8 px |
radius/container | radius | container | No tiene | 16 px |
size/content/max-width | size | content | max-width | 960 px |
size/sidebar/width | size | sidebar | width | 304 px |
El elemento dice a qué se aplica: a un control o a un contenedor, en el radio; a una zona de la página, en las medidas de maquetación. La medida usa el nombre de la propiedad CSS en la que se aplica. El radio no la necesita: siempre es el de las esquinas.
La categoría size agrupa las medidas de maquetación que no son espaciado ni radio.
size/sidebar/width es un buen ejemplo de cómo aparece un token: el sidebar se dibujó en Figma a 305 px sin variable, y el hueco se vio al llevarlo a código. Se decidió un valor, 304 px, y se creó el token con un nombre que encajaba en la categoría que ya existía.
Los tokens de componente
DesignToken101 no tiene tokens de componente (La capa de componente). Aun así, conviene decidir cómo se nombrarían, para que el primero no invente su propio patrón.
El curso de Figma propone este orden: componente, tipo, propiedad y estado. Su ejemplo es button-primary-background-default (Figma: Update 1).
Recomendación
En DesignToken101, un token de componente se nombraría componente / variante / propiedad / estado, con los niveles necesarios y el estado explícito si lo hay: button/primary/background/default, link/text. Es el formato del curso de Figma con / en vez de guiones, así que los tokens de un componente quedan en el mismo grupo. Es una decisión provisional: se revisará cuando un componente necesite el primero.
Un token de componente apunta siempre a un semántico, nunca a un primitivo (La capa de componente).
Cómo queda en el archivo
Como cada nivel es un grupo, el orden de los niveles es el orden de los grupos. Esta es la estructura de la colección Semantic color en el archivo que exporta Figma (tokens/figma/semantic-color/Light.tokens.json), con los tokens de cada grupo entre paréntesis:
color
├── background (overlay)
│ ├── neutral (default, subtle, strong, hover, active, translucent)
│ ├── accent (subtle)
│ │ └── strong (default, hover, active)
│ └── info, success, warning, danger (subtle)
├── text (on-accent)
│ ├── neutral (default, subtle)
│ ├── accent (default, hover)
│ └── info, success, warning, danger (default)
└── border (focus)
├── neutral (default, strong)
├── accent (default, strong)
└── info, success, warning, danger (default)Todos los fondos quedan bajo background; todos los textos, bajo text. El orden del nombre ordena también el archivo.
Lo que te llevas
- Los semánticos de color siguen categoría / propiedad / rol / énfasis / estado; los de tamaño, categoría / elemento / medida.
- Cada nivel tiene una lista cerrada de palabras, y el rol vive en el semántico, nunca en el nombre de una paleta.
- Si algún día hay tokens de componente, se nombrarán componente / variante / propiedad / estado.