diff --git a/continue.md b/continue.md index f65f0eadb..ca0e2a5a9 100644 --- a/continue.md +++ b/continue.md @@ -1,96 +1,167 @@ # Continue tomorrow -Fecha de corte: 2026-05-23. Rama: `active-uix`. +Fecha de corte: 2026-05-23 (segunda mitad). Rama: `active-uix`. ## Resumen del día -Sprint de demos canonical-depth + Button component + picker recipe polish. -Commit clave: `a804c392` (49 archivos, +11034/-1365). `svelte-check`: 0/0. +Segundo sprint sobre la rama: **Tasks #118 + #120 + #127 completadas**. +Patrón canonical para consumers de ` + {/if} + {/snippet} + +``` -## Pendiente / en curso +Nota: si el wrapper tiene un prop llamado `child`, **renombra en destructure +a `outerChild`** — el `{#snippet child}` shadow infinite-loops si no. -### 1. Task #118 — Shared check/radio indicator recipe +**Regla 4 — Contracts cross-layer.** Si el dialog/popover/menu padre tiene +estado evaluativo (intent, color, status) que el Button hijo debe heredar, +el soma provider del Button-like part lo expone via `child({ props, ... })` +mediante `WithChildNoChildrenSnippetProps` para que `children` siga siendo +un Snippet plano: -**Problema:** los recipes `[data-checkbox][data-state='checked']`, -`[data-context-menu-checkbox-item][data-state='checked']::before` y -`[data-dropdown-menu-checkbox-item][data-state='checked']::before` redibujan -los indicadores (palomita rounded square / círculo radio) en bloques separados. +```ts +// soma types.ts +export type FooButtonProps = WithChildNoChildrenSnippetProps< + { id?: string }, + { intent: 'neutral' | 'risk' | 'threat' } // extra snippet props +>; -**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. +// soma provider.svelte.ts +readonly dialogIntent = $derived.by(() => this.dialog.opts.intent.current); -**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. +// soma component +{@render child({ props: mergedProps, intent: state.dialogIntent })} +``` -### 2. Task #120 — Refactor restantes consumidores a `