- `src/uix/eidos/components/popover/popover.css` emite `min-inline-size: var(--floating-anchor-width, auto)` como default → popover ≥ anchor para TODOS los popover-based.
- `sideOffset` unificado a 6 en soma popover-content y en los 5 pickers (date / date-range / time / time-range / color).
loading state + Spinner, icon/endIcon snippets, asChild Slot pattern.
Sema `commit-action` con intent fromProp.
**Pendiente:** los pickers anclan al chevron trigger (~14px), no al input wrapper (~448px). Por eso `--floating-anchor-width` resuelve a 14px y el `min-inline-size` no actúa visible.
Area recipe `[data-x-channel='hue']` → rainbow horizontal con overlays
adaptados al y-channel; auto-switch a `{x: hue, y: saturation}` cuando el
Hue slider está oculto.
**Verificación:** abrir popover, comprobar que `getComputedStyle(wrapper).getPropertyValue('--floating-anchor-width')` == ancho del input wrapper, no del chevron.
- **Bug fix:** ValueText eidos wrapper creaba un children snippet implícito
vacío que bloqueaba el fallback de soma. Fix con split condicional
`{#if children}` que aplica a cualquier wrapper con soma fallback.
### 2. Combobox multi mode con tags inline
- **Date field segment affordance:** cursor + hover bg + active ring via
`--_date-field-accent-element` token añadido a las 8 color cascades.
Decisión del usuario: patrón Material UI Autocomplete — items seleccionados como pills DENTRO del input, caret al final.
los indicadores (palomita rounded square / círculo radio) en bloques separados.
### 3. SearchField como Combobox-like
**Plan:**
- Crear un partial / sub-recipe compartido (e.g. `src/uix/eidos/lib/recipes/indicator.css` o sub-mixin en base.ts) con la geometría del check / radio dot.
- Importar desde checkbox.css, context-menu.css, dropdown-menu.css.
- Verificar también `Select.OptionIndicator` y `RadioGroup.Indicator` si aplican.
Decisión del usuario: SearchField debe tener layer flotante con results clickables.
**No fusionar los componentes** — Checkbox / MenuCheckboxItem / MenuRadioItem son primitivas ARIA distintas (`role="checkbox"` vs `role="menuitemcheckbox"` vs `role="menuitemradio"`) con keyboard models distintos. Solo unificar el indicador visual.
**Opciones:**
### 2. Task #120 — Refactor restantes consumidores a `<Button>`
- **A** (elegida): añadir `SearchField.Results` part con popover propio (items clickables emiten `commit-select`).
### 4. Combobox: revisar effect de single-mode label sync al mezclar con tags inline
**Pendiente:**
- `DropdownMenu.Trigger` — actualmente raw `<button>` reset.
- `AlertDialog.Action` + `AlertDialog.Cancel` — recipe bespoke con cascade `[data-color='risk'|'threat']` auto-coloring. Verificar que el cambio a `<Button intent="...">` mantenga el cascade visual.
### 3. Indicator refactor + Button consumer refactor son independientes
El `$effect` en `combobox-provider.svelte.ts` (líneas ~145) sync inputValue al label en single mode. Al añadir SelectedTags (item 2), verificar que no haya loops en multi.
Pueden hacerse en cualquier orden. Task #118 toca recipe (CSS only). Task #120 toca svelte (cambia consumidor + drop CSS chrome redundante).
## Estado actual del working tree (sin commit aún)
- Demo de cada consumidor debe re-verificarse después del refactor.
- `src/uix/soma/components/combobox/combobox-provider.svelte.ts` — revertido patch multi-on-close + comentario "Multi mode renders selections as inline tags via a separate Combobox.SelectedTags part" como recordatorio.
## Comandos útiles
## Comandos útiles
@ -70,4 +88,9 @@ El `$effect` en `combobox-provider.svelte.ts` (líneas ~145) sync inputValue al
cd G:/dev/svelte/vicen
cd G:/dev/svelte/vicen
npx svelte-check --threshold error # 0/0 expected
npx svelte-check --threshold error # 0/0 expected
npm run dev # via .claude/launch.json "dev"
npm run dev # via .claude/launch.json "dev"
npm run generate:eidos-css # if recipe tokens change
```
```
## Estado del working tree
Limpio. Branch `active-uix` +17 ahead de `gita/active-uix` antes del push de hoy.