@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
@@ -9,55 +9,55 @@ import { MoniElement } from './_base/index.js';
9
9
  import './moni-icon.js';
10
10
  import './moni-button.js';
11
11
  /**
12
- * Material Design 3 Side Sheet component.
12
+ * Componente Material Design 3 Side Sheet (Hoja o panel lateral).
13
13
  *
14
- * Side sheets show supplementary content that is anchored to the left or right
15
- * edge of the screen. They can be standard (inline with content) or modal
16
- * (overlaying content with a scrim).
14
+ * Los paneles laterales muestran contenido complementario que está anclado al borde
15
+ * izquierdo o derecho de la pantalla. Pueden ser estándar (en línea con el contenido)
16
+ * o modales (superpuestos al contenido con un fondo/scrim oscurecido).
17
17
  *
18
- * **M3 spec reference:** `m3-docs/components/side-sheets/specs.md`
18
+ * **Referencia a la especificación M3:** `m3-docs/components/side-sheets/specs.md`
19
19
  *
20
- * **Dialog behavior:**
21
- * Internally, this component uses the native HTML `<dialog>` element for robust
22
- * accessibility, focus trapping, and top-layer rendering.
23
- * - When `modal=true`, the sheet uses `dialog.showModal()`, rendering a scrim
24
- * backdrop and trapping focus. Pressing `Escape` closes it.
25
- * - When `modal=false`, the sheet uses `dialog.show()` and remains interactive
26
- * alongside the main page content.
20
+ * **Comportamiento del cuadro de diálogo (Dialog behavior):**
21
+ * Internamente, este componente utiliza el elemento HTML nativo `<dialog>` para una
22
+ * accesibilidad robusta, captura de foco y renderizado en la capa superior (top-layer).
23
+ * - Cuando `modal=true`, el panel usa `dialog.showModal()`, renderizando un fondo
24
+ * (scrim backdrop) y capturando el foco. Al presionar `Escape` se cierra.
25
+ * - Cuando `modal=false`, el panel usa `dialog.show()` y permanece interactivo
26
+ * junto al contenido de la página principal.
27
27
  *
28
- * **Drag & Resize (Moni feature):**
29
- * Setting the `with-handle` attribute adds a draggable grab handle to the inner
30
- * edge of the sheet. Users can click and drag this handle to resize the sheet's
31
- * width up to the `max-width` limit. If the user drags the sheet towards the
32
- * screen edge quickly or beyond a certain threshold, it automatically closes.
28
+ * **Arrastrar y redimensionar (Característica Moni):**
29
+ * Al configurar el atributo `with-handle`, se agrega un controlador de arrastre en el borde
30
+ * interior del panel. Los usuarios pueden hacer clic y arrastrar este controlador para
31
+ * redimensionar el ancho del panel hasta el límite `max-width`. Si el usuario arrastra
32
+ * el panel hacia el borde de la pantalla rápidamente o más allá de cierto umbral, se cierra automáticamente.
33
33
  *
34
- * **Animations:**
35
- * Side sheets slide in from the specified `side` (`left` or `right`). The open
36
- * and close animations are handled via CSS transitions tied to the `open` property.
34
+ * **Animaciones:**
35
+ * Los paneles laterales se deslizan desde el `side` (lado) especificado (`left` o `right`).
36
+ * Las animaciones de apertura y cierre se manejan a través de transiciones CSS vinculadas a la propiedad `open`.
37
37
  *
38
- * @fires close - Fired when the side sheet is completely closed (after animations
39
- * finish), either via the close button, scrim click, drag-to-close,
40
- * or `Escape` key.
38
+ * @fires close - Se dispara cuando el panel lateral está completamente cerrado (después de
39
+ * que terminan las animaciones), ya sea a través del botón de cierre, clic en el fondo (scrim),
40
+ * arrastrar para cerrar o la tecla `Escape`.
41
41
  *
42
42
  * @example
43
43
  * ```html
44
- * <!-- Modal side sheet on the right -->
45
- * <moni-side-sheet id="details-sheet" modal title="Item Details">
46
- * <p>Here is more information about the selected item.</p>
44
+ * <!-- Panel lateral modal a la derecha -->
45
+ * <moni-side-sheet id="details-sheet" modal title="Detalles del artículo">
46
+ * <p>Aquí hay más información sobre el artículo seleccionado.</p>
47
47
  * <div slot="footer">
48
- * <moni-button>Save</moni-button>
48
+ * <moni-button>Guardar</moni-button>
49
49
  * </div>
50
50
  * </moni-side-sheet>
51
51
  *
52
- * <!-- Resizable, detached side sheet on the left -->
52
+ * <!-- Panel lateral a la izquierda, desvinculado (detached) y redimensionable -->
53
53
  * <moni-side-sheet side="left" detached with-handle max-width="50vw">
54
- * <p>Navigation options</p>
54
+ * <p>Opciones de navegación</p>
55
55
  * </moni-side-sheet>
56
56
  * ```
57
57
  *
58
- * @slot default - Main body content.
59
- * @slot header - Custom header content (overrides `title`, close/back buttons remain).
60
- * @slot footer - Bottom-anchored action area.
58
+ * @slot default - Contenido del cuerpo principal.
59
+ * @slot header - Contenido de encabezado personalizado (anula `title`, los botones de cerrar/volver permanecen).
60
+ * @slot footer - Área de acción anclada en la parte inferior.
61
61
  */
