diff --git a/docs/audit/theming/README.md b/docs/audit/theming/README.md index fdac4b0bc..762fccd8b 100644 --- a/docs/audit/theming/README.md +++ b/docs/audit/theming/README.md @@ -10,9 +10,9 @@ - **Medido**: 2026-08-21 · **162 recetas** con CSS + **8 componentes sin receta** = 170 fichas, el árbol entero de `eidos/components/` - **La pregunta**: ¿cuánto de la apariencia de cada componente puede cambiar un tema **sin tocar el sistema ni la receta**? -- **Alcance global**: **49%** — 2309 de 4676 knobs pasan por un token público del componente -- **Reparto**: público 2309 · privado 627 · global 1173 · literal 567 · sistema transversal 509 _(fuera del ratio)_ -- **Sin token público propio**: 35 · **alcance < 20 %**: 28 · **alcance 100 %**: 9 · **con eje `size`**: 59 +- **Alcance global**: **49%** — 2311 de 4676 knobs pasan por un token público del componente +- **Reparto**: público 2311 · privado 627 · global 1171 · literal 567 · sistema transversal 509 _(fuera del ratio)_ +- **Sin token público propio**: 34 · **alcance < 20 %**: 27 · **alcance 100 %**: 10 · **con eje `size`**: 59 ## Cómo se lee @@ -91,12 +91,12 @@ theming §6.7 lo pone delante (`hover-bg`). Las fichas proponen la forma | 19 | [timeline](./timeline.md) | 24 | 51% | 49 | 45 | | 20 | [avatar](./avatar.md) | 23 | 36% | 36 | 0 | -## Sin ningún token público propio (35) +## Sin ningún token público propio (34) Ni una clave pública en `lib/recipes/base.ts` — alguno tiene privados forward (`_palette-*`), que no son contrato: un tema no puede nombrarlos. -[`alert-dialog`](./alert-dialog.md) · [`announce`](./announce.md) · [`aspect-ratio`](./aspect-ratio.md) · [`auto-grid`](./auto-grid.md) · [`avatar`](./avatar.md) · [`cascade`](./cascade.md) · [`clipboard`](./clipboard.md) · [`css-field`](./css-field.md) · [`date-picker`](./date-picker.md) · [`display`](./display.md) · [`field-langs`](./field-langs.md) · [`heading`](./heading.md) · [`highlight`](./highlight.md) · [`knob`](./knob.md) · [`label`](./label.md) · [`mark`](./mark.md) · [`mask-field`](./mask-field.md) · [`menu-dial`](./menu-dial.md) · [`mockup`](./mockup.md) · [`month-grid`](./month-grid.md) · [`motion`](./motion.md) · [`number-field`](./number-field.md) · [`palabras`](./palabras.md) · [`range-calendar`](./range-calendar.md) · [`scroll-frames`](./scroll-frames.md) · [`skin-media-player`](./skin-media-player.md) · [`stack`](./stack.md) · [`text`](./text.md) · [`text-blur`](./text-blur.md) · [`text-circular`](./text-circular.md) · [`text-focus`](./text-focus.md) · [`text-gradient`](./text-gradient.md) · [`text-scramble`](./text-scramble.md) · [`wrap`](./wrap.md) · [`year-grid`](./year-grid.md) +[`alert-dialog`](./alert-dialog.md) · [`announce`](./announce.md) · [`aspect-ratio`](./aspect-ratio.md) · [`auto-grid`](./auto-grid.md) · [`avatar`](./avatar.md) · [`cascade`](./cascade.md) · [`clipboard`](./clipboard.md) · [`css-field`](./css-field.md) · [`date-picker`](./date-picker.md) · [`display`](./display.md) · [`field-langs`](./field-langs.md) · [`heading`](./heading.md) · [`highlight`](./highlight.md) · [`knob`](./knob.md) · [`mark`](./mark.md) · [`mask-field`](./mask-field.md) · [`menu-dial`](./menu-dial.md) · [`mockup`](./mockup.md) · [`month-grid`](./month-grid.md) · [`motion`](./motion.md) · [`number-field`](./number-field.md) · [`palabras`](./palabras.md) · [`range-calendar`](./range-calendar.md) · [`scroll-frames`](./scroll-frames.md) · [`skin-media-player`](./skin-media-player.md) · [`stack`](./stack.md) · [`text`](./text.md) · [`text-blur`](./text-blur.md) · [`text-circular`](./text-circular.md) · [`text-focus`](./text-focus.md) · [`text-gradient`](./text-gradient.md) · [`text-scramble`](./text-scramble.md) · [`wrap`](./wrap.md) · [`year-grid`](./year-grid.md) ## Tabla completa (162 recetas, por alcance ascendente) @@ -112,7 +112,6 @@ La columna «contrato» cuenta las claves **públicas** del bloque del component | [scroll-frames](./scroll-frames.md) | 0% | 9 | 0 | 1 | 4 | 4 | 0 | 0 | – | | [announce](./announce.md) | 0% | 8 | 0 | 0 | 8 | 0 | 0 | 0 | – | | [clipboard](./clipboard.md) | 0% | 8 | 0 | 2 | 5 | 1 | 0 | 0 | – | -| [label](./label.md) | 0% | 8 | 0 | 0 | 2 | 0 | 6 | 0 | – | | [menu-dial](./menu-dial.md) | 0% | 8 | 0 | 3 | 1 | 4 | 0 | 0 | y | | [mark](./mark.md) | 0% | 5 | 0 | 2 | 1 | 2 | 0 | 0 | – | | [aspect-ratio](./aspect-ratio.md) | 0% | 3 | 0 | 0 | 1 | 2 | 0 | 0 | – | @@ -250,6 +249,7 @@ La columna «contrato» cuenta las claves **públicas** del bloque del component | [link-preview](./link-preview.md) | 100% | 15 | 12 | 0 | 0 | 0 | 3 | 33 | – | | [code](./code.md) | 100% | 13 | 7 | 0 | 0 | 0 | 6 | 6 | – | | [box](./box.md) | 100% | 9 | 9 | 0 | 0 | 0 | 0 | 43 | – | +| [label](./label.md) | 100% | 8 | 2 | 0 | 0 | 0 | 6 | 2 | – | | [display](./display.md) | — | 6 | 0 | 0 | 0 | 0 | 6 | 0 | – | | [barcode](./barcode.md) | 100% | 5 | 5 | 0 | 0 | 0 | 0 | 7 | – | | [flex](./flex.md) | 100% | 2 | 2 | 0 | 0 | 0 | 0 | 7 | – | diff --git a/docs/audit/theming/label.md b/docs/audit/theming/label.md index 6ddf2d89b..ec27f565f 100644 --- a/docs/audit/theming/label.md +++ b/docs/audit/theming/label.md @@ -5,19 +5,16 @@ > Vista de conjunto: [README](./README.md) · método y protocolo: > [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7. -- **Medido**: 2026-08-20 · **Alcance**: **0%** — 0 de 2 knobs por token público -- **Knobs de apariencia**: 8 — público 0 · privado 0 · global 2 · literal 0 · sistema 6 _(fuera del ratio)_ -- **Contrato hoy** (`lib/recipes/base.ts`): 0 pública(s) · 1 privada(s) forward — `_palette-text` +- **Medido**: 2026-08-21 · **Alcance**: **100%** — 2 de 2 knobs por token público +- **Knobs de apariencia**: 8 — público 2 · privado 0 · global 0 · literal 0 · sistema 6 _(fuera del ratio)_ +- **Contrato hoy** (`lib/recipes/base.ts`): 2 pública(s) — `gap`, `disabled-fg` · 1 privada(s) forward — `_palette-text` - **Eje `size`**: no · **ficheros**: `label.css` ## 1. Knobs fuera de alcance -### 1.1 Directo a primitivo global (2) +### 1.1 Directo a primitivo global (0) -| # | fichero:línea | selector | propiedad | valor | -| ---: | --- | --- | --- | --- | -| 1 | `label.css:14` | `[data-label]` | `gap` | `var(--space-1)` | -| 2 | `label.css:34` | `[data-label][data-disabled]` | `color` | `var(--color-content-disabled)` | +_Ninguno._ ### 1.2 A través de un privado (0) @@ -50,18 +47,7 @@ Consumidos y **no declarados en el CSS** (vienen de `base.ts` o de un estilo inl ## 4. Propuesta de corrección -### 4.1 Tokens a declarar en `lib/recipes/base.ts` (2) - -Valor **verbatim** del CSS de hoy: el default no se mueve, sólo cambia quién -puede moverlo. Nombres derivados de recipe-contract §1 (ejes lógicos, talla -al final) y theming §6.7 (slots de color, modificador delante). Un token con -DOS valores distintos es una colisión de nombre: son dos knobs, o el nombre -no distingue lo que debería — se marca `⚠`. - -| token (`--label-…`) | scope TSC | valor propuesto | usos | -| --- | --- | --- | ---: | -| `gap` | `root` | `var(--space-1)` | 1 | -| `disabled-fg` | `root` | `var(--color-content-disabled)` | 1 | +_Nada que proponer: no hay knobs fuera de alcance._ ### 4.4 Lo que hay que comprobar a mano (PLAN-theming §1.3 · §7.4) @@ -75,6 +61,23 @@ no distingue lo que debería — se marca `⚠`. -_(pendiente — lo escribe el autor; se conserva al regenerar)_ +**Medido 2026-08-22.** `label` es uno de los seis PRIMITIVOS TIPOGRÁFICOS, y el +censo ya lo trata como tal: **seis de sus ocho knobs son sistema** porque sus +seis ejes consumen `--style-label-*` con la escotilla por instancia +(`var(--_label-{eje}, var(--style-label-{eje}))`) — la forma que D-TH.2-b fijó, +y la misma que hace que un `