@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
@@ -14,119 +14,122 @@ import { html, css, svg, nothing } from 'lit';
14
14
  import { customElement, property, state } from 'lit/decorators.js';
15
15
  import { MoniElement, sharedStyles } from './_base/index.js';
16
16
  /**
17
- * Material Design 3 Progress Indicator component.
17
+ * Componente Material Design 3 Progress Indicator (Indicador de Progreso).
18
18
  *
19
- * Progress indicators express an unspecified wait time or display the length
20
- * of a process. They inform users about the status of ongoing processes such
21
- * as loading an app, submitting a form, or saving updates.
19
+ * Los indicadores de progreso expresan un tiempo de espera no especificado o muestran la duración
20
+ * de un proceso. Informan a los usuarios sobre el estado de procesos en curso, como
21
+ * cargar una aplicación, enviar un formulario o guardar actualizaciones.
22
22
  *
23
- * **M3 spec reference:** `m3-docs/components/progress-indicators/specs.md`
23
+ * **Referencia a la especificación M3:** `m3-docs/components/progress-indicators/specs.md`
24
24
  *
25
- * **Variants:**
26
- * - `linear` (default) — A horizontal bar that fills left-to-right.
27
- * - `circular` — A circular SVG stroke indicator.
28
- * - `wavy` — An animated wave bar (Moni extension; not in M3 spec).
29
- * - `circular-wavy` — Circular + wave combo (Moni extension).
25
+ * **Variantes:**
26
+ * - `linear` (por defecto) — Una barra horizontal que se llena de izquierda a derecha.
27
+ * - `circular` — Un indicador circular SVG de trazo (stroke).
28
+ * - `wavy` — Una barra de ondas animada (extensión de Moni; no en la especificación M3).
29
+ * - `circular-wavy` — Combinación de circular + ondas (extensión de Moni).
30
30
  *
31
- * **Shadow DOM compatibility note:**
32
- * BeerCSS's progress uses native `<progress>` pseudo-elements (`::before`,
33
- * `::after`, `::webkit-progress-value`) and `mask-image`, which are blocked
34
- * by the UA shadow root in Chrome/Firefox. This component uses a plain `<div>`
35
- * wrapper that replicates the visual rules exactly, and an `<svg>` element
36
- * for the circular variant using SVG stroke-dashoffset animation for superior
37
- * cross-browser support compared to `conic-gradient`.
31
+ * **Nota de compatibilidad con Shadow DOM:**
32
+ * El progreso de BeerCSS usa pseudo-elementos `<progress>` nativos (`::before`,
33
+ * `::after`, `::webkit-progress-value`) y `mask-image`, que son bloqueados
34
+ * por la raíz shadow del User Agent en Chrome/Firefox. Este componente usa un envoltorio
35
+ * `<div>` simple que replica las reglas visuales exactamente, y un elemento `<svg>`
36
+ * para la variante circular usando animación SVG stroke-dashoffset para un soporte
37
+ * superior entre navegadores comparado con `conic-gradient`.
38
38
  *
39
- * **Percentage computation:**
40
- * `_pct` is computed in `willUpdate()` as `(value / max) * 100`, clamped to
41
- * `[0, 100]`. When `indeterminate` is set, `_pct` is fixed at `50` to drive
42
- * the infinite loop animation.
39
+ * **Cálculo de porcentaje:**
40
+ * `_pct` se calcula en `willUpdate()` como `(value / max) * 100`, restringido a
41
+ * `[0, 100]`. Cuando `indeterminate` está establecido, `_pct` se fija en `50` para impulsar
42
+ * la animación de bucle infinito.
43
43
  *
44
44
  * @example
45
45
  * ```html
46
- * <!-- Determinate linear progress -->
46
+ * <!-- Progreso lineal determinado -->
47
47
  * <moni-progress value="65" max="100"></moni-progress>
48
48
  *
49
- * <!-- Indeterminate circular progress (loading spinner) -->
49
+ * <!-- Progreso circular indeterminado (spinner de carga) -->
50
50
  * <moni-progress variant="circular" indeterminate></moni-progress>
51
51
  * ```
52
52
  *
53
- * @csspart bar - The outer container div.
54
- * @csspart fill - The inner fill element (linear variant).
55
- * @csspart svg - The SVG element (circular variant).
53
+ * @csspart bar - El div contenedor exterior.
54
+ * @csspart fill - El elemento de llenado interior (variante lineal).
55
+ * @csspart svg - El elemento SVG (variante circular).
56
56
  */
