@yewdiel21/motion-kit 0.17.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/README.md +240 -199
  2. package/dist/auto/index.d.ts +19 -3
  3. package/dist/auto/index.js +35 -3
  4. package/dist/auto/index.js.map +1 -1
  5. package/dist/{chunk-QFBOHPWZ.js → chunk-CQP66AZK.js} +2 -2
  6. package/dist/{chunk-QP4QJOEN.js → chunk-H4STLMCM.js} +2 -2
  7. package/dist/{chunk-BZLMCHUD.js → chunk-KDIJX6G4.js} +3 -3
  8. package/dist/{chunk-DOOMULVV.js → chunk-OLT3CWDJ.js} +4 -2
  9. package/dist/chunk-OLT3CWDJ.js.map +1 -0
  10. package/dist/{chunk-VJFPTLAK.js → chunk-PEDYJ2TV.js} +8 -22
  11. package/dist/chunk-PEDYJ2TV.js.map +1 -0
  12. package/dist/{chunk-7IQTMF7Y.js → chunk-Y4GIBTRG.js} +5130 -2153
  13. package/dist/chunk-Y4GIBTRG.js.map +1 -0
  14. package/dist/css/components/badge-button.css +16 -0
  15. package/dist/css/components/bento-grid.css +13 -0
  16. package/dist/css/components/code-block.css +267 -0
  17. package/dist/css/components/command-search.css +274 -2
  18. package/dist/css/components/dialog.css +264 -0
  19. package/dist/css/components/drilldown-menu.css +11 -7
  20. package/dist/css/components/equalizer-slider.css +26 -0
  21. package/dist/css/components/handwriting-text.css +15 -0
  22. package/dist/css/components/heatmap-chart.css +267 -1
  23. package/dist/css/components/magnetize-button.css +18 -0
  24. package/dist/css/components/morphing-page-dots.css +13 -0
  25. package/dist/css/components/not-found.css +22 -0
  26. package/dist/css/components/notification-stack.css +42 -0
  27. package/dist/css/components/particle-button.css +14 -0
  28. package/dist/css/components/radio-group.css +29 -0
  29. package/dist/css/components/rating-scale.css +23 -0
  30. package/dist/css/components/scroll-area.css +261 -0
  31. package/dist/css/components/scroll-preview-dock.css +18 -0
  32. package/dist/css/components/select.css +300 -4
  33. package/dist/css/components/signature-pad.css +130 -103
  34. package/dist/css/components/stepper.css +36 -0
  35. package/dist/css/components/sticky-header.css +10 -0
  36. package/dist/css/components/temperature-slider.css +29 -0
  37. package/dist/css/components/voice-message-bubble.css +62 -45
  38. package/dist/css/components/waveform-player.css +49 -34
  39. package/dist/css/components/wheel-picker.css +16 -15
  40. package/dist/css/tokens.css +4 -0
  41. package/dist/elements/index.d.ts +217 -4
  42. package/dist/elements/index.js +614 -9
  43. package/dist/elements/index.js.map +1 -1
  44. package/dist/{engine-Bn6hC87X.d.ts → engine-D6XV-WNt.d.ts} +390 -1
  45. package/dist/gl/index.js +2 -2
  46. package/dist/index.css +886 -177
  47. package/dist/index.d.ts +23 -23
  48. package/dist/index.js +37 -5
  49. package/dist/index.js.map +1 -1
  50. package/dist/react/index.d.ts +126 -7
  51. package/dist/react/index.js +722 -7
  52. package/dist/react/index.js.map +1 -1
  53. package/dist/{reduced-YS6TZjpa.d.ts → reduced-4croIXl-.d.ts} +1 -1
  54. package/dist/{store-CZ6vdtIE.d.ts → store-CAHWkurn.d.ts} +1 -1
  55. package/package.json +110 -110
  56. package/registry.json +1357 -1160
  57. package/src/auto/auto-init.ts +341 -308
  58. package/src/components/badge-button/README.md +28 -0
  59. package/src/components/badge-button/badge-button.css +15 -0
  60. package/src/components/badge-button/element.ts +16 -0
  61. package/src/components/badge-button/engine.ts +85 -0
  62. package/src/components/badge-button/react.tsx +31 -0
  63. package/src/components/bento-grid/README.md +26 -0
  64. package/src/components/bento-grid/bento-grid.css +12 -0
  65. package/src/components/bento-grid/element.ts +22 -0
  66. package/src/components/bento-grid/engine.ts +153 -0
  67. package/src/components/bento-grid/react.tsx +25 -0
  68. package/src/components/code-block/README.md +1 -1
  69. package/src/components/code-block/code-block.css +5 -0
  70. package/src/components/code-block/engine.ts +5 -0
  71. package/src/components/command-search/README.md +1 -1
  72. package/src/components/command-search/command-search.css +12 -2
  73. package/src/components/command-search/engine.ts +6 -0
  74. package/src/components/dialog/README.md +104 -103
  75. package/src/components/dialog/dialog.css +2 -0
  76. package/src/components/dialog/engine.ts +465 -449
  77. package/src/components/drilldown-menu/drilldown-menu.css +11 -7
  78. package/src/components/drilldown-menu/engine.ts +44 -4
  79. package/src/components/equalizer-slider/README.md +43 -0
  80. package/src/components/equalizer-slider/element.ts +41 -0
  81. package/src/components/equalizer-slider/engine.ts +32 -0
  82. package/src/components/equalizer-slider/equalizer-slider.css +26 -0
  83. package/src/components/equalizer-slider/react.tsx +60 -0
  84. package/src/components/equalizer-slider/shared.ts +161 -0
  85. package/src/components/handwriting-text/README.md +29 -0
  86. package/src/components/handwriting-text/element.ts +14 -0
  87. package/src/components/handwriting-text/engine.ts +108 -0
  88. package/src/components/handwriting-text/glyphs.ts +71 -0
  89. package/src/components/handwriting-text/handwriting-text.css +14 -0
  90. package/src/components/handwriting-text/react.tsx +23 -0
  91. package/src/components/heatmap-chart/README.md +48 -48
  92. package/src/components/heatmap-chart/engine.ts +6 -1
  93. package/src/components/heatmap-chart/heatmap-chart.css +5 -1
  94. package/src/components/icons.ts +1 -0
  95. package/src/components/magnetize-button/README.md +26 -0
  96. package/src/components/magnetize-button/element.ts +13 -0
  97. package/src/components/magnetize-button/engine.ts +84 -0
  98. package/src/components/magnetize-button/magnetize-button.css +17 -0
  99. package/src/components/magnetize-button/react.tsx +22 -0
  100. package/src/components/morphing-page-dots/README.md +28 -0
  101. package/src/components/morphing-page-dots/element.ts +16 -0
  102. package/src/components/morphing-page-dots/engine.ts +89 -0
  103. package/src/components/morphing-page-dots/morphing-page-dots.css +12 -0
  104. package/src/components/morphing-page-dots/react.tsx +32 -0
  105. package/src/components/not-found/README.md +26 -0
  106. package/src/components/not-found/element.ts +15 -0
  107. package/src/components/not-found/engine.ts +57 -0
  108. package/src/components/not-found/not-found.css +21 -0
  109. package/src/components/not-found/react.tsx +23 -0
  110. package/src/components/notification-stack/README.md +24 -0
  111. package/src/components/notification-stack/element.ts +26 -0
  112. package/src/components/notification-stack/engine.ts +329 -0
  113. package/src/components/notification-stack/notification-stack.css +41 -0
  114. package/src/components/notification-stack/react.tsx +28 -0
  115. package/src/components/particle-button/README.md +26 -0
  116. package/src/components/particle-button/element.ts +13 -0
  117. package/src/components/particle-button/engine.ts +52 -0
  118. package/src/components/particle-button/particle-button.css +13 -0
  119. package/src/components/particle-button/react.tsx +22 -0
  120. package/src/components/radio-group/README.md +43 -0
  121. package/src/components/radio-group/element.ts +41 -0
  122. package/src/components/radio-group/engine.ts +11 -0
  123. package/src/components/radio-group/radio-group.css +28 -0
  124. package/src/components/radio-group/react.tsx +60 -0
  125. package/src/components/radio-group/shared.ts +118 -0
  126. package/src/components/rating-scale/README.md +43 -0
  127. package/src/components/rating-scale/element.ts +41 -0
  128. package/src/components/rating-scale/engine.ts +63 -0
  129. package/src/components/rating-scale/rating-scale.css +22 -0
  130. package/src/components/rating-scale/react.tsx +60 -0
  131. package/src/components/scroll-area/README.md +89 -0
  132. package/src/components/scroll-area/element.ts +35 -0
  133. package/src/components/scroll-area/engine.ts +528 -0
  134. package/src/components/scroll-area/react.tsx +67 -0
  135. package/src/components/scroll-area/scroll-area.css +260 -0
  136. package/src/components/scroll-preview-dock/README.md +24 -0
  137. package/src/components/scroll-preview-dock/element.ts +20 -0
  138. package/src/components/scroll-preview-dock/engine.ts +228 -0
  139. package/src/components/scroll-preview-dock/react.tsx +26 -0
  140. package/src/components/scroll-preview-dock/scroll-preview-dock.css +17 -0
  141. package/src/components/select/README.md +23 -9
  142. package/src/components/select/engine.ts +16 -4
  143. package/src/components/select/select.css +38 -4
  144. package/src/components/signature-pad/engine.ts +550 -437
  145. package/src/components/signature-pad/signature-pad.css +130 -103
  146. package/src/components/stepper/README.md +46 -0
  147. package/src/components/stepper/element.ts +42 -0
  148. package/src/components/stepper/engine.ts +103 -0
  149. package/src/components/stepper/react.tsx +60 -0
  150. package/src/components/stepper/stepper.css +35 -0
  151. package/src/components/sticky-header/README.md +30 -0
  152. package/src/components/sticky-header/element.ts +19 -0
  153. package/src/components/sticky-header/engine.ts +95 -0
  154. package/src/components/sticky-header/react.tsx +25 -0
  155. package/src/components/sticky-header/sticky-header.css +9 -0
  156. package/src/components/temperature-slider/README.md +42 -0
  157. package/src/components/temperature-slider/element.ts +53 -0
  158. package/src/components/temperature-slider/engine.ts +44 -0
  159. package/src/components/temperature-slider/react.tsx +66 -0
  160. package/src/components/temperature-slider/temperature-slider.css +29 -0
  161. package/src/components/voice-message-bubble/engine.ts +11 -0
  162. package/src/components/voice-message-bubble/voice-message-bubble.css +14 -12
  163. package/src/components/waveform-player/README.md +1 -1
  164. package/src/components/waveform-player/engine.ts +344 -261
  165. package/src/components/waveform-player/waveform-player.css +50 -35
  166. package/src/components/wheel-picker/README.md +3 -1
  167. package/src/components/wheel-picker/element.ts +12 -5
  168. package/src/components/wheel-picker/engine.ts +37 -8
  169. package/src/components/wheel-picker/wheel-picker.css +17 -16
  170. package/src/core/timing.ts +2 -0
  171. package/src/css/tokens.css +4 -0
  172. package/src/elements/index.ts +321 -273
  173. package/src/index.ts +312 -295
  174. package/src/motion/morph.ts +5 -2
  175. package/src/react/index.ts +17 -0
  176. package/dist/chunk-7IQTMF7Y.js.map +0 -1
  177. package/dist/chunk-DOOMULVV.js.map +0 -1
  178. package/dist/chunk-VJFPTLAK.js.map +0 -1
  179. /package/dist/{chunk-QFBOHPWZ.js.map → chunk-CQP66AZK.js.map} +0 -0
  180. /package/dist/{chunk-QP4QJOEN.js.map → chunk-H4STLMCM.js.map} +0 -0
  181. /package/dist/{chunk-BZLMCHUD.js.map → chunk-KDIJX6G4.js.map} +0 -0
