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/grid-list.md

10 KiB

grid-list — 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 · método y protocolo: PLAN-theming.md §1, §2, §7.

  • Medido: 2026-08-25 · Alcance: 92% — 22 de 24 knobs por token público
  • Knobs de apariencia: 31 — público 22 · privado 0 · global 1 · literal 1 · sistema 5 · excepción 0 · estructural 0 · puente 2 · canal 0 (los cinco últimos, fuera del ratio)
  • Contrato hoy (lib/recipes/base.ts): 38 pública(s) — row-height-xs, row-height-sm, row-height-md, row-height-lg, row-height-xl, row-padding-inline-xs, row-padding-inline-sm, row-padding-inline-md, row-padding-inline-lg, row-padding-inline-xl, font-size-xs, font-size-sm, font-size-md, font-size-lg, font-size-xl, row-height, row-padding-inline, font-size, gap, padding, border-width, border, radius, bg, fg, font-family, line-height, max-block, invalid-border, row-gap, row-padding-block, row-radius, row-fg, disabled-row-fg, selection-checkbox-size, selection-checkbox-border, selection-checkbox-radius, checked-selection-checkbox-fg · 1 privada(s) forward — _palette-solid
  • Eje size: no · ficheros: grid-list.css

1. Knobs fuera de alcance

1.1 Directo a primitivo global (1)

# fichero:línea selector propiedad valor
1 grid-list.css:105 [data-grid-list-row]:hover:not([data-disabled]), [data-grid-list-row][data-highlighted]:not([data-disabled]) background var(--color-surface-overlay)

1.2 A través de un privado (0)

Sólo el residuo: el puente de paleta (§2-ter) y el canal de valor (§2-quater) salen aparte, porque no son deuda ni tienen nombre que acuñar.

Ninguno.

1.3 Literales (1)

# fichero:línea selector propiedad valor
1 grid-list.css:46 [data-grid-list][data-block] inline-size 100%

1.4 Excepciones firmadas (0) — fuera del ratio

Literales que llevan su anotación /* literal: <razón> */ en la propia declaración: la válvula de recipe-contract §3, la misma que honra component-audit. Una desviación firmada no es deuda — se listan para que la razón se lea, no para acuñarlas.

Ninguno.

2. Sistema transversal (5) — 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 grid-list.css:66 [data-grid-list][data-disabled] opacity var(--opacity-disabled)
2 grid-list.css:76 [data-grid-list]:focus-visible, [data-grid-list][data-focused] outline var(--focus-ring-width) solid var(--focus-ring-color)
3 grid-list.css:119 [data-grid-list-row][data-disabled] opacity var(--opacity-disabled)
4 grid-list.css:123 [data-grid-list-row]:focus-visible outline var(--focus-ring-width) solid var(--focus-ring-color)
5 grid-list.css:191 [data-grid-list-selection-checkbox]:focus-visible outline var(--focus-ring-width) solid var(--focus-ring-color)

2-ter. Puente de paleta THM-2 (2) — fuera del ratio

La receta lee var(--_grid-list-palette-{slot}), que lo escribe el forward de la cascada de paleta bajo [data-grid-list]:where([data-color], [data-color-custom]) (renderRecipePaletteForward, firma B′). Es el MECANISMO de la paleta por instancia, y se alcanza dos veces: por la capa compartida --palette-* y por los tonos públicos del propio componente. No se acuña: un público encima dejaría que un tema lo fijara y matara en silencio el color= de cada instancia (veredictos §5 de card, tags-input, avatar).

# fichero:línea selector propiedad valor
1 grid-list.css:171 [data-grid-list-selection-checkbox][data-state='checked'] border-color var(--_grid-list-palette-solid)
2 grid-list.css:172 [data-grid-list-selection-checkbox][data-state='checked'] background var(--_grid-list-palette-solid)

3. Privados de la receta — ¿de dónde sale su valor?

La receta no declara privados propios en su CSS.

Consumidos y no declarados en el CSS (vienen de base.ts o de un estilo inline del wrapper): --_grid-list-palette-solid.

4. Propuesta de corrección

  • Consume la capa compartida menu-indicator. Un eje que la capa posee se consume como var(--_x, var(--x)); el consumidor no acuña --grid-list-{eje} para él — sería un vocabulario paralelo (README de eidos/components, «Capas compartidas» regla 2).