57
57
  let MoniProgress = class MoniProgress extends MoniElement {
58
58
  constructor() {
59
59
  super(...arguments);
60
60
  /**
61
- * Current progress value.
61
+ * Valor de progreso actual.
62
62
  *
63
- * Must be in the range `[0, max]`. Values outside this range are clamped
64
- * during percentage computation in `willUpdate()`. Ignored when
65
- * `indeterminate` is set.
63
+ * Debe estar en el rango `[0, max]`. Los valores fuera de este rango se restringen
64
+ * durante el cálculo del porcentaje en `willUpdate()`. Se ignora cuando
65
+ * `indeterminate` está establecido.
66
66
  *
67
67
  * @default 0
68
68
  */
69
69
  this.value = 0;
70
70
  /**
71
- * Maximum value of the progress range.
71
+ * Valor máximo del rango de progreso.
72
72
  *
73
- * Defaults to `100` so `value` can be set as a percentage directly.
74
- * For non-percentage ranges (e.g. steps), set `max` to the total step count
75
- * and `value` to the current step.
73
+ * Por defecto es `100` para que el `value` pueda establecerse como porcentaje directamente.
74
+ * Para rangos que no son porcentajes (ej. pasos), establece `max` al recuento total de pasos
75
+ * y `value` al paso actual.
76
76
  *
77
77
  * @default 100
78
78
  */
79
79
  this.max = 100;
80
80
  /**
81
- * Visual variant of the progress indicator.
81
+ * Variante visual del indicador de progreso.
82
82
  *
83
- * - `'linear'` (default) — Horizontal fill bar.
84
- * - `'circular'` — SVG circle with stroke-dashoffset animation.
85
- * - `'wavy'` — Animated wave bar.
86
- * - `'circular-wavy'` — Combination of circular and wave.
83
+ * - `'linear'` (por defecto) — Barra de llenado horizontal.
84
+ * - `'circular'` — Círculo SVG con animación stroke-dashoffset.
85
+ * - `'wavy'` — Barra de ondas animada.
86
+ * - `'circular-wavy'` — Combinación de circular y ondas.
87
87
  *
88
88
  * @default 'linear'
89
89
  */
90
90
  this.variant = 'linear';
91
91
  /**
92
- * Visual size of the progress indicator.
92
+ * Tamaño visual del indicador de progreso.
93
93
  *
94
- * - `'small'` — Compact; suitable for inline or tight layouts.
95
- * - `'medium'` — Standard M3 size (default).
96
- * - `'large'` — Prominent; for full-page loading states.
94
+ * - `'small'` — Compacto; adecuado para diseños en línea o ajustados.
95
+ * - `'medium'` — Tamaño estándar M3 (por defecto).
96
+ * - `'large'` — Prominente; para estados de carga a pantalla completa.
97
97
  *
98
98
  * @default 'medium'
99
99
  */
100
100
  this.size = 'medium';
101
101
  /**
102
- * When `true`, the indicator animates in an infinite loop regardless of `value`.
102
+ * Cuando es `true`, el indicador se anima en un bucle infinito independientemente del `value`.
103
103
  *
104
- * Use for operations where the completion percentage is unknown
105
- * (e.g. network requests, file processing). When `indeterminate` is set,
106
- * `_pct` is fixed at `50` to drive a continuous sweep animation.
104
+ * Úsalo para operaciones donde el porcentaje de finalización es desconocido
105
+ * (ej. peticiones de red, procesamiento de archivos). Cuando `indeterminate` está establecido,
106
+ * `_pct` se fija en `50` para impulsar una animación de barrido continuo.
107
107
  *
108
108
  * @default false
109
109
  */
110
110
  this.indeterminate = false;
111
111
  /**
112
- * Computed fill percentage in the range `[0, 100]`.
112
+ * Porcentaje de llenado calculado en el rango `[0, 100]`.
113
113
  *
114
- * Updated in `willUpdate()` whenever `value`, `max`, or `indeterminate` changes.
115
- * Used directly in CSS custom property bindings and SVG stroke attributes.
114
+ * Actualizado en `willUpdate()` cada vez que cambia `value`, `max` o `indeterminate`.
115
+ * Usado directamente en vinculaciones de propiedades personalizadas de CSS y atributos de trazo (stroke) SVG.
116
116
  *
117
117
  * @internal
118
118
  */
119
119
  this._pct = 0;
120
- /** Unique ID per instance for SVG clipPath IDs */
120
+ /** ID único por instancia para los IDs de SVG clipPath */
121
121
  this._instanceId = Math.random().toString(36).slice(2, 8);
122
122
  }
123
123
  /**
124
- * Computes the fill percentage before each render.
124
+ * Hook de ciclo de vida de Lit. Calcula la fracción de llenado antes de pintar.
125
125
  *
126
- * Recalculates `_pct` whenever `value`, `max`, or `indeterminate` changes.
127
- * The `Math.max(1, max)` guard prevents division-by-zero when `max` is 0.
126
+ * A diferencia de los componentes nativos, necesitamos computar explícitamente el
127
+ * progreso como un número de 0 a 100 para inyectarlo en variables CSS (Lineal)
128
+ * o calcular el `stroke-dashoffset` (Circular).
128
129
  *
129
- * @param changed - Map of property names to their previous values.
130
+ * Se usa `Math.max(1, this.max)` para evitar un NaN / Infinity por división entre cero.
131
+ *
132
+ * @param changed - Mapa de propiedades reactivas que detonaron la actualización.
130
133
  */
131
134
  willUpdate(changed) {
132
135
  if (changed.has('value') || changed.has('max') || changed.has('indeterminate')) {
@@ -261,6 +264,13 @@ let MoniProgress = class MoniProgress extends MoniElement {
261
264
  }
262
265
  `
263
266
  ]; }
267
+ /**
268
+ * Motor de Renderizado: Linear Progress Bar.
269
+ *
270
+ * Renderiza un contenedor horizontal clásico. Pasa el porcentaje computado
271
+ * como variable CSS `--_p` para que el navegador lo interpole usando `transform: scaleX`.
272
+ * Expone los atributos ARIA completos para lectores de pantalla.
273
+ */
264
274
  _renderLinear() {
265
275
  const isIndet = this.indeterminate;
266
276
  return html `
@@ -277,6 +287,13 @@ let MoniProgress = class MoniProgress extends MoniElement {
277
287
  </div>
278
288
  `;
279
289
  }
290
+ /**
291
+ * Motor de Renderizado: Wavy Progress Bar (Estilo BeerCSS/Material You).
292
+ *
293
+ * Utiliza un `<svg>` con una animación de `clip-path` y ondas sinusoidales
294
+ * inyectadas directamente. Ajusta matemáticamente el ancho y la posición de la onda
295
+ * dependiendo de si está en modo indeterminado (infinito) o con un progreso específico (`_pct`).
296
+ */
280
297
  _renderWavy() {
281
298
  // BeerCSS wavy uses an SVG mask. We replicate with an SVG clipPath wave.
282
299
  const isIndet = this.indeterminate;
@@ -333,6 +350,15 @@ let MoniProgress = class MoniProgress extends MoniElement {
333
350
  </div>
334
351
  `;
335
352
  }
353
+ /**
354
+ * Algoritmo de renderizado para el spinner circular.
355
+ * Utiliza la técnica de SVG `stroke-dasharray` y `stroke-dashoffset` para animar o
356
+ * fijar el arco de progreso sin utilizar gradientes CSS cónicos (mejor compatibilidad).
357
+ *
358
+ * Matemáticas del círculo:
359
+ * Perímetro = 2 * π * radio.
360
+ * Para r=20, Perímetro ≈ 125.66. El porcentaje vacío se resta para desplazar (offset) el trazo.
361
+ */
336
362
  _renderCircular(withWavy = false) {
337
363
  const isIndet = this.indeterminate;
338
364
  // SVG circle math: r=20, circumference = 2π*20 ≈ 125.66
@@ -383,6 +409,24 @@ let MoniProgress = class MoniProgress extends MoniElement {
383
409
  </div>
384
410
  `;
385
411
  }
412
+ /**
413
+ * Despacha el renderizado al sub-renderizador privado apropiado basado en `variant`.
414
+ *
415
+ * **¿Por qué sub-renderizadores separados?**
416
+ * Cada variante de progreso tiene una estructura DOM fundamentalmente diferente:
417
+ * - Lineal: un `<div>` con un `<div>` de llenado escalado por una propiedad personalizada CSS.
418
+ * - Wavy (Ondulado): un `<svg>` con un `<clipPath>` animado para la máscara de onda sinusoidal.
419
+ * - Circular: un `<svg>` con `stroke-dasharray`/`stroke-dashoffset` para el arco.
420
+ *
421
+ * Fusionar los tres en una sola plantilla crearía un marcado profundamente condicional;
422
+ * dividir en `_renderLinear()`, `_renderWavy()` y `_renderCircular()` mantiene
423
+ * cada variante auto-contenida y permite una exposición específica de `@csspart` por variante.
424
+ *
425
+ * **`_instanceId`:**
426
+ * Los IDs de `<clipPath>` SVG deben ser únicos por documento; `_instanceId` es un
427
+ * sufijo aleatorio generado una vez en el momento de la instanciación para evitar colisiones de IDs cuando
428
+ * hay múltiples elementos `<moni-progress>` en la misma página.
429
+ */
386
430
  render() {
387
431
  switch (this.variant) {
388
432
  case 'circular':
@@ -6,69 +6,72 @@
6
6
  */
7
7
  import { MoniElement } from './_base/index.js';
8
8
  /**
9
- * Material Design 3 Radio Button component.
9
+ * Componente Material Design 3 Radio Button (Botón de Opción).
10
10
  *
11
- * Radio buttons allow users to select exactly one item from a set of mutually
12
- * exclusive options. They share the same visual architecture as
13
- * `<moni-checkbox>` but use `type="radio"` and implement group deselection.
11
+ * Los botones de opción permiten a los usuarios seleccionar exactamente un elemento de un conjunto de opciones
12
+ * mutuamente excluyentes. Comparten la misma arquitectura visual que
13
+ * `<moni-checkbox>` pero usan `type="radio"` e implementan la deselección de grupo.
14
14
  *
15
- * **M3 spec reference:** `m3-docs/components/radio/specs.md`
15
+ * **Referencia a la especificación M3:** `m3-docs/components/radio/specs.md`
16
16
  *
17
- * **Visual architecture (BeerCSS pattern):**
18
- * Identical to the checkbox pattern: the native `<input type="radio">` occupies
19
- * real layout space at `--_size` × `--_size` but is hidden via `opacity: 0`.
20
- * A sibling `<span>` renders:
21
- * - `::before` — the radio icon (`radio_button_unchecked` / `radio_button_checked`).
22
- * - `::after` — the hover/focus ripple ring.
17
+ * **Arquitectura visual (Patrón BeerCSS):**
18
+ * Idéntico al patrón de checkbox: el `<input type="radio">` nativo ocupa
19
+ * espacio de diseño real a `--_size` × `--_size` pero se oculta mediante `opacity: 0`.
20
+ * Un `<span>` hermano renderiza:
21
+ * - `::before` — el icono de radio (`radio_button_unchecked` / `radio_button_checked`).
22
+ * - `::after` — el anillo de onda (ripple) de hover/foco.
23
23
  *
24
- * **Group deselection:**
25
- * When a radio is checked, `_onChange` queries the component's `getRootNode()`
26
- * for all `moni-radio` elements sharing the same `name` attribute and sets
27
- * their `checked` property to `false`. This mirrors native browser behavior
28
- * for radio groups across shadow DOM boundaries where `name` grouping does
29
- * not work natively.
24
+ * **Deselección de grupo:**
25
+ * Cuando se marca un radio, `_onChange` consulta el `getRootNode()` del componente
26
+ * para encontrar todos los elementos `moni-radio` que comparten el mismo atributo `name` y establece
27
+ * su propiedad `checked` en `false`. Esto refleja el comportamiento nativo del navegador
28
+ * para grupos de radio a través de los límites del shadow DOM, donde la agrupación por `name` no
29
+ * funciona de forma nativa.
30
30
  *
31
- * @fires change - Bubbles and is composed. Fired when this radio is selected.
32
- * Read `element.checked` for the new state.
31
+ * @fires change - Burbujea y está compuesto. Se dispara cuando este radio es seleccionado.
32
+ * Lee `element.checked` para obtener el nuevo estado.
33
33
  *
34
34
  * @example
35
35
  * ```html
36
- * <moni-radio name="color" value="red" label="Red"></moni-radio>
37
- * <moni-radio name="color" value="green" label="Green"></moni-radio>
38
- * <moni-radio name="color" value="blue" label="Blue" checked></moni-radio>
36
+ * <moni-radio name="color" value="red" label="Rojo"></moni-radio>
37
+ * <moni-radio name="color" value="green" label="Verde"></moni-radio>
38
+ * <moni-radio name="color" value="blue" label="Azul" checked></moni-radio>
39
39
  * ```
40
40
  *
41
- * @csspart radio - The outer `<label>` element.
41
+ * @csspart radio - El elemento `<label>` exterior.
42
42
  */
43
43
  export declare class MoniRadio extends MoniElement {
44
+ static formAssociated: boolean;
45
+ private _internals;
46
+ constructor();
44
47
  /**
45
- * Text label displayed to the right of the radio icon.
48
+ * Etiqueta de texto mostrada a la derecha del icono de radio.
46
49
  *
47
- * When non-empty, renders as a text node. When empty, the default slot
48
- * is rendered, allowing slotted HTML content as the label.
50
+ * Cuando no está vacía, se renderiza como un nodo de texto. Cuando está vacía, se renderiza la ranura (slot)
51
+ * por defecto, permitiendo contenido HTML en la ranura como etiqueta.
49
52
  *
50
53
  * @default ''
51
54
  */
52
55
  label: string;
53
56
  /**
54
- * Whether this radio button is currently selected.
57
+ * Indica si este botón de opción está actualmente seleccionado.
55
58
  *
56
- * Reflected as an attribute so CSS selectors can target it. Synced to
57
- * the native input via `updated()`.
59
+ * Se refleja como un atributo para que los selectores CSS puedan apuntarlo. Se sincroniza con
60
+ * el input nativo a través de `updated()`.
58
61
  *
59
62
  * @default false
60
63
  */
61
64
  checked: boolean;
62
65
  /**
63
- * When `true`, the radio is non-interactive and renders at 50% opacity.
66
+ * Cuando es `true`, el radio no es interactivo y se renderiza a un 50% de opacidad.
64
67
  *
65
68
  * @default false
66
69
  */
67
70
  disabled: boolean;
68
71
  /**
69
- * Visual size of the radio icon and its invisible hit area.
72
+ * Tamaño visual del icono de radio y su área de interacción (hit area) invisible.
70
73
  *
71
- * | Value | `--_size` |
74
+ * | Valor | `--_size` |
72
75
  * |------------|-----------|
73
76
  * | `'small'` | 1rem |
74
77
  * | `'medium'` | 1.5rem |
@@ -79,46 +82,55 @@ export declare class MoniRadio extends MoniElement {
79
82
  */
80
83
  size: 'small' | 'medium' | 'large' | 'extra';
81
84
  /**
82
- * Radio group name. Radios with the same `name` in the same root node
83
- * are treated as a mutual-exclusion group by `_onChange`.
85
+ * Nombre del grupo de radio. Los radios con el mismo `name` en el mismo nodo raíz
86
+ * se tratan como un grupo de exclusión mutua por `_onChange`.
84
87
  *
85
- * Note: Native `<input type="radio">` groups only work within the same
86
- * document root. Since `moni-radio` uses shadow DOM, the deselection
87
- * of siblings is handled imperatively in `_onChange`.
88
+ * Nota: Los grupos nativos de `<input type="radio">` solo funcionan dentro de la misma
89
+ * raíz de documento. Dado que `moni-radio` usa shadow DOM, la deselección
90
+ * de los hermanos se maneja imperativamente en `_onChange`.
88
91
  *
89
92
  * @default ''
90
93
  */
91
94
  name: string;
92
95
  /**
93
- * Forwarded to the native `<input value>` attribute.
94
- * The value submitted in a form when this radio is selected.
96
+ * Se retransmite al atributo nativo `<input value>`.
97
+ * El valor enviado en un formulario cuando este radio es seleccionado.
95
98
  *
96
99
  * @default ''
97
100
  */
98
101
  value: string;
99
- /** Direct reference to the native input element for programmatic access. */
102
+ /** Referencia directa al elemento input nativo para acceso programático. */
100
103
  private _input;
101
104
  /**
102
- * Syncs `checked` and `disabled` to the native input after each render cycle.
105
+ * Sincroniza `checked` y `disabled` con el input nativo después de cada ciclo de renderizado.
103
106
  *
104
- * @param changed - Map of changed property names to their previous values.
107
+ * @param changed - Mapa de los nombres de propiedades modificadas con sus valores anteriores.
105
108
  */
106
109
  updated(changed: Map<string, unknown>): void;
107
110
  static styles: import("lit").CSSResult[];
108
111
  /**
109
- * Handles the native input `change` event.
112
+ * Maneja el evento nativo `change` del input.
110
113
  *
111
- * On selection, deselects all sibling `moni-radio` elements with the same
112
- * `name` in the same root node (document or shadow root). This is necessary
113
- * because native radio group exclusion only works within the same document
114
- * root and does not cross shadow DOM boundaries.
114
+ * Al seleccionarse, deselecciona todos los elementos `moni-radio` hermanos con el mismo
115
+ * `name` en el mismo nodo raíz (documento o raíz shadow). Esto es necesario
116
+ * porque la exclusión de grupo de radio nativa solo funciona dentro de la misma raíz
117
+ * de documento y no cruza los límites del shadow DOM.
115
118
  *
116
- * After deselection, dispatches a composed `'change'` event so it is
117
- * audible to parent elements in the light DOM.
119
+ * Después de la deselección, despacha un evento `'change'` compuesto para que sea
120
+ * audible para los elementos padres en el DOM ligero (light DOM).
118
121
  *
119
- * @param e - The native `change` event from the hidden `<input>`.
122
+ * @param e - El evento nativo `change` del `<input>` oculto.
120
123
  */
121
124
  private _onChange;
125
+ /**
126
+ * Renderiza el radio como un `<input type="radio">` oculto + indicador visual `<span>`.
127
+ *
128
+ * El input oculto se mantiene en el DOM (opacity: 0) para participar en el envío nativo
129
+ * de formularios y exclusión de grupo de radios. Los navegadores aplican automáticamente
130
+ * exclusión mutua entre entradas de radio que comparten el mismo atributo `name`.
131
+ * El círculo visual es dibujado por los pseudo-elementos `::before` / `::after` en
132
+ * el `<span>` y animado mediante transiciones CSS de `scale`.
133
+ */
122
134
  render(): import("lit").TemplateResult<1>;
123
135
  }
124
136
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"moni-radio.d.ts","sourceRoot":"","sources":["../../src/components/moni-radio.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBACa,SAAU,SAAQ,WAAW;IACzC;;;;;;;OAOG;IAC0B,KAAK,SAAM;IAExC;;;;;;;OAOG;IACyC,OAAO,UAAS;IAE5D;;;;OAIG;IACyC,QAAQ,UAAS;IAE7D;;;;;;;;;;;OAWG;IAEH,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAY;IAExD;;;;;;;;;OASG;IAC0B,IAAI,SAAM;IAEvC;;;;;OAKG;IAC0B,KAAK,SAAM;IAExC,4EAA4E;IAC5D,OAAO,CAAC,MAAM,CAAoB;IAElD;;;;OAIG;IACM,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAO9C,OAAgB,MAAM,4BA8GpB;IAEF;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,SAAS;IAgBR,MAAM;CAiBf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,YAAY,EAAE,SAAS,CAAC;KACxB;CACD;AAED,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"moni-radio.d.ts","sourceRoot":"","sources":["../../src/components/moni-radio.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBACa,SAAU,SAAQ,WAAW;IACzC,MAAM,CAAC,cAAc,UAAQ;IAC7B,OAAO,CAAC,UAAU,CAAmB;;IAOrC;;;;;;;OAOG;IAC0B,KAAK,SAAM;IAExC;;;;;;;OAOG;IACyC,OAAO,UAAS;IAE5D;;;;OAIG;IACyC,QAAQ,UAAS;IAE7D;;;;;;;;;;;OAWG;IAEH,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAY;IAExD;;;;;;;;;OASG;IAC0B,IAAI,SAAM;IAEvC;;;;;OAKG;IAC0B,KAAK,SAAM;IAExC,4EAA4E;IAC5D,OAAO,CAAC,MAAM,CAAoB;IAElD;;;;OAIG;IACM,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAU9C,OAAgB,MAAM,4BA8GpB;IAEF;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,SAAS;IAgBjB;;;;;;;;OAQG;IACM,MAAM;CAiBf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,YAAY,EAAE,SAAS,CAAC;KACxB;CACD;AAED,eAAe,SAAS,CAAC"}