@moni-labs/moni-ui 0.3.0 → 0.3.2

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 (251) hide show
  1. package/custom-elements.json +5230 -1007
  2. package/dist/components/_base/moni-element.d.ts +16 -9
  3. package/dist/components/_base/moni-element.d.ts.map +1 -1
  4. package/dist/components/_base/moni-element.js +63 -9
  5. package/dist/components/index.js +2 -2
  6. package/dist/components/loading-shapes.d.ts +19 -0
  7. package/dist/components/loading-shapes.d.ts.map +1 -1
  8. package/dist/components/loading-shapes.js +19 -0
  9. package/dist/components/moni-app-bar.d.ts +72 -62
  10. package/dist/components/moni-app-bar.d.ts.map +1 -1
  11. package/dist/components/moni-app-bar.js +72 -62
  12. package/dist/components/moni-badge.d.ts +64 -65
  13. package/dist/components/moni-badge.d.ts.map +1 -1
  14. package/dist/components/moni-badge.js +64 -66
  15. package/dist/components/moni-bottom-sheet.d.ts +129 -61
  16. package/dist/components/moni-bottom-sheet.d.ts.map +1 -1
  17. package/dist/components/moni-bottom-sheet.js +217 -131
  18. package/dist/components/moni-button-group.d.ts +107 -29
  19. package/dist/components/moni-button-group.d.ts.map +1 -1
  20. package/dist/components/moni-button-group.js +107 -29
  21. package/dist/components/moni-button-segment.d.ts +53 -12
  22. package/dist/components/moni-button-segment.d.ts.map +1 -1
  23. package/dist/components/moni-button-segment.js +53 -12
  24. package/dist/components/moni-button.d.ts +116 -38
  25. package/dist/components/moni-button.d.ts.map +1 -1
  26. package/dist/components/moni-button.js +128 -38
  27. package/dist/components/moni-card.d.ts +68 -50
  28. package/dist/components/moni-card.d.ts.map +1 -1
  29. package/dist/components/moni-card.js +68 -50
  30. package/dist/components/moni-carousel.d.ts +484 -53
  31. package/dist/components/moni-carousel.d.ts.map +1 -1
  32. package/dist/components/moni-carousel.js +1024 -245
  33. package/dist/components/moni-checkbox.d.ts +49 -46
  34. package/dist/components/moni-checkbox.d.ts.map +1 -1
  35. package/dist/components/moni-checkbox.js +55 -48
  36. package/dist/components/moni-chip.d.ts +100 -33
  37. package/dist/components/moni-chip.d.ts.map +1 -1
  38. package/dist/components/moni-chip.js +104 -34
  39. package/dist/components/moni-color-field.d.ts +99 -24
  40. package/dist/components/moni-color-field.d.ts.map +1 -1
  41. package/dist/components/moni-color-field.js +99 -24
  42. package/dist/components/moni-context-menu.d.ts +72 -26
  43. package/dist/components/moni-context-menu.d.ts.map +1 -1
  44. package/dist/components/moni-context-menu.js +76 -30
  45. package/dist/components/moni-dialog.d.ts +84 -59
  46. package/dist/components/moni-dialog.d.ts.map +1 -1
  47. package/dist/components/moni-dialog.js +105 -58
  48. package/dist/components/moni-divider.d.ts +39 -27
  49. package/dist/components/moni-divider.d.ts.map +1 -1
  50. package/dist/components/moni-divider.js +42 -30
  51. package/dist/components/moni-expansion.d.ts +32 -22
  52. package/dist/components/moni-expansion.d.ts.map +1 -1
  53. package/dist/components/moni-expansion.js +32 -22
  54. package/dist/components/moni-fab-menu.d.ts +61 -23
  55. package/dist/components/moni-fab-menu.d.ts.map +1 -1
  56. package/dist/components/moni-fab-menu.js +69 -31
  57. package/dist/components/moni-fab.d.ts +86 -28
  58. package/dist/components/moni-fab.d.ts.map +1 -1
  59. package/dist/components/moni-fab.js +92 -34
  60. package/dist/components/moni-file-field.d.ts +118 -30
  61. package/dist/components/moni-file-field.d.ts.map +1 -1
  62. package/dist/components/moni-file-field.js +118 -30
  63. package/dist/components/moni-icon.d.ts +40 -35
  64. package/dist/components/moni-icon.d.ts.map +1 -1
  65. package/dist/components/moni-icon.js +43 -38
  66. package/dist/components/moni-list-item.d.ts +46 -33
  67. package/dist/components/moni-list-item.d.ts.map +1 -1
  68. package/dist/components/moni-list-item.js +61 -41
  69. package/dist/components/moni-list.d.ts +30 -20
  70. package/dist/components/moni-list.d.ts.map +1 -1
  71. package/dist/components/moni-list.js +36 -21
  72. package/dist/components/moni-loading-indicator.d.ts +54 -22
  73. package/dist/components/moni-loading-indicator.d.ts.map +1 -1
  74. package/dist/components/moni-loading-indicator.js +54 -22
  75. package/dist/components/moni-menu-item.d.ts +23 -16
  76. package/dist/components/moni-menu-item.d.ts.map +1 -1
  77. package/dist/components/moni-menu-item.js +23 -16
  78. package/dist/components/moni-menu.d.ts +81 -28
  79. package/dist/components/moni-menu.d.ts.map +1 -1
  80. package/dist/components/moni-menu.js +81 -30
  81. package/dist/components/moni-morph-modal.d.ts +141 -0
  82. package/dist/components/moni-morph-modal.d.ts.map +1 -1
  83. package/dist/components/moni-morph-modal.js +295 -58
  84. package/dist/components/moni-nav-item.d.ts +59 -29
  85. package/dist/components/moni-nav-item.d.ts.map +1 -1
  86. package/dist/components/moni-nav-item.js +59 -29
  87. package/dist/components/moni-nav.d.ts +94 -35
  88. package/dist/components/moni-nav.d.ts.map +1 -1
  89. package/dist/components/moni-nav.js +94 -35
  90. package/dist/components/moni-progress.d.ts +99 -55
  91. package/dist/components/moni-progress.d.ts.map +1 -1
  92. package/dist/components/moni-progress.js +99 -55
  93. package/dist/components/moni-radio.d.ts +62 -50
  94. package/dist/components/moni-radio.d.ts.map +1 -1
  95. package/dist/components/moni-radio.js +65 -52
  96. package/dist/components/moni-ripple.d.ts +74 -59
  97. package/dist/components/moni-ripple.d.ts.map +1 -1
  98. package/dist/components/moni-ripple.js +74 -59
  99. package/dist/components/moni-segmented-button.d.ts +91 -16
  100. package/dist/components/moni-segmented-button.d.ts.map +1 -1
  101. package/dist/components/moni-segmented-button.js +94 -17
  102. package/dist/components/moni-select-option.d.ts +30 -23
  103. package/dist/components/moni-select-option.d.ts.map +1 -1
  104. package/dist/components/moni-select-option.js +30 -23
  105. package/dist/components/moni-select.d.ts +300 -35
  106. package/dist/components/moni-select.d.ts.map +1 -1
  107. package/dist/components/moni-select.js +323 -39
  108. package/dist/components/moni-side-sheet.d.ts +94 -32
  109. package/dist/components/moni-side-sheet.d.ts.map +1 -1
  110. package/dist/components/moni-side-sheet.js +94 -32
  111. package/dist/components/moni-slider.d.ts +152 -41
  112. package/dist/components/moni-slider.d.ts.map +1 -1
  113. package/dist/components/moni-slider.js +154 -42
  114. package/dist/components/moni-snackbar.d.ts +53 -43
  115. package/dist/components/moni-snackbar.d.ts.map +1 -1
  116. package/dist/components/moni-snackbar.js +53 -43
  117. package/dist/components/moni-split-button.d.ts +63 -18
  118. package/dist/components/moni-split-button.d.ts.map +1 -1
  119. package/dist/components/moni-split-button.js +63 -18
  120. package/dist/components/moni-step.d.ts +36 -24
  121. package/dist/components/moni-step.d.ts.map +1 -1
  122. package/dist/components/moni-step.js +41 -29
  123. package/dist/components/moni-stepper.d.ts +64 -27
  124. package/dist/components/moni-stepper.d.ts.map +1 -1
  125. package/dist/components/moni-stepper.js +72 -34
  126. package/dist/components/moni-switch.d.ts +57 -46
  127. package/dist/components/moni-switch.d.ts.map +1 -1
  128. package/dist/components/moni-switch.js +59 -47
  129. package/dist/components/moni-tab.d.ts +26 -18
  130. package/dist/components/moni-tab.d.ts.map +1 -1
  131. package/dist/components/moni-tab.js +29 -21
  132. package/dist/components/moni-tabs.d.ts +34 -28
  133. package/dist/components/moni-tabs.d.ts.map +1 -1
  134. package/dist/components/moni-tabs.js +34 -28
  135. package/dist/components/moni-text-field.d.ts +139 -29
  136. package/dist/components/moni-text-field.d.ts.map +1 -1
  137. package/dist/components/moni-text-field.js +157 -31
  138. package/dist/components/moni-textarea.d.ts +127 -29
  139. package/dist/components/moni-textarea.d.ts.map +1 -1
  140. package/dist/components/moni-textarea.js +131 -32
  141. package/dist/components/moni-time-picker.d.ts +114 -24
  142. package/dist/components/moni-time-picker.d.ts.map +1 -1
  143. package/dist/components/moni-time-picker.js +127 -33
  144. package/dist/components/moni-toolbar.d.ts +37 -23
  145. package/dist/components/moni-toolbar.d.ts.map +1 -1
  146. package/dist/components/moni-toolbar.js +37 -23
  147. package/dist/components/moni-tooltip.d.ts +100 -36
  148. package/dist/components/moni-tooltip.d.ts.map +1 -1
  149. package/dist/components/moni-tooltip.js +104 -40
  150. package/dist/components/moni-typography.d.ts +68 -30
  151. package/dist/components/moni-typography.d.ts.map +1 -1
  152. package/dist/components/moni-typography.js +70 -32
  153. package/dist/styles/tokens.css +7 -7
  154. package/dist/types/events.d.ts +17 -0
  155. package/dist/types/events.d.ts.map +1 -0
  156. package/dist/types/events.js +1 -0
  157. package/dist/utils/event-emitter.d.ts +13 -0
  158. package/dist/utils/event-emitter.d.ts.map +1 -0
  159. package/dist/utils/event-emitter.js +13 -0
  160. package/package.json +2 -1
  161. package/src/components/_base/moni-element.ts +73 -9
  162. package/src/components/index.ts +2 -2
  163. package/src/components/loading-shapes.ts +19 -0
  164. package/src/components/moni-app-bar.test.ts +10 -10
  165. package/src/components/moni-app-bar.ts +72 -62
  166. package/src/components/moni-badge.ts +64 -66
  167. package/src/components/moni-bottom-sheet.test.ts +39 -45
  168. package/src/components/moni-bottom-sheet.ts +222 -131
  169. package/src/components/moni-button-group.test.ts +14 -14
  170. package/src/components/moni-button-group.ts +107 -29
  171. package/src/components/moni-button-segment.ts +53 -12
  172. package/src/components/moni-button.test.ts +28 -26
  173. package/src/components/moni-button.ts +139 -39
  174. package/src/components/moni-card.test.ts +6 -6
  175. package/src/components/moni-card.ts +70 -50
  176. package/src/components/moni-carousel.test.ts +12 -12
  177. package/src/components/moni-carousel.ts +1129 -269
  178. package/src/components/moni-checkbox.test.ts +7 -7
  179. package/src/components/moni-checkbox.ts +62 -48
  180. package/src/components/moni-chip.test.ts +17 -17
  181. package/src/components/moni-chip.ts +112 -34
  182. package/src/components/moni-color-field.test.ts +5 -5
  183. package/src/components/moni-color-field.ts +108 -24
  184. package/src/components/moni-context-menu.test.ts +11 -11
  185. package/src/components/moni-context-menu.ts +76 -30
  186. package/src/components/moni-dialog.ts +108 -59
  187. package/src/components/moni-divider.test.ts +4 -4
  188. package/src/components/moni-divider.ts +42 -30
  189. package/src/components/moni-expansion.ts +32 -22
  190. package/src/components/moni-fab-menu.test.ts +11 -11
  191. package/src/components/moni-fab-menu.ts +69 -31
  192. package/src/components/moni-fab.test.ts +16 -16
  193. package/src/components/moni-fab.ts +100 -34
  194. package/src/components/moni-file-field.test.ts +8 -8
  195. package/src/components/moni-file-field.ts +132 -30
  196. package/src/components/moni-icon.test.ts +11 -11
  197. package/src/components/moni-icon.ts +43 -38
  198. package/src/components/moni-list-item.test.ts +10 -10
  199. package/src/components/moni-list-item.ts +61 -41
  200. package/src/components/moni-list.ts +37 -21
  201. package/src/components/moni-loading-indicator.test.ts +3 -3
  202. package/src/components/moni-loading-indicator.ts +54 -22
  203. package/src/components/moni-menu-item.ts +23 -16
  204. package/src/components/moni-menu.test.ts +7 -7
  205. package/src/components/moni-menu.ts +87 -30
  206. package/src/components/moni-morph-modal.test.ts +18 -17
  207. package/src/components/moni-morph-modal.ts +327 -60
  208. package/src/components/moni-nav-item.ts +59 -29
  209. package/src/components/moni-nav.test.ts +11 -11
  210. package/src/components/moni-nav.ts +94 -35
  211. package/src/components/moni-progress.test.ts +9 -9
  212. package/src/components/moni-progress.ts +100 -56
  213. package/src/components/moni-radio.test.ts +8 -8
  214. package/src/components/moni-radio.ts +71 -51
  215. package/src/components/moni-ripple.ts +74 -59
  216. package/src/components/moni-segmented-button.test.ts +4 -4
  217. package/src/components/moni-segmented-button.ts +94 -17
  218. package/src/components/moni-select-option.ts +30 -23
  219. package/src/components/moni-select.test.ts +11 -11
  220. package/src/components/moni-select.ts +361 -50
  221. package/src/components/moni-side-sheet.test.ts +7 -7
  222. package/src/components/moni-side-sheet.ts +94 -32
  223. package/src/components/moni-slider.test.ts +7 -7
  224. package/src/components/moni-slider.ts +165 -42
  225. package/src/components/moni-snackbar.test.ts +8 -8
  226. package/src/components/moni-snackbar.ts +53 -43
  227. package/src/components/moni-split-button.ts +63 -18
  228. package/src/components/moni-step.test.ts +7 -7
  229. package/src/components/moni-step.ts +41 -29
  230. package/src/components/moni-stepper.test.ts +7 -7
  231. package/src/components/moni-stepper.ts +72 -34
  232. package/src/components/moni-switch.test.ts +12 -12
  233. package/src/components/moni-switch.ts +66 -47
  234. package/src/components/moni-tab.test.ts +5 -5
  235. package/src/components/moni-tab.ts +29 -21
  236. package/src/components/moni-tabs.ts +34 -28
  237. package/src/components/moni-text-field.test.ts +13 -13
  238. package/src/components/moni-text-field.ts +181 -30
  239. package/src/components/moni-textarea.test.ts +17 -17
  240. package/src/components/moni-textarea.ts +155 -31
  241. package/src/components/moni-time-picker.test.ts +5 -5
  242. package/src/components/moni-time-picker.ts +128 -33
  243. package/src/components/moni-toolbar.test.ts +8 -8
  244. package/src/components/moni-toolbar.ts +37 -23
  245. package/src/components/moni-tooltip.test.ts +15 -15
  246. package/src/components/moni-tooltip.ts +107 -40
  247. package/src/components/moni-typography.test.ts +10 -10
  248. package/src/components/moni-typography.ts +73 -32
  249. package/src/styles/tokens.css +7 -7
  250. package/src/types/events.ts +17 -0
  251. package/src/utils/event-emitter.ts +26 -0
