@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
@@ -14,56 +14,56 @@ 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 Navigation container component.
17
+ * Componente contenedor de Navegación Material Design 3.
18
18
  *
19
- * `<moni-nav>` is the container that wraps `<moni-nav-item>` elements and
20
- * controls the M3 navigation pattern: navigation bar, navigation rail, or
21
- * navigation drawer.
19
+ * `<moni-nav>` es el contenedor que envuelve los elementos `<moni-nav-item>` y
20
+ * controla el patrón de navegación M3: barra de navegación, riel de navegación o
21
+ * cajón de navegación.
22
22
  *
23
- * **M3 spec references:**
24
- * - Navigation bar: `m3-docs/components/navigation-bar/specs.md`
25
- * - Navigation rail: `m3-docs/components/navigation-rail/specs.md`
26
- * - Navigation drawer: `m3-docs/components/navigation-drawer/specs.md`
23
+ * **Referencias a la especificación M3:**
24
+ * - Barra de navegación: `m3-docs/components/navigation-bar/specs.md`
25
+ * - Riel de navegación: `m3-docs/components/navigation-rail/specs.md`
26
+ * - Cajón de navegación: `m3-docs/components/navigation-drawer/specs.md`
27
27
  *
28
- * **Navigation patterns:**
29
- * - **Navigation bar** (`placement="bottom"`) — Horizontal bar of icon+label
30
- * items at the bottom of the screen. Best for 3–5 top-level destinations.
31
- * - **Navigation rail** (`variant="rail"`) — Vertical rail of icon+label items
32
- * on the side of the screen. Best for medium/expanded breakpoints.
33
- * - **Standard drawer** (`variant="drawer"`) — Always-visible vertical panel
34
- * with full text labels. No scrim. Best for large screens.
35
- * - **Modal drawer** (`variant="drawer" modal`) — Overlay drawer with scrim.
36
- * Opened/closed via the `open` property. Traps keyboard focus while open.
37
- * Closes on `Escape` key press.
28
+ * **Patrones de navegación:**
29
+ * - **Barra de navegación** (`placement="bottom"`) — Barra horizontal de elementos de icono+etiqueta
30
+ * en la parte inferior de la pantalla. Ideal para 3–5 destinos de nivel superior.
31
+ * - **Riel de navegación** (`variant="rail"`) — Riel vertical de elementos de icono+etiqueta
32
+ * en el lateral de la pantalla. Ideal para puntos de interrupción medianos/expandidos.
33
+ * - **Cajón estándar** (`variant="drawer"`) — Panel vertical siempre visible
34
+ * con etiquetas de texto completo. Sin atenuación (scrim). Ideal para pantallas grandes.
35
+ * - **Cajón modal** (`variant="drawer" modal`) — Cajón superpuesto con atenuación (scrim).
36
+ * Se abre/cierra a través de la propiedad `open`. Atrapa el foco del teclado mientras está abierto.
37
+ * Se cierra al presionar la tecla `Escape`.
38
38
  *
39
- * **Keyboard handling:**
40
- * When `modal=true`, the component adds a global `keydown` listener in
41
- * `connectedCallback` that closes the drawer on `Escape`. The listener is
42
- * removed in `disconnectedCallback`.
39
+ * **Manejo del teclado:**
40
+ * Cuando `modal=true`, el componente añade un listener global de `keydown` en
41
+ * `connectedCallback` que cierra el cajón con `Escape`. El listener se
42
+ * elimina en `disconnectedCallback`.
43
43
  *
44
44
  * @example
45
45
  * ```html
46
- * <!-- Bottom navigation bar -->
46
+ * <!-- Barra de navegación inferior -->
47
47
  * <moni-nav placement="bottom">
48
- * <moni-nav-item icon="home" label="Home" active></moni-nav-item>
49
- * <moni-nav-item icon="search" label="Search"></moni-nav-item>
50
- * <moni-nav-item icon="person" label="Profile"></moni-nav-item>
48
+ * <moni-nav-item icon="home" label="Inicio" active></moni-nav-item>
49
+ * <moni-nav-item icon="search" label="Buscar"></moni-nav-item>
50
+ * <moni-nav-item icon="person" label="Perfil"></moni-nav-item>
51
51
  * </moni-nav>
52
52
  *
53
- * <!-- Modal navigation drawer -->
53
+ * <!-- Cajón de navegación modal -->
54
54
  * <moni-nav variant="drawer" modal open placement="left">
55
- * <h3 slot="header">My App</h3>
56
- * <moni-nav-item icon="home" label="Home" active></moni-nav-item>
57
- * <moni-nav-item icon="settings" label="Settings"></moni-nav-item>
55
+ * <h3 slot="header">Mi App</h3>
56
+ * <moni-nav-item icon="home" label="Inicio" active></moni-nav-item>
57
+ * <moni-nav-item icon="settings" label="Ajustes"></moni-nav-item>
58
58
  * </moni-nav>
59
59
  * ```
