@moni-labs/moni-ui 0.3.1 → 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 +5181 -1043
  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 +471 -53
  31. package/dist/components/moni-carousel.d.ts.map +1 -1
  32. package/dist/components/moni-carousel.js +862 -264
  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 +953 -290
  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
@@ -17,71 +17,73 @@ import { ifDefined } from 'lit/directives/if-defined.js';
17
17
  import { live } from 'lit/directives/live.js';
18
18
  import { MoniElement, sharedStyles } from './_base/index.js';
19
19
  /**
20
- * Material Design 3 Radio Button component.
20
+ * Componente Material Design 3 Radio Button (Botón de Opción).
21
21
  *
22
- * Radio buttons allow users to select exactly one item from a set of mutually
23
- * exclusive options. They share the same visual architecture as
24
- * `<moni-checkbox>` but use `type="radio"` and implement group deselection.
22
+ * Los botones de opción permiten a los usuarios seleccionar exactamente un elemento de un conjunto de opciones
23
+ * mutuamente excluyentes. Comparten la misma arquitectura visual que
24
+ * `<moni-checkbox>` pero usan `type="radio"` e implementan la deselección de grupo.
25
25
  *
26
- * **M3 spec reference:** `m3-docs/components/radio/specs.md`
26
+ * **Referencia a la especificación M3:** `m3-docs/components/radio/specs.md`
27
27
  *
28
- * **Visual architecture (BeerCSS pattern):**
29
- * Identical to the checkbox pattern: the native `<input type="radio">` occupies
30
- * real layout space at `--_size` × `--_size` but is hidden via `opacity: 0`.
31
- * A sibling `<span>` renders:
32
- * - `::before` — the radio icon (`radio_button_unchecked` / `radio_button_checked`).
33
- * - `::after` — the hover/focus ripple ring.
28
+ * **Arquitectura visual (Patrón BeerCSS):**
29
+ * Idéntico al patrón de checkbox: el `<input type="radio">` nativo ocupa
30
+ * espacio de diseño real a `--_size` × `--_size` pero se oculta mediante `opacity: 0`.
31
+ * Un `<span>` hermano renderiza:
32
+ * - `::before` — el icono de radio (`radio_button_unchecked` / `radio_button_checked`).
33
+ * - `::after` — el anillo de onda (ripple) de hover/foco.
34
34
  *
35
- * **Group deselection:**
36
- * When a radio is checked, `_onChange` queries the component's `getRootNode()`
37
- * for all `moni-radio` elements sharing the same `name` attribute and sets
38
- * their `checked` property to `false`. This mirrors native browser behavior
39
- * for radio groups across shadow DOM boundaries where `name` grouping does
40
- * not work natively.
35
+ * **Deselección de grupo:**
36
+ * Cuando se marca un radio, `_onChange` consulta el `getRootNode()` del componente
37
+ * para encontrar todos los elementos `moni-radio` que comparten el mismo atributo `name` y establece
38
+ * su propiedad `checked` en `false`. Esto refleja el comportamiento nativo del navegador
39
+ * para grupos de radio a través de los límites del shadow DOM, donde la agrupación por `name` no
40
+ * funciona de forma nativa.
41
41
  *
42
- * @fires change - Bubbles and is composed. Fired when this radio is selected.
43
- * Read `element.checked` for the new state.
42
+ * @fires change - Burbujea y está compuesto. Se dispara cuando este radio es seleccionado.
43
+ * Lee `element.checked` para obtener el nuevo estado.
44
44
  *
45
45
  * @example
46
46
  * ```html
47
- * <moni-radio name="color" value="red" label="Red"></moni-radio>
48
- * <moni-radio name="color" value="green" label="Green"></moni-radio>
49
- * <moni-radio name="color" value="blue" label="Blue" checked></moni-radio>
47
+ * <moni-radio name="color" value="red" label="Rojo"></moni-radio>
48
+ * <moni-radio name="color" value="green" label="Verde"></moni-radio>
49
+ * <moni-radio name="color" value="blue" label="Azul" checked></moni-radio>
50
50
  * ```
51
51
  *
52
- * @csspart radio - The outer `<label>` element.
52
+ * @csspart radio - El elemento `<label>` exterior.
53
53
  */