@@ -13,121 +13,137 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
13
13
  import { html, css } from 'lit';
14
14
  import { customElement, property, query } from 'lit/decorators.js';
15
15
  import { MoniElement, sharedStyles } from './_base/index.js';
16
+ import { emitMoniEvent } from '../utils/event-emitter.js';
16
17
  /**
17
- * Material Design 3 Dialog component.
18
+ * Componente Material Design 3 Dialog (Diálogo).
18
19
  *
19
- * Dialogs inform users about a task and can contain critical information,
20
- * require decisions, or involve multiple tasks. They interrupt the user's
21
- * workflow and should be used sparingly.
20
+ * Los diálogos informan a los usuarios sobre una tarea y pueden contener información crítica,
21
+ * requerir decisiones o implicar múltiples tareas. Interrumpen el flujo de trabajo del
22
+ * usuario y deben usarse con moderación.
22
23
  *
23
- * **M3 spec reference:** `m3-docs/components/dialogs/specs.md`
24
+ * **Referencia de la especificación M3:** `m3-docs/components/dialogs/specs.md`
24
25
  *
25
- * **Implementation notenative `<dialog>` element:**
26
- * This component wraps the native `<dialog>` HTML element. Opening and closing
27
- * are controlled via the `open` attribute (and its JS property). The component
28
- * syncs `open` changes to the native `<dialog>` in `updated()`:
29
- * - `modal=true` → calls `dialog.showModal()` (blocks focus, adds backdrop).
30
- * - `modal=false` → calls `dialog.show()` (non-blocking, no backdrop).
31
- * - `open=false` → calls `dialog.close()`.
26
+ * **Nota de implementación elemento nativo `<dialog>`:**
27
+ * Este componente envuelve el elemento HTML nativo `<dialog>`. La apertura y cierre
28
+ * se controlan mediante el atributo `open` (y su propiedad JS). El componente
29
+ * sincroniza los cambios de `open` al `<dialog>` nativo en `updated()`:
30
+ * - `modal=true` → llama a `dialog.showModal()` (bloquea el foco, añade fondo oscuro).
31
+ * - `modal=false` → llama a `dialog.show()` (no bloquea, sin fondo oscuro).
32
+ * - `open=false` → llama a `dialog.close()`.
32
33
  *
33
- * **Placement (`side` attribute):**
34
- * - `center` (default) — Centered in the viewport. Standard M3 dialog.
35
- * - `top`, `right`, `bottom`, `left` — Edge-anchored panels (side sheet pattern).
36
- * - `max` — Full-screen dialog for complex flows.
34
+ * **Colocación (atributo `side`):**
35
+ * - `center` (por defecto) — Centrado en la ventana gráfica. Diálogo M3 estándar.
36
+ * - `top`, `right`, `bottom`, `left` — Paneles anclados a los bordes (patrón side sheet).
37
+ * - `max` — Diálogo a pantalla completa para flujos complejos.
37
38
  *
38
39
  * @example
39
40
  * ```html
40
- * <!-- Basic modal dialog -->
41
- * <moni-dialog open modal title="Delete item?" size="small">
42
- * <p>This action cannot be undone.</p>
41
+ * <!-- Diálogo modal básico -->
42
+ * <moni-dialog open modal title="Eliminar elemento?" size="small">
43
+ * <p>Esta acción no se puede deshacer.</p>
43
44
  * <div slot="footer">
44
- * <moni-button variant="text">Cancel</moni-button>
45
- * <moni-button>Delete</moni-button>
45
+ * <moni-button variant="text">Cancelar</moni-button>
46
+ * <moni-button>Eliminar</moni-button>
46
47
  * </div>
47
48
  * </moni-dialog>
48
49
  * ```
49
50
  *
50
- * @slot default - The dialog body content.
51
- * @slot header - Custom header content (overrides `title` attribute).
52
- * @slot footer - Action buttons row at the bottom of the dialog.
51
+ * @slot default - El contenido del cuerpo del diálogo.
52
+ * @slot header - Contenido personalizado del encabezado (sobrescribe el atributo `title`).
53
+ * @slot footer - Fila de botones de acción en la parte inferior del diálogo.
53
54
  *
54
- * @csspart dialog - The native `<dialog>` element.
55
- * @csspart header - The header container.
56
- * @csspart body - The body content wrapper.
57
- * @csspart footer - The footer actions wrapper.
55
+ * @csspart dialog - El elemento `<dialog>` nativo.
56
+ * @csspart header - El contenedor del encabezado.
57
+ * @csspart body - El envoltorio del contenido del cuerpo.
58
+ * @csspart footer - El envoltorio de acciones del pie de página.
58
59
  */