4.1 Tokens a declarar en lib/recipes/base.ts (1)

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 (--grid-list-…) scope TSC valor propuesto usos
hover-row-bg root var(--color-surface-overlay) 1

4.2 Sin nombre mecánico (1)

  • ⚠ 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.

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

Medido 2026-08-21 (sonda ×2 sobre el mismo código = 0 diffs en 6.090 valores · 7 estados; dev server 5180). La §4 orienta pero tiene un error de doctrina y dos defectos que sólo aparecieron midiendo.

  1. La nota «consume la capa menu-indicator» NO aplica. Sale de SHARED_LAYERS (theming-census.ts:432), que lista a grid-list como consumidor — pero lib/menu-indicator.css no tiene un solo selector grid-list, la receta no la importa y soma no renderiza indicator. El checkbox espeja el visual con pintura propia (el comentario de la receta dice «recipe family», no consumo). Entrada desviada del censo — anotada como incidencia §13.
  2. La selección está MUERTA en la fila. La receta selecciona [data-grid-list-row][data-selected], pero ni el morfo declara data-selected ni soma lo estampa (DOM medido: data-state=selected + aria-selected='true'). El acento --_grid-list-palette-element no pinta jamás; una fila seleccionada sólo muestra el velo neutro del arquetipo (rama [aria-selected='true'], 0,4,0) — seleccionada ≡ hovered visualmente. El checkbox SÍ pinta (_palette-solid vivo, medido oklch(0.5556 0.1829 305.86) en checked). Decisión del autor: retirar la regla muerta + el forward huérfano (0 diffs lo prueba; precedente table.selected-row-fg), o dejarla verbatim a la espera de la reparación firmada (re-apuntar a [data-state='selected'] mueve píxel).
  3. El hover de la fila pinta DOBLE — plano de la receta (background: shorthand, 0,3,0 → background-color overlay) + velo del sistema (la regla de item va a especificidad PLENA a propósito, 0,5,0 → background-image, gana al none del shorthand). Es el caso listbox.highlighted: NO se acuña hover-row-bg — bendeciría un duplicado condenado. La declaración queda verbatim (global, excepción de censo). A diferencia de table/tree-grid (velo en la CELDA, plano en la FILA — nodos distintos), aquí ambos caen en el MISMO nodo.
  4. Fila Y celda llevan archetype: 'item' — bajo el puntero se apilan velo de celda + velo de fila (+ plano), medido en la sonda. Mismo par de portadores que la firma pendiente de table — anotado §12.
  5. Los per-talla van al bundle, no verbatim al primitivo: row-height 1:1 (--size-{k}-control-height ES alias de --control-height-{k}, verificado en generated/base.css:409-445); font-size un paso por debajo desde md (xs→xs, sm→sm, md→sm, lg→md, xl→lg) — deviación verbatim como table/tree-grid, NO «corregirla» al 1:1; row-padding-inline ritmo propio en --space-* (2/2/3/4/5). Resolved names sin parts — el data-size se estampa en el provider (= host); molde command.
  6. Correcciones de nombre sobre la §4.1: selection-checkbox-width+-height son UN knob → un solo token selection-checkbox-size; on-selection-checkbox-bg → checked-selection-checkbox-fg (es la TINTA del glifo ✓; on- choca con el prefijo reservado — precedente scrim-fg-over-*); el padding uniforme se queda padding (slot admitido: command.viewport-padding, consumido shorthand en command.css:188); border se parte en border-width + border (color), y el checkbox comparte border-width (molde tree-grid: UNA anchura por componente) con su propio selection-checkbox-border; max-block: min(60vh, 22rem) entra al contrato (molde command.viewport-max-block) aunque max-block-size no puntúe en el censo.
  7. Privados que mueren: --_grid-list-{row-height,row-padding-inline,font-size} (los sustituyen los resolved names; fuera los bloques [data-size] del CSS), --_grid-list-max-height y --_grid-list-checkbox-size (pasan a público). Quedan los dos forwards THM-2.
  8. Alcance esperado ≈ 81 % (22/27): fuera el hover condenado (1 global), el selected muerto (1 privado — 85 % si se retira), los dos lados checked del checkbox (forwards, privados en todo el catálogo) y el 100% de [data-block] (identidad, D-TH.2). Los transparent de variant son identidad de variante y no puntúan.

Powered by TurnKey Linux.