diff --git a/src/uix/eidos/components/dialog/README.md b/src/uix/eidos/components/dialog/README.md index b5f589443..7d3cc9437 100644 --- a/src/uix/eidos/components/dialog/README.md +++ b/src/uix/eidos/components/dialog/README.md @@ -6,6 +6,21 @@ Air envolvia Terra y exponia `Root`, `Trigger`, `Portal`, `Overlay`, `Content`, pero cambia la superficie publica a Option C: `` root con partes attached, sin `Root` ni `Provider` publico. +## Baseline + +- **air**: tenía `Dialog.Root` + parts compound. Cubría modal/non-modal, + focus trap/restore, escape/outside policies, scroll lock, force mount, + nested dialogs. Tamaños `sm/md/lg/full`. +- **soma actual**: cubre todo lo de Air en behavior (focus, dismissal, + scroll lock, modal/non-modal, alertdialog variant) más outcome-specific + close events (`close-save` / `close-cancel` / `close-dismiss` / + `close-dismiss-outside` / `close-after-fail`) que ningún competidor + expone. +- **morfo**: declara 7 events (open + 5 close variants + open intent + fromProp), focus policy con trap/return/restore, parts Provider / + Trigger / Content / Overlay / Title / Description / Close. Eidos + añade Header / Footer visuales y dimensiones / position. + ## Superficie ```svelte @@ -93,6 +108,18 @@ Partes publicas: `Trigger`, `Portal`, `Overlay`, `Content`, `Title`, | Small viewport | Full/dialog por CSS Air | auto sheet con `data-sheet` | | Exit cause | No | `data-last-action` y eventos causales | +## Gaps + +| Gap | Disposición | Detalle | +| --- | --- | --- | +| `Dialog.Positioner` como part público | **descartar** | Ark UI lo expone pero la posición en UIX es responsabilidad visual de `Content.position` (3x3 grid de posiciones). Exponerlo como part DOM duplicaría responsabilidad sin ARIA propia. | +| Animaciones SSR-safe con `forceMount` por part | **diferir** | Soma soporta forceMount global; falta el granular per-part. Sin caso de uso urgente. | +| Confirm / dismiss callbacks tipo Radix `onCloseAutoFocus` | **implementar** | Soma ya soporta los callbacks; falta documentación en README de Eidos y wireup en el demo. | +| Drag-to-dismiss en sheet móvil | **diferir** | Patrón móvil-only. Bibliotecas como vaul lo implementan. Sin demanda actual; cuando llegue, vive en una capa de interaction, no en Dialog. | +| Stacking visual de dialogs anidados | **implementar** | Soma ya emite `data-depth` y `data-nested`/`data-nested-open` en el morfo. Falta CSS canónica para inset/offset por depth en la recipe. | +| Bottom sheet drag handle | **diferir** | Composición de Drawer + indicator. Si llega un caso, Drawer es el dueño. | +| `Dialog.AlertDialog` como variante separada | **descartar** | Vivo como `alert-dialog` (componente aparte) por diferencias semánticas (intent, regime, role). No se duplica aquí. | + ## Referencias - Air anterior: `glm-5:src/uix/air/components/dialog`. diff --git a/src/uix/langs/components/dialog.ts b/src/uix/langs/components/dialog.ts index 0c9a68acc..c737dbbc5 100644 --- a/src/uix/langs/components/dialog.ts +++ b/src/uix/langs/components/dialog.ts @@ -8,14 +8,18 @@ import type { LangNode } from '$libs/langs'; * `'#?components.dialog.{key}|fallback'`. */ export const dialogLangs = { + label: { + es: 'Diálogo', + en: 'Dialog' + }, trigger: { - es: "Abrir diálogo", - en: "Open dialog" + es: 'Abrir diálogo', + en: 'Open dialog' }, content: { roledescription: { - es: "ventana de diálogo", - en: "dialog window" + es: 'ventana de diálogo', + en: 'dialog window' } } } satisfies LangNode; diff --git a/src/uix/morfo/components/dialog.ts b/src/uix/morfo/components/dialog.ts index 8dd1158c4..a9c8ed174 100644 --- a/src/uix/morfo/components/dialog.ts +++ b/src/uix/morfo/components/dialog.ts @@ -18,6 +18,7 @@ export const dialogMorfo = { scope: ['soma', 'sema'], apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/dialog/', texts: { + label: '#?components.dialog.label|Dialog', trigger: '#?components.dialog.trigger|Open dialog', 'content.roledescription': '#?components.dialog.content.roledescription|dialog window' },