59
60
  let MoniDialog = class MoniDialog extends MoniElement {
60
61
  constructor() {
61
62
  super(...arguments);
62
63
  /**
63
- * Controls the open/closed state of the dialog.
64
+ * Controla el estado abierto/cerrado del diálogo.
64
65
  *
65
- * When set to `true`, the component calls `dialog.showModal()` (if `modal`)
66
- * or `dialog.show()`. When set to `false`, calls `dialog.close()`.
67
- * Reflected as an HTML attribute for CSS and external state readers.
66
+ * Cuando se establece en `true`, el componente llama a `dialog.showModal()` (si `modal`)
67
+ * o `dialog.show()`. Cuando se establece en `false`, llama a `dialog.close()`.
68
+ * Reflejado como un atributo HTML para CSS y lectores de estado externos.
68
69
  *
69
70
  * @default false
70
71
  */
71
72
  this.open = false;
72
73
  /**
73
- * When `true`, opens the dialog as a modal using `<dialog>.showModal()`.
74
+ * Cuando es `true`, abre el diálogo como un modal usando `<dialog>.showModal()`.
74
75
  *
75
- * Modal dialogs:
76
- * - Block keyboard focus from leaving the dialog.
77
- * - Render a `::backdrop` scrim over the rest of the page.
78
- * - Can be closed by pressing `Escape` (native browser behavior).
76
+ * Diálogos modales:
77
+ * - Bloquean que el foco del teclado salga del diálogo.
78
+ * - Renderizan una capa `::backdrop` sobre el resto de la página.
79
+ * - Se pueden cerrar presionando `Escape` (comportamiento nativo del navegador).
79
80
  *
80
- * When `false`, uses `<dialog>.show()` which is non-blocking (no focus trap
81
- * and no backdrop).
81
+ * Cuando es `false`, usa `<dialog>.show()` que no es bloqueante (sin trampa de foco
82
+ * y sin capa de fondo).
82
83
  *
83
84
  * @default false
84
85
  */
85
86
  this.modal = false;
86
87
  /**
87
- * Placement of the dialog within the viewport.
88
+ * Colocación del diálogo dentro de la ventana gráfica.
88
89
  *
89
- * - `'center'` (default) — Centered. Standard M3 dialog placement.
90
- * - `'top'` — Anchored to the top edge (drawer from top).
91
- * - `'right'` — Anchored to the right edge (side sheet pattern).
92
- * - `'bottom'` — Anchored to the bottom edge (bottom sheet alternative).
93
- * - `'left'` — Anchored to the left edge (navigation drawer pattern).
94
- * - `'max'` — Full-screen (covers the entire viewport).
90
+ * - `'center'` (por defecto) — Centrado. Colocación de diálogo M3 estándar.
91
+ * - `'top'` — Anclado al borde superior (cajón desde arriba).
92
+ * - `'right'` — Anclado al borde derecho (patrón de hoja lateral).
93
+ * - `'bottom'` — Anclado al borde inferior (alternativa de hoja inferior).
94
+ * - `'left'` — Anclado al borde izquierdo (patrón de cajón de navegación).
95
+ * - `'max'` — Pantalla completa (cubre toda la ventana gráfica).
95
96
  *
96
97
  * @default 'center'
97
98
  */
98
99
  this.side = 'center';
99
100
  /**
100
- * Size of the dialog container.
101
+ * Tamaño del contenedor del diálogo.
101
102
  *
102
- * - `'small'` — Narrow dialog; ideal for simple confirmations.
103
- * - `'medium'` — Standard dialog width (default).
104
- * - `'large'` — Wide dialog; for forms or complex content.
103
+ * - `'small'` — Diálogo estrecho; ideal para confirmaciones simples.
104
+ * - `'medium'` — Ancho de diálogo estándar (por defecto).
105
+ * - `'large'` — Diálogo ancho; para formularios o contenido complejo.
105
106
  *
106
107
  * @default 'medium'
107
108
  */
108
109
  this.size = 'medium';
109
110
  /**
110
- * Text displayed in the dialog header area.
111
+ * Texto mostrado en el área del encabezado del diálogo.
111
112
  *
112
- * When non-empty, renders as a styled heading inside the header container.
113
- * The `header` slot takes precedence over this attribute when both are present.
113
+ * Cuando no está vacío, se renderiza como un encabezado estilizado dentro del contenedor del encabezado.
114
+ * El slot `header` tiene prioridad sobre este atributo cuando ambos están presentes.
114
115
  *
115
116
  * @default ''
116
117
  */
117
118
  this.title = '';
118
119
  }
120
+ willUpdate(changed) {
121
+ if (changed.has('open') && this.open !== changed.get('open')) {
122
+ const isOpening = this.open;
123
+ const eventName = isOpening ? 'moni-request-open' : 'moni-request-close';
124
+ const allowed = emitMoniEvent(this, eventName, { cancelable: true });
125
+ if (!allowed) {
126
+ this.open = !isOpening;
127
+ }
128
+ }
129
+ }
119
130
  /**
120
- * Syncs the `open` and `modal` state to the native `<dialog>` element.
131
+ * Hook de ciclo de vida de Lit. Sincroniza el estado declarativo (`open`, `modal`)
132
+ * con la API imperativa del elemento `<dialog>` nativo de HTML5.
133
+ *
134
+ * - `showModal()`: Bloquea el resto del DOM (Inert), atrapa el foco del teclado (Focus Trap)
135
+ * y renderiza el seudoelemento `::backdrop`.
136
+ * - `show()`: Permite interacción con el fondo (Non-modal).
121
137
  *
122
- * Called by Lit after every render cycle where tracked properties change.
123
- * Avoids calling `showModal()` or `show()` if the dialog is already open
124
- * (prevents the `InvalidStateError` DOMException).
138
+ * IMPORTANTE: Previene la excepción `InvalidStateError` validando si el
139
+ * diálogo ya está abierto antes de llamar a `show()` o `showModal()`.
125
140
  *
126
- * @param changed - Map of changed property names to their previous values.
141
+ * @param changed - Mapa de propiedades reactivas modificadas.
127
142
  */
128
143
  updated(changed) {
129
144
  if (changed.has('open') && this._dialog) {
130
145
  if (this.open) {
146
+ emitMoniEvent(this, 'moni-open');
131
147
  if (this.modal) {
132
148
  if (!this._dialog.open) {
133
149
  this._dialog.showModal();
@@ -140,12 +156,23 @@ let MoniDialog = class MoniDialog extends MoniElement {
140
156
  }
141
157
  }
142
158
  else {
159
+ emitMoniEvent(this, 'moni-close');
143
160
  if (this._dialog.open) {
144
161
  this._dialog.close();
145
162
  }
146
163
  }
147
164
  }
148
165
  }
166
+ _onTransitionEnd(e) {
167
+ if (e.target === this._dialog && e.propertyName === 'transform') {
168
+ if (this.open) {
169
+ emitMoniEvent(this, 'moni-opened');
170
+ }
171
+ else {
172
+ emitMoniEvent(this, 'moni-closed');
173
+ }
174
+ }
175
+ }
149
176
  static { this.styles = [
150
177
  sharedStyles,
151
178
  css `
@@ -307,6 +334,25 @@ let MoniDialog = class MoniDialog extends MoniElement {
307
334
  }
308
335
  `
309
336
  ]; }
337
+ /**
338
+ * Renderiza el elemento `<dialog>` nativo con la estructura semántica de slots del diálogo.
339
+ *
340
+ * **¿Por qué `<dialog>`?**
341
+ * El elemento nativo `<dialog>` proporciona captura de foco, renderizado de fondo (backdrop)
342
+ * y semántica modal accesible sin JavaScript. El enlace `?open` de Lit
343
+ * alterna el atributo de forma imperativa, mientras que `updated()` llama a `.show()` /
344
+ * `.showModal()` / `.close()` para conducir la pila de abrir/cerrar nativa del navegador.
345
+ *
346
+ * **Estructura de slots:**
347
+ * - `[slot="header"]` — se repliega al valor del atributo `title`.
348
+ * - Slot por defecto — la región de contenido principal del diálogo.
349
+ * - `[slot="footer"]` — botones de acción (típicamente elementos `<moni-button>`).
350
+ *
351
+ * **Composición de `classes`:**
352
+ * `side`, `size`, y `modal` (si `modal=true`) se unen como clases CSS.
353
+ * `side` posiciona el diálogo en `start`, `end`, `top`, o `bottom`; usado
354
+ * para diálogos de panel lateral. `size` controla max-width/height.
355
+ */
310
356
  render() {
311
357
  const classes = [this.side, this.size, this.modal ? 'modal' : '']
312
358
  .filter(Boolean)
@@ -314,6 +360,7 @@ let MoniDialog = class MoniDialog extends MoniElement {
314
360
  return html `<dialog
315
361
  part="dialog"
316
362
  class=${classes}
363
+ @transitionend=${this._onTransitionEnd}
317
364
  >
318
365
  <header part="header">
319
366
  <slot name="header">${this.title}</slot>
@@ -6,57 +6,69 @@
6
6
  */
7
7
  import { MoniElement } from './_base/index.js';
8
8
  /**
9
- * Material Design 3 Divider component.
9
+ * Componente Material Design 3 Divider (Separador).
10
10
  *
11
- * A thin horizontal (or vertical) rule used to visually separate content
12
- * sections within lists, layouts, and cards.
11
+ * Una regla delgada horizontal (o vertical) utilizada para separar visualmente secciones
12
+ * de contenido dentro de listas, diseños y tarjetas.
13
13
  *
14
- * **M3 spec reference:** `m3-docs/components/divider/specs.md`
14
+ * **Referencia de la especificación M3:** `m3-docs/components/divider/specs.md`
15
15
  *
16
- * **M3 measurements:**
17
- * - Thickness: 1dp (`0.0625rem`).
18
- * - Color: `outline-variant` — subtle on all surface backgrounds.
19
- * - Inset variants align the line with list content:
20
- * - `leading` — 16dp margin from the leading edge (aligns with icon text).
21
- * - `middle` — 16dp margin on both edges.
22
- * - `none` — full-bleed (no margin).
16
+ * **Medidas M3:**
17
+ * - Grosor: 1dp (`0.0625rem`).
18
+ * - Color: `outline-variant` — sutil en todos los fondos de superficie.
19
+ * - Las variantes insertadas (inset) alinean la línea con el contenido de la lista:
20
+ * - `leading` — margen de 16dp desde el borde inicial (se alinea con el texto del icono).
21
+ * - `middle` — margen de 16dp en ambos bordes.
22
+ * - `none` — sangría completa (sin margen).
23
23
  *
24
- * **Vertical usage:**
25
- * While not yet exposed as an attribute, the `[vertical]` CSS attribute selector
26
- * is supported. Set `vertical` as an HTML attribute to render a 1dp-wide
27
- * vertical divider that stretches to match its flex container's cross-axis.
24
+ * **Uso vertical:**
25
+ * Aunque todavía no se expone como un atributo, el selector de atributos CSS `[vertical]`
26
+ * está soportado. Establezca `vertical` como un atributo HTML para renderizar un separador
27
+ * vertical de 1dp de ancho que se estira para coincidir con el eje transversal de su contenedor flex.
28
28
  *
29
29
  * @example
30
30
  * ```html
31
- * <!-- Full-bleed divider between sections -->
31
+ * <!-- Separador de sangría completa entre secciones -->
32
32
  * <moni-divider inset="none"></moni-divider>
33
33
  *
34
- * <!-- Leading-inset divider in a list (aligns with list item text) -->
34
+ * <!-- Separador de inserción inicial en una lista (se alinea con el texto del elemento de lista) -->
35
35
  * <moni-divider></moni-divider>
36
36
  *
37
- * <!-- Vertical divider inside a flex container -->
37
+ * <!-- Separador vertical dentro de un contenedor flex -->
38
38
  * <div style="display:flex; height: 3rem; align-items:center; gap: 1rem;">
39
- * <span>Section A</span>
39
+ * <span>Sección A</span>
40
40
  * <moni-divider vertical></moni-divider>
41
- * <span>Section B</span>
41
+ * <span>Sección B</span>
42
42
  * </div>
43
43
  * ```
44
44
  */
45
45
  export declare class MoniDivider extends MoniElement {
46
46
  /**
47
- * Controls the horizontal margin on the divider line.
47
+ * Controla el margen horizontal en la línea del separador.
48
48
  *
49
- * - `'leading'` (default) — 16dp margin from the leading (start) edge only.
50
- * Use in lists to align the divider with the primary text of list items.
51
- * - `'middle'` — 16dp margin on both the leading and trailing edges.
52
- * Use to separate sections where full-bleed would be too visually heavy.
53
- * - `'none'` — No margin; the line spans the full parent width.
54
- * Use as a section separator or between cards.
49
+ * - `'leading'` (por defecto) — Margen de 16dp solo desde el borde inicial (inicio).
50
+ * Usar en listas para alinear el separador con el texto principal de los elementos de la lista.
51
+ * - `'middle'` — Margen de 16dp tanto en el borde inicial como en el final.
52
+ * Usar para separar secciones donde una sangría completa sería visualmente demasiado pesada.
53
+ * - `'none'` — Sin margen; la línea abarca todo el ancho del padre.
54
+ * Usar como separador de secciones o entre tarjetas.
55
55
  *
56
56
  * @default 'leading'
57
57
  */
58
58
  inset: 'leading' | 'middle' | 'none';
59
59
  static styles: import("lit").CSSResult[];
60
+ /**
61
+ * Renderiza un paso a través de slot transparente.
62
+ *
63
+ * `moni-divider` es un componente impulsado puramente por CSS — la línea visual es
64
+ * renderizada por el elemento `:host` en sí (a través de `background-color` y
65
+ * `block-size: 0.0625rem`). No se necesitan elementos internos.
66
+ *
67
+ * El `<slot>` vacío se incluye para que los consumidores puedan insertar etiquetas de texto
68
+ * o iconos entre secciones (ej. `<moni-divider>O</moni-divider>`).
69
+ * El contenido renderizado en el slot no tiene estilo visual de este componente; el consumidor
70
+ * debe aplicar estilo a los elementos del slot directamente.
71
+ */
60
72
  render(): import("lit").TemplateResult<1>;
61
73
  }
62
74
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"moni-divider.d.ts","sourceRoot":"","sources":["../../src/components/moni-divider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBACa,WAAY,SAAQ,WAAW;IAC3C;;;;;;;;;;;OAWG;IAEH,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAa;IAEjD,OAAgB,MAAM,4BAkCpB;IAEO,MAAM;CAGf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,cAAc,EAAE,WAAW,CAAC;KAC5B;CACD;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"moni-divider.d.ts","sourceRoot":"","sources":["../../src/components/moni-divider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBACa,WAAY,SAAQ,WAAW;IAC3C;;;;;;;;;;;OAWG;IAEH,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAa;IAEjD,OAAgB,MAAM,4BAkCpB;IAEF;;;;;;;;;;;OAWG;IACM,MAAM;CAGf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,cAAc,EAAE,WAAW,CAAC;KAC5B;CACD;AAED,eAAe,WAAW,CAAC"}
@@ -14,39 +14,39 @@ import { html, css } from 'lit';
14
14
  import { customElement, property } from 'lit/decorators.js';
15
15
  import { MoniElement, sharedStyles } from './_base/index.js';
16
16
  /**
17
- * Material Design 3 Divider component.
17
+ * Componente Material Design 3 Divider (Separador).
18
18
  *
19
- * A thin horizontal (or vertical) rule used to visually separate content
20
- * sections within lists, layouts, and cards.
19
+ * Una regla delgada horizontal (o vertical) utilizada para separar visualmente secciones
20
+ * de contenido dentro de listas, diseños y tarjetas.
21
21
  *
22
- * **M3 spec reference:** `m3-docs/components/divider/specs.md`
22
+ * **Referencia de la especificación M3:** `m3-docs/components/divider/specs.md`
23
23
  *
24
- * **M3 measurements:**
25
- * - Thickness: 1dp (`0.0625rem`).
26
- * - Color: `outline-variant` — subtle on all surface backgrounds.
27
- * - Inset variants align the line with list content:
28
- * - `leading` — 16dp margin from the leading edge (aligns with icon text).
29
- * - `middle` — 16dp margin on both edges.
30
- * - `none` — full-bleed (no margin).
24
+ * **Medidas M3:**
25
+ * - Grosor: 1dp (`0.0625rem`).
26
+ * - Color: `outline-variant` — sutil en todos los fondos de superficie.
27
+ * - Las variantes insertadas (inset) alinean la línea con el contenido de la lista:
28
+ * - `leading` — margen de 16dp desde el borde inicial (se alinea con el texto del icono).
29
+ * - `middle` — margen de 16dp en ambos bordes.
30
+ * - `none` — sangría completa (sin margen).
31
31
  *
32
- * **Vertical usage:**
33
- * While not yet exposed as an attribute, the `[vertical]` CSS attribute selector
34
- * is supported. Set `vertical` as an HTML attribute to render a 1dp-wide
35
- * vertical divider that stretches to match its flex container's cross-axis.
32
+ * **Uso vertical:**
33
+ * Aunque todavía no se expone como un atributo, el selector de atributos CSS `[vertical]`
34
+ * está soportado. Establezca `vertical` como un atributo HTML para renderizar un separador
35
+ * vertical de 1dp de ancho que se estira para coincidir con el eje transversal de su contenedor flex.
36
36
  *
37
37
  * @example
38
38
  * ```html
39
- * <!-- Full-bleed divider between sections -->
39
+ * <!-- Separador de sangría completa entre secciones -->
40
40
  * <moni-divider inset="none"></moni-divider>
41
41
  *
42
- * <!-- Leading-inset divider in a list (aligns with list item text) -->
42
+ * <!-- Separador de inserción inicial en una lista (se alinea con el texto del elemento de lista) -->
43
43
  * <moni-divider></moni-divider>
44
44
  *
45
- * <!-- Vertical divider inside a flex container -->
45
+ * <!-- Separador vertical dentro de un contenedor flex -->
46
46
  * <div style="display:flex; height: 3rem; align-items:center; gap: 1rem;">
47
- * <span>Section A</span>
47
+ * <span>Sección A</span>
48
48
  * <moni-divider vertical></moni-divider>
49
- * <span>Section B</span>
49
+ * <span>Sección B</span>
50
50
  * </div>
51
51
  * ```
52
52
  */
@@ -54,14 +54,14 @@ let MoniDivider = class MoniDivider extends MoniElement {
54
54
  constructor() {
55
55
  super(...arguments);
56
56
  /**
57
- * Controls the horizontal margin on the divider line.
57
+ * Controla el margen horizontal en la línea del separador.
58
58
  *
59
- * - `'leading'` (default) — 16dp margin from the leading (start) edge only.
60
- * Use in lists to align the divider with the primary text of list items.
61
- * - `'middle'` — 16dp margin on both the leading and trailing edges.
62
- * Use to separate sections where full-bleed would be too visually heavy.
63
- * - `'none'` — No margin; the line spans the full parent width.
64
- * Use as a section separator or between cards.
59
+ * - `'leading'` (por defecto) — Margen de 16dp solo desde el borde inicial (inicio).
60
+ * Usar en listas para alinear el separador con el texto principal de los elementos de la lista.
61
+ * - `'middle'` — Margen de 16dp tanto en el borde inicial como en el final.
62
+ * Usar para separar secciones donde una sangría completa sería visualmente demasiado pesada.
63
+ * - `'none'` — Sin margen; la línea abarca todo el ancho del padre.
64
+ * Usar como separador de secciones o entre tarjetas.
65
65
  *
66
66
  * @default 'leading'
67
67
  */
@@ -73,7 +73,7 @@ let MoniDivider = class MoniDivider extends MoniElement {
73
73
  :host {
74
74
  display: block;
75
75
  font-family: var(--font);
76
- /* M3 spec: 1dp thick, on-surface-variant for subtle separation. */
76
+ /* Especificación M3: grosor de 1dp, on-surface-variant para una separación sutil. */
77
77
  block-size: 0.0625rem;
78
78
  min-inline-size: 0;
79
79
  background-color: var(--outline-variant);
@@ -81,7 +81,7 @@ let MoniDivider = class MoniDivider extends MoniElement {
81
81
  margin: 0;
82
82
  }
83
83
 
84
- /* Inset variants. M3 spec: 16dp from the leading edge. */
84
+ /* Variantes de inserción. Especificación M3: 16dp desde el borde inicial. */
85
85
  :host([inset='leading']) {
86
86
  margin-inline-start: 1rem;
87
87
  margin-inline-end: 0;
@@ -93,7 +93,7 @@ let MoniDivider = class MoniDivider extends MoniElement {
93
93
  margin-inline: 0;
94
94
  }
95
95
 
96
- /* Vertical divider (M3 spec also defines vertical usage). */
96
+ /* Separador vertical (la especificación M3 también define el uso vertical). */
97
97
  :host([vertical]) {
98
98
  inline-size: 0.0625rem;
99
99
  block-size: auto;
@@ -102,6 +102,18 @@ let MoniDivider = class MoniDivider extends MoniElement {
102
102
  }
103
103
  `
104
104
  ]; }
105
+ /**
106
+ * Renderiza un paso a través de slot transparente.
107
+ *
108
+ * `moni-divider` es un componente impulsado puramente por CSS — la línea visual es
109
+ * renderizada por el elemento `:host` en sí (a través de `background-color` y
110
+ * `block-size: 0.0625rem`). No se necesitan elementos internos.
111
+ *
112
+ * El `<slot>` vacío se incluye para que los consumidores puedan insertar etiquetas de texto
113
+ * o iconos entre secciones (ej. `<moni-divider>O</moni-divider>`).
114
+ * El contenido renderizado en el slot no tiene estilo visual de este componente; el consumidor
115
+ * debe aplicar estilo a los elementos del slot directamente.
116
+ */
105
117
  render() {
106
118
  return html `<slot></slot>`;
107
119
  }
@@ -6,50 +6,60 @@
6
6
  */
7
7
  import { MoniElement } from './_base/index.js';
8
8
  /**
9
- * Material Design 3 Expansion panel component.
9
+ * Componente Material Design 3 Expansion panel (Panel de expansión).
10
10
  *
11
- * A lightweight wrapper around the native HTML `<details>` and `<summary>`
12
- * elements, styled according to M3 surface and elevation guidelines.
13
- * Expansion panels contain creation flows and allow lightweight editing of an element.
11
+ * Un envoltorio ligero alrededor de los elementos HTML nativos `<details>` y `<summary>`,
12
+ * estilizado de acuerdo con las pautas de superficie y elevación de M3.
13
+ * Los paneles de expansión contienen flujos de creación y permiten la edición ligera de un elemento.
14
14
  *
15
- * **Visual architecture:**
16
- * The component renders a `<details>` element with a `<summary>` that acts
17
- * as the expandable header. The default slot content is placed inside the
18
- * `<details>` tag (but outside the `<summary>`), naturally hiding and showing
19
- * based on the native behavior. An M3 `expand_more` icon is added via a CSS
20
- * `::after` pseudo-element and rotates when the panel is open.
15
+ * **Arquitectura visual:**
16
+ * El componente renderiza un elemento `<details>` con un `<summary>` que actúa
17
+ * como el encabezado expandible. El contenido del slot por defecto se coloca dentro de la
18
+ * etiqueta `<details>` (pero fuera del `<summary>`), ocultándose y mostrándose naturalmente
19
+ * según el comportamiento nativo. Se añade un icono `expand_more` de M3 mediante un
20
+ * pseudo-elemento CSS `::after` que rota cuando el panel está abierto.
21
21
  *
22
- * **Usage:**
23
- * Set the `title` attribute for a simple text header, or use the `summary`
24
- * slot to project custom rich content (like icons or secondary text) into the
25
- * header area.
22
+ * **Uso:**
23
+ * Establezca el atributo `title` para un encabezado de texto simple, o use el slot `summary`
24
+ * para proyectar contenido enriquecido personalizado (como iconos o texto secundario) en el
25
+ * área del encabezado.
26
26
  *
27
27
  * @example
28
28
  * ```html
29
- * <!-- Simple text title -->
30
- * <moni-expansion title="Advanced Settings">
31
- * <p>Enable developer mode features here.</p>
29
+ * <!-- Título de texto simple -->
30
+ * <moni-expansion title="Configuración Avanzada">
31
+ * <p>Habilite las características del modo de desarrollador aquí.</p>
32
32
  * </moni-expansion>
33
33
  *
34
- * <!-- Rich summary content via slot -->
34
+ * <!-- Contenido de resumen enriquecido a través de slot -->
35
35
  * <moni-expansion open>
36
36
  * <div slot="summary" style="display: flex; gap: 8px;">
37
37
  * <moni-icon>person</moni-icon>
38
- * <span>Personal Information</span>
38
+ * <span>Información Personal</span>
39
39
  * </div>
40
40
  * <form>
41
- * <moni-text-field label="Name"></moni-text-field>
41
+ * <moni-text-field label="Nombre"></moni-text-field>
42
42
  * </form>
43
43
  * </moni-expansion>
44
44
  * ```
45
45
  *
46
- * @slot default - The content of the expansion panel body.
47
- * @slot summary - Custom header content (overrides the `title` attribute).
46
+ * @slot default - El contenido del cuerpo del panel de expansión.
47
+ * @slot summary - Contenido personalizado del encabezado (sobrescribe el atributo `title`).
48
48
  */
49
49
  export declare class MoniExpansion extends MoniElement {
50
50
  open: boolean;
51
51
  title: string;
52
52
  static styles: import("lit").CSSResult[];
53
+ /**
54
+ * Renderiza el panel de expansión utilizando el elemento nativo `<details>`.
55
+ *
56
+ * El atributo `open` en
57
+ * `:host` impulsa la rotación de la flecha indicadora CSS (`::after` en `summary`).
58
+ *
59
+ * **Estructura de slots:**
60
+ * - `[slot="summary"]` — la fila de encabezado siempre visible (título, iconos).
61
+ * - Slot por defecto — la región de contenido colapsable.
62
+ */
53
63
  render(): import("lit").TemplateResult<1>;
54
64
  }
55
65
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"moni-expansion.d.ts","sourceRoot":"","sources":["../../src/components/moni-expansion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBACa,aAAc,SAAQ,WAAW;IACD,IAAI,UAAS;IAC5B,KAAK,SAAM;IAExC,OAAgB,MAAM,4BA6CpB;IAEO,MAAM;CAUf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,gBAAgB,EAAE,aAAa,CAAC;KAChC;CACD;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"moni-expansion.d.ts","sourceRoot":"","sources":["../../src/components/moni-expansion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBACa,aAAc,SAAQ,WAAW;IACD,IAAI,UAAS;IAC5B,KAAK,SAAM;IAExC,OAAgB,MAAM,4BA6CpB;IAEF;;;;;;;;;OASG;IACM,MAAM;CAUf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,gBAAgB,EAAE,aAAa,CAAC;KAChC;CACD;AAED,eAAe,aAAa,CAAC"}