62
62
  export declare class MoniSideSheet extends MoniElement {
63
63
  open: boolean;
@@ -79,15 +79,77 @@ export declare class MoniSideSheet extends MoniElement {
79
79
  private _defaultWidth;
80
80
  private _justDragged;
81
81
  private _getMaxWidthPx;
82
+ /**
83
+ * Hook del ciclo de vida reactivo (Lit).
84
+ * Coordina la transición del elemento `<dialog>` nativo.
85
+ * Utiliza `showModal()` para Side Sheets modales (con backdrop) y `show()`
86
+ * para Side Sheets estándar. Administra manualmente la clase `.opened` y escucha
87
+ * eventos `transitionend` para cerrar limpiamente el `<dialog>` sólo cuando
88
+ * las animaciones CSS terminan.
89
+ */
82
90
  updated(changedProperties: PropertyValues): void;
91
+ /**
92
+ * Inicia la interacción de arrastre (Drag) del Side Sheet.
93
+ * Verifica si el usuario agarró el componente desde el "handle" o la cabecera.
94
+ * Captura el ancho actual para determinar si el usuario pretende expandir o contraer
95
+ * el panel lateral mediante gestos.
96
+ */
83
97
  private _onPointerDown;
98
+ /**
99
+ * Procesa el movimiento del arrastre y aplica transformaciones CSS inline
100
+ * imperativamente a 60FPS. Diferencia la lógica dependiendo de la posición
101
+ * de anclaje (izquierdo vs derecho) y del estado actual (expandido vs contraído).
102
+ * Introduce una "resistencia elástica" si el usuario intenta expandir el panel
103
+ * más allá de su ancho máximo permitido (`maxWidth`).
104
+ */
84
105
  private _onPointerMove;
106
+ /**
107
+ * Evalúa el resultado de la interacción de arrastre (Pointer Up).
108
+ *
109
+ * Basado en umbrales de distancia física (`threshold`) y el estado actual, decide:
110
+ * 1. Expandir el panel por completo (modo "expanded").
111
+ * 2. Contraer el panel de vuelta a su tamaño estándar.
112
+ * 3. Cerrar el Side Sheet totalmente y disparar el evento `close`.
113
+ * Utiliza transiciones CSS nativas en vez de animar por frame para la resolución final.
114
+ */
85
115
  private _onPointerUp;
116
+ /**
117
+ * Aborta limpiamente la interacción de arrastre (Pointer Cancel).
118
+ * Remueve estilos imperativos y clases de estado (`dragging`) si el navegador
119
+ * toma el control o la interacción se interrumpe prematuramente.
120
+ */
86
121
  private _onPointerCancel;
122
+ /**
123
+ * Manejador del botón "Cerrar" explícito (X).
124
+ * Modifica la propiedad `open` a false y despacha el evento de cierre.
125
+ */
87
126
  private _onCloseClick;
127
+ /**
128
+ * Manejador del botón "Atrás".
129
+ * Emite un evento especializado `back` útil para Side Sheets de navegación anidada,
130
+ * permitiendo a los controladores padres reaccionar cambiando la vista interna.
131
+ */
88
132
  private _onBackClick;
133
+ /**
134
+ * Intercepta clics en el backdrop nativo del `<dialog>`.
135
+ * Si el componente es `modal`, hacer clic fuera del panel cierra la interfaz.
136
+ * Verifica `_justDragged` para evitar cerrar si el usuario hizo un click
137
+ * "accidental" derivado del final de un arrastre.
138
+ */
89
139
  private _onDialogClick;
90
140
  static styles: import("lit").CSSResult[];
141
+ /**
142
+ * Renderiza el panel lateral usando un elemento `<dialog>` nativo.
143
+ *
144
+ * **Manejo de estados:**
145
+ * Utiliza clases dinámicas para controlar el lado (`left`/`right`), el modo (`modal`/`standard`),
146
+ * y el estilo desvinculado (`detached`).
147
+ *
148
+ * **Atributo `[open]`:**
149
+ * La vinculación `?open=${this.open}` añade o remueve el atributo `open` nativo de HTML.
150
+ * Las transiciones visuales (slide-in/slide-out) son manejadas por el evento `transitionend`
151
+ * en el método `updated()` usando la clase `.opened`.
152
+ */
91
153
  render(): import("lit").TemplateResult<1>;
92
154
  }
93
155
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"moni-side-sheet.d.ts","sourceRoot":"","sources":["../../src/components/moni-side-sheet.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAa,cAAc,EAAE,MAAM,KAAK,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,gBAAgB,CAAC;AACxB,OAAO,kBAAkB,CAAC;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,qBACa,aAAc,SAAQ,WAAW;IACD,IAAI,UAAS;IACb,KAAK,UAAS;IAC7B,IAAI,EAAE,OAAO,GAAG,MAAM,CAAW;IACjC,KAAK,SAAM;IACI,QAAQ,UAAS;IACO,QAAQ,UAAS;IACjB,QAAQ,UAAS;IACf,UAAU,UAAS;IACpB,SAAS,UAAS;IAC7B,aAAa,SAAW;IAC7B,QAAQ,SAAM;IAElD,OAAO,CAAC,OAAO,CAAqB;IAErD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,cAAc;IAcb,OAAO,CAAC,iBAAiB,EAAE,cAAc;IAyDlD,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,YAAY;IAiFpB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IAUtB,OAAgB,MAAM,4BAgMpB;IAEO,MAAM;CA0Df;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,iBAAiB,EAAE,aAAa,CAAC;KACjC;CACD;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"moni-side-sheet.d.ts","sourceRoot":"","sources":["../../src/components/moni-side-sheet.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAa,cAAc,EAAE,MAAM,KAAK,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,gBAAgB,CAAC;AACxB,OAAO,kBAAkB,CAAC;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,qBACa,aAAc,SAAQ,WAAW;IACD,IAAI,UAAS;IACb,KAAK,UAAS;IAC7B,IAAI,EAAE,OAAO,GAAG,MAAM,CAAW;IACjC,KAAK,SAAM;IACI,QAAQ,UAAS;IACO,QAAQ,UAAS;IACjB,QAAQ,UAAS;IACf,UAAU,UAAS;IACpB,SAAS,UAAS;IAC7B,aAAa,SAAW;IAC7B,QAAQ,SAAM;IAElD,OAAO,CAAC,OAAO,CAAqB;IAErD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,cAAc;IActB;;;;;;;OAOG;IACM,OAAO,CAAC,iBAAiB,EAAE,cAAc;IAyDlD;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAmBtB;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAkCtB;;;;;;;;OAQG;IACH,OAAO,CAAC,YAAY;IAiFpB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAKrB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAIpB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAUtB,OAAgB,MAAM,4BAgMpB;IAEF;;;;;;;;;;;OAWG;IACM,MAAM;CA0Df;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,iBAAiB,EAAE,aAAa,CAAC;KACjC;CACD;AAED,eAAe,aAAa,CAAC"}
@@ -16,55 +16,55 @@ import { MoniElement, sharedStyles } from './_base/index.js';
16
16
  import './moni-icon.js';
17
17
  import './moni-button.js';
18
18
  /**
19
- * Material Design 3 Side Sheet component.
19
+ * Componente Material Design 3 Side Sheet (Hoja o panel lateral).
20
20
  *
21
- * Side sheets show supplementary content that is anchored to the left or right
22
- * edge of the screen. They can be standard (inline with content) or modal
23
- * (overlaying content with a scrim).
21
+ * Los paneles laterales muestran contenido complementario que está anclado al borde
22
+ * izquierdo o derecho de la pantalla. Pueden ser estándar (en línea con el contenido)
23
+ * o modales (superpuestos al contenido con un fondo/scrim oscurecido).
24
24
  *
25
- * **M3 spec reference:** `m3-docs/components/side-sheets/specs.md`
25
+ * **Referencia a la especificación M3:** `m3-docs/components/side-sheets/specs.md`
26
26
  *
27
- * **Dialog behavior:**
28
- * Internally, this component uses the native HTML `<dialog>` element for robust
29
- * accessibility, focus trapping, and top-layer rendering.
30
- * - When `modal=true`, the sheet uses `dialog.showModal()`, rendering a scrim
31
- * backdrop and trapping focus. Pressing `Escape` closes it.
32
- * - When `modal=false`, the sheet uses `dialog.show()` and remains interactive
33
- * alongside the main page content.
27
+ * **Comportamiento del cuadro de diálogo (Dialog behavior):**
28
+ * Internamente, este componente utiliza el elemento HTML nativo `<dialog>` para una
29
+ * accesibilidad robusta, captura de foco y renderizado en la capa superior (top-layer).
30
+ * - Cuando `modal=true`, el panel usa `dialog.showModal()`, renderizando un fondo
31
+ * (scrim backdrop) y capturando el foco. Al presionar `Escape` se cierra.
32
+ * - Cuando `modal=false`, el panel usa `dialog.show()` y permanece interactivo
33
+ * junto al contenido de la página principal.
34
34
  *
35
- * **Drag & Resize (Moni feature):**
36
- * Setting the `with-handle` attribute adds a draggable grab handle to the inner
37
- * edge of the sheet. Users can click and drag this handle to resize the sheet's
38
- * width up to the `max-width` limit. If the user drags the sheet towards the
39
- * screen edge quickly or beyond a certain threshold, it automatically closes.
35
+ * **Arrastrar y redimensionar (Característica Moni):**
36
+ * Al configurar el atributo `with-handle`, se agrega un controlador de arrastre en el borde
37
+ * interior del panel. Los usuarios pueden hacer clic y arrastrar este controlador para
38
+ * redimensionar el ancho del panel hasta el límite `max-width`. Si el usuario arrastra
39
+ * el panel hacia el borde de la pantalla rápidamente o más allá de cierto umbral, se cierra automáticamente.
40
40
  *
41
- * **Animations:**
42
- * Side sheets slide in from the specified `side` (`left` or `right`). The open
43
- * and close animations are handled via CSS transitions tied to the `open` property.
41
+ * **Animaciones:**
42
+ * Los paneles laterales se deslizan desde el `side` (lado) especificado (`left` o `right`).
43
+ * Las animaciones de apertura y cierre se manejan a través de transiciones CSS vinculadas a la propiedad `open`.
44
44
  *
45
- * @fires close - Fired when the side sheet is completely closed (after animations
46
- * finish), either via the close button, scrim click, drag-to-close,
47
- * or `Escape` key.
45
+ * @fires close - Se dispara cuando el panel lateral está completamente cerrado (después de
46
+ * que terminan las animaciones), ya sea a través del botón de cierre, clic en el fondo (scrim),
47
+ * arrastrar para cerrar o la tecla `Escape`.
48
48
  *
49
49
  * @example
50
50
  * ```html
51
- * <!-- Modal side sheet on the right -->
52
- * <moni-side-sheet id="details-sheet" modal title="Item Details">
53
- * <p>Here is more information about the selected item.</p>
51
+ * <!-- Panel lateral modal a la derecha -->
52
+ * <moni-side-sheet id="details-sheet" modal title="Detalles del artículo">
53
+ * <p>Aquí hay más información sobre el artículo seleccionado.</p>
54
54
  * <div slot="footer">
55
- * <moni-button>Save</moni-button>
55
+ * <moni-button>Guardar</moni-button>
56
56
  * </div>
57
57
  * </moni-side-sheet>
58
58
  *
59
- * <!-- Resizable, detached side sheet on the left -->
59
+ * <!-- Panel lateral a la izquierda, desvinculado (detached) y redimensionable -->
60
60
  * <moni-side-sheet side="left" detached with-handle max-width="50vw">
61
- * <p>Navigation options</p>
61
+ * <p>Opciones de navegación</p>
62
62
  * </moni-side-sheet>
63
63
  * ```
64
64
  *
65
- * @slot default - Main body content.
66
- * @slot header - Custom header content (overrides `title`, close/back buttons remain).
67
- * @slot footer - Bottom-anchored action area.
65
+ * @slot default - Contenido del cuerpo principal.
66
+ * @slot header - Contenido de encabezado personalizado (anula `title`, los botones de cerrar/volver permanecen).
67
+ * @slot footer - Área de acción anclada en la parte inferior.
68
68
  */
69
69
  let MoniSideSheet = class MoniSideSheet extends MoniElement {
70
70
  constructor() {
@@ -100,6 +100,14 @@ let MoniSideSheet = class MoniSideSheet extends MoniElement {
100
100
  }
101
101
  return 600;
102
102
  }
103
+ /**
104
+ * Hook del ciclo de vida reactivo (Lit).
105
+ * Coordina la transición del elemento `<dialog>` nativo.
106
+ * Utiliza `showModal()` para Side Sheets modales (con backdrop) y `show()`
107
+ * para Side Sheets estándar. Administra manualmente la clase `.opened` y escucha
108
+ * eventos `transitionend` para cerrar limpiamente el `<dialog>` sólo cuando
109
+ * las animaciones CSS terminan.
110
+ */
103
111
  updated(changedProperties) {
104
112
  super.updated(changedProperties);
105
113
  if (changedProperties.has('expandedWidth')) {
@@ -158,6 +166,12 @@ let MoniSideSheet = class MoniSideSheet extends MoniElement {
158
166
  }
159
167
  }
160
168
  }
169
+ /**
170
+ * Inicia la interacción de arrastre (Drag) del Side Sheet.
171
+ * Verifica si el usuario agarró el componente desde el "handle" o la cabecera.
172
+ * Captura el ancho actual para determinar si el usuario pretende expandir o contraer
173
+ * el panel lateral mediante gestos.
174
+ */
161
175
  _onPointerDown(e) {
162
176
  if (!this.withHandle)
163
177
  return;
@@ -175,6 +189,13 @@ let MoniSideSheet = class MoniSideSheet extends MoniElement {
175
189
  target.setPointerCapture(e.pointerId);
176
190
  this._dialog.classList.add('dragging');
177
191
  }
192
+ /**
193
+ * Procesa el movimiento del arrastre y aplica transformaciones CSS inline
194
+ * imperativamente a 60FPS. Diferencia la lógica dependiendo de la posición
195
+ * de anclaje (izquierdo vs derecho) y del estado actual (expandido vs contraído).
196
+ * Introduce una "resistencia elástica" si el usuario intenta expandir el panel
197
+ * más allá de su ancho máximo permitido (`maxWidth`).
198
+ */
178
199
  _onPointerMove(e) {
179
200
  if (!this._isDragging)
180
201
  return;
@@ -210,6 +231,15 @@ let MoniSideSheet = class MoniSideSheet extends MoniElement {
210
231
  }
211
232
  }
212
233
  }
234
+ /**
235
+ * Evalúa el resultado de la interacción de arrastre (Pointer Up).
236
+ *
237
+ * Basado en umbrales de distancia física (`threshold`) y el estado actual, decide:
238
+ * 1. Expandir el panel por completo (modo "expanded").
239
+ * 2. Contraer el panel de vuelta a su tamaño estándar.
240
+ * 3. Cerrar el Side Sheet totalmente y disparar el evento `close`.
241
+ * Utiliza transiciones CSS nativas en vez de animar por frame para la resolución final.
242
+ */
213
243
  _onPointerUp(e) {
214
244
  if (!this._isDragging)
215
245
  return;
@@ -293,6 +323,11 @@ let MoniSideSheet = class MoniSideSheet extends MoniElement {
293
323
  }
294
324
  }
295
325
  }
326
+ /**
327
+ * Aborta limpiamente la interacción de arrastre (Pointer Cancel).
328
+ * Remueve estilos imperativos y clases de estado (`dragging`) si el navegador
329
+ * toma el control o la interacción se interrumpe prematuramente.
330
+ */
296
331
  _onPointerCancel(e) {
297
332
  if (!this._isDragging)
298
333
  return;
@@ -303,13 +338,28 @@ let MoniSideSheet = class MoniSideSheet extends MoniElement {
303
338
  this._dialog.style.transform = '';
304
339
  this._dialog.style.width = '';
305
340
  }
341
+ /**
342
+ * Manejador del botón "Cerrar" explícito (X).
343
+ * Modifica la propiedad `open` a false y despacha el evento de cierre.
344
+ */
306
345
  _onCloseClick() {
307
346
  this.open = false;
308
347
  this.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));
309
348
  }
349
+ /**
350
+ * Manejador del botón "Atrás".
351
+ * Emite un evento especializado `back` útil para Side Sheets de navegación anidada,
352
+ * permitiendo a los controladores padres reaccionar cambiando la vista interna.
353
+ */
310
354
  _onBackClick() {
311
355
  this.dispatchEvent(new CustomEvent('back', { bubbles: true, composed: true }));
312
356
  }
357
+ /**
358
+ * Intercepta clics en el backdrop nativo del `<dialog>`.
359
+ * Si el componente es `modal`, hacer clic fuera del panel cierra la interfaz.
360
+ * Verifica `_justDragged` para evitar cerrar si el usuario hizo un click
361
+ * "accidental" derivado del final de un arrastre.
362
+ */
313
363
  _onDialogClick(e) {
314
364
  if (this._justDragged) {
315
365
  this._justDragged = false;
@@ -512,6 +562,18 @@ let MoniSideSheet = class MoniSideSheet extends MoniElement {
512
562
  }
513
563
  `
514
564
  ]; }
565
+ /**
566
+ * Renderiza el panel lateral usando un elemento `<dialog>` nativo.
567
+ *
568
+ * **Manejo de estados:**
569
+ * Utiliza clases dinámicas para controlar el lado (`left`/`right`), el modo (`modal`/`standard`),
570
+ * y el estilo desvinculado (`detached`).
571
+ *
572
+ * **Atributo `[open]`:**
573
+ * La vinculación `?open=${this.open}` añade o remueve el atributo `open` nativo de HTML.
574
+ * Las transiciones visuales (slide-in/slide-out) son manejadas por el evento `transitionend`
575
+ * en el método `updated()` usando la clase `.opened`.
576
+ */
515
577
  render() {
516
578
  const classes = [
517
579
  this.side,
@@ -7,92 +7,203 @@
7
7
  import { MoniElement } from './_base/index.js';
8
8
  import './moni-icon.js';
9
9
  /**
10
- * Material Design 3 Slider component.
10
+ * Componente Material Design 3 Slider (Control deslizante).
11
11
  *
12
- * Sliders allow users to select a single value or a range of values from a
13
- * continuous or discrete scale.
12
+ * Los sliders permiten a los usuarios seleccionar un solo valor o un rango de valores
13
+ * desde una escala continua o discreta.
14
14
  *
15
- * **M3 spec reference:** `m3-docs/components/sliders/specs.md`
15
+ * **Referencia a la especificación M3:** `m3-docs/components/sliders/specs.md`
16
16
  *
17
- * **Slider modes:**
18
- * - **Continuous** (default) — Smooth drag between `min` and `max`. Use when
19
- * the exact value does not need to be defined by the user (e.g. volume).
20
- * - **Discrete** — Set `step` to snap to discrete intervals. Tick marks
21
- * appear via the native `<datalist>` element in Chrome/Edge. Firefox does
22
- * not render datalist ticks for range inputs.
23
- * - **Range** (`range` attribute) — Two thumbs that define a minimum and
24
- * maximum value within the slider's extent.
25
- * - **Vertical** (`vertical` attribute) — 90° rotated slider.
17
+ * **Modos de Slider:**
18
+ * - **Continuo (Continuous)** (por defecto) — Arrastre suave entre `min` y `max`. Úsalo cuando
19
+ * no sea necesario que el usuario defina un valor exacto (ej. volumen).
20
+ * - **Discreto (Discrete)** — Configura `step` para ajustarse a intervalos discretos. Las marcas
21
+ * (tick marks) aparecen a través del elemento nativo `<datalist>` en Chrome/Edge. Firefox no
22
+ * renderiza marcas de datalist para inputs de tipo rango.
23
+ * - **Rango (Range)** (atributo `range`) — Dos controles (thumbs) que definen un valor mínimo y
24
+ * máximo dentro de la extensión del slider.
25
+ * - **Vertical** (atributo `vertical`) — Slider rotado 90°.
26
26
  *
27
- * **Value label tooltip:**
28
- * When `indicator` is set, the current value is displayed in a tooltip above
29
- * (or below, via `indicator-placement`) the active thumb during focus/drag.
27
+ * **Tooltip indicador de valor (Value label tooltip):**
28
+ * Cuando se configura `indicator`, el valor actual se muestra en un tooltip por encima
29
+ * (o por debajo, a través de `indicator-placement`) del control activo durante el foco/arrastre.
30
30
  *
31
- * **Tick marks:**
32
- * - `ticks` attribute: adds datalist with marks at `min` and `max` only.
33
- * - `tick-interval` attribute: generates datalist options at every N units
34
- * between `min` and `max`, creating visible tick marks at those positions.
31
+ * **Marcas (Tick marks):**
32
+ * - Atributo `ticks`: agrega datalist con marcas solo en `min` y `max`.
33
+ * - Atributo `tick-interval`: genera opciones de datalist cada N unidades
34
+ * entre `min` y `max`, creando marcas visibles en esas posiciones.
35
35
  *
36
- * **Internal state management:**
37
- * Uses `@state()` for `_value` and `_valueHigh` so the fill track width and
38
- * tooltip position update reactively on every drag `input` event without
39
- * waiting for the `change` event.
36
+ * **Manejo del estado interno:**
37
+ * Usa `@state()` para `_value` y `_valueHigh` de modo que el ancho de la pista de llenado y
38
+ * la posición del tooltip se actualicen de forma reactiva en cada evento `input` de arrastre sin
39
+ * esperar al evento `change`.
40
40
  *
41
- * @fires change - Bubbles and is composed. Fired when dragging ends and the
42
- * value is committed. Read `element.value` for the new value.
43
- * @fires input - Fired on every drag step. Read `element.value` for the
44
- * live value during drag.
41
+ * @fires change - Burbujea y está compuesto. Se dispara cuando termina el arrastre y el
42
+ * valor se confirma. Lee `element.value` para el nuevo valor.
43
+ * @fires input - Se dispara en cada paso del arrastre. Lee `element.value` para el
44
+ * valor en vivo durante el arrastre.
45
45
  *
46
46
  * @example
47
47
  * ```html
48
- * <!-- Continuous slider -->
48
+ * <!-- Slider continuo -->
49
49
  * <moni-slider name="volume" min="0" max="100" value="60"></moni-slider>
50
50
  *
51
- * <!-- Discrete slider with ticks every 10 units -->
51
+ * <!-- Slider discreto con marcas cada 10 unidades -->
52
52
  * <moni-slider step="10" tick-interval="10" indicator></moni-slider>
53
53
  *
54
- * <!-- Range slider -->
54
+ * <!-- Slider de rango -->
55
55
  * <moni-slider range min="0" max="100" value="20" value-high="80"></moni-slider>
56
56
  * ```
57
57
  *
58
- * @csspart slider - The outer slider container.
59
- * @csspart track - The track background.
60
- * @csspart fill - The filled portion of the track.
61
- * @csspart indicator - The value label tooltip.
58
+ * @csspart slider - El contenedor exterior del slider.
59
+ * @csspart track - El fondo de la pista.
60
+ * @csspart fill - La porción llena de la pista.
61
+ * @csspart indicator - El tooltip de la etiqueta de valor.
62
62
  */
63
63
  export declare class MoniSlider extends MoniElement {
64
+ /**
65
+ * Nombre del input del slider, usado en el envío de formularios.
66
+ * @type {string}
67
+ */
64
68
  name: string;
69
+ /**
70
+ * Valor mínimo del slider.
71
+ * @type {string}
72
+ * @default '0'
73
+ */
65
74
  min: string;
75
+ /**
76
+ * Valor máximo del slider.
77
+ * @type {string}
78
+ * @default '100'
79
+ */
66
80
  max: string;
81
+ /**
82
+ * Granularidad del slider. Debe ser un número positivo.
83
+ * @type {string}
84
+ */
67
85
  step: string;
86
+ /**
87
+ * Anula (overrides) el intervalo predeterminado de las marcas cuando `ticks` es verdadero.
88
+ * @type {number | null}
89
+ */
68
90
  tickInterval: number | null;
91
+ /**
92
+ * Nombre del icono (Material Symbols) mostrado dentro del control (thumb) del slider.
93
+ * @type {string}
94
+ */
69
95
  insetIcon: string;
96
+ /**
97
+ * Ubicación del tooltip indicador de valor.
98
+ * @type {'top' | 'bottom'}
99
+ * @default 'top'
100
+ */
70
101
  indicatorPlacement: 'top' | 'bottom';
102
+ /**
103
+ * Grosor/tamaño de la pista y el control (thumb) del slider.
104
+ * @type {'tiny' | 'small' | 'medium' | 'large' | 'extra'}
105
+ * @default 'medium'
106
+ */
71
107
  size: 'tiny' | 'small' | 'medium' | 'large' | 'extra';
108
+ /**
109
+ * Habilita el modo de rango (dos controles: `value` y `valueEnd`).
110
+ * @type {boolean}
111
+ */
72
112
  range: boolean;
113
+ /**
114
+ * Deshabilita el slider.
115
+ * @type {boolean}
116
+ */
73
117
  disabled: boolean;
118
+ /**
119
+ * Renderiza marcas (tick marks) a lo largo de la pista en cada intervalo de paso.
120
+ * @type {boolean}
121
+ */
74
122
  ticks: boolean;
123
+ /**
124
+ * Muestra un indicador de tooltip mostrando el(los) valor(es) actual(es) mientras se arrastra.
125
+ * @type {boolean}
126
+ */
75
127
  indicator: boolean;
128
+ /**
129
+ * Renderiza el slider de forma vertical en lugar de horizontal.
130
+ * @type {boolean}
131
+ */
76
132
  isVertical: boolean;
77
- /** Internal reactive statetriggers CSS var updates on every input event */
133
+ /** Estado reactivo internodispara actualizaciones de variables CSS en cada evento de input */
78
134
  private _value;
79
135
  private _valueEnd;
136
+ /**
137
+ * El valor primario actual del slider (o el límite inferior en modo de rango).
138
+ * @type {string}
139
+ */
80
140
  get value(): string;
141
+ /**
142
+ * Intercepta asignaciones imperativas (`element.value = "X"`) para actualizar
143
+ * el estado interno de Lit, garantizando reactividad instantánea del DOM.
144
+ */
81
145
  set value(v: string);
146
+ /**
147
+ * El valor límite superior actual (solo usado cuando `range` es verdadero).
148
+ * @type {string}
149
+ */
82
150
  get valueEnd(): string;
151
+ /**
152
+ * Setter reactivo para el límite superior (usado exclusivamente en modo `range`).
153
+ */
83
154
  set valueEnd(v: string);
155
+ /**
156
+ * Calcula el porcentaje de llenado de la barra (0-100) basándose en el valor actual,
157
+ * el mínimo y el máximo. Se utiliza intensivamente para definir variables CSS (como `--_pct`).
158
+ */
84
159
  private _pct;
160
+ /**
161
+ * Maneja el evento nativo "input" de los inputs type="range" subyacentes.
162
+ * Se dispara contínuamente mientras el usuario arrastra el slider.
163
+ * Actualiza el estado reactivo inmediatamente para que la UI responda en tiempo real (60fps).
164
+ */
85
165
  private _onInput;
166
+ /**
167
+ * Maneja el evento nativo "change", que se dispara solo cuando el usuario SUELTA el slider
168
+ * (al terminar la interacción). Útil para peticiones HTTP pesadas o validaciones finales.
169
+ */
86
170
  private _onChange;
87
171
  /**
88
- * Render a `<datalist>` element with tick options. When `tick-interval`
89
- * is set, generates options at every N units between min and max.
90
- * Otherwise, if `ticks` is set, just min and max.
91
- * Browsers that support datalist ticks for range (Chrome, Edge) will
92
- * render visual marks; Firefox ignores them.
172
+ * Renderiza un elemento `<datalist>` con opciones de marcas. Cuando se establece
173
+ * `tick-interval`, genera opciones cada N unidades entre el mínimo y el máximo.
174
+ * De lo contrario, si se establece `ticks`, solo mínimo y máximo.
175
+ * Los navegadores que soportan marcas de datalist para inputs de rango (Chrome, Edge)
176
+ * renderizarán marcas visuales; Firefox las ignora.
93
177
  */
94
178
  private _renderDatalist;
95
179
  static styles: import("lit").CSSResult[];
180
+ /**
181
+ * Ensambla la estructura del Shadow DOM del slider.
182
+ *
183
+ * **Cálculo de la pista llena:**
184
+ * `pct` y `pctEnd` son valores porcentuales (0–100) derivados de
185
+ * `_pct(value)`. Se inyectan como propiedades CSS personalizadas `--_start` y `--_end`
186
+ * en el contenedor `.slider`. El pseudo-elemento CSS `::before`
187
+ * utiliza estos valores en un `clip-path: polygon(...)` para renderizar la parte
188
+ * no llena de la pista, mientras que el `<span>` renderiza la parte llena.
189
+ *
190
+ * **Modo Rango (`range=true`):**
191
+ * - Se renderizan dos elementos `<input type="range">` (uno para el límite inferior,
192
+ * otro para el límite superior).
193
+ * - El CSS los superpone absolutamente para que los controles (thumbs) compartan la misma línea de pista.
194
+ * - `--_start` equivale al porcentaje del control inferior; `--_end` equivale a `100 - pctEnd`.
195
+ *
196
+ * **Tooltip indicador:**
197
+ * Los elementos tooltip `.tooltip-1` / `.tooltip-2` están posicionados absolutamente
198
+ * utilizando `inset-inline-start: ${pct}%` de modo que siguen al control activo
199
+ * por encima (o por debajo) a medida que el usuario arrastra. La visibilidad se controla
200
+ * puramente a través de selectores CSS `:focus` — no se requiere JavaScript.
201
+ *
202
+ * **Datalist de marcas (Tick datalist):**
203
+ * `_renderDatalist()` emite un `<datalist id="ticks">` solo cuando `ticks` o
204
+ * `tick-interval` está establecido. Chrome/Edge renderizan marcas nativas en inputs de rango
205
+ * que referencian un datalist a través del atributo `list`; Firefox lo ignora.
206
+ */
96
207
  render(): import("lit").TemplateResult<1>;
97
208
  }
98
209
  declare global {