@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
@@ -1 +1 @@
1
- {"version":3,"file":"moni-slider.d.ts","sourceRoot":"","sources":["../../src/components/moni-slider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,qBACa,UAAW,SAAQ,WAAW;IACb,IAAI,SAAM;IACV,GAAG,SAAO;IACV,GAAG,SAAS;IACZ,IAAI,SAAM;IAEvC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IACmB,SAAS,SAAM;IAErE,kBAAkB,EAAE,KAAK,GAAG,QAAQ,CAAS;IAE7C,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAY;IAGrB,KAAK,UAAS;IACd,QAAQ,UAAS;IACjB,KAAK,UAAS;IACd,SAAS,UAAS;IACK,UAAU,UAAS;IAEtF,8EAA8E;IACrE,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,SAAS,CAAQ;IAElC,IACI,KAAK,IACI,MAAM,CADgB;IACnC,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAAsB;IAEzC,IACI,QAAQ,IACI,MAAM,CADmB;IACzC,IAAI,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAyB;IAE/C,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,SAAS;IAUjB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAsBvB,OAAgB,MAAM,4BA0MpB;IAEO,MAAM;CAkDf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,aAAa,EAAE,UAAU,CAAC;KAC1B;CACD;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"moni-slider.d.ts","sourceRoot":"","sources":["../../src/components/moni-slider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,qBACa,UAAW,SAAQ,WAAW;IAC1C;;;OAGG;IAC0B,IAAI,SAAM;IAEvC;;;;OAIG;IAC0B,GAAG,SAAO;IAEvC;;;;OAIG;IAC0B,GAAG,SAAS;IAEzC;;;OAGG;IAC0B,IAAI,SAAM;IAEvC;;;OAGG;IAEH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEnC;;;OAGG;IACmD,SAAS,SAAM;IAErE;;;;OAIG;IAEH,kBAAkB,EAAE,KAAK,GAAG,QAAQ,CAAS;IAE7C;;;;OAIG;IAEH,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAY;IAEjE;;;OAGG;IACyC,KAAK,UAAS;IAE1D;;;OAGG;IACyC,QAAQ,UAAS;IAE7D;;;OAGG;IACyC,KAAK,UAAS;IAE1D;;;OAGG;IACyC,SAAS,UAAS;IAE9D;;;OAGG;IACgE,UAAU,UAAS;IAEtF,iGAAiG;IACxF,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,SAAS,CAAQ;IAElC;;;OAGG;IACH,IACI,KAAK,IAKI,MAAM,CALgB;IACnC;;;OAGG;IACH,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAAsB;IAEzC;;;OAGG;IACH,IACI,QAAQ,IAII,MAAM,CAJmB;IACzC;;OAEG;IACH,IAAI,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAyB;IAE/C;;;OAGG;IACH,OAAO,CAAC,IAAI;IAQZ;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAWhB;;;OAGG;IACH,OAAO,CAAC,SAAS;IAUjB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAsBvB,OAAgB,MAAM,4BA0MpB;IAEF;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACM,MAAM;CAkDf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,aAAa,EAAE,UAAU,CAAC;KAC1B;CACD;AAED,eAAe,UAAU,CAAC"}
@@ -16,90 +16,170 @@ import { ifDefined } from 'lit/directives/if-defined.js';
16
16
  import { MoniElement, sharedStyles } from './_base/index.js';
17
17
  import './moni-icon.js';
18
18
  /**
19
- * Material Design 3 Slider component.
19
+ * Componente Material Design 3 Slider (Control deslizante).
20
20
  *
21
- * Sliders allow users to select a single value or a range of values from a
22
- * continuous or discrete scale.
21
+ * Los sliders permiten a los usuarios seleccionar un solo valor o un rango de valores
22
+ * desde una escala continua o discreta.
23
23
  *
24
- * **M3 spec reference:** `m3-docs/components/sliders/specs.md`
24
+ * **Referencia a la especificación M3:** `m3-docs/components/sliders/specs.md`
25
25
  *
26
- * **Slider modes:**
27
- * - **Continuous** (default) — Smooth drag between `min` and `max`. Use when
28
- * the exact value does not need to be defined by the user (e.g. volume).
29
- * - **Discrete** — Set `step` to snap to discrete intervals. Tick marks
30
- * appear via the native `<datalist>` element in Chrome/Edge. Firefox does
31
- * not render datalist ticks for range inputs.
32
- * - **Range** (`range` attribute) — Two thumbs that define a minimum and
33
- * maximum value within the slider's extent.
34
- * - **Vertical** (`vertical` attribute) — 90° rotated slider.
26
+ * **Modos de Slider:**
27
+ * - **Continuo (Continuous)** (por defecto) — Arrastre suave entre `min` y `max`. Úsalo cuando
28
+ * no sea necesario que el usuario defina un valor exacto (ej. volumen).
29
+ * - **Discreto (Discrete)** — Configura `step` para ajustarse a intervalos discretos. Las marcas
30
+ * (tick marks) aparecen a través del elemento nativo `<datalist>` en Chrome/Edge. Firefox no
31
+ * renderiza marcas de datalist para inputs de tipo rango.
32
+ * - **Rango (Range)** (atributo `range`) — Dos controles (thumbs) que definen un valor mínimo y
33
+ * máximo dentro de la extensión del slider.
34
+ * - **Vertical** (atributo `vertical`) — Slider rotado 90°.
35
35
  *
36
- * **Value label tooltip:**
37
- * When `indicator` is set, the current value is displayed in a tooltip above
38
- * (or below, via `indicator-placement`) the active thumb during focus/drag.
36
+ * **Tooltip indicador de valor (Value label tooltip):**
37
+ * Cuando se configura `indicator`, el valor actual se muestra en un tooltip por encima
38
+ * (o por debajo, a través de `indicator-placement`) del control activo durante el foco/arrastre.
39
39
  *
40
- * **Tick marks:**
41
- * - `ticks` attribute: adds datalist with marks at `min` and `max` only.
42
- * - `tick-interval` attribute: generates datalist options at every N units
43
- * between `min` and `max`, creating visible tick marks at those positions.
40
+ * **Marcas (Tick marks):**
41
+ * - Atributo `ticks`: agrega datalist con marcas solo en `min` y `max`.
42
+ * - Atributo `tick-interval`: genera opciones de datalist cada N unidades
43
+ * entre `min` y `max`, creando marcas visibles en esas posiciones.
44
44
  *
45
- * **Internal state management:**
46
- * Uses `@state()` for `_value` and `_valueHigh` so the fill track width and
47
- * tooltip position update reactively on every drag `input` event without
48
- * waiting for the `change` event.
45
+ * **Manejo del estado interno:**
46
+ * Usa `@state()` para `_value` y `_valueHigh` de modo que el ancho de la pista de llenado y
47
+ * la posición del tooltip se actualicen de forma reactiva en cada evento `input` de arrastre sin
48
+ * esperar al evento `change`.
49
49
  *
50
- * @fires change - Bubbles and is composed. Fired when dragging ends and the
51
- * value is committed. Read `element.value` for the new value.
52
- * @fires input - Fired on every drag step. Read `element.value` for the
53
- * live value during drag.
50
+ * @fires change - Burbujea y está compuesto. Se dispara cuando termina el arrastre y el
51
+ * valor se confirma. Lee `element.value` para el nuevo valor.
52
+ * @fires input - Se dispara en cada paso del arrastre. Lee `element.value` para el
53
+ * valor en vivo durante el arrastre.
54
54
  *
55
55
  * @example
56
56
  * ```html
57
- * <!-- Continuous slider -->
57
+ * <!-- Slider continuo -->
58
58
  * <moni-slider name="volume" min="0" max="100" value="60"></moni-slider>
59
59
  *
60
- * <!-- Discrete slider with ticks every 10 units -->
60
+ * <!-- Slider discreto con marcas cada 10 unidades -->
61
61
  * <moni-slider step="10" tick-interval="10" indicator></moni-slider>
62
62
  *
63
- * <!-- Range slider -->
63
+ * <!-- Slider de rango -->
64
64
  * <moni-slider range min="0" max="100" value="20" value-high="80"></moni-slider>
65
65
  * ```
66
66
  *
67
- * @csspart slider - The outer slider container.
68
- * @csspart track - The track background.
69
- * @csspart fill - The filled portion of the track.
70
- * @csspart indicator - The value label tooltip.
67
+ * @csspart slider - El contenedor exterior del slider.
68
+ * @csspart track - El fondo de la pista.
69
+ * @csspart fill - La porción llena de la pista.
70
+ * @csspart indicator - El tooltip de la etiqueta de valor.
71
71
  */
72
72
  let MoniSlider = class MoniSlider extends MoniElement {
73
73
  constructor() {
74
74
  super(...arguments);
75
+ /**
76
+ * Nombre del input del slider, usado en el envío de formularios.
77
+ * @type {string}
78
+ */
75
79
  this.name = '';
80
+ /**
81
+ * Valor mínimo del slider.
82
+ * @type {string}
83
+ * @default '0'
84
+ */
76
85
  this.min = '0';
86
+ /**
87
+ * Valor máximo del slider.
88
+ * @type {string}
89
+ * @default '100'
90
+ */
77
91
  this.max = '100';
92
+ /**
93
+ * Granularidad del slider. Debe ser un número positivo.
94
+ * @type {string}
95
+ */
78
96
  this.step = '';
97
+ /**
98
+ * Anula (overrides) el intervalo predeterminado de las marcas cuando `ticks` es verdadero.
99
+ * @type {number | null}
100
+ */
79
101
  this.tickInterval = null;
102
+ /**
103
+ * Nombre del icono (Material Symbols) mostrado dentro del control (thumb) del slider.
104
+ * @type {string}
105
+ */
80
106
  this.insetIcon = '';
107
+ /**
108
+ * Ubicación del tooltip indicador de valor.
109
+ * @type {'top' | 'bottom'}
110
+ * @default 'top'
111
+ */
81
112
  this.indicatorPlacement = 'top';
113
+ /**
114
+ * Grosor/tamaño de la pista y el control (thumb) del slider.
115
+ * @type {'tiny' | 'small' | 'medium' | 'large' | 'extra'}
116
+ * @default 'medium'
117
+ */
82
118
  this.size = 'medium';
83
- // Boolean attributes
119
+ /**
120
+ * Habilita el modo de rango (dos controles: `value` y `valueEnd`).
121
+ * @type {boolean}
122
+ */
84
123
  this.range = false;
124
+ /**
125
+ * Deshabilita el slider.
126
+ * @type {boolean}
127
+ */
85
128
  this.disabled = false;
129
+ /**
130
+ * Renderiza marcas (tick marks) a lo largo de la pista en cada intervalo de paso.
131
+ * @type {boolean}
132
+ */
86
133
  this.ticks = false;
134
+ /**
135
+ * Muestra un indicador de tooltip mostrando el(los) valor(es) actual(es) mientras se arrastra.
136
+ * @type {boolean}
137
+ */
87
138
  this.indicator = false;
139
+ /**
140
+ * Renderiza el slider de forma vertical en lugar de horizontal.
141
+ * @type {boolean}
142
+ */
88
143
  this.isVertical = false;
89
- /** Internal reactive statetriggers CSS var updates on every input event */
144
+ /** Estado reactivo internodispara actualizaciones de variables CSS en cada evento de input */
90
145
  this._value = '50';
91
146
  this._valueEnd = '75';
92
147
  }
148
+ /**
149
+ * El valor primario actual del slider (o el límite inferior en modo de rango).
150
+ * @type {string}
151
+ */
93
152
  get value() { return this._value; }
153
+ /**
154
+ * Intercepta asignaciones imperativas (`element.value = "X"`) para actualizar
155
+ * el estado interno de Lit, garantizando reactividad instantánea del DOM.
156
+ */
94
157
  set value(v) { this._value = v; }
158
+ /**
159
+ * El valor límite superior actual (solo usado cuando `range` es verdadero).
160
+ * @type {string}
161
+ */
95
162
  get valueEnd() { return this._valueEnd; }
163
+ /**
164
+ * Setter reactivo para el límite superior (usado exclusivamente en modo `range`).
165
+ */
96
166
  set valueEnd(v) { this._valueEnd = v; }
167
+ /**
168
+ * Calcula el porcentaje de llenado de la barra (0-100) basándose en el valor actual,
169
+ * el mínimo y el máximo. Se utiliza intensivamente para definir variables CSS (como `--_pct`).
170
+ */
97
171
  _pct(v) {
98
172
  const min = parseFloat(this.min) || 0;
99
173
  const max = parseFloat(this.max) || 100;
100
174
  const val = parseFloat(v) || 0;
175
+ // Math.max/min asegura que no desborde si por alguna razón val > max o val < min
101
176
  return Math.max(0, Math.min(100, ((val - min) / (max - min)) * 100));
102
177
  }
178
+ /**
179
+ * Maneja el evento nativo "input" de los inputs type="range" subyacentes.
180
+ * Se dispara contínuamente mientras el usuario arrastra el slider.
181
+ * Actualiza el estado reactivo inmediatamente para que la UI responda en tiempo real (60fps).
182
+ */
103
183
  _onInput(e, index) {
104
184
  const target = e.target;
105
185
  if (index === 0) {
@@ -108,8 +188,13 @@ let MoniSlider = class MoniSlider extends MoniElement {
108
188
  else {
109
189
  this._valueEnd = target.value;
110
190
  }
191
+ // Redisparamos el evento hacia afuera para que los frameworks (React/Vue/Angular) puedan atraparlo
111
192
  this.dispatchEvent(new Event('input', { bubbles: true, composed: true }));
112
193
  }
194
+ /**
195
+ * Maneja el evento nativo "change", que se dispara solo cuando el usuario SUELTA el slider
196
+ * (al terminar la interacción). Útil para peticiones HTTP pesadas o validaciones finales.
197
+ */
113
198
  _onChange(e, index) {
114
199
  const target = e.target;
115
200
  if (index === 0) {
@@ -121,11 +206,11 @@ let MoniSlider = class MoniSlider extends MoniElement {
121
206
  this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));
122
207
  }
123
208
  /**
124
- * Render a `<datalist>` element with tick options. When `tick-interval`
125
- * is set, generates options at every N units between min and max.
126
- * Otherwise, if `ticks` is set, just min and max.
127
- * Browsers that support datalist ticks for range (Chrome, Edge) will
128
- * render visual marks; Firefox ignores them.
209
+ * Renderiza un elemento `<datalist>` con opciones de marcas. Cuando se establece
210
+ * `tick-interval`, genera opciones cada N unidades entre el mínimo y el máximo.
211
+ * De lo contrario, si se establece `ticks`, solo mínimo y máximo.
212
+ * Los navegadores que soportan marcas de datalist para inputs de rango (Chrome, Edge)
213
+ * renderizarán marcas visuales; Firefox las ignora.
129
214
  */
130
215
  _renderDatalist() {
131
216
  if (this.tickInterval != null && this.tickInterval > 0) {
@@ -351,6 +436,33 @@ let MoniSlider = class MoniSlider extends MoniElement {
351
436
  }
352
437
  `
353
438
  ]; }
439
+ /**
440
+ * Ensambla la estructura del Shadow DOM del slider.
441
+ *
442
+ * **Cálculo de la pista llena:**
443
+ * `pct` y `pctEnd` son valores porcentuales (0–100) derivados de
444
+ * `_pct(value)`. Se inyectan como propiedades CSS personalizadas `--_start` y `--_end`
445
+ * en el contenedor `.slider`. El pseudo-elemento CSS `::before`
446
+ * utiliza estos valores en un `clip-path: polygon(...)` para renderizar la parte
447
+ * no llena de la pista, mientras que el `<span>` renderiza la parte llena.
448
+ *
449
+ * **Modo Rango (`range=true`):**
450
+ * - Se renderizan dos elementos `<input type="range">` (uno para el límite inferior,
451
+ * otro para el límite superior).
452
+ * - El CSS los superpone absolutamente para que los controles (thumbs) compartan la misma línea de pista.
453
+ * - `--_start` equivale al porcentaje del control inferior; `--_end` equivale a `100 - pctEnd`.
454
+ *
455
+ * **Tooltip indicador:**
456
+ * Los elementos tooltip `.tooltip-1` / `.tooltip-2` están posicionados absolutamente
457
+ * utilizando `inset-inline-start: ${pct}%` de modo que siguen al control activo
458
+ * por encima (o por debajo) a medida que el usuario arrastra. La visibilidad se controla
459
+ * puramente a través de selectores CSS `:focus` — no se requiere JavaScript.
460
+ *
461
+ * **Datalist de marcas (Tick datalist):**
462
+ * `_renderDatalist()` emite un `<datalist id="ticks">` solo cuando `ticks` o
463
+ * `tick-interval` está establecido. Chrome/Edge renderizan marcas nativas en inputs de rango
464
+ * que referencian un datalist a través del atributo `list`; Firefox lo ignora.
465
+ */
354
466
  render() {
355
467
  const pct = this._pct(this._value);
356
468
  const pctEnd = this._pct(this._valueEnd);
@@ -7,97 +7,107 @@
7
7
  import { MoniElement } from './_base/index.js';
8
8
  import './moni-icon.js';
9
9
  /**
10
- * Material Design 3 Snackbar component.
10
+ * Componente Material Design 3 Snackbar (Barra de notificaciones).
11
11
  *
12
- * Snackbars provide brief messages about app processes at the bottom of the
13
- * screen. They disappear automatically and do not require user action,
14
- * but may contain a single optional action.
12
+ * Los snackbars proporcionan mensajes breves sobre los procesos de la aplicación en la parte
13
+ * inferior de la pantalla. Desaparecen automáticamente y no requieren acción del usuario,
14
+ * pero pueden contener una única acción opcional.
15
15
  *
16
- * **M3 spec reference:** `m3-docs/components/snackbar/specs.md`
16
+ * **Referencia a la especificación M3:** `m3-docs/components/snackbar/specs.md`
17
17
  *
18
- * **Positioning model:**
19
- * The snackbar uses `position: fixed` so it renders in the viewport
20
- * regardless of which element it is placed in the DOM. The host element
21
- * displays as `block` rather than `contents` to ensure `position: fixed`
22
- * inside the shadow root anchors to the viewport (not to a stacking context
23
- * created by a transformed ancestor).
18
+ * **Modelo de posicionamiento:**
19
+ * El snackbar utiliza `position: fixed` para que se renderice en la ventana gráfica (viewport)
20
+ * independientemente del elemento en el que esté ubicado en el DOM. El elemento host
21
+ * se muestra como `block` en lugar de `contents` para asegurar que `position: fixed`
22
+ * dentro del shadow root se ancle a la ventana gráfica (no a un contexto de apilamiento
23
+ * creado por un ancestro transformado).
24
24
  *
25
- * **Show/hide mechanism:**
26
- * Visibility is controlled by `:host([active]) .snackbar` via CSS
27
- * `opacity`, `visibility`, and `transform`. This mirrors BeerCSS's
28
- * `.snackbar.active` pattern and allows CSS transition animations.
25
+ * **Mecanismo de mostrar/ocultar:**
26
+ * La visibilidad es controlada por `:host([active]) .snackbar` a través de CSS
27
+ * `opacity`, `visibility`, y `transform`. Esto imita el patrón `.snackbar.active`
28
+ * de BeerCSS y permite animaciones de transición CSS.
29
29
  *
30
- * **M3 text truncation:**
31
- * The message text is clamped to `maxLines` lines with `-webkit-line-clamp`.
32
- * The M3 spec requires a maximum of 2 lines; consumers can override this
33
- * via the `max-lines` attribute.
30
+ * **Truncamiento de texto M3:**
31
+ * El texto del mensaje se limita a `maxLines` líneas con `-webkit-line-clamp`.
32
+ * La especificación M3 requiere un máximo de 2 líneas; los consumidores pueden
33
+ * anular esto a través del atributo `max-lines`.
34
34
  *
35
35
  * @example
36
36
  * ```ts
37
37
  * const snackbar = document.querySelector('moni-snackbar') as MoniSnackbar;
38
38
  *
39
- * // Show for 3 seconds
40
- * snackbar.text = 'Item deleted';
41
- * snackbar.action = 'Undo';
39
+ * // Mostrar por 3 segundos
40
+ * snackbar.text = 'Elemento eliminado';
41
+ * snackbar.action = 'Deshacer';
42
42
  * snackbar.active = true;
43
43
  * setTimeout(() => { snackbar.active = false; }, 3000);
44
44
  * ```
45
45
  *
46
- * @slot default - Additional content placed inside the snackbar container.
46
+ * @slot default - Contenido adicional colocado dentro del contenedor del snackbar.
47
47
  *
48
- * @csspart snackbar - The inner snackbar container element.
49
- * @csspart text - The message text element.
50
- * @csspart action - The action button element.
48
+ * @csspart snackbar - El elemento contenedor interno del snackbar.
49
+ * @csspart text - El elemento del texto del mensaje.
50
+ * @csspart action - El elemento del botón de acción.
51
51
  */
52
52
  export declare class MoniSnackbar extends MoniElement {
53
53
  /**
54
- * The main message text displayed in the snackbar.
54
+ * El texto del mensaje principal mostrado en el snackbar.
55
55
  *
56
- * Clamped to `maxLines` lines. Long messages are truncated with `…`.
57
- * Per M3 spec, keep messages short and informative (under 60 characters).
56
+ * Limitado a `maxLines` líneas. Los mensajes largos se truncan con `…`.
57
+ * Según la especificación M3, mantenga los mensajes cortos e informativos (menos de 60 caracteres).
58
58
  *
59
59
  * @default ''
60
60
  */
61
61
  text: string;
62
62
  /**
63
- * Label for the optional action button.
63
+ * Etiqueta para el botón de acción opcional.
64
64
  *
65
- * When non-empty, renders a text button on the trailing edge of the snackbar.
66
- * The component dispatches a `'action'` event when the action is clicked.
67
- * This is a visual-only label the consumer handles the action logic.
65
+ * Cuando no está vacía, renderiza un botón de texto en el borde posterior (trailing) del snackbar.
66
+ * El componente despacha un evento `'action'` cuando se hace clic en la acción.
67
+ * Esta es una etiqueta puramente visual — el consumidor maneja la lógica de la acción.
68
68
  *
69
69
  * @default ''
70
70
  */
71
71
  action: string;
72
72
  /**
73
- * Vertical placement of the snackbar on the screen.
73
+ * Ubicación vertical del snackbar en la pantalla.
74
74
  *
75
- * - `'bottom'` (default) — Fixed 6rem from the bottom, centered horizontally.
76
- * - `'top'` — Fixed 6rem from the top, centered horizontally.
75
+ * - `'bottom'` (por defecto) — Fijo a 6rem desde la parte inferior, centrado horizontalmente.
76
+ * - `'top'` — Fijo a 6rem desde la parte superior, centrado horizontalmente.
77
77
  *
78
78
  * @default 'bottom'
79
79
  */
80
80
  placement: 'bottom' | 'top';
81
81
  /**
82
- * When `true`, the snackbar is visible.
82
+ * Cuando es `true`, el snackbar es visible.
83
83
  *
84
- * Toggle this attribute to show/hide the snackbar. The CSS transition
85
- * handles the fade-in/slide-up animation automatically.
86
- * Consumers are responsible for implementing the auto-dismiss timer.
84
+ * Alterne este atributo para mostrar/ocultar el snackbar. La transición CSS
85
+ * maneja la animación de desvanecimiento/deslizamiento hacia arriba (fade-in/slide-up) automáticamente.
86
+ * Los consumidores son responsables de implementar el temporizador de cierre automático.
87
87
  *
88
88
  * @default false
89
89
  */
90
90
  active: boolean;
91
91
  /**
92
- * Maximum number of lines of message text before it is clamped.
92
+ * Número máximo de líneas del texto del mensaje antes de que sea limitado (clamped).
93
93
  *
94
- * Uses `-webkit-line-clamp` with `display: -webkit-box` for cross-browser
95
- * multi-line truncation. The M3 spec recommends a maximum of 2 lines.
94
+ * Utiliza `-webkit-line-clamp` con `display: -webkit-box` para truncamiento multilínea
95
+ * compatible en varios navegadores. La especificación M3 recomienda un máximo de 2 líneas.
96
96
  *
97
97
  * @default 2
98
98
  */
99
99
  maxLines: number;
100
100
  static styles: import("lit").CSSResult[];
101
+ /**
102
+ * Renderiza el snackbar con su mensaje y el botón de acción opcional.
103
+ *
104
+ * El contenedor del snackbar utiliza `aria-live="polite"` para que los lectores
105
+ * de pantalla anuncien el mensaje sin interrumpir el flujo de lectura actual del usuario.
106
+ * Cuando se establece `action`, se renderiza un `<span>` como botón de acción según
107
+ * la especificación del Snackbar de M3.
108
+ * El atributo `placement` se asigna a una clase CSS que controla `inset-block-end`
109
+ * (snackbar inferior) vs `inset-block-start` (snackbar superior).
110
+ */
101
111
  render(): import("lit").TemplateResult<1>;
102
112
  }
103
113
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"moni-snackbar.d.ts","sourceRoot":"","sources":["../../src/components/moni-snackbar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,qBACa,YAAa,SAAQ,WAAW;IAC5C;;;;;;;OAOG;IAC0B,IAAI,SAAM;IAEvC;;;;;;;;OAQG;IAC0B,MAAM,SAAM;IAEzC;;;;;;;OAOG;IAEH,SAAS,EAAE,QAAQ,GAAG,KAAK,CAAY;IAEvC;;;;;;;;OAQG;IACyC,MAAM,UAAS;IAE3D;;;;;;;OAOG;IAEH,QAAQ,SAAK;IAEb,OAAgB,MAAM,4BAmFpB;IAEO,MAAM;CAef;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,eAAe,EAAE,YAAY,CAAC;KAC9B;CACD;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"moni-snackbar.d.ts","sourceRoot":"","sources":["../../src/components/moni-snackbar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,qBACa,YAAa,SAAQ,WAAW;IAC5C;;;;;;;OAOG;IAC0B,IAAI,SAAM;IAEvC;;;;;;;;OAQG;IAC0B,MAAM,SAAM;IAEzC;;;;;;;OAOG;IAEH,SAAS,EAAE,QAAQ,GAAG,KAAK,CAAY;IAEvC;;;;;;;;OAQG;IACyC,MAAM,UAAS;IAE3D;;;;;;;OAOG;IAEH,QAAQ,SAAK;IAEb,OAAgB,MAAM,4BAmFpB;IAEF;;;;;;;;;OASG;IACM,MAAM;CAef;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,eAAe,EAAE,YAAY,CAAC;KAC9B;CACD;AAED,eAAe,YAAY,CAAC"}
@@ -15,94 +15,94 @@ import { customElement, property } from 'lit/decorators.js';
15
15
  import { MoniElement, sharedStyles } from './_base/index.js';
16
16
  import './moni-icon.js';
17
17
  /**
18
- * Material Design 3 Snackbar component.
18
+ * Componente Material Design 3 Snackbar (Barra de notificaciones).
19
19
  *
20
- * Snackbars provide brief messages about app processes at the bottom of the
21
- * screen. They disappear automatically and do not require user action,
22
- * but may contain a single optional action.
20
+ * Los snackbars proporcionan mensajes breves sobre los procesos de la aplicación en la parte
21
+ * inferior de la pantalla. Desaparecen automáticamente y no requieren acción del usuario,
22
+ * pero pueden contener una única acción opcional.
23
23
  *
24
- * **M3 spec reference:** `m3-docs/components/snackbar/specs.md`
24
+ * **Referencia a la especificación M3:** `m3-docs/components/snackbar/specs.md`
25
25
  *
26
- * **Positioning model:**
27
- * The snackbar uses `position: fixed` so it renders in the viewport
28
- * regardless of which element it is placed in the DOM. The host element
29
- * displays as `block` rather than `contents` to ensure `position: fixed`
30
- * inside the shadow root anchors to the viewport (not to a stacking context
31
- * created by a transformed ancestor).
26
+ * **Modelo de posicionamiento:**
27
+ * El snackbar utiliza `position: fixed` para que se renderice en la ventana gráfica (viewport)
28
+ * independientemente del elemento en el que esté ubicado en el DOM. El elemento host
29
+ * se muestra como `block` en lugar de `contents` para asegurar que `position: fixed`
30
+ * dentro del shadow root se ancle a la ventana gráfica (no a un contexto de apilamiento
31
+ * creado por un ancestro transformado).
32
32
  *
33
- * **Show/hide mechanism:**
34
- * Visibility is controlled by `:host([active]) .snackbar` via CSS
35
- * `opacity`, `visibility`, and `transform`. This mirrors BeerCSS's
36
- * `.snackbar.active` pattern and allows CSS transition animations.
33
+ * **Mecanismo de mostrar/ocultar:**
34
+ * La visibilidad es controlada por `:host([active]) .snackbar` a través de CSS
35
+ * `opacity`, `visibility`, y `transform`. Esto imita el patrón `.snackbar.active`
36
+ * de BeerCSS y permite animaciones de transición CSS.
37
37
  *
38
- * **M3 text truncation:**
39
- * The message text is clamped to `maxLines` lines with `-webkit-line-clamp`.
40
- * The M3 spec requires a maximum of 2 lines; consumers can override this
41
- * via the `max-lines` attribute.
38
+ * **Truncamiento de texto M3:**
39
+ * El texto del mensaje se limita a `maxLines` líneas con `-webkit-line-clamp`.
40
+ * La especificación M3 requiere un máximo de 2 líneas; los consumidores pueden
41
+ * anular esto a través del atributo `max-lines`.
42
42
  *
43
43
  * @example
44
44
  * ```ts
45
45
  * const snackbar = document.querySelector('moni-snackbar') as MoniSnackbar;
46
46
  *
47
- * // Show for 3 seconds
48
- * snackbar.text = 'Item deleted';
49
- * snackbar.action = 'Undo';
47
+ * // Mostrar por 3 segundos
48
+ * snackbar.text = 'Elemento eliminado';
49
+ * snackbar.action = 'Deshacer';
50
50
  * snackbar.active = true;
51
51
  * setTimeout(() => { snackbar.active = false; }, 3000);
52
52
  * ```
53
53
  *
54
- * @slot default - Additional content placed inside the snackbar container.
54
+ * @slot default - Contenido adicional colocado dentro del contenedor del snackbar.
55
55
  *
56
- * @csspart snackbar - The inner snackbar container element.
57
- * @csspart text - The message text element.
58
- * @csspart action - The action button element.
56
+ * @csspart snackbar - El elemento contenedor interno del snackbar.
57
+ * @csspart text - El elemento del texto del mensaje.
58
+ * @csspart action - El elemento del botón de acción.
59
59
  */
60
60
  let MoniSnackbar = class MoniSnackbar extends MoniElement {
61
61
  constructor() {
62
62
  super(...arguments);
63
63
  /**
64
- * The main message text displayed in the snackbar.
64
+ * El texto del mensaje principal mostrado en el snackbar.
65
65
  *
66
- * Clamped to `maxLines` lines. Long messages are truncated with `…`.
67
- * Per M3 spec, keep messages short and informative (under 60 characters).
66
+ * Limitado a `maxLines` líneas. Los mensajes largos se truncan con `…`.
67
+ * Según la especificación M3, mantenga los mensajes cortos e informativos (menos de 60 caracteres).
68
68
  *
69
69
  * @default ''
70
70
  */
71
71
  this.text = '';
72
72
  /**
73
- * Label for the optional action button.
73
+ * Etiqueta para el botón de acción opcional.
74
74
  *
75
- * When non-empty, renders a text button on the trailing edge of the snackbar.
76
- * The component dispatches a `'action'` event when the action is clicked.
77
- * This is a visual-only label the consumer handles the action logic.
75
+ * Cuando no está vacía, renderiza un botón de texto en el borde posterior (trailing) del snackbar.
76
+ * El componente despacha un evento `'action'` cuando se hace clic en la acción.
77
+ * Esta es una etiqueta puramente visual — el consumidor maneja la lógica de la acción.
78
78
  *
79
79
  * @default ''
80
80
  */
81
81
  this.action = '';
82
82
  /**
83
- * Vertical placement of the snackbar on the screen.
83
+ * Ubicación vertical del snackbar en la pantalla.
84
84
  *
85
- * - `'bottom'` (default) — Fixed 6rem from the bottom, centered horizontally.
86
- * - `'top'` — Fixed 6rem from the top, centered horizontally.
85
+ * - `'bottom'` (por defecto) — Fijo a 6rem desde la parte inferior, centrado horizontalmente.
86
+ * - `'top'` — Fijo a 6rem desde la parte superior, centrado horizontalmente.
87
87
  *
88
88
  * @default 'bottom'
89
89
  */
90
90
  this.placement = 'bottom';
91
91
  /**
92
- * When `true`, the snackbar is visible.
92
+ * Cuando es `true`, el snackbar es visible.
93
93
  *
94
- * Toggle this attribute to show/hide the snackbar. The CSS transition
95
- * handles the fade-in/slide-up animation automatically.
96
- * Consumers are responsible for implementing the auto-dismiss timer.
94
+ * Alterne este atributo para mostrar/ocultar el snackbar. La transición CSS
95
+ * maneja la animación de desvanecimiento/deslizamiento hacia arriba (fade-in/slide-up) automáticamente.
96
+ * Los consumidores son responsables de implementar el temporizador de cierre automático.
97
97
  *
98
98
  * @default false
99
99
  */
100
100
  this.active = false;
101
101
  /**
102
- * Maximum number of lines of message text before it is clamped.
102
+ * Número máximo de líneas del texto del mensaje antes de que sea limitado (clamped).
103
103
  *
104
- * Uses `-webkit-line-clamp` with `display: -webkit-box` for cross-browser
105
- * multi-line truncation. The M3 spec recommends a maximum of 2 lines.
104
+ * Utiliza `-webkit-line-clamp` con `display: -webkit-box` para truncamiento multilínea
105
+ * compatible en varios navegadores. La especificación M3 recomienda un máximo de 2 líneas.
106
106
  *
107
107
  * @default 2
108
108
  */
@@ -192,6 +192,16 @@ let MoniSnackbar = class MoniSnackbar extends MoniElement {
192
192
  }
193
193
  `
194
194
  ]; }
195
+ /**
196
+ * Renderiza el snackbar con su mensaje y el botón de acción opcional.
197
+ *
198
+ * El contenedor del snackbar utiliza `aria-live="polite"` para que los lectores
199
+ * de pantalla anuncien el mensaje sin interrumpir el flujo de lectura actual del usuario.
200
+ * Cuando se establece `action`, se renderiza un `<span>` como botón de acción según
201
+ * la especificación del Snackbar de M3.
202
+ * El atributo `placement` se asigna a una clase CSS que controla `inset-block-end`
203
+ * (snackbar inferior) vs `inset-block-start` (snackbar superior).
204
+ */
195
205
  render() {
196
206
  return html `<div
197
207
  class="snackbar ${this.placement}"