@@ -1,103 +1,104 @@
1
- # dialog
2
-
3
- El diálogo sobre `<dialog>` nativo (foco atrapado, Escape, capa superior). El botón que lo abre se convierte en el diálogo y al cerrar vuelve a él.
4
-
5
- - **Abrir desde el botón (morph):** la superficie viaja recortada desde el rect del botón en 0.7 s con la curva signature y toma su color en 0.3 s; el contenido crece como grupo desde la caja del botón con blur 8 → 0. El botón se oculta en 80 ms mientras está "dentro".
6
- - **Elementos compartidos:** `data-mk-shared="titulo"` en una pieza del botón y otra del diálogo: el texto vuela de una a otra (0.7 s al abrir, 0.5 s al cerrar).
7
- - **Sin botón en pantalla:** escala .92 → 1 en 0.35 s (`power2.out`).
8
- - **Cerrar:** el diálogo se cierra al instante (el foco vuelve y la página responde) mientras una copia inerte se pliega al botón: forma 0.5 s, contenido con blur → 32 px (`.37,.35,0,1`) y fundido (`.56,.27,0,1`), velo `power3.in`; el botón reaparece 0.3 s tras 0.2 s. Sin botón: escala .9 + blur 32.
9
- - **Líquido** (`variant="liquid"`): dos blobs bajo filtro goo; posición con resorte 144/14 y patada de 2400 px/s, tamaño 0.3 s `cubic(.8,.3,.5,.8)`, radio 0.7 s, contenido `scale 2 → 1` y blur 8 → 0, color 0.4 s tras 0.15 s. Cierre con resorte 130/18.
10
- - **Backdrop:** tinte 0.5 s con la curva signature (`linear()`).
11
- - **Auto-resize:** si el contenido crece o se encoge, la altura se ajusta en 0.45 s (signature).
12
- - **Arrastrar para cerrar:** sigue al puntero a la mitad y encoge (`1 − y/400`); pasados 100 px se cierra donde quedó, si no vuelve con `elastic.out(.5,.5)` 0.5 s. También con la rueda. Ignora controles, áreas con scroll y `[data-mk-no-drag]`.
13
- - **Ventana flotante** (`float="clave"`, escritorio ≥ 680 px): el asa la levanta (la página sigue usable), se mueve con resorte 1100/38 e inercia, se queda dentro de la pantalla, se redimensiona por las esquinas (mín. 320 × 240) y recuerda su sitio. Un clic en el asa la devuelve.
14
- - **Móvil (< 680 px):** pantalla completa, radio 0.
15
-
16
- - **Sheet** (`variant="sheet"`): la hoja sube desde abajo (`y 100% → 0`, 0.72 s `cubic-bezier(.16,1,.3,1)`) y lo marcado con `[data-mk-underlay]` se hunde a escala .98 y opacidad .4 con un resorte 300/30. Al cerrar, una copia inerte cae por debajo de la pantalla y el foco vuelve al instante. No sale del botón. Mientras está abierta, la página no hace scroll.
17
-
18
- ## HTML / Astro
19
-
20
- ```html
21
- <button class="mk-button" data-mk-open="crear">Crear proyecto</button>
22
-
23
- <mk-dialog id="crear" heading="Crear proyecto" description="Se guarda en tu espacio.">
24
- <label class="mk-field"><span class="mk-field__label">Nombre</span><input /></label>
25
- <div data-mk-part="footer">
26
- <button class="mk-button mk-button--text" data-mk-close>Cancelar</button>
27
- <button class="mk-button mk-button--primary">Crear</button>
28
- </div>
29
- </mk-dialog>
30
-
31
- <script>
32
- import { defineElements } from '@yewdiel21/motion-kit/elements';
33
- defineElements(['mk-dialog']);
34
- </script>
35
- ```
36
-
37
- Sin `heading`, tus hijos van dentro tal cual si ya usan partes (`data-mk-part="header|body|footer"`), o dentro de un cuerpo si no. Sobre tu propio `<dialog class="mk-dialog">`: `createDialog(dialog, opciones)`.
38
-
39
- ## React
40
-
41
- ```tsx
42
- <Dialog.Root variant="liquid" onOpenChange={setOpen}>
43
- <Dialog.Trigger className="mk-button">Crear</Dialog.Trigger>
44
- <Dialog.Content>
45
- <Dialog.Header>
46
- <div><Dialog.Title>Crear proyecto</Dialog.Title></div>
47
- <Dialog.Actions><Dialog.Close /></Dialog.Actions>
48
- </Dialog.Header>
49
- <Dialog.Body>…</Dialog.Body>
50
- <Dialog.Footer>…</Dialog.Footer>
51
- </Dialog.Content>
52
- </Dialog.Root>
53
- ```
54
-
55
- Las opciones van en `Dialog.Root` (`variant`, `placement`, `float`…). Controlado con `open` + `onOpenChange`, o libre con `defaultOpen`. `Dialog.Trigger` registra su botón como origen.
56
-
57
- ## Opciones
58
-
59
- | Opción | Atributo | Por defecto | Qué hace |
60
- |---|---|---|---|
61
- | `variant` | `variant` | `'morph'` | `'liquid'` para la versión líquida; `'sheet'` para la hoja que sube desde abajo; `'drawer'` desliza desde su lado (`data-mk-drawer`, ver [drawer](../drawer/README.md)) |
62
- | `placement` | `placement` | `'center'` | `'anchor'` junto al botón, `'side'` panel lateral |
63
- | `anchor` | — | caja del origen | Con `placement: 'anchor'`, función que devuelve la caja (`DOMRect`) junto a la que se coloca; se lee al abrir y al redimensionar ([context-menu](../context-menu/README.md) la usa para el puntero) |
64
- | `backdrop` | `no-backdrop` | `true` | Velo tintado |
65
- | `closeOnBackdrop` | `persistent` | `true` | Clic fuera cierra |
66
- | `drag` | `no-drag` | `true` | Arrastrar para cerrar |
67
- | `float` | `float="clave"` | `false` | Ventana flotante (necesita un `[data-mk-part="handle"]`; con `heading` se crea) |
68
- | `autoResize` | — | `true` | Ajuste suave de altura |
69
- | `triggers` | (el `id`) | `true` | `[data-mk-open="<id>"]` lo abre |
70
- | `modal` | — | `true` | Modal o no |
71
- | `labels` | `close-label` | `{ close: 'Cerrar', float, dock }` | Textos accesibles |
72
- | `size` | `size` | `md` (400 px) | `sm` 360, `lg` 640, `xl` 960 |
73
-
74
- ## Sheet
75
-
76
- ```html
77
- <main data-mk-underlay>…la página…</main>
78
- <button class="mk-button" data-mk-open="proyecto">Ver proyecto</button>
79
- <mk-dialog id="proyecto" variant="sheet" heading="Private Space">…</mk-dialog>
80
- ```
81
-
82
- ```tsx
83
- <Dialog.Root variant="sheet">
84
- <Dialog.Trigger>Ver proyecto</Dialog.Trigger>
85
- <Dialog.Content>…</Dialog.Content>
86
- </Dialog.Root>
87
- ```
88
-
89
- Ancho hasta `--mk-sheet-max-width` (720px), alto hasta `100dvh − 24px`, radio solo arriba; en el móvil ocupa todo el ancho. Se cierra con Escape, con el fondo, arrastrando hacia abajo o con `[data-mk-close]`. Con movimiento reducido aparece y desaparece sin animar y la página de detrás no cambia. Funciones sueltas: `sheetOpen`, `sheetClose`, `pushUnderlay`, `releaseUnderlay`.
90
-
91
- ## Controles y eventos
92
-
93
- `open(origen?)`, `close()`, `toggle(origen?)`, `float()`, `dock()`, `isOpen`, `isFloating`, `destroy()`.
94
- Eventos que burbujean desde el `<dialog>`: `mk:open` (`detail.origin`), `mk:close` (cancelable; `detail.inPlace` tras un arrastre), `mk:closed`.
95
- Cualquier `[data-mk-part="close"]` o `[data-mk-close]` dentro lo cierra.
96
-
97
- ## Variables CSS
98
-
99
- `--mk-dialog-bg` (surface-2), `--mk-dialog-radius` (40px), `--mk-dialog-width` (400px), `--mk-dialog-padding` (24px), `--mk-dialog-shadow`.
100
-
101
- ## Accesibilidad
102
-
103
- `<dialog>` nativo: foco atrapado, Escape, fondo inerte. El título (`data-mk-part="title"`) nombra el diálogo y la descripción lo describe. El foco va al primer campo al abrir y vuelve al botón al cerrar. Con movimiento reducido abre y cierra sin viaje ni arrastre.
1
+ # dialog
2
+
3
+ El diálogo sobre `<dialog>` nativo (foco atrapado, Escape, capa superior). El botón que lo abre se convierte en el diálogo y al cerrar vuelve a él.
4
+
5
+ - **Abrir desde el botón (morph):** la superficie viaja recortada desde el rect del botón en 0.7 s con la curva signature y toma su color en 0.3 s; el contenido crece como grupo desde la caja del botón con blur 8 → 0. El botón se oculta en 80 ms mientras está "dentro".
6
+ - **Elementos compartidos:** `data-mk-shared="titulo"` en una pieza del botón y otra del diálogo: el texto vuela de una a otra (0.7 s al abrir, 0.5 s al cerrar).
7
+ - **Sin botón en pantalla:** escala .92 → 1 en 0.35 s (`power2.out`).
8
+ - **Cerrar:** el diálogo se cierra al instante (el foco vuelve y la página responde) mientras una copia inerte se pliega al botón: forma 0.5 s, contenido con blur → 32 px (`.37,.35,0,1`) y fundido (`.56,.27,0,1`), velo `power3.in`; el botón reaparece 0.3 s tras 0.2 s. Sin botón: escala .9 + blur 32.
9
+ - **Líquido** (`variant="liquid"`): dos blobs bajo filtro goo; posición con resorte 144/14 y patada de 2400 px/s, tamaño 0.3 s `cubic(.8,.3,.5,.8)`, radio 0.7 s, contenido `scale 2 → 1` y blur 8 → 0, color 0.4 s tras 0.15 s. Cierre con resorte 130/18.
10
+ - **Backdrop:** tinte 0.5 s con la curva signature (`linear()`).
11
+ - **Auto-resize:** si el contenido crece o se encoge, la altura se ajusta en 0.45 s (signature).
12
+ - **Arrastrar para cerrar:** sigue al puntero a la mitad y encoge (`1 − y/400`); pasados 100 px se cierra donde quedó, si no vuelve con `elastic.out(.5,.5)` 0.5 s. También con la rueda. Ignora controles, áreas con scroll y `[data-mk-no-drag]`.
13
+ - **Ventana flotante** (`float="clave"`, escritorio ≥ 680 px): el asa la levanta (la página sigue usable), se mueve con resorte 1100/38 e inercia, se queda dentro de la pantalla, se redimensiona por las esquinas (mín. 320 × 240) y recuerda su sitio. Un clic en el asa la devuelve.
14
+ - **Móvil (< 680 px):** pantalla completa, radio 0.
15
+ - **Cuerpo largo:** `[data-mk-part="body"]` se desplaza con la barra de [`scroll-area`](../scroll-area/README.md) en lugar de la del sistema. Ocupa solo la caja del cuerpo, entre cabecera y pie, deja libres las esquinas redondeadas y funde los bordes con más contenido.
16
+
17
+ - **Sheet** (`variant="sheet"`): la hoja sube desde abajo (`y 100% → 0`, 0.72 s `cubic-bezier(.16,1,.3,1)`) y lo marcado con `[data-mk-underlay]` se hunde a escala .98 y opacidad .4 con un resorte 300/30. Al cerrar, una copia inerte cae por debajo de la pantalla y el foco vuelve al instante. No sale del botón. Mientras está abierta, la página no hace scroll.
18
+
19
+ ## HTML / Astro
20
+
21
+ ```html
22
+ <button class="mk-button" data-mk-open="crear">Crear proyecto</button>
23
+
24
+ <mk-dialog id="crear" heading="Crear proyecto" description="Se guarda en tu espacio.">
25
+ <label class="mk-field"><span class="mk-field__label">Nombre</span><input /></label>
26
+ <div data-mk-part="footer">
27
+ <button class="mk-button mk-button--text" data-mk-close>Cancelar</button>
28
+ <button class="mk-button mk-button--primary">Crear</button>
29
+ </div>
30
+ </mk-dialog>
31
+
32
+ <script>
33
+ import { defineElements } from '@yewdiel21/motion-kit/elements';
34
+ defineElements(['mk-dialog']);
35
+ </script>
36
+ ```
37
+
38
+ Sin `heading`, tus hijos van dentro tal cual si ya usan partes (`data-mk-part="header|body|footer"`), o dentro de un cuerpo si no. Sobre tu propio `<dialog class="mk-dialog">`: `createDialog(dialog, opciones)`.
39
+
40
+ ## React
41
+
42
+ ```tsx
43
+ <Dialog.Root variant="liquid" onOpenChange={setOpen}>
44
+ <Dialog.Trigger className="mk-button">Crear</Dialog.Trigger>
45
+ <Dialog.Content>
46
+ <Dialog.Header>
47
+ <div><Dialog.Title>Crear proyecto</Dialog.Title></div>
48
+ <Dialog.Actions><Dialog.Close /></Dialog.Actions>
49
+ </Dialog.Header>
50
+ <Dialog.Body>…</Dialog.Body>
51
+ <Dialog.Footer>…</Dialog.Footer>
52
+ </Dialog.Content>
53
+ </Dialog.Root>
54
+ ```
55
+
56
+ Las opciones van en `Dialog.Root` (`variant`, `placement`, `float`…). Controlado con `open` + `onOpenChange`, o libre con `defaultOpen`. `Dialog.Trigger` registra su botón como origen.
57
+
58
+ ## Opciones
59
+
60
+ | Opción | Atributo | Por defecto | Qué hace |
61
+ |---|---|---|---|
62
+ | `variant` | `variant` | `'morph'` | `'liquid'` para la versión líquida; `'sheet'` para la hoja que sube desde abajo; `'drawer'` desliza desde su lado (`data-mk-drawer`, ver [drawer](../drawer/README.md)) |
63
+ | `placement` | `placement` | `'center'` | `'anchor'` junto al botón, `'side'` panel lateral |
64
+ | `anchor` | — | caja del origen | Con `placement: 'anchor'`, función que devuelve la caja (`DOMRect`) junto a la que se coloca; se lee al abrir y al redimensionar ([context-menu](../context-menu/README.md) la usa para el puntero) |
65
+ | `backdrop` | `no-backdrop` | `true` | Velo tintado |
66
+ | `closeOnBackdrop` | `persistent` | `true` | Clic fuera cierra |
67
+ | `drag` | `no-drag` | `true` | Arrastrar para cerrar |
68
+ | `float` | `float="clave"` | `false` | Ventana flotante (necesita un `[data-mk-part="handle"]`; con `heading` se crea) |
69
+ | `autoResize` | — | `true` | Ajuste suave de altura |
70
+ | `triggers` | (el `id`) | `true` | `[data-mk-open="<id>"]` lo abre |
71
+ | `modal` | — | `true` | Modal o no |
72
+ | `labels` | `close-label` | `{ close: 'Cerrar', float, dock }` | Textos accesibles |
73
+ | `size` | `size` | `md` (400 px) | `sm` 360, `lg` 640, `xl` 960 |
74
+
75
+ ## Sheet
76
+
77
+ ```html
78
+ <main data-mk-underlay>…la página…</main>
79
+ <button class="mk-button" data-mk-open="proyecto">Ver proyecto</button>
80
+ <mk-dialog id="proyecto" variant="sheet" heading="Private Space">…</mk-dialog>
81
+ ```
82
+
83
+ ```tsx
84
+ <Dialog.Root variant="sheet">
85
+ <Dialog.Trigger>Ver proyecto</Dialog.Trigger>
86
+ <Dialog.Content>…</Dialog.Content>
87
+ </Dialog.Root>
88
+ ```
89
+
90
+ Ancho hasta `--mk-sheet-max-width` (720px), alto hasta `100dvh − 24px`, radio solo arriba; en el móvil ocupa todo el ancho. Se cierra con Escape, con el fondo, arrastrando hacia abajo o con `[data-mk-close]`. Con movimiento reducido aparece y desaparece sin animar y la página de detrás no cambia. Funciones sueltas: `sheetOpen`, `sheetClose`, `pushUnderlay`, `releaseUnderlay`.
91
+
92
+ ## Controles y eventos
93
+
94
+ `open(origen?)`, `close()`, `toggle(origen?)`, `float()`, `dock()`, `isOpen`, `isFloating`, `destroy()`.
95
+ Eventos que burbujean desde el `<dialog>`: `mk:open` (`detail.origin`), `mk:close` (cancelable; `detail.inPlace` tras un arrastre), `mk:closed`.
96
+ Cualquier `[data-mk-part="close"]` o `[data-mk-close]` dentro lo cierra.
97
+
98
+ ## Variables CSS
99
+
100
+ `--mk-dialog-bg` (surface-2), `--mk-dialog-radius` (40px), `--mk-dialog-width` (400px), `--mk-dialog-padding` (24px), `--mk-dialog-shadow`.
101
+
102
+ ## Accesibilidad
103
+
104
+ `<dialog>` nativo: foco atrapado, Escape, fondo inerte. El título (`data-mk-part="title"`) nombra el diálogo y la descripción lo describe. El foco va al primer campo al abrir y vuelve al botón al cerrar. Con movimiento reducido abre y cierra sin viaje ni arrastre.
@@ -5,6 +5,8 @@
5
5
  --mk-dialog-width: 400px;
6
6
  --mk-dialog-padding: 24px;
7
7
  --mk-dialog-shadow: 0 24px 64px -16px rgb(0 0 0 / 0.35);
8
+ /* The body's scroll-area bar keeps its ends clear of the rounded corners. */
9
+ --mk-scroll-inset: max(6px, calc(var(--mk-dialog-radius) * 0.6));
8
10
  width: min(var(--mk-dialog-width), calc(100vw - 32px));
9
11
  max-width: none;
10
12
  max-height: min(88dvh, calc(100dvh - 32px));