parent
0b399cc6e8
commit
6707034fbd
@ -0,0 +1,48 @@
|
||||
# Eidos Drawer
|
||||
|
||||
Fecha de revision: 2026-05-17.
|
||||
|
||||
## Baseline
|
||||
|
||||
Drawer parte de Air y se apoya en Soma para comportamiento. Eidos solo anade
|
||||
superficie visual estable: `size`, medidas/lmites del panel y receta CSS.
|
||||
|
||||
## Comparativa
|
||||
|
||||
| Referencia | Superficie relevante | Estado Eidos |
|
||||
| --- | --- | --- |
|
||||
| Air `drawer` (`glm-5`) | `Root`, `Trigger`, `Portal`, `Overlay`, `Content`, `Header`, `Footer`, `Title`, `Description`, `Close`; `Content.size = sm/md/lg/full`; cuatro lados fisicos via Terra. | Cubierto. Se conserva la API compound y el `size` canonico. |
|
||||
| Soma actual | `variant = overlay/inline/persistent`, `direction = top/bottom/left/right/start/end`, snap points, drag, `Handle`, dismissal, focus/scroll callbacks, `activeSnapPoint`, `minSize/maxSize`. | Cubierto por passthrough. Eidos no duplica estado ni gesture logic. |
|
||||
| Vaul | `Root`, `Trigger`, `Portal`, `Overlay`, `Content`, `Handle`, `Title`, `Description`, `Close`; `modal`, `container`, `direction`, `dismissible`, `handleOnly`, `snapPoints`, `activeSnapPoint`, `fadeFromIndex`, `snapToSequentialPoint`. | Cubierto en lo esencial por Soma. `fadeFromIndex` queda como decision visual futura si el overlay necesita fade por indice. |
|
||||
| shadcn-svelte | Wrapper sobre Vaul Svelte con `Root`, `Trigger`, `Content`, `Header`, `Footer`, `Title`, `Description`, `Close`; ejemplo de responsive dialog usando Dialog en desktop y Drawer en mobile. | Cubierto. Eidos mantiene `Header/Footer` como shells visuales y no introduce API flat. |
|
||||
| Ark UI / Radix / Bits UI | No hay Drawer canonico con gestos equivalente; la referencia comparable es Dialog: portal, backdrop/overlay, content, title/description, close, focus trap, non-modal/lazy mount. | Cubierto desde Soma; Eidos no anade `Positioner` porque la geometria edge-anchored vive en la receta y en `direction`. |
|
||||
|
||||
Fuentes externas consultadas:
|
||||
|
||||
- Vaul API: https://vaul.emilkowal.ski/api
|
||||
- Vaul snap points: https://vaul.emilkowal.ski/snap-points
|
||||
- shadcn-svelte Drawer: https://tw3.shadcn-svelte.com/docs/components/drawer
|
||||
- Ark UI Dialog: https://ark-ui.com/docs/components/dialog
|
||||
|
||||
## Decisiones
|
||||
|
||||
- No se reintroduce `Provider` publico ni API flat con snippets.
|
||||
- No se crea `Drawer.Positioner`. Drawer no es Dialog centrado; su posicion
|
||||
principal es edge-anchored y se deriva de `data-side` + `data-variant`.
|
||||
- No se implementa `shouldScaleBackground` ahora. Es un efecto global sobre el
|
||||
wrapper de la aplicacion y requiere un contrato explicito de ownership DOM,
|
||||
no un estilo local de Drawer.
|
||||
- `Drawer.Content` acepta `width`, `minWidth`, `maxWidth`, `height`,
|
||||
`minHeight` y `maxHeight` como overrides visuales responsivos. Los valores se
|
||||
serializan en variables privadas del recipe (`--_drawer-content-*`) para que
|
||||
no entren en el contrato publico de tokens.
|
||||
- `size` sigue siendo canonico y suficiente para la mayoria de usos; los
|
||||
overrides son para layouts concretos: rail persistente, sheet de altura fija,
|
||||
side panel ancho o constraints responsive.
|
||||
|
||||
## Pendiente deliberado
|
||||
|
||||
- Evaluar `fadeFromIndex` solo si el overlay de snap points necesita una
|
||||
curva distinta por indice. Hoy Soma ya emite progreso y Eidos consume
|
||||
opacidad de overlay.
|
||||
- Evaluar background scaling como feature de capa/shell, no como recipe local.
|
||||
Loading…
Reference in new issue