@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.
- package/custom-elements.json +5230 -1007
- package/dist/components/_base/moni-element.d.ts +16 -9
- package/dist/components/_base/moni-element.d.ts.map +1 -1
- package/dist/components/_base/moni-element.js +63 -9
- package/dist/components/index.js +2 -2
- package/dist/components/loading-shapes.d.ts +19 -0
- package/dist/components/loading-shapes.d.ts.map +1 -1
- package/dist/components/loading-shapes.js +19 -0
- package/dist/components/moni-app-bar.d.ts +72 -62
- package/dist/components/moni-app-bar.d.ts.map +1 -1
- package/dist/components/moni-app-bar.js +72 -62
- package/dist/components/moni-badge.d.ts +64 -65
- package/dist/components/moni-badge.d.ts.map +1 -1
- package/dist/components/moni-badge.js +64 -66
- package/dist/components/moni-bottom-sheet.d.ts +129 -61
- package/dist/components/moni-bottom-sheet.d.ts.map +1 -1
- package/dist/components/moni-bottom-sheet.js +217 -131
- package/dist/components/moni-button-group.d.ts +107 -29
- package/dist/components/moni-button-group.d.ts.map +1 -1
- package/dist/components/moni-button-group.js +107 -29
- package/dist/components/moni-button-segment.d.ts +53 -12
- package/dist/components/moni-button-segment.d.ts.map +1 -1
- package/dist/components/moni-button-segment.js +53 -12
- package/dist/components/moni-button.d.ts +116 -38
- package/dist/components/moni-button.d.ts.map +1 -1
- package/dist/components/moni-button.js +128 -38
- package/dist/components/moni-card.d.ts +68 -50
- package/dist/components/moni-card.d.ts.map +1 -1
- package/dist/components/moni-card.js +68 -50
- package/dist/components/moni-carousel.d.ts +484 -53
- package/dist/components/moni-carousel.d.ts.map +1 -1
- package/dist/components/moni-carousel.js +1024 -245
- package/dist/components/moni-checkbox.d.ts +49 -46
- package/dist/components/moni-checkbox.d.ts.map +1 -1
- package/dist/components/moni-checkbox.js +55 -48
- package/dist/components/moni-chip.d.ts +100 -33
- package/dist/components/moni-chip.d.ts.map +1 -1
- package/dist/components/moni-chip.js +104 -34
- package/dist/components/moni-color-field.d.ts +99 -24
- package/dist/components/moni-color-field.d.ts.map +1 -1
- package/dist/components/moni-color-field.js +99 -24
- package/dist/components/moni-context-menu.d.ts +72 -26
- package/dist/components/moni-context-menu.d.ts.map +1 -1
- package/dist/components/moni-context-menu.js +76 -30
- package/dist/components/moni-dialog.d.ts +84 -59
- package/dist/components/moni-dialog.d.ts.map +1 -1
- package/dist/components/moni-dialog.js +105 -58
- package/dist/components/moni-divider.d.ts +39 -27
- package/dist/components/moni-divider.d.ts.map +1 -1
- package/dist/components/moni-divider.js +42 -30
- package/dist/components/moni-expansion.d.ts +32 -22
- package/dist/components/moni-expansion.d.ts.map +1 -1
- package/dist/components/moni-expansion.js +32 -22
- package/dist/components/moni-fab-menu.d.ts +61 -23
- package/dist/components/moni-fab-menu.d.ts.map +1 -1
- package/dist/components/moni-fab-menu.js +69 -31
- package/dist/components/moni-fab.d.ts +86 -28
- package/dist/components/moni-fab.d.ts.map +1 -1
- package/dist/components/moni-fab.js +92 -34
- package/dist/components/moni-file-field.d.ts +118 -30
- package/dist/components/moni-file-field.d.ts.map +1 -1
- package/dist/components/moni-file-field.js +118 -30
- package/dist/components/moni-icon.d.ts +40 -35
- package/dist/components/moni-icon.d.ts.map +1 -1
- package/dist/components/moni-icon.js +43 -38
- package/dist/components/moni-list-item.d.ts +46 -33
- package/dist/components/moni-list-item.d.ts.map +1 -1
- package/dist/components/moni-list-item.js +61 -41
- package/dist/components/moni-list.d.ts +30 -20
- package/dist/components/moni-list.d.ts.map +1 -1
- package/dist/components/moni-list.js +36 -21
- package/dist/components/moni-loading-indicator.d.ts +54 -22
- package/dist/components/moni-loading-indicator.d.ts.map +1 -1
- package/dist/components/moni-loading-indicator.js +54 -22
- package/dist/components/moni-menu-item.d.ts +23 -16
- package/dist/components/moni-menu-item.d.ts.map +1 -1
- package/dist/components/moni-menu-item.js +23 -16
- package/dist/components/moni-menu.d.ts +81 -28
- package/dist/components/moni-menu.d.ts.map +1 -1
- package/dist/components/moni-menu.js +81 -30
- package/dist/components/moni-morph-modal.d.ts +141 -0
- package/dist/components/moni-morph-modal.d.ts.map +1 -1
- package/dist/components/moni-morph-modal.js +295 -58
- package/dist/components/moni-nav-item.d.ts +59 -29
- package/dist/components/moni-nav-item.d.ts.map +1 -1
- package/dist/components/moni-nav-item.js +59 -29
- package/dist/components/moni-nav.d.ts +94 -35
- package/dist/components/moni-nav.d.ts.map +1 -1
- package/dist/components/moni-nav.js +94 -35
- package/dist/components/moni-progress.d.ts +99 -55
- package/dist/components/moni-progress.d.ts.map +1 -1
- package/dist/components/moni-progress.js +99 -55
- package/dist/components/moni-radio.d.ts +62 -50
- package/dist/components/moni-radio.d.ts.map +1 -1
- package/dist/components/moni-radio.js +65 -52
- package/dist/components/moni-ripple.d.ts +74 -59
- package/dist/components/moni-ripple.d.ts.map +1 -1
- package/dist/components/moni-ripple.js +74 -59
- package/dist/components/moni-segmented-button.d.ts +91 -16
- package/dist/components/moni-segmented-button.d.ts.map +1 -1
- package/dist/components/moni-segmented-button.js +94 -17
- package/dist/components/moni-select-option.d.ts +30 -23
- package/dist/components/moni-select-option.d.ts.map +1 -1
- package/dist/components/moni-select-option.js +30 -23
- package/dist/components/moni-select.d.ts +300 -35
- package/dist/components/moni-select.d.ts.map +1 -1
- package/dist/components/moni-select.js +323 -39
- package/dist/components/moni-side-sheet.d.ts +94 -32
- package/dist/components/moni-side-sheet.d.ts.map +1 -1
- package/dist/components/moni-side-sheet.js +94 -32
- package/dist/components/moni-slider.d.ts +152 -41
- package/dist/components/moni-slider.d.ts.map +1 -1
- package/dist/components/moni-slider.js +154 -42
- package/dist/components/moni-snackbar.d.ts +53 -43
- package/dist/components/moni-snackbar.d.ts.map +1 -1
- package/dist/components/moni-snackbar.js +53 -43
- package/dist/components/moni-split-button.d.ts +63 -18
- package/dist/components/moni-split-button.d.ts.map +1 -1
- package/dist/components/moni-split-button.js +63 -18
- package/dist/components/moni-step.d.ts +36 -24
- package/dist/components/moni-step.d.ts.map +1 -1
- package/dist/components/moni-step.js +41 -29
- package/dist/components/moni-stepper.d.ts +64 -27
- package/dist/components/moni-stepper.d.ts.map +1 -1
- package/dist/components/moni-stepper.js +72 -34
- package/dist/components/moni-switch.d.ts +57 -46
- package/dist/components/moni-switch.d.ts.map +1 -1
- package/dist/components/moni-switch.js +59 -47
- package/dist/components/moni-tab.d.ts +26 -18
- package/dist/components/moni-tab.d.ts.map +1 -1
- package/dist/components/moni-tab.js +29 -21
- package/dist/components/moni-tabs.d.ts +34 -28
- package/dist/components/moni-tabs.d.ts.map +1 -1
- package/dist/components/moni-tabs.js +34 -28
- package/dist/components/moni-text-field.d.ts +139 -29
- package/dist/components/moni-text-field.d.ts.map +1 -1
- package/dist/components/moni-text-field.js +157 -31
- package/dist/components/moni-textarea.d.ts +127 -29
- package/dist/components/moni-textarea.d.ts.map +1 -1
- package/dist/components/moni-textarea.js +131 -32
- package/dist/components/moni-time-picker.d.ts +114 -24
- package/dist/components/moni-time-picker.d.ts.map +1 -1
- package/dist/components/moni-time-picker.js +127 -33
- package/dist/components/moni-toolbar.d.ts +37 -23
- package/dist/components/moni-toolbar.d.ts.map +1 -1
- package/dist/components/moni-toolbar.js +37 -23
- package/dist/components/moni-tooltip.d.ts +100 -36
- package/dist/components/moni-tooltip.d.ts.map +1 -1
- package/dist/components/moni-tooltip.js +104 -40
- package/dist/components/moni-typography.d.ts +68 -30
- package/dist/components/moni-typography.d.ts.map +1 -1
- package/dist/components/moni-typography.js +70 -32
- package/dist/styles/tokens.css +7 -7
- package/dist/types/events.d.ts +17 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +1 -0
- package/dist/utils/event-emitter.d.ts +13 -0
- package/dist/utils/event-emitter.d.ts.map +1 -0
- package/dist/utils/event-emitter.js +13 -0
- package/package.json +2 -1
- package/src/components/_base/moni-element.ts +73 -9
- package/src/components/index.ts +2 -2
- package/src/components/loading-shapes.ts +19 -0
- package/src/components/moni-app-bar.test.ts +10 -10
- package/src/components/moni-app-bar.ts +72 -62
- package/src/components/moni-badge.ts +64 -66
- package/src/components/moni-bottom-sheet.test.ts +39 -45
- package/src/components/moni-bottom-sheet.ts +222 -131
- package/src/components/moni-button-group.test.ts +14 -14
- package/src/components/moni-button-group.ts +107 -29
- package/src/components/moni-button-segment.ts +53 -12
- package/src/components/moni-button.test.ts +28 -26
- package/src/components/moni-button.ts +139 -39
- package/src/components/moni-card.test.ts +6 -6
- package/src/components/moni-card.ts +70 -50
- package/src/components/moni-carousel.test.ts +12 -12
- package/src/components/moni-carousel.ts +1129 -269
- package/src/components/moni-checkbox.test.ts +7 -7
- package/src/components/moni-checkbox.ts +62 -48
- package/src/components/moni-chip.test.ts +17 -17
- package/src/components/moni-chip.ts +112 -34
- package/src/components/moni-color-field.test.ts +5 -5
- package/src/components/moni-color-field.ts +108 -24
- package/src/components/moni-context-menu.test.ts +11 -11
- package/src/components/moni-context-menu.ts +76 -30
- package/src/components/moni-dialog.ts +108 -59
- package/src/components/moni-divider.test.ts +4 -4
- package/src/components/moni-divider.ts +42 -30
- package/src/components/moni-expansion.ts +32 -22
- package/src/components/moni-fab-menu.test.ts +11 -11
- package/src/components/moni-fab-menu.ts +69 -31
- package/src/components/moni-fab.test.ts +16 -16
- package/src/components/moni-fab.ts +100 -34
- package/src/components/moni-file-field.test.ts +8 -8
- package/src/components/moni-file-field.ts +132 -30
- package/src/components/moni-icon.test.ts +11 -11
- package/src/components/moni-icon.ts +43 -38
- package/src/components/moni-list-item.test.ts +10 -10
- package/src/components/moni-list-item.ts +61 -41
- package/src/components/moni-list.ts +37 -21
- package/src/components/moni-loading-indicator.test.ts +3 -3
- package/src/components/moni-loading-indicator.ts +54 -22
- package/src/components/moni-menu-item.ts +23 -16
- package/src/components/moni-menu.test.ts +7 -7
- package/src/components/moni-menu.ts +87 -30
- package/src/components/moni-morph-modal.test.ts +18 -17
- package/src/components/moni-morph-modal.ts +327 -60
- package/src/components/moni-nav-item.ts +59 -29
- package/src/components/moni-nav.test.ts +11 -11
- package/src/components/moni-nav.ts +94 -35
- package/src/components/moni-progress.test.ts +9 -9
- package/src/components/moni-progress.ts +100 -56
- package/src/components/moni-radio.test.ts +8 -8
- package/src/components/moni-radio.ts +71 -51
- package/src/components/moni-ripple.ts +74 -59
- package/src/components/moni-segmented-button.test.ts +4 -4
- package/src/components/moni-segmented-button.ts +94 -17
- package/src/components/moni-select-option.ts +30 -23
- package/src/components/moni-select.test.ts +11 -11
- package/src/components/moni-select.ts +361 -50
- package/src/components/moni-side-sheet.test.ts +7 -7
- package/src/components/moni-side-sheet.ts +94 -32
- package/src/components/moni-slider.test.ts +7 -7
- package/src/components/moni-slider.ts +165 -42
- package/src/components/moni-snackbar.test.ts +8 -8
- package/src/components/moni-snackbar.ts +53 -43
- package/src/components/moni-split-button.ts +63 -18
- package/src/components/moni-step.test.ts +7 -7
- package/src/components/moni-step.ts +41 -29
- package/src/components/moni-stepper.test.ts +7 -7
- package/src/components/moni-stepper.ts +72 -34
- package/src/components/moni-switch.test.ts +12 -12
- package/src/components/moni-switch.ts +66 -47
- package/src/components/moni-tab.test.ts +5 -5
- package/src/components/moni-tab.ts +29 -21
- package/src/components/moni-tabs.ts +34 -28
- package/src/components/moni-text-field.test.ts +13 -13
- package/src/components/moni-text-field.ts +181 -30
- package/src/components/moni-textarea.test.ts +17 -17
- package/src/components/moni-textarea.ts +155 -31
- package/src/components/moni-time-picker.test.ts +5 -5
- package/src/components/moni-time-picker.ts +128 -33
- package/src/components/moni-toolbar.test.ts +8 -8
- package/src/components/moni-toolbar.ts +37 -23
- package/src/components/moni-tooltip.test.ts +15 -15
- package/src/components/moni-tooltip.ts +107 -40
- package/src/components/moni-typography.test.ts +10 -10
- package/src/components/moni-typography.ts +73 -32
- package/src/styles/tokens.css +7 -7
- package/src/types/events.ts +17 -0
- 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
|
|
12
|
+
* Componente Material Design 3 Side Sheet (Hoja o panel lateral).
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* (
|
|
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
|
-
* **
|
|
18
|
+
* **Referencia a la especificación M3:** `m3-docs/components/side-sheets/specs.md`
|
|
19
19
|
*
|
|
20
|
-
* **Dialog behavior:**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* -
|
|
24
|
-
* backdrop
|
|
25
|
-
* -
|
|
26
|
-
*
|
|
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
|
-
* **
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
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
|
-
* **
|
|
35
|
-
*
|
|
36
|
-
*
|
|
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 -
|
|
39
|
-
*
|
|
40
|
-
*
|
|
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
|
-
* <!--
|
|
45
|
-
* <moni-side-sheet id="details-sheet" modal title="
|
|
46
|
-
* <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>
|
|
48
|
+
* <moni-button>Guardar</moni-button>
|
|
49
49
|
* </div>
|
|
50
50
|
* </moni-side-sheet>
|
|
51
51
|
*
|
|
52
|
-
* <!--
|
|
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>
|
|
54
|
+
* <p>Opciones de navegación</p>
|
|
55
55
|
* </moni-side-sheet>
|
|
56
56
|
* ```
|
|
57
57
|
*
|
|
58
|
-
* @slot default -
|
|
59
|
-
* @slot header -
|
|
60
|
-
* @slot footer -
|
|
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;
|
|
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
|
|
19
|
+
* Componente Material Design 3 Side Sheet (Hoja o panel lateral).
|
|
20
20
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* (
|
|
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
|
-
* **
|
|
25
|
+
* **Referencia a la especificación M3:** `m3-docs/components/side-sheets/specs.md`
|
|
26
26
|
*
|
|
27
|
-
* **Dialog behavior:**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* -
|
|
31
|
-
* backdrop
|
|
32
|
-
* -
|
|
33
|
-
*
|
|
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
|
-
* **
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
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
|
-
* **
|
|
42
|
-
*
|
|
43
|
-
*
|
|
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 -
|
|
46
|
-
*
|
|
47
|
-
*
|
|
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
|
-
* <!--
|
|
52
|
-
* <moni-side-sheet id="details-sheet" modal title="
|
|
53
|
-
* <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>
|
|
55
|
+
* <moni-button>Guardar</moni-button>
|
|
56
56
|
* </div>
|
|
57
57
|
* </moni-side-sheet>
|
|
58
58
|
*
|
|
59
|
-
* <!--
|
|
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>
|
|
61
|
+
* <p>Opciones de navegación</p>
|
|
62
62
|
* </moni-side-sheet>
|
|
63
63
|
* ```
|
|
64
64
|
*
|
|
65
|
-
* @slot default -
|
|
66
|
-
* @slot header -
|
|
67
|
-
* @slot footer -
|
|
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
|
|
10
|
+
* Componente Material Design 3 Slider (Control deslizante).
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
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
|
-
* **
|
|
15
|
+
* **Referencia a la especificación M3:** `m3-docs/components/sliders/specs.md`
|
|
16
16
|
*
|
|
17
|
-
* **Slider
|
|
18
|
-
* - **Continuous** (
|
|
19
|
-
*
|
|
20
|
-
* - **Discrete** —
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* - **Range** (`range`
|
|
24
|
-
*
|
|
25
|
-
* - **Vertical** (`vertical`
|
|
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
|
-
*
|
|
29
|
-
* (
|
|
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
|
|
33
|
-
* - `tick-interval
|
|
34
|
-
*
|
|
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
|
-
* **
|
|
37
|
-
*
|
|
38
|
-
* tooltip
|
|
39
|
-
*
|
|
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 -
|
|
42
|
-
*
|
|
43
|
-
* @fires input -
|
|
44
|
-
*
|
|
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
|
-
* <!--
|
|
48
|
+
* <!-- Slider continuo -->
|
|
49
49
|
* <moni-slider name="volume" min="0" max="100" value="60"></moni-slider>
|
|
50
50
|
*
|
|
51
|
-
* <!--
|
|
51
|
+
* <!-- Slider discreto con marcas cada 10 unidades -->
|
|
52
52
|
* <moni-slider step="10" tick-interval="10" indicator></moni-slider>
|
|
53
53
|
*
|
|
54
|
-
* <!--
|
|
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 -
|
|
59
|
-
* @csspart track -
|
|
60
|
-
* @csspart fill -
|
|
61
|
-
* @csspart indicator -
|
|
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
|
-
/**
|
|
133
|
+
/** Estado reactivo interno — dispara 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
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
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 {
|