@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
|
@@ -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;
|
|
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
|
|
19
|
+
* Componente Material Design 3 Slider (Control deslizante).
|
|
20
20
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
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
|
-
* **
|
|
24
|
+
* **Referencia a la especificación M3:** `m3-docs/components/sliders/specs.md`
|
|
25
25
|
*
|
|
26
|
-
* **Slider
|
|
27
|
-
* - **Continuous** (
|
|
28
|
-
*
|
|
29
|
-
* - **Discrete** —
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* - **Range** (`range`
|
|
33
|
-
*
|
|
34
|
-
* - **Vertical** (`vertical`
|
|
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
|
-
*
|
|
38
|
-
* (
|
|
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
|
|
42
|
-
* - `tick-interval
|
|
43
|
-
*
|
|
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
|
-
* **
|
|
46
|
-
*
|
|
47
|
-
* tooltip
|
|
48
|
-
*
|
|
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 -
|
|
51
|
-
*
|
|
52
|
-
* @fires input -
|
|
53
|
-
*
|
|
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
|
-
* <!--
|
|
57
|
+
* <!-- Slider continuo -->
|
|
58
58
|
* <moni-slider name="volume" min="0" max="100" value="60"></moni-slider>
|
|
59
59
|
*
|
|
60
|
-
* <!--
|
|
60
|
+
* <!-- Slider discreto con marcas cada 10 unidades -->
|
|
61
61
|
* <moni-slider step="10" tick-interval="10" indicator></moni-slider>
|
|
62
62
|
*
|
|
63
|
-
* <!--
|
|
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 -
|
|
68
|
-
* @csspart track -
|
|
69
|
-
* @csspart fill -
|
|
70
|
-
* @csspart indicator -
|
|
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
|
-
|
|
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
|
-
/**
|
|
144
|
+
/** Estado reactivo interno — dispara 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
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
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
|
|
10
|
+
* Componente Material Design 3 Snackbar (Barra de notificaciones).
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
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
|
-
* **
|
|
16
|
+
* **Referencia a la especificación M3:** `m3-docs/components/snackbar/specs.md`
|
|
17
17
|
*
|
|
18
|
-
* **
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
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
|
-
* **
|
|
26
|
-
*
|
|
27
|
-
* `opacity`, `visibility`,
|
|
28
|
-
*
|
|
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
|
-
* **
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
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
|
-
* //
|
|
40
|
-
* snackbar.text = '
|
|
41
|
-
* snackbar.action = '
|
|
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 -
|
|
46
|
+
* @slot default - Contenido adicional colocado dentro del contenedor del snackbar.
|
|
47
47
|
*
|
|
48
|
-
* @csspart snackbar -
|
|
49
|
-
* @csspart text -
|
|
50
|
-
* @csspart action -
|
|
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
|
-
*
|
|
54
|
+
* El texto del mensaje principal mostrado en el snackbar.
|
|
55
55
|
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
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
|
-
*
|
|
63
|
+
* Etiqueta para el botón de acción opcional.
|
|
64
64
|
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
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
|
-
*
|
|
73
|
+
* Ubicación vertical del snackbar en la pantalla.
|
|
74
74
|
*
|
|
75
|
-
* - `'bottom'` (
|
|
76
|
-
* - `'top'` —
|
|
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
|
-
*
|
|
82
|
+
* Cuando es `true`, el snackbar es visible.
|
|
83
83
|
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
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
|
-
*
|
|
92
|
+
* Número máximo de líneas del texto del mensaje antes de que sea limitado (clamped).
|
|
93
93
|
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
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;
|
|
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
|
|
18
|
+
* Componente Material Design 3 Snackbar (Barra de notificaciones).
|
|
19
19
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
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
|
-
* **
|
|
24
|
+
* **Referencia a la especificación M3:** `m3-docs/components/snackbar/specs.md`
|
|
25
25
|
*
|
|
26
|
-
* **
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
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
|
-
* **
|
|
34
|
-
*
|
|
35
|
-
* `opacity`, `visibility`,
|
|
36
|
-
*
|
|
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
|
-
* **
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
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
|
-
* //
|
|
48
|
-
* snackbar.text = '
|
|
49
|
-
* snackbar.action = '
|
|
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 -
|
|
54
|
+
* @slot default - Contenido adicional colocado dentro del contenedor del snackbar.
|
|
55
55
|
*
|
|
56
|
-
* @csspart snackbar -
|
|
57
|
-
* @csspart text -
|
|
58
|
-
* @csspart action -
|
|
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
|
-
*
|
|
64
|
+
* El texto del mensaje principal mostrado en el snackbar.
|
|
65
65
|
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
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
|
-
*
|
|
73
|
+
* Etiqueta para el botón de acción opcional.
|
|
74
74
|
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
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
|
-
*
|
|
83
|
+
* Ubicación vertical del snackbar en la pantalla.
|
|
84
84
|
*
|
|
85
|
-
* - `'bottom'` (
|
|
86
|
-
* - `'top'` —
|
|
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
|
-
*
|
|
92
|
+
* Cuando es `true`, el snackbar es visible.
|
|
93
93
|
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
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
|
-
*
|
|
102
|
+
* Número máximo de líneas del texto del mensaje antes de que sea limitado (clamped).
|
|
103
103
|
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
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}"
|