60
60
  *
61
- * @slot default - `<moni-nav-item>` children.
62
- * @slot header - Content above the nav items (drawer variant only).
63
- * @slot footer - Content below the nav items (drawer variant only).
61
+ * @slot default - Hijos `<moni-nav-item>`.
62
+ * @slot header - Contenido encima de los elementos de navegación (solo variante drawer).
63
+ * @slot footer - Contenido debajo de los elementos de navegación (solo variante drawer).
64
64
  *
65
- * @csspart nav - The inner `<nav>` element.
66
- * @csspart scrim - The backdrop scrim (modal drawer only).
65
+ * @csspart nav - El elemento `<nav>` interior.
66
+ * @csspart scrim - El atenuador de fondo (scrim) (solo cajón modal).
67
67
  */
68
68
  let MoniNav = class MoniNav extends MoniElement {
69
69
  constructor() {
@@ -73,6 +73,12 @@ let MoniNav = class MoniNav extends MoniElement {
73
73
  this.modal = false;
74
74
  this.open = true;
75
75
  this.layout = 'auto';
76
+ /**
77
+ * Patrón de inyección de propiedades "Top-Down" sin usar Context API.
78
+ * Pasa las variables arquitectónicas (`placement`, `variant`, `layout`) a los `moni-nav-item`
79
+ * hijos para que ellos puedan adaptar su CSS (ej: ocultar la etiqueta en la variante 'rail').
80
+ * Se lanza al inicializar o cada vez que cambia una prop en el contenedor.
81
+ */
76
82
  this._propagateToItems = () => {
77
83
  const items = this.querySelectorAll('moni-nav-item');
78
84
  items.forEach(item => {
@@ -82,25 +88,55 @@ let MoniNav = class MoniNav extends MoniElement {
82
88
  });
83
89
  };
84
90
  }
91
+ /**
92
+ * Hook de inicialización (Lit).
93
+ * Vincula el listener global para teclado, asegurando que `_onKeydown` mantenga
94
+ * el contexto correcto de `this` al ser disparado por el documento.
95
+ */
85
96
  connectedCallback() {
86
97
  super.connectedCallback();
87
98
  this._onKeydown = this._onKeydown.bind(this);
88
99
  document.addEventListener('keydown', this._onKeydown);
89
100
  }
101
+ /**
102
+ * Hook de destrucción (Lit).
103
+ * Remueve el listener de teclado global para evitar fugas de memoria (memory leaks)
104
+ * cuando el componente de navegación es retirado del DOM.
105
+ */
90
106
  disconnectedCallback() {
91
107
  super.disconnectedCallback();
92
108
  document.removeEventListener('keydown', this._onKeydown);
93
109
  }
110
+ /**
111
+ * Manejador global de eventos de teclado.
112
+ * Implementa el patrón de accesibilidad estándar: Si el drawer es modal y está abierto,
113
+ * presionar la tecla Escape forzará su cierre inmediato.
114
+ */
94
115
  _onKeydown(e) {
95
116
  if (e.key === 'Escape' && this.modal && this.open) {
96
117
  this.open = false;
97
118
  }
98
119
  }
120
+ /**
121
+ * Función de cierre rápido invocada típicamente al hacer clic en el backdrop/scrim.
122
+ * Modifica directamente la propiedad `open` a false si la navegación opera en modo modal.
123
+ */
99
124
  _closeModal() {
100
125
  if (this.modal) {
101
126
  this.open = false;
102
127
  }
103
128
  }
129
+ /**
130
+ * Propaga los cambios estructurales a todos los hijos `<moni-nav-item>` insertados en la ranura.
131
+ *
132
+ * Cuando `placement`, `variant`, `layout`, `modal` o `open` cambian en el
133
+ * `<moni-nav>` padre, los elementos hijos `<moni-nav-item>` también deben actualizar su estado
134
+ * de diseño calculado (layout) y de apertura. Esto se hace imperativamente a través de `_propagateToItems()` en lugar
135
+ * de a través de la API de Contexto de Lit para evitar la sobrecarga del Proveedor de Contexto para una simple
136
+ * relación padre→hijo.
137
+ *
138
+ * @param changed - Mapa de los nombres de las propiedades reactivas que desencadenaron este ciclo de actualización.
139
+ */
104
140
  updated(changed) {
105
141
  if (changed.has('placement') ||
106
142
  changed.has('variant') ||
@@ -259,6 +295,29 @@ let MoniNav = class MoniNav extends MoniElement {
259
295
  }
260
296
  `,
261
297
  ]; }
298
+ /**
299
+ * Renderiza el contenedor de navegación con su superposición opcional de atenuación (scrim).
300
+ *
301
+ * **Composición de clases:**
302
+ * - `this.placement` (`'left'`, `'right'`, `'bottom'`) — posiciona el cajón
303
+ * o la barra de navegación inferior contra el borde correcto de la ventana gráfica.
304
+ * - `'max'` — agregado cuando `variant='drawer'`; expande la navegación a toda altura
305
+ * y ancho según la especificación M3 Navigation Drawer.
306
+ *
307
+ * **Atenuación de cajón modal (Modal drawer scrim):**
308
+ * `isModalDrawer` es `true` cuando `variant='drawer'` Y `modal=true`. En este
309
+ * caso, se renderiza un div `.scrim` detrás del cajón como una superposición
310
+ * de hacer-clic-para-descartar. La atenuación tiene `aria-hidden="true"` ya que es puramente visual.
311
+ *
312
+ * **Atributo `[open]`:**
313
+ * La vinculación `?open=${this.open}` agrega/elimina el atributo `open` en el
314
+ * elemento `<nav>`. Los selectores de atributo CSS `[open]` impulsan la transición
315
+ * de deslizamiento hacia adentro/afuera, manteniendo la animación completamente en CSS (no se requiere GSAP para este componente).
316
+ *
317
+ * **Punto de referencia ARIA (ARIA landmark):**
318
+ * El elemento `<nav>` se usa directamente (no un `<div role="navigation">`) para
319
+ * proporcionar un punto de referencia ARIA implícito al que pueden saltar los lectores de pantalla.
320
+ */
262
321
  render() {
263
322
  const isModalDrawer = this.variant === 'drawer' && this.modal;
264
323
  const classes = [this.placement, this.variant === 'drawer' ? 'max' : '']
@@ -6,122 +6,166 @@
6
6
  */
7
7
  import { MoniElement } from './_base/index.js';
8
8
  /**
9
- * Material Design 3 Progress Indicator component.
9
+ * Componente Material Design 3 Progress Indicator (Indicador de Progreso).
10
10
  *
11
- * Progress indicators express an unspecified wait time or display the length
12
- * of a process. They inform users about the status of ongoing processes such
13
- * as loading an app, submitting a form, or saving updates.
11
+ * Los indicadores de progreso expresan un tiempo de espera no especificado o muestran la duración
12
+ * de un proceso. Informan a los usuarios sobre el estado de procesos en curso, como
13
+ * cargar una aplicación, enviar un formulario o guardar actualizaciones.
14
14
  *
15
- * **M3 spec reference:** `m3-docs/components/progress-indicators/specs.md`
15
+ * **Referencia a la especificación M3:** `m3-docs/components/progress-indicators/specs.md`
16
16
  *
17
- * **Variants:**
18
- * - `linear` (default) — A horizontal bar that fills left-to-right.
19
- * - `circular` — A circular SVG stroke indicator.
20
- * - `wavy` — An animated wave bar (Moni extension; not in M3 spec).
21
- * - `circular-wavy` — Circular + wave combo (Moni extension).
17
+ * **Variantes:**
18
+ * - `linear` (por defecto) — Una barra horizontal que se llena de izquierda a derecha.
19
+ * - `circular` — Un indicador circular SVG de trazo (stroke).
20
+ * - `wavy` — Una barra de ondas animada (extensión de Moni; no en la especificación M3).
21
+ * - `circular-wavy` — Combinación de circular + ondas (extensión de Moni).
22
22
  *
23
- * **Shadow DOM compatibility note:**
24
- * BeerCSS's progress uses native `<progress>` pseudo-elements (`::before`,
25
- * `::after`, `::webkit-progress-value`) and `mask-image`, which are blocked
26
- * by the UA shadow root in Chrome/Firefox. This component uses a plain `<div>`
27
- * wrapper that replicates the visual rules exactly, and an `<svg>` element
28
- * for the circular variant using SVG stroke-dashoffset animation for superior
29
- * cross-browser support compared to `conic-gradient`.
23
+ * **Nota de compatibilidad con Shadow DOM:**
24
+ * El progreso de BeerCSS usa pseudo-elementos `<progress>` nativos (`::before`,
25
+ * `::after`, `::webkit-progress-value`) y `mask-image`, que son bloqueados
26
+ * por la raíz shadow del User Agent en Chrome/Firefox. Este componente usa un envoltorio
27
+ * `<div>` simple que replica las reglas visuales exactamente, y un elemento `<svg>`
28
+ * para la variante circular usando animación SVG stroke-dashoffset para un soporte
29
+ * superior entre navegadores comparado con `conic-gradient`.
30
30
  *
31
- * **Percentage computation:**
32
- * `_pct` is computed in `willUpdate()` as `(value / max) * 100`, clamped to
33
- * `[0, 100]`. When `indeterminate` is set, `_pct` is fixed at `50` to drive
34
- * the infinite loop animation.
31
+ * **Cálculo de porcentaje:**
32
+ * `_pct` se calcula en `willUpdate()` como `(value / max) * 100`, restringido a
33
+ * `[0, 100]`. Cuando `indeterminate` está establecido, `_pct` se fija en `50` para impulsar
34
+ * la animación de bucle infinito.
35
35
  *
36
36
  * @example
37
37
  * ```html
38
- * <!-- Determinate linear progress -->
38
+ * <!-- Progreso lineal determinado -->
39
39
  * <moni-progress value="65" max="100"></moni-progress>
40
40
  *
41
- * <!-- Indeterminate circular progress (loading spinner) -->
41
+ * <!-- Progreso circular indeterminado (spinner de carga) -->
42
42
  * <moni-progress variant="circular" indeterminate></moni-progress>
43
43
  * ```
44
44
  *
45
- * @csspart bar - The outer container div.
46
- * @csspart fill - The inner fill element (linear variant).
47
- * @csspart svg - The SVG element (circular variant).
45
+ * @csspart bar - El div contenedor exterior.
46
+ * @csspart fill - El elemento de llenado interior (variante lineal).
47
+ * @csspart svg - El elemento SVG (variante circular).
48
48
  */
49
49
  export declare class MoniProgress extends MoniElement {
50
50
  /**
51
- * Current progress value.
51
+ * Valor de progreso actual.
52
52
  *
53
- * Must be in the range `[0, max]`. Values outside this range are clamped
54
- * during percentage computation in `willUpdate()`. Ignored when
55
- * `indeterminate` is set.
53
+ * Debe estar en el rango `[0, max]`. Los valores fuera de este rango se restringen
54
+ * durante el cálculo del porcentaje en `willUpdate()`. Se ignora cuando
55
+ * `indeterminate` está establecido.
56
56
  *
57
57
  * @default 0
58
58
  */
59
59
  value: number;
60
60
  /**
61
- * Maximum value of the progress range.
61
+ * Valor máximo del rango de progreso.
62
62
  *
63
- * Defaults to `100` so `value` can be set as a percentage directly.
64
- * For non-percentage ranges (e.g. steps), set `max` to the total step count
65
- * and `value` to the current step.
63
+ * Por defecto es `100` para que el `value` pueda establecerse como porcentaje directamente.
64
+ * Para rangos que no son porcentajes (ej. pasos), establece `max` al recuento total de pasos
65
+ * y `value` al paso actual.
66
66
  *
67
67
  * @default 100
68
68
  */
69
69
  max: number;
70
70
  /**
71
- * Visual variant of the progress indicator.
71
+ * Variante visual del indicador de progreso.
72
72
  *
73
- * - `'linear'` (default) — Horizontal fill bar.
74
- * - `'circular'` — SVG circle with stroke-dashoffset animation.
75
- * - `'wavy'` — Animated wave bar.
76
- * - `'circular-wavy'` — Combination of circular and wave.
73
+ * - `'linear'` (por defecto) — Barra de llenado horizontal.
74
+ * - `'circular'` — Círculo SVG con animación stroke-dashoffset.
75
+ * - `'wavy'` — Barra de ondas animada.
76
+ * - `'circular-wavy'` — Combinación de circular y ondas.
77
77
  *
78
78
  * @default 'linear'
79
79
  */
80
80
  variant: 'linear' | 'circular' | 'wavy' | 'circular-wavy';
81
81
  /**
82
- * Visual size of the progress indicator.
82
+ * Tamaño visual del indicador de progreso.
83
83
  *
84
- * - `'small'` — Compact; suitable for inline or tight layouts.
85
- * - `'medium'` — Standard M3 size (default).
86
- * - `'large'` — Prominent; for full-page loading states.
84
+ * - `'small'` — Compacto; adecuado para diseños en línea o ajustados.
85
+ * - `'medium'` — Tamaño estándar M3 (por defecto).
86
+ * - `'large'` — Prominente; para estados de carga a pantalla completa.
87
87
  *
88
88
  * @default 'medium'
89
89
  */
90
90
  size: 'small' | 'medium' | 'large';
91
91
  /**
92
- * When `true`, the indicator animates in an infinite loop regardless of `value`.
92
+ * Cuando es `true`, el indicador se anima en un bucle infinito independientemente del `value`.
93
93
  *
94
- * Use for operations where the completion percentage is unknown
95
- * (e.g. network requests, file processing). When `indeterminate` is set,
96
- * `_pct` is fixed at `50` to drive a continuous sweep animation.
94
+ * Úsalo para operaciones donde el porcentaje de finalización es desconocido
95
+ * (ej. peticiones de red, procesamiento de archivos). Cuando `indeterminate` está establecido,
96
+ * `_pct` se fija en `50` para impulsar una animación de barrido continuo.
97
97
  *
98
98
  * @default false
99
99
  */
100
100
  indeterminate: boolean;
101
101
  /**
102
- * Computed fill percentage in the range `[0, 100]`.
102
+ * Porcentaje de llenado calculado en el rango `[0, 100]`.
103
103
  *
104
- * Updated in `willUpdate()` whenever `value`, `max`, or `indeterminate` changes.
105
- * Used directly in CSS custom property bindings and SVG stroke attributes.
104
+ * Actualizado en `willUpdate()` cada vez que cambia `value`, `max` o `indeterminate`.
105
+ * Usado directamente en vinculaciones de propiedades personalizadas de CSS y atributos de trazo (stroke) SVG.
106
106
  *
107
107
  * @internal
108
108
  */
109
109
  private _pct;
110
110
  /**
111
- * Computes the fill percentage before each render.
111
+ * Hook de ciclo de vida de Lit. Calcula la fracción de llenado antes de pintar.
112
112
  *
113
- * Recalculates `_pct` whenever `value`, `max`, or `indeterminate` changes.
114
- * The `Math.max(1, max)` guard prevents division-by-zero when `max` is 0.
113
+ * A diferencia de los componentes nativos, necesitamos computar explícitamente el
114
+ * progreso como un número de 0 a 100 para inyectarlo en variables CSS (Lineal)
115
+ * o calcular el `stroke-dashoffset` (Circular).
115
116
  *
116
- * @param changed - Map of property names to their previous values.
117
+ * Se usa `Math.max(1, this.max)` para evitar un NaN / Infinity por división entre cero.
118
+ *
119
+ * @param changed - Mapa de propiedades reactivas que detonaron la actualización.
117
120
  */
118
121
  willUpdate(changed: Map<string, unknown>): void;
119
122
  static styles: import("lit").CSSResult[];
123
+ /**
124
+ * Motor de Renderizado: Linear Progress Bar.
125
+ *
126
+ * Renderiza un contenedor horizontal clásico. Pasa el porcentaje computado
127
+ * como variable CSS `--_p` para que el navegador lo interpole usando `transform: scaleX`.
128
+ * Expone los atributos ARIA completos para lectores de pantalla.
129
+ */
120
130
  private _renderLinear;
131
+ /**
132
+ * Motor de Renderizado: Wavy Progress Bar (Estilo BeerCSS/Material You).
133
+ *
134
+ * Utiliza un `<svg>` con una animación de `clip-path` y ondas sinusoidales
135
+ * inyectadas directamente. Ajusta matemáticamente el ancho y la posición de la onda
136
+ * dependiendo de si está en modo indeterminado (infinito) o con un progreso específico (`_pct`).
137
+ */
121
138
  private _renderWavy;
139
+ /**
140
+ * Algoritmo de renderizado para el spinner circular.
141
+ * Utiliza la técnica de SVG `stroke-dasharray` y `stroke-dashoffset` para animar o
142
+ * fijar el arco de progreso sin utilizar gradientes CSS cónicos (mejor compatibilidad).
143
+ *
144
+ * Matemáticas del círculo:
145
+ * Perímetro = 2 * π * radio.
146
+ * Para r=20, Perímetro ≈ 125.66. El porcentaje vacío se resta para desplazar (offset) el trazo.
147
+ */
122
148
  private _renderCircular;
123
- /** Unique ID per instance for SVG clipPath IDs */
149
+ /** ID único por instancia para los IDs de SVG clipPath */
124
150
  private readonly _instanceId;
151
+ /**
152
+ * Despacha el renderizado al sub-renderizador privado apropiado basado en `variant`.
153
+ *
154
+ * **¿Por qué sub-renderizadores separados?**
155
+ * Cada variante de progreso tiene una estructura DOM fundamentalmente diferente:
156
+ * - Lineal: un `<div>` con un `<div>` de llenado escalado por una propiedad personalizada CSS.
157
+ * - Wavy (Ondulado): un `<svg>` con un `<clipPath>` animado para la máscara de onda sinusoidal.
158
+ * - Circular: un `<svg>` con `stroke-dasharray`/`stroke-dashoffset` para el arco.
159
+ *
160
+ * Fusionar los tres en una sola plantilla crearía un marcado profundamente condicional;
161
+ * dividir en `_renderLinear()`, `_renderWavy()` y `_renderCircular()` mantiene
162
+ * cada variante auto-contenida y permite una exposición específica de `@csspart` por variante.
163
+ *
164
+ * **`_instanceId`:**
165
+ * Los IDs de `<clipPath>` SVG deben ser únicos por documento; `_instanceId` es un
166
+ * sufijo aleatorio generado una vez en el momento de la instanciación para evitar colisiones de IDs cuando
167
+ * hay múltiples elementos `<moni-progress>` en la misma página.
168
+ */
125
169
  render(): import("lit").TemplateResult<1>;
126
170
  }
127
171
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"moni-progress.d.ts","sourceRoot":"","sources":["../../src/components/moni-progress.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBACa,YAAa,SAAQ,WAAW;IAC5C;;;;;;;;OAQG;IACwC,KAAK,SAAK;IAErD;;;;;;;;OAQG;IACwC,GAAG,SAAO;IAErD;;;;;;;;;OASG;IAEH,OAAO,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,eAAe,CAAY;IAErE;;;;;;;;OAQG;IAEH,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAY;IAE9C;;;;;;;;OAQG;IACyC,aAAa,UAAS;IAElE;;;;;;;OAOG;IACM,OAAO,CAAC,IAAI,CAAK;IAE1B;;;;;;;OAOG;IACM,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAQjD,OAAgB,MAAM,4BA6HpB;IAEF,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,WAAW;IAyDnB,OAAO,CAAC,eAAe;IAoDvB,kDAAkD;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0C;IAE7D,MAAM;CAYf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,eAAe,EAAE,YAAY,CAAC;KAC9B;CACD;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"moni-progress.d.ts","sourceRoot":"","sources":["../../src/components/moni-progress.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBACa,YAAa,SAAQ,WAAW;IAC5C;;;;;;;;OAQG;IACwC,KAAK,SAAK;IAErD;;;;;;;;OAQG;IACwC,GAAG,SAAO;IAErD;;;;;;;;;OASG;IAEH,OAAO,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,eAAe,CAAY;IAErE;;;;;;;;OAQG;IAEH,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAY;IAE9C;;;;;;;;OAQG;IACyC,aAAa,UAAS;IAElE;;;;;;;OAOG;IACM,OAAO,CAAC,IAAI,CAAK;IAE1B;;;;;;;;;;OAUG;IACM,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAQjD,OAAgB,MAAM,4BA6HpB;IAEF;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAiBrB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAyDnB;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAoDvB,0DAA0D;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0C;IAEtE;;;;;;;;;;;;;;;;;OAiBG;IACM,MAAM;CAYf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,eAAe,EAAE,YAAY,CAAC;KAC9B;CACD;AAED,eAAe,YAAY,CAAC"}