54
54
  let MoniRadio = class MoniRadio extends MoniElement {
55
+ static { MoniRadio_1 = this; }
56
+ static { this.formAssociated = true; }
55
57
  constructor() {
56
- super(...arguments);
58
+ super();
57
59
  /**
58
- * Text label displayed to the right of the radio icon.
60
+ * Etiqueta de texto mostrada a la derecha del icono de radio.
59
61
  *
60
- * When non-empty, renders as a text node. When empty, the default slot
61
- * is rendered, allowing slotted HTML content as the label.
62
+ * Cuando no está vacía, se renderiza como un nodo de texto. Cuando está vacía, se renderiza la ranura (slot)
63
+ * por defecto, permitiendo contenido HTML en la ranura como etiqueta.
62
64
  *
63
65
  * @default ''
64
66
  */
65
67
  this.label = '';
66
68
  /**
67
- * Whether this radio button is currently selected.
69
+ * Indica si este botón de opción está actualmente seleccionado.
68
70
  *
69
- * Reflected as an attribute so CSS selectors can target it. Synced to
70
- * the native input via `updated()`.
71
+ * Se refleja como un atributo para que los selectores CSS puedan apuntarlo. Se sincroniza con
72
+ * el input nativo a través de `updated()`.
71
73
  *
72
74
  * @default false
73
75
  */
74
76
  this.checked = false;
75
77
  /**
76
- * When `true`, the radio is non-interactive and renders at 50% opacity.
78
+ * Cuando es `true`, el radio no es interactivo y se renderiza a un 50% de opacidad.
77
79
  *
78
80
  * @default false
79
81
  */
80
82
  this.disabled = false;
81
83
  /**
82
- * Visual size of the radio icon and its invisible hit area.
84
+ * Tamaño visual del icono de radio y su área de interacción (hit area) invisible.
83
85
  *
84
- * | Value | `--_size` |
86
+ * | Valor | `--_size` |
85
87
  * |------------|-----------|
86
88
  * | `'small'` | 1rem |
87
89
  * | `'medium'` | 1.5rem |
@@ -92,34 +94,36 @@ let MoniRadio = class MoniRadio extends MoniElement {
92
94
  */
93
95
  this.size = 'medium';
94
96
  /**
95
- * Radio group name. Radios with the same `name` in the same root node
96
- * are treated as a mutual-exclusion group by `_onChange`.
97
+ * Nombre del grupo de radio. Los radios con el mismo `name` en el mismo nodo raíz
98
+ * se tratan como un grupo de exclusión mutua por `_onChange`.
97
99
  *
98
- * Note: Native `<input type="radio">` groups only work within the same
99
- * document root. Since `moni-radio` uses shadow DOM, the deselection
100
- * of siblings is handled imperatively in `_onChange`.
100
+ * Nota: Los grupos nativos de `<input type="radio">` solo funcionan dentro de la misma
101
+ * raíz de documento. Dado que `moni-radio` usa shadow DOM, la deselección
102
+ * de los hermanos se maneja imperativamente en `_onChange`.
101
103
  *
102
104
  * @default ''
103
105
  */
104
106
  this.name = '';
105
107
  /**
106
- * Forwarded to the native `<input value>` attribute.
107
- * The value submitted in a form when this radio is selected.
108
+ * Se retransmite al atributo nativo `<input value>`.
109
+ * El valor enviado en un formulario cuando este radio es seleccionado.
108
110
  *
109
111
  * @default ''
110
112
  */
111
113
  this.value = '';
114
+ this._internals = this.attachInternals();
112
115
  }
113
- static { MoniRadio_1 = this; }
114
116
  /**
115
- * Syncs `checked` and `disabled` to the native input after each render cycle.
117
+ * Sincroniza `checked` y `disabled` con el input nativo después de cada ciclo de renderizado.
116
118
  *
117
- * @param changed - Map of changed property names to their previous values.
119
+ * @param changed - Mapa de los nombres de propiedades modificadas con sus valores anteriores.
118
120
  */
119
121
  updated(changed) {
120
122
  if (this._input) {
121
- if (changed.has('checked'))
123
+ if (changed.has('checked')) {
122
124
  this._input.checked = this.checked;
125
+ this._internals?.setFormValue?.(this.checked ? (this.value || 'on') : null);
126
+ }
123
127
  if (changed.has('disabled'))
124
128
  this._input.disabled = this.disabled;
125
129
  }
@@ -236,17 +240,17 @@ let MoniRadio = class MoniRadio extends MoniElement {
236
240
  `
237
241
  ]; }
238
242
  /**
239
- * Handles the native input `change` event.
243
+ * Maneja el evento nativo `change` del input.
240
244
  *
241
- * On selection, deselects all sibling `moni-radio` elements with the same
242
- * `name` in the same root node (document or shadow root). This is necessary
243
- * because native radio group exclusion only works within the same document
244
- * root and does not cross shadow DOM boundaries.
245
+ * Al seleccionarse, deselecciona todos los elementos `moni-radio` hermanos con el mismo
246
+ * `name` en el mismo nodo raíz (documento o raíz shadow). Esto es necesario
247
+ * porque la exclusión de grupo de radio nativa solo funciona dentro de la misma raíz
248
+ * de documento y no cruza los límites del shadow DOM.
245
249
  *
246
- * After deselection, dispatches a composed `'change'` event so it is
247
- * audible to parent elements in the light DOM.
250
+ * Después de la deselección, despacha un evento `'change'` compuesto para que sea
251
+ * audible para los elementos padres en el DOM ligero (light DOM).
248
252
  *
249
- * @param e - The native `change` event from the hidden `<input>`.
253
+ * @param e - El evento nativo `change` del `<input>` oculto.
250
254
  */
251
255
  _onChange(e) {
252
256
  this.checked = e.target.checked;
@@ -263,6 +267,15 @@ let MoniRadio = class MoniRadio extends MoniElement {
263
267
  }
264
268
  this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));
265
269
  }
270
+ /**
271
+ * Renderiza el radio como un `<input type="radio">` oculto + indicador visual `<span>`.
272
+ *
273
+ * El input oculto se mantiene en el DOM (opacity: 0) para participar en el envío nativo
274
+ * de formularios y exclusión de grupo de radios. Los navegadores aplican automáticamente
275
+ * exclusión mutua entre entradas de radio que comparten el mismo atributo `name`.
276
+ * El círculo visual es dibujado por los pseudo-elementos `::before` / `::after` en
277
+ * el `<span>` y animado mediante transiciones CSS de `scale`.
278
+ */
266
279
  render() {
267
280
  return html `<label part="radio">
268
281
  <input
@@ -6,135 +6,150 @@
6
6
  */
7
7
  import { MoniElement } from './_base/index.js';
8
8
  /**
9
- * Visual-only ripple decoration component.
9
+ * Componente de decoración de onda (ripple) puramente visual.
10
10
  *
11
- * Provides a pointer-origin ripple animation the expanding circle starts
12
- * at the exact pointer-down coordinates rather than the element's center.
13
- * This is the full-fidelity M3 ripple; for a simpler CSS-only center-ripple,
14
- * use the `interactionStyles` `.interactive::after` pseudo-element instead.
11
+ * Proporciona una animación de onda con origen en el puntero: el círculo expansivo comienza
12
+ * en las coordenadas exactas donde se pulsó (pointer-down) en lugar de en el centro del elemento.
13
+ * Esta es la onda M3 de alta fidelidad; para una onda central más simple solo con CSS,
14
+ * usa el pseudo-elemento `.interactive::after` de `interactionStyles` en su lugar.
15
15
  *
16
- * **Usage:**
17
- * Drop `<moni-ripple>` as a **child** of any interactive element. The component
18
- * automatically attaches a `pointerdown` listener to its `parentElement` and
19
- * calculates the ripple origin in percentage coordinates relative to the parent.
16
+ * **Uso:**
17
+ * Coloca `<moni-ripple>` como **hijo** de cualquier elemento interactivo. El componente
18
+ * adjunta automáticamente un listener de `pointerdown` a su `parentElement` y
19
+ * calcula el origen de la onda en coordenadas porcentuales relativas al padre.
20
20
  *
21
- * The parent element must NOT have `position: static` (the ripple applies
22
- * `position: relative` automatically in `connectedCallback`).
21
+ * El elemento padre NO debe tener `position: static` (la onda aplica
22
+ * `position: relative` automáticamente en `connectedCallback`).
23
23
  *
24
- * **Timing model:**
25
- * On `pointerdown`:
26
- * 1. `active = false` is set (cancels any in-progress ripple).
27
- * 2. A `requestAnimationFrame` tick ensures the browser has processed the reset.
28
- * 3. `active = true` triggers the CSS scale animation.
29
- * 4. A `setTimeout` of `duration` ms (based on `speed`) resets `active = false`.
24
+ * **Modelo de tiempo:**
25
+ * En `pointerdown`:
26
+ * 1. Se establece `active = false` (cancela cualquier onda en progreso).
27
+ * 2. Un tick de `requestAnimationFrame` asegura que el navegador haya procesado el reinicio.
28
+ * 3. `active = true` activa la animación de escala CSS.
29
+ * 4. Un `setTimeout` de duración `duration` ms (basado en `speed`) reinicia `active = false`.
30
30
  *
31
- * The duration matches the CSS transition duration so the opacity fade-out
32
- * completes before `active` is cleared.
31
+ * La duración coincide con la duración de la transición CSS para que el desvanecimiento de la opacidad
32
+ * se complete antes de que se limpie `active`.
33
33
  *
34
- * **Cleanup:**
35
- * `disconnectedCallback` removes the `pointerdown` listener and clears any
36
- * pending timeout. Always call `super.disconnectedCallback()` if subclassing.
34
+ * **Limpieza (Cleanup):**
35
+ * `disconnectedCallback` elimina el listener de `pointerdown` y borra cualquier
36
+ * tiempo de espera (timeout) pendiente. Llama siempre a `super.disconnectedCallback()` si usas subclases.
37
37
  *
38
38
  * @example
39
39
  * ```html
40
- * <!-- Ripple on a custom element -->
40
+ * <!-- Onda en un elemento personalizado -->
41
41
  * <div class="my-button" style="position: relative; overflow: hidden;">
42
- * Click me
42
+ * Haz clic
43
43
  * <moni-ripple color="primary"></moni-ripple>
44
44
  * </div>
45
45
  * ```
46
46
  *
47
- * @csspart ripple - The inner `<span>` that performs the scale animation.
47
+ * @csspart ripple - El `<span>` interno que realiza la animación de escala.
48
48
  */
49
49
  export declare class MoniRipple extends MoniElement {
50
50
  /**
51
- * Horizontal origin of the ripple as a percentage of the parent's width.
51
+ * Origen horizontal de la onda como porcentaje del ancho del padre.
52
52
  *
53
- * Set automatically by `_onPointerDown` based on the pointer coordinates.
54
- * Can be set manually to trigger a ripple at a specific location.
53
+ * Se establece automáticamente por `_onPointerDown` basándose en las coordenadas del puntero.
54
+ * Se puede configurar manualmente para activar una onda en una ubicación específica.
55
55
  *
56
56
  * @default 50
57
57
  */
58
58
  x: number;
59
59
  /**
60
- * Vertical origin of the ripple as a percentage of the parent's height.
60
+ * Origen vertical de la onda como porcentaje de la altura del padre.
61
61
  *
62
- * Set automatically by `_onPointerDown` based on the pointer coordinates.
62
+ * Se establece automáticamente por `_onPointerDown` basándose en las coordenadas del puntero.
63
63
  *
64
64
  * @default 50
65
65
  */
66
66
  y: number;
67
67
  /**
68
- * When `true`, the ripple is visible and animating.
68
+ * Cuando es `true`, la onda es visible y se está animando.
69
69
  *
70
- * Toggled automatically by `_onPointerDown`. Can be set manually for
71
- * programmatically-triggered ripple effects.
70
+ * Alternado automáticamente por `_onPointerDown`. Se puede configurar manualmente para
71
+ * efectos de onda disparados programáticamente.
72
72
  *
73
73
  * @default false
74
74
  */
75
75
  active: boolean;
76
76
  /**
77
- * Animation speed of the ripple expand-and-fade sequence.
77
+ * Velocidad de animación de la secuencia de expansión y desvanecimiento de la onda.
78
78
  *
79
- * Maps to the `--_dur` CSS custom property:
79
+ * Se asigna a la propiedad personalizada CSS `--_dur`:
80
80
  * - `'fast'` — 300ms
81
- * - `'normal'` — 600ms (default)
81
+ * - `'normal'` — 600ms (por defecto)
82
82
  * - `'slow'` — 1200ms
83
83
  *
84
84
  * @default 'normal'
85
85
  */
86
86
  speed: 'fast' | 'normal' | 'slow';
87
87
  /**
88
- * Color token for the ripple overlay.
88
+ * Token de color para la superposición de la onda.
89
89
  *
90
- * Sets the `color` CSS property on `:host`, which the `.ripple` span
91
- * inherits via `background-color: currentColor`.
90
+ * Establece la propiedad CSS `color` en `:host`, que el span `.ripple`
91
+ * hereda a través de `background-color: currentColor`.
92
92
  *
93
- * - `'primary'` — `--primary` (default)
93
+ * - `'primary'` — `--primary` (por defecto)
94
94
  * - `'secondary'` — `--secondary`
95
- * - `'surface'` — `--surface-variant` (subtle, for surface containers)
95
+ * - `'surface'` — `--surface-variant` (sutil, para contenedores de superficie)
96
96
  *
97
97
  * @default 'primary'
98
98
  */
99
99
  color: 'primary' | 'secondary' | 'surface';
100
100
  /**
101
- * Reference to the parent element that the ripple is anchored to.
102
- * Populated in `connectedCallback`, cleared in `disconnectedCallback`.
101
+ * Referencia al elemento padre al que está anclada la onda.
102
+ * Poblado en `connectedCallback`, borrado en `disconnectedCallback`.
103
103
  */
104
104
  private _target;
105
105
  /**
106
- * ID of the pending `setTimeout` that clears `active` after the animation.
107
- * Stored so it can be cancelled if a second pointer event fires before the
108
- * first ripple finishes (rapid double-tap prevention).
106
+ * ID del `setTimeout` pendiente que borra `active` después de la animación.
107
+ * Almacenado para que pueda cancelarse si se dispara un segundo evento de puntero antes
108
+ * de que termine la primera onda (prevención de doble toque rápido).
109
109
  */
110
110
  private _timeoutId;
111
111
  /**
112
- * Attaches the ripple to its parent element.
112
+ * Adjunta la onda a su elemento padre.
113
113
  *
114
- * - Stores a reference to `parentElement` for pointer event listening.
115
- * - Ensures the parent has `position: relative` so the ripple's `position: absolute`
116
- * stays within bounds.
117
- * - Registers the `_onPointerDown` event listener.
114
+ * - Almacena una referencia a `parentElement` para la escucha de eventos del puntero.
115
+ * - Asegura que el padre tenga `position: relative` para que el `position: absolute`
116
+ * de la onda se mantenga dentro de los límites.
117
+ * - Registra el listener de eventos `_onPointerDown`.
118
118
  */
119
119
  connectedCallback(): void;
120
120
  /**
121
- * Detaches the ripple from its parent element.
121
+ * Desvincula la onda de su elemento padre.
122
122
  *
123
- * Removes the `pointerdown` listener and clears any pending timeout to
124
- * prevent the `active` flag from being set after the element is removed.
123
+ * Elimina el listener de `pointerdown` y borra cualquier timeout pendiente para
124
+ * evitar que la bandera `active` se establezca después de que se elimine el elemento.
125
125
  */
126
126
  disconnectedCallback(): void;
127
127
  /**
128
- * Handles pointer-down events on the parent element.
128
+ * Maneja los eventos de puntero (pointer-down) en el elemento padre.
129
129
  *
130
- * Computes the ripple origin as a percentage of the parent's bounding rect,
131
- * cancels any in-progress ripple, then triggers a new one after one
132
- * animation frame to guarantee the CSS transition fires from the new position.
130
+ * Calcula el origen de la onda como un porcentaje del rectángulo delimitador (bounding rect) del padre,
131
+ * cancela cualquier onda en curso y luego activa una nueva después de un
132
+ * frame de animación para garantizar que la transición CSS se dispare desde la nueva posición.
133
133
  *
134
- * @param e - The `PointerEvent` from the parent's `pointerdown` listener.
134
+ * @param e - El `PointerEvent` del listener `pointerdown` del padre.
135
135
  */
136
136
  private _onPointerDown;
137
137
  static styles: import("lit").CSSResult[];
138
+ /**
139
+ * Renderiza el elemento `<span>` de la onda con las coordenadas de origen actuales.
140
+ *
141
+ * Este método de renderizado intencionalmente hace muy poco: la onda es fundamentalmente
142
+ * una animación CSS (`scale`, `opacity`) impulsada por la clase `.active` que es
143
+ * alternada por la API de activación de JavaScript (`MoniRipple.activate()`).
144
+ *
145
+ * `--_x` y `--_y` inyectan el origen del toque/clic como valores porcentuales:
146
+ * - `x=0%, y=0%` — la onda se origina desde la esquina superior izquierda.
147
+ * - `x=50%, y=50%` — origen central (por defecto para activación por teclado).
148
+ * - `x=clientX%, y=clientY%` — onda con origen en el puntero para una sensación táctil natural.
149
+ *
150
+ * La clase CSS `.ripple` maneja la animación de expansión `scale(0)` → `scale(1)`
151
+ * y el desvanecimiento `opacity 1` → `opacity 0` a través de transiciones CSS en `.active`.
152
+ */
138
153
  render(): import("lit").TemplateResult<1>;
139
154
  }
140
155
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"moni-ripple.d.ts","sourceRoot":"","sources":["../../src/components/moni-ripple.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBACa,UAAW,SAAQ,WAAW;IAC1C;;;;;;;OAOG;IACwC,CAAC,SAAM;IAElD;;;;;;OAMG;IACwC,CAAC,SAAM;IAElD;;;;;;;OAOG;IACyC,MAAM,UAAS;IAE3D;;;;;;;;;OASG;IAEH,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAY;IAE7C;;;;;;;;;;;OAWG;IAEH,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAa;IAEvD;;;OAGG;IACH,OAAO,CAAC,OAAO,CAA4B;IAE3C;;;;OAIG;IACH,OAAO,CAAC,UAAU,CAAa;IAE/B;;;;;;;OAOG;IACM,iBAAiB;IAY1B;;;;;OAKG;IACM,oBAAoB;IAU7B;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc,CAqBpB;IAEF,OAAgB,MAAM,4BAqDpB;IAEO,MAAM;CAOf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,aAAa,EAAE,UAAU,CAAC;KAC1B;CACD;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"moni-ripple.d.ts","sourceRoot":"","sources":["../../src/components/moni-ripple.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBACa,UAAW,SAAQ,WAAW;IAC1C;;;;;;;OAOG;IACwC,CAAC,SAAM;IAElD;;;;;;OAMG;IACwC,CAAC,SAAM;IAElD;;;;;;;OAOG;IACyC,MAAM,UAAS;IAE3D;;;;;;;;;OASG;IAEH,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAY;IAE7C;;;;;;;;;;;OAWG;IAEH,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAa;IAEvD;;;OAGG;IACH,OAAO,CAAC,OAAO,CAA4B;IAE3C;;;;OAIG;IACH,OAAO,CAAC,UAAU,CAAa;IAE/B;;;;;;;OAOG;IACM,iBAAiB;IAY1B;;;;;OAKG;IACM,oBAAoB;IAU7B;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc,CAqBpB;IAEF,OAAgB,MAAM,4BAqDpB;IAEF;;;;;;;;;;;;;;OAcG;IACM,MAAM;CAOf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,aAAa,EAAE,UAAU,CAAC;KAC1B;CACD;AAED,eAAe,UAAU,CAAC"}