You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte-kit-vice/docs/audit/theming/tree-grid.md

109 lines
6.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# tree-grid — alcance de tema: análisis y propuesta
> Generado por `node --import tsx/esm scripts/theming-census.ts --report`.
> Lo **medido** y la **propuesta** se regeneran; el **Veredicto** (§5) se conserva.
> 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**: **95%** — 37 de 39 knobs por token público
- **Knobs de apariencia**: 42 — público 37 · privado 1 · global 0 · literal 1 · sistema 3 _(fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 47 pública(s) — `row-height-xs`, `row-height-sm`, `row-height-md`, `row-height-lg`, `row-height-xl`, `row-padding-block-xs`, `row-padding-block-sm`, `row-padding-block-md`, `row-padding-block-lg`, `row-padding-block-xl`, `row-padding-inline-xs`, `row-padding-inline-sm`, `row-padding-inline-md`, `row-padding-inline-lg`, `row-padding-inline-xl`, `indent-xs`, `indent-sm`, `indent-md`, `indent-lg`, `indent-xl`, `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `font-size-xl`, `row-height`, `row-padding-block`, `row-padding-inline`, `indent`, `font-size`, `radius`, `font-family`, `line-height`, `fg`, `border-width`, `divider`, `surface-bg`, `row-bg`, `header-bg`, `header-font-weight`, `header-z`, `striped-row-bg`, `hover-row-bg`, `disabled-row-fg`, `guide-fg`, `guide-width`, `branch-placeholder-size` · 1 privada(s) forward — `_palette-element`
- **Eje `size`**: no · **ficheros**: `tree-grid.css`
## 1. Knobs fuera de alcance
### 1.1 Directo a primitivo global (0)
_Ninguno._
### 1.2 A través de un privado (1)
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
| 1 | `tree-grid.css:154` | `[data-tree-grid-row][aria-selected='true']` | `background` | `var(--_tree-grid-palette-element)` |
### 1.3 Literales (1)
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
| 1 | `tree-grid.css:39` | `[data-tree-grid-root][data-block]` | `inline-size` | `100%` |
## 2. Sistema transversal (3) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
| 1 | `tree-grid.css:72` | `[data-tree-grid-root][data-disabled]` | `opacity` | `var(--opacity-disabled)` |
| 2 | `tree-grid.css:160` | `[data-tree-grid-row][data-disabled]` | `opacity` | `var(--opacity-disabled)` |
| 3 | `tree-grid.css:164` | `[data-tree-grid-row]:focus-visible` | `outline` | `var(--focus-ring-width) solid var(--focus-ring-color)` |
## 3. Privados de la receta — ¿de dónde sale su valor?
| privado | declaraciones | valor(es) | origen | ¿deriva de un público? |
| --- | ---: | --- | --- | :-: |
| `--_tree-grid-columns` | 1 | `1fr` | literal | no |
Consumidos y **no declarados en el CSS** (vienen de `base.ts` o de un estilo inline del wrapper): `--_tree-grid-palette-element`, `--_tree-grid-stable-rows`.
## 4. Propuesta de corrección
### 4.1 Tokens a declarar en `lib/recipes/base.ts` (0)
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 (`--tree-grid-…`) | scope TSC | valor propuesto | usos |
| --- | --- | --- | ---: |
### 4.2 Sin nombre mecánico (2)
- **⚠ decisión: `100%` es un valor identidad o geometría de layout, no un knob de tema — el perímetro de «knob» es D-TH.2, sin firmar** — 1: `inline-size`.
- **⚠ decisión: el privado que alimenta este knob no se declara en el CSS (viene de `base.ts` o de un estilo inline) — hay que resolverlo antes de nombrarlo** — 1: `background`.
### 4.4 Lo que hay que comprobar a mano (PLAN-theming §1.3 · §7.4)
- [ ] **Privado que no deriva de un público** — §3 lo marca; el privado debe leer el público o desaparecer.
- [ ] **Velo o acento en el nodo equivocado** (`archetype: 'item'` en un envoltorio, un `background` en shorthand que mata la capa de estado) — se mide desde el píxel hacia arriba.
- [ ] **Doble animación** al mover un sello a una superficie con animación propia — registro de `animationstart`/`animationend`.
- [ ] **Diff de computed = 0** en reposo · hover · abierto · disabled · foco, por talla, antes y después.
- [ ] **Centinela por token nuevo**: valor imposible en el root → el nodo lo sigue. Si no, el token miente.
## 5. Veredicto
<!-- veredicto:start -->
**Revisión 2026-08-20 — verificación previa a implementación (Opus).**
**Análisis: CORRECTO** (42 · 0 · 29 · 8 · 2 · 3). Los 29 privados están bien
prefijados; ninguno deriva de un público.
**Propuesta: APTA CON TRES CORRECCIONES.**
1. **`root-bg-image` está mal nombrado: son las GUÍAS DE INDENTACIÓN.** Los 5
usos son `background-image: linear-gradient(var(--_tree-grid-guide), …)`
pintando la guía vertical por `aria-level` (`tree-grid.css:243+`). El knob
real es UN color: acuñar `guide-color` y que el privado
`--_tree-grid-guide` lo lea; los 5 gradientes se quedan en la receta (el
patrón damero de gradient-builder: el color es el token, la construcción es
de la receta).
2. **El prefijo `root-` sobra** en `root-radius`/`root-font-family`/
`root-font-size-*` — la parte es el anfitrión; el token se llama por el eje.
3. **Forma por talla**: `row-padding-inline-{k}` (×8 usos — buen candidato) y
`font-size-{k}` como coordenadas + resueltos con `parts: ['root']` (el
`data-size` vive en `[data-tree-grid-root]`), default `host`. OJO:
`font-size-md = var(--font-size-sm)` — el grid tipa UN paso por debajo
(como table); es su default real → valor VERBATIM, desviación visible del
1:1, no «corregirla» al bundle.
Estados de fila (selección/hover): verificar contra la capa del sistema antes
de acuñar `hover-*` — si el hover es el velo de `archetypes.css`, no hay token
que crear.
**Bloqueos de firma**: ninguno duro.
<!-- veredicto:end -->

Powered by TurnKey Linux.