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