From 53810cb5ec9107acaba8bbdaf3c8f4762ab6d731 Mon Sep 17 00:00:00 2001 From: dev Date: Wed, 26 Aug 2026 18:36:59 +0200 Subject: [PATCH] refactor(eidos): item 2 - los slots de forma de la capa deslizante llevan el _ del alias Firma (a) del autor: --indicator-duration/-ease eran el ALIAS de la capa (la especie de --_indicator-x, opcionales-con-fallback), no un pomo de tema - la ortografia bare prometia una superficie que la cascada negaba. Flip a --_indicator-{duration,ease} (1 escritor radio-group.css alimentando desde sus claves de CONTRATO segmented-transition-*, 1 lector lib/sliding-indicator.css); reparto de propiedad escrito: la capa posee QUE propiedades deslizan (y su colapso reduced-motion), el anfitrion A QUE VELOCIDAD via contrato. Contrafactico MEDIDO pre-flip: bare en :root a 9s = 0.18s intacto (no se retira superficie); post 4/4: pixel identico, bare inerte y vacio en el pill, contrato alcanza (7s), alias en :root inerte. Comentarios themeable-so-bare reescritos; prosa del sentinel al nombre vivo (clave intacta). Lint 0 invalid, reach-floor 5/5, censo neutro. Co-Authored-By: Claude Fable 5 --- docs/next-features.md | 23 +++++++++++++--- docs/process/CONTINUE-theming.md | 11 ++++++-- scripts/theming-sentinel-exceptions.ts | 2 +- .../components/radio-group/radio-group.css | 9 ++++--- src/uix/eidos/lib/sliding-indicator.css | 26 ++++++++++++------- 5 files changed, 51 insertions(+), 20 deletions(-) diff --git a/docs/next-features.md b/docs/next-features.md index bcc8b89a3..9e97e2e1f 100644 --- a/docs/next-features.md +++ b/docs/next-features.md @@ -2711,10 +2711,25 @@ ficheros, 154 tests), centinela de `tabs` **70/79** idéntico, `component:audit` **162 PASS / 4 NEEDS-WORK / 0 BROKEN** idéntico, `docs:check` **0/0** en 816 docs, `npm run check` sin errores atribuibles. -**Lo que queda flagged, sin acuñar**: `--indicator-duration` / `--indicator-ease` -siguen siendo dos públicos de FORMA sin prefijo de dueño y sin entrada de -contrato — la misma fuga de espacio que esta firma cerró para las medidas, una -especie más allá. El punto 2 los mandó a la puerta del contrato y ahí siguen. +**Lo que queda flagged, sin acuñar**: ~~`--indicator-duration` / +`--indicator-ease` siguen siendo dos públicos de FORMA sin prefijo de dueño~~ — +**✅ RESUELTO 2026-08-27 (item 2, firma (a) del autor)**: la adjudicación no fue +ni contrato de componente ni vocabulario de capa declarado — son el **ALIAS de +la capa**, la misma especie que `--_indicator-x` cuatro líneas más arriba, sólo +que opcionales-con-fallback. Flip a `--_indicator-{duration,ease}` (1 escritor: +`radio-group.css:320` alimentándolos desde sus claves de CONTRATO +`segmented-transition-*`; 1 lector: `lib/sliding-indicator.css`). El reparto de +propiedad que la firma deja escrito: la CAPA posee QUÉ propiedades deslizan (y +su colapso reduced-motion), el ANFITRIÓN posee A QUÉ VELOCIDAD vía contrato; el +alias es la costura. Contrafáctico MEDIDO antes de tocar: fijar el nombre bare +en `:root` a 9s no movía el pill NI ANTES del flip (la declaración de la receta +gana la cascada) — la ortografía bare prometía un pomo que la cascada negaba; +no se retiró superficie alguna. Post: píxel idéntico (0.18s ×3 + 0.12s fade, +mismo bezier) · bare INERTE y computando vacío en el pill · la clave de +contrato ALCANZA (7s) · el alias en `:root` también inerte. Los dos comentarios +que afirmaban «themeable, so bare» reescritos; la prosa del sentinel +actualizada al nombre vivo (clave intacta). Lint 0 invalid, reach-floor 5/5, +censo neutro (sin prefijo reconocido no entra al clasificador, con o sin `_`). ## 15. La capa flotante publica cinco medidas con nombre público sin dueño — 2026-08-26 diff --git a/docs/process/CONTINUE-theming.md b/docs/process/CONTINUE-theming.md index 8f4617062..205e4eace 100644 --- a/docs/process/CONTINUE-theming.md +++ b/docs/process/CONTINUE-theming.md @@ -101,8 +101,15 @@ cierra al 100 %). La familia de indicadores entera habla UNA doctrina. vicen-42. Ley del día, ya en el handoff P0: quien barre por RUTA se lleva los hunks del otro — la atribución se declara, y si se yerra el nombre, se corrige por acta, nunca por amend. -2. **La especie de FORMA sin dueño**: `--indicator-duration`/`-ease` (flagged - en §14) — ¿contrato de qué componente, o vocabulario de capa declarado? +2. ~~**La especie de FORMA sin dueño**: `--indicator-duration`/`-ease`~~ — + **✅ EJECUTADO 2026-08-27 (firma (a) del autor)**: ninguna de las dos + opciones del expediente — son el ALIAS de la capa (especie de + `--_indicator-x`, opcionales-con-fallback). Flip a `--_indicator-*`; la + superficie de tema queda donde ya estaba y alcanza (las claves de contrato + del anfitrión). Reparto de propiedad escrito: la capa posee QUÉ desliza, + el anfitrión A QUÉ VELOCIDAD. Contrafáctico medido PRE-flip (el bare en + `:root` jamás alcanzó: no se retiró superficie); post 4/4 caras. Acta + completa: `next-features.md`, hueco flagged de §14. 3. **Cableado `EidosConfig.motion`→CSS** — mata la última entrada del registro `PENDING_PRIVATE_RENAME`. 4. **Re-clasificar `palabras`** (canal de valor del scheme, no tema) y diff --git a/scripts/theming-sentinel-exceptions.ts b/scripts/theming-sentinel-exceptions.ts index 72105a22b..942cc2622 100644 --- a/scripts/theming-sentinel-exceptions.ts +++ b/scripts/theming-sentinel-exceptions.ts @@ -1251,7 +1251,7 @@ export const SENTINEL_EXCEPTIONS: Record> = { 'transition-ease': 'same freeze; measured unfrozen -> reaches (cubic-bezier(0.4, 0, 0.2, 1) -> steps(3))', 'segmented-transition-duration': - 'same freeze, on the segmented pair; measured unfrozen with the real variant on -> reaches (segment 0.18s -> 11.5s, and the pill\'s --indicator-duration 180ms -> 11.5s)', + "same freeze, on the segmented pair; measured unfrozen with the real variant on -> reaches (segment 0.18s -> 11.5s, and the pill's --_indicator-duration 180ms -> 11.5s; the slot was spelled bare --indicator-duration until item 2, 2026-08-27)", 'segmented-transition-ease': 'same freeze; measured unfrozen -> reaches (cubic-bezier(0.32, 0.72, 0, 1) -> steps(3))', 'segmented-pill-shadow': diff --git a/src/uix/eidos/components/radio-group/radio-group.css b/src/uix/eidos/components/radio-group/radio-group.css index b896b993e..cec9b05de 100644 --- a/src/uix/eidos/components/radio-group/radio-group.css +++ b/src/uix/eidos/components/radio-group/radio-group.css @@ -316,9 +316,12 @@ --_indicator-y: var(--_radio-group-indicator-y); --_indicator-w: var(--_radio-group-indicator-w); --_indicator-h: var(--_radio-group-indicator-h); - /* Shape slots of the layer, a different species — themeable, so bare. */ - --indicator-duration: var(--radio-group-segmented-transition-duration); - --indicator-ease: var(--radio-group-segmented-transition-ease); + /* Shape slots of the layer — OPTIONAL alias wiring (item 2, 2026-08-27), + fed from this component's CONTRACT keys, which ARE the theming surface: + a `:root` pin on the slot never reached even when it was bare (this + declaration wins the cascade — measured), the contract key reaches. */ + --_indicator-duration: var(--radio-group-segmented-transition-duration); + --_indicator-ease: var(--radio-group-segmented-transition-ease); } /* ── Reduced motion ────────────────────────────────────────────────────── */ diff --git a/src/uix/eidos/lib/sliding-indicator.css b/src/uix/eidos/lib/sliding-indicator.css index e44622766..d16a8a199 100644 --- a/src/uix/eidos/lib/sliding-indicator.css +++ b/src/uix/eidos/lib/sliding-indicator.css @@ -21,10 +21,16 @@ * recipe SHAPES it on top (pill background, underline thickness, border-radius, * box-shadow). * - * ⚠ `--indicator-duration` / `--indicator-ease` below are a DIFFERENT species - * and keep their bare spelling on purpose: they are the layer's shape slots — a - * theming surface a recipe declares — not a per-instance channel. The `_` is - * what separates the two. + * ⚠ `--_indicator-duration` / `--_indicator-ease` below are a DIFFERENT + * species from the position aliases, but they wear the same `_` (item 2, + * 2026-08-27): what separates them is their REGIME, not the spelling. The + * position aliases are REQUIRED per-instance channel wiring; these two are + * OPTIONAL shape slots with system-token fallbacks. Neither is a theming + * surface at this name — the host's CONTRACT keys are (radio-group's + * `--radio-group-segmented-transition-{duration,ease}`): a `:root` pin on + * the slot never reached the pill even when it was bare (the recipe's own + * declaration wins the cascade — measured 2026-08-27), while the contract + * key reaches. * * The consumer's eidos wrapper STAMPS `data-sliding-indicator` on the indicator * element — a VISUAL-LAYER identity (NOT a morfo attr), the same pattern as @@ -51,12 +57,12 @@ inline-size: var(--_indicator-w, 0px); block-size: var(--_indicator-h, 0px); transition: - translate var(--indicator-duration, var(--duration-fast)) - var(--indicator-ease, var(--ease-default)), - inline-size var(--indicator-duration, var(--duration-fast)) - var(--indicator-ease, var(--ease-default)), - block-size var(--indicator-duration, var(--duration-fast)) - var(--indicator-ease, var(--ease-default)), + translate var(--_indicator-duration, var(--duration-fast)) + var(--_indicator-ease, var(--ease-default)), + inline-size var(--_indicator-duration, var(--duration-fast)) + var(--_indicator-ease, var(--ease-default)), + block-size var(--_indicator-duration, var(--duration-fast)) + var(--_indicator-ease, var(--ease-default)), opacity var(--duration-fast) var(--ease-out); will-change: translate, inline-size, block-size; }