Bundles the uncommitted audit work on this branch (active-uix):
- DIM 5A: focus-ring unified to `outline` across the control/field set (kills
~18 box-shadow rings; closes forced-colors a11y). NOTE: spin-field +
drawer-close orphan-token loose ends from this migration still trip the eidos
contract test — to clean when that migration settles.
- DIM 5D: field/input backgrounds homogenized to surface-default; list-surface
padding recalibrated 2/4/6/8/10; menu-dial internal vars privatized.
- DIM 5E: date/time/color-field + date-range-picker segments delegate the active
state to the shared field-segment-state layer; the input transition is reduced
to `background` only so the focus border no longer flickers on keyboard
increment (border-color is now instant; the ring is an outline).
- Langs (cero-hardcodes): IconButton-cascade wrappers (carousel/combobox/
tree-grid/table/search-field/banner) + onion-menu + cropper + time-picker
day-period now route aria-labels through morfo langs instead of hardcoded
English (the hardcode was overriding soma's already-resolved label). Fixes 2
contract divergences (combobox Clear->Clear value, table toggle label).
- DIM 5B: code-block/kbd variants aliased to ControlVariant (no duplicate
literals); image-picker default size sm->md.
Excludes words/palabras/chronos and the metrics/demos tracks (separate work).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
scope: src/uix/eidos/components/* (excl. words · palabras · chronos)
scope: src/uix/eidos/components/* (excl. words · palabras · chronos)
method: grep + Read dirigidos (sin agentes, por instrucción del usuario)
method: grep + Read dirigidos (sin agentes, por instrucción del usuario)
status: FASE 1 completa. FASE 2 en curso — ver "hand-off 2026-06-22" (al final). Hechos: action components (fab/onion-menu/button-group/split-button), font 1:1 en menús, 2A radius bypass, gap canónico trigger→panel. CONTINUAR mañana por el bug popover color-picker (task_5d1a10ec).
status: FASE 1 completa. FASE 2 en curso — ver "hand-off 2026-06-24" (al final). Hechos previos: action components, font 1:1, 2A radius, gap canónico, popover color-picker, faults de selects (combobox/search-field/select). 2026-06-24: barrido de langs (capa eidos — 6 wrappers de la cascada IconButton + 2 divergencias de contrato + onion/cropper/time-picker), DIM 5E (segmentos date/time/color — flicker del borde + estado activo unificado vía 5A), DIM 5B (code-block/kbd→ControlVariant, image-picker md, switch stale, link 'default' se queda). CONTINUAR por: DIM 1 composición (Lote A closes → IconButton+SvgX; Lote B 6 selects nativos → Select).
---
---
# Auditoría de coherencia de componentes — eidos
# Auditoría de coherencia de componentes — eidos
@ -265,30 +265,91 @@ El **valor** del foco es casi uniforme (`--color-focus-ring` = alias de
| **Combobox** | (a) flecha abrir/cerrar es semántica → **emitir evento** · (b) popup **sin padding inferior** · (c) scroll → usar **`ScrollArea`** · (d) **bug**: clic en flecha con popup abierto lo cierra y **reabre** · (e) tipografía md=sm (**no 1:1** — combobox no entró en el sweep de fuente) · (f) popup **pegado al input** (solapa) · (g) **elevación** no "un paso más que el disparador" (escalera canonizada `default<raised<muted<overlay`) |
| ~~**Combobox**~~ ✅ TODOS RESUELTOS — verificado 2026-06-23 (el doc estaba STALE; cerrados en sprints posteriores) | (a) ✅ el provider emite `emerge-open`/`emerge-dismiss` (sema canon) · (b) ✅ `[data-scroll-area-viewport]` tiene `padding-block-end` · (c) ✅ ya compone `<ScrollArea autosize>` · (d) ✅ el soma excluye el trigger del dismiss (líneas 594-611, comentario explícito); verificado en vivo: clic-flecha → `data-state` open→closed en UN solo cambio, NO reabre · (e) ✅ STALE — el default md ya es `--font-size-md` (1:1) · (f) ✅ gap 6px (`data-floating-gap='panel'` o `sideOffset`), no pegado · (g) ✅ `data-depth='overlay'` + shadow (A1/B2) |
| **SearchField**| tipografía = la del input pero **menor peso** · scroll → **`ScrollArea`** · footer poco diferenciado → **subir un paso** la escala |
| **SearchField**⚠️ faults NO aplican a este componente — verificado 2026-06-23 | El search-field eidos es un **input simple** (icon + input + clear + loading): NO tiene popup, scroll ni footer. Los faults "scroll→ScrollArea" / "footer" eran del **command palette** (input + lista + footer), mal-atribuidos aquí. Sin acción. |
| **Select**| item seleccionado: **borde y resaltado muy pegados** → espacio coherente con tokens del tema |
| **Select**✅ mitigado 2026-06-23 | "item seleccionado: borde y resaltado muy pegados" venía del padding de panel de **4px**; el canon de listas subió a **6px** hoy (`--list-content-padding`), dando margen coherente del token. Verificado en vivo (item a 6px del borde, radius concéntrico 4px sobre panel 10px). |
| **Langs (REGLA transversal)** | **cero hardcodes** — las strings (aria-labels…) van en el **morfo** del componente vía langs. Incluye **corregir los `aria-label` hardcodeados** que dejó la cascada (tree-grid/table/search-field: "Toggle row"/etc. → langs) |
| **Langs (REGLA transversal)**✅ eidos cubierto 2026-06-24 | **cero hardcodes** — las strings (aria-labels…) van en el **morfo** del componente vía langs. **Hecho**: 6 wrappers de la cascada IconButton (carousel prev/next · combobox-clear · tree-grid-expand · table-row-detail · search-field-clear · banner-close) hardcodeaban inglés y **pisaban** el `props['aria-label']` ya resuelto por soma → arreglados con el idiom de drawer-close (`resolvedLabel = ariaLabel ?? eidos.langs.ts(idlangref)`; sin default hardcodeado). Cerró además 2 **divergencias del contrato** (combobox 'Clear'→'Clear value', table 'Toggle row details'→'Toggle detail'). +onion-menu surface, cropper zoom (4 entradas nuevas), soma time-picker day-period. **Deferidos** (necesitan superficie langs nueva / solapan con DIM 1): code-block copy (→ componer `<Clipboard>` en Lote A), avatar-group conteo visible, date-range-picker year/month soma views ("Select year range"/"Previous decade"). Verificado en navegador (ES resuelve). |
Orden: **combobox → search-field → select → barrido de langs**, uno a uno verificando.
Orden: **combobox → search-field → select → barrido de langs**, uno a uno verificando.
`combobox-arrow`/`content`/`viewport` son thin-wrappers del soma (la lógica de
`combobox-arrow`/`content`/`viewport` son thin-wrappers del soma (la lógica de
@ -515,9 +577,43 @@ Sesión larga; varios cierres + el gap canónico. Para retomar: