@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
|
@@ -14,119 +14,122 @@ import { html, css, svg, nothing } from 'lit';
|
|
|
14
14
|
import { customElement, property, state } from 'lit/decorators.js';
|
|
15
15
|
import { MoniElement, sharedStyles } from './_base/index.js';
|
|
16
16
|
/**
|
|
17
|
-
* Material Design 3 Progress Indicator
|
|
17
|
+
* Componente Material Design 3 Progress Indicator (Indicador de Progreso).
|
|
18
18
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* Los indicadores de progreso expresan un tiempo de espera no especificado o muestran la duración
|
|
20
|
+
* de un proceso. Informan a los usuarios sobre el estado de procesos en curso, como
|
|
21
|
+
* cargar una aplicación, enviar un formulario o guardar actualizaciones.
|
|
22
22
|
*
|
|
23
|
-
* **
|
|
23
|
+
* **Referencia a la especificación M3:** `m3-docs/components/progress-indicators/specs.md`
|
|
24
24
|
*
|
|
25
|
-
* **
|
|
26
|
-
* - `linear` (
|
|
27
|
-
* - `circular` —
|
|
28
|
-
* - `wavy` —
|
|
29
|
-
* - `circular-wavy` —
|
|
25
|
+
* **Variantes:**
|
|
26
|
+
* - `linear` (por defecto) — Una barra horizontal que se llena de izquierda a derecha.
|
|
27
|
+
* - `circular` — Un indicador circular SVG de trazo (stroke).
|
|
28
|
+
* - `wavy` — Una barra de ondas animada (extensión de Moni; no en la especificación M3).
|
|
29
|
+
* - `circular-wavy` — Combinación de circular + ondas (extensión de Moni).
|
|
30
30
|
*
|
|
31
|
-
* **Shadow DOM
|
|
32
|
-
* BeerCSS
|
|
33
|
-
* `::after`, `::webkit-progress-value`)
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
31
|
+
* **Nota de compatibilidad con Shadow DOM:**
|
|
32
|
+
* El progreso de BeerCSS usa pseudo-elementos `<progress>` nativos (`::before`,
|
|
33
|
+
* `::after`, `::webkit-progress-value`) y `mask-image`, que son bloqueados
|
|
34
|
+
* por la raíz shadow del User Agent en Chrome/Firefox. Este componente usa un envoltorio
|
|
35
|
+
* `<div>` simple que replica las reglas visuales exactamente, y un elemento `<svg>`
|
|
36
|
+
* para la variante circular usando animación SVG stroke-dashoffset para un soporte
|
|
37
|
+
* superior entre navegadores comparado con `conic-gradient`.
|
|
38
38
|
*
|
|
39
|
-
* **
|
|
40
|
-
* `_pct`
|
|
41
|
-
* `[0, 100]`.
|
|
42
|
-
*
|
|
39
|
+
* **Cálculo de porcentaje:**
|
|
40
|
+
* `_pct` se calcula en `willUpdate()` como `(value / max) * 100`, restringido a
|
|
41
|
+
* `[0, 100]`. Cuando `indeterminate` está establecido, `_pct` se fija en `50` para impulsar
|
|
42
|
+
* la animación de bucle infinito.
|
|
43
43
|
*
|
|
44
44
|
* @example
|
|
45
45
|
* ```html
|
|
46
|
-
* <!--
|
|
46
|
+
* <!-- Progreso lineal determinado -->
|
|
47
47
|
* <moni-progress value="65" max="100"></moni-progress>
|
|
48
48
|
*
|
|
49
|
-
* <!--
|
|
49
|
+
* <!-- Progreso circular indeterminado (spinner de carga) -->
|
|
50
50
|
* <moni-progress variant="circular" indeterminate></moni-progress>
|
|
51
51
|
* ```
|
|
52
52
|
*
|
|
53
|
-
* @csspart bar -
|
|
54
|
-
* @csspart fill -
|
|
55
|
-
* @csspart svg -
|
|
53
|
+
* @csspart bar - El div contenedor exterior.
|
|
54
|
+
* @csspart fill - El elemento de llenado interior (variante lineal).
|
|
55
|
+
* @csspart svg - El elemento SVG (variante circular).
|
|
56
56
|
*/
|
|
57
57
|
let MoniProgress = class MoniProgress extends MoniElement {
|
|
58
58
|
constructor() {
|
|
59
59
|
super(...arguments);
|
|
60
60
|
/**
|
|
61
|
-
*
|
|
61
|
+
* Valor de progreso actual.
|
|
62
62
|
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* `indeterminate`
|
|
63
|
+
* Debe estar en el rango `[0, max]`. Los valores fuera de este rango se restringen
|
|
64
|
+
* durante el cálculo del porcentaje en `willUpdate()`. Se ignora cuando
|
|
65
|
+
* `indeterminate` está establecido.
|
|
66
66
|
*
|
|
67
67
|
* @default 0
|
|
68
68
|
*/
|
|
69
69
|
this.value = 0;
|
|
70
70
|
/**
|
|
71
|
-
*
|
|
71
|
+
* Valor máximo del rango de progreso.
|
|
72
72
|
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
73
|
+
* Por defecto es `100` para que el `value` pueda establecerse como porcentaje directamente.
|
|
74
|
+
* Para rangos que no son porcentajes (ej. pasos), establece `max` al recuento total de pasos
|
|
75
|
+
* y `value` al paso actual.
|
|
76
76
|
*
|
|
77
77
|
* @default 100
|
|
78
78
|
*/
|
|
79
79
|
this.max = 100;
|
|
80
80
|
/**
|
|
81
|
-
*
|
|
81
|
+
* Variante visual del indicador de progreso.
|
|
82
82
|
*
|
|
83
|
-
* - `'linear'` (
|
|
84
|
-
* - `'circular'` — SVG
|
|
85
|
-
* - `'wavy'` —
|
|
86
|
-
* - `'circular-wavy'` —
|
|
83
|
+
* - `'linear'` (por defecto) — Barra de llenado horizontal.
|
|
84
|
+
* - `'circular'` — Círculo SVG con animación stroke-dashoffset.
|
|
85
|
+
* - `'wavy'` — Barra de ondas animada.
|
|
86
|
+
* - `'circular-wavy'` — Combinación de circular y ondas.
|
|
87
87
|
*
|
|
88
88
|
* @default 'linear'
|
|
89
89
|
*/
|
|
90
90
|
this.variant = 'linear';
|
|
91
91
|
/**
|
|
92
|
-
*
|
|
92
|
+
* Tamaño visual del indicador de progreso.
|
|
93
93
|
*
|
|
94
|
-
* - `'small'` —
|
|
95
|
-
* - `'medium'` —
|
|
96
|
-
* - `'large'` —
|
|
94
|
+
* - `'small'` — Compacto; adecuado para diseños en línea o ajustados.
|
|
95
|
+
* - `'medium'` — Tamaño estándar M3 (por defecto).
|
|
96
|
+
* - `'large'` — Prominente; para estados de carga a pantalla completa.
|
|
97
97
|
*
|
|
98
98
|
* @default 'medium'
|
|
99
99
|
*/
|
|
100
100
|
this.size = 'medium';
|
|
101
101
|
/**
|
|
102
|
-
*
|
|
102
|
+
* Cuando es `true`, el indicador se anima en un bucle infinito independientemente del `value`.
|
|
103
103
|
*
|
|
104
|
-
*
|
|
105
|
-
* (
|
|
106
|
-
* `_pct`
|
|
104
|
+
* Úsalo para operaciones donde el porcentaje de finalización es desconocido
|
|
105
|
+
* (ej. peticiones de red, procesamiento de archivos). Cuando `indeterminate` está establecido,
|
|
106
|
+
* `_pct` se fija en `50` para impulsar una animación de barrido continuo.
|
|
107
107
|
*
|
|
108
108
|
* @default false
|
|
109
109
|
*/
|
|
110
110
|
this.indeterminate = false;
|
|
111
111
|
/**
|
|
112
|
-
*
|
|
112
|
+
* Porcentaje de llenado calculado en el rango `[0, 100]`.
|
|
113
113
|
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
114
|
+
* Actualizado en `willUpdate()` cada vez que cambia `value`, `max` o `indeterminate`.
|
|
115
|
+
* Usado directamente en vinculaciones de propiedades personalizadas de CSS y atributos de trazo (stroke) SVG.
|
|
116
116
|
*
|
|
117
117
|
* @internal
|
|
118
118
|
*/
|
|
119
119
|
this._pct = 0;
|
|
120
|
-
/**
|
|
120
|
+
/** ID único por instancia para los IDs de SVG clipPath */
|
|
121
121
|
this._instanceId = Math.random().toString(36).slice(2, 8);
|
|
122
122
|
}
|
|
123
123
|
/**
|
|
124
|
-
*
|
|
124
|
+
* Hook de ciclo de vida de Lit. Calcula la fracción de llenado antes de pintar.
|
|
125
125
|
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
126
|
+
* A diferencia de los componentes nativos, necesitamos computar explícitamente el
|
|
127
|
+
* progreso como un número de 0 a 100 para inyectarlo en variables CSS (Lineal)
|
|
128
|
+
* o calcular el `stroke-dashoffset` (Circular).
|
|
128
129
|
*
|
|
129
|
-
*
|
|
130
|
+
* Se usa `Math.max(1, this.max)` para evitar un NaN / Infinity por división entre cero.
|
|
131
|
+
*
|
|
132
|
+
* @param changed - Mapa de propiedades reactivas que detonaron la actualización.
|
|
130
133
|
*/
|
|
131
134
|
willUpdate(changed) {
|
|
132
135
|
if (changed.has('value') || changed.has('max') || changed.has('indeterminate')) {
|
|
@@ -261,6 +264,13 @@ let MoniProgress = class MoniProgress extends MoniElement {
|
|
|
261
264
|
}
|
|
262
265
|
`
|
|
263
266
|
]; }
|
|
267
|
+
/**
|
|
268
|
+
* Motor de Renderizado: Linear Progress Bar.
|
|
269
|
+
*
|
|
270
|
+
* Renderiza un contenedor horizontal clásico. Pasa el porcentaje computado
|
|
271
|
+
* como variable CSS `--_p` para que el navegador lo interpole usando `transform: scaleX`.
|
|
272
|
+
* Expone los atributos ARIA completos para lectores de pantalla.
|
|
273
|
+
*/
|
|
264
274
|
_renderLinear() {
|
|
265
275
|
const isIndet = this.indeterminate;
|
|
266
276
|
return html `
|
|
@@ -277,6 +287,13 @@ let MoniProgress = class MoniProgress extends MoniElement {
|
|
|
277
287
|
</div>
|
|
278
288
|
`;
|
|
279
289
|
}
|
|
290
|
+
/**
|
|
291
|
+
* Motor de Renderizado: Wavy Progress Bar (Estilo BeerCSS/Material You).
|
|
292
|
+
*
|
|
293
|
+
* Utiliza un `<svg>` con una animación de `clip-path` y ondas sinusoidales
|
|
294
|
+
* inyectadas directamente. Ajusta matemáticamente el ancho y la posición de la onda
|
|
295
|
+
* dependiendo de si está en modo indeterminado (infinito) o con un progreso específico (`_pct`).
|
|
296
|
+
*/
|
|
280
297
|
_renderWavy() {
|
|
281
298
|
// BeerCSS wavy uses an SVG mask. We replicate with an SVG clipPath wave.
|
|
282
299
|
const isIndet = this.indeterminate;
|
|
@@ -333,6 +350,15 @@ let MoniProgress = class MoniProgress extends MoniElement {
|
|
|
333
350
|
</div>
|
|
334
351
|
`;
|
|
335
352
|
}
|
|
353
|
+
/**
|
|
354
|
+
* Algoritmo de renderizado para el spinner circular.
|
|
355
|
+
* Utiliza la técnica de SVG `stroke-dasharray` y `stroke-dashoffset` para animar o
|
|
356
|
+
* fijar el arco de progreso sin utilizar gradientes CSS cónicos (mejor compatibilidad).
|
|
357
|
+
*
|
|
358
|
+
* Matemáticas del círculo:
|
|
359
|
+
* Perímetro = 2 * π * radio.
|
|
360
|
+
* Para r=20, Perímetro ≈ 125.66. El porcentaje vacío se resta para desplazar (offset) el trazo.
|
|
361
|
+
*/
|
|
336
362
|
_renderCircular(withWavy = false) {
|
|
337
363
|
const isIndet = this.indeterminate;
|
|
338
364
|
// SVG circle math: r=20, circumference = 2π*20 ≈ 125.66
|
|
@@ -383,6 +409,24 @@ let MoniProgress = class MoniProgress extends MoniElement {
|
|
|
383
409
|
</div>
|
|
384
410
|
`;
|
|
385
411
|
}
|
|
412
|
+
/**
|
|
413
|
+
* Despacha el renderizado al sub-renderizador privado apropiado basado en `variant`.
|
|
414
|
+
*
|
|
415
|
+
* **¿Por qué sub-renderizadores separados?**
|
|
416
|
+
* Cada variante de progreso tiene una estructura DOM fundamentalmente diferente:
|
|
417
|
+
* - Lineal: un `<div>` con un `<div>` de llenado escalado por una propiedad personalizada CSS.
|
|
418
|
+
* - Wavy (Ondulado): un `<svg>` con un `<clipPath>` animado para la máscara de onda sinusoidal.
|
|
419
|
+
* - Circular: un `<svg>` con `stroke-dasharray`/`stroke-dashoffset` para el arco.
|
|
420
|
+
*
|
|
421
|
+
* Fusionar los tres en una sola plantilla crearía un marcado profundamente condicional;
|
|
422
|
+
* dividir en `_renderLinear()`, `_renderWavy()` y `_renderCircular()` mantiene
|
|
423
|
+
* cada variante auto-contenida y permite una exposición específica de `@csspart` por variante.
|
|
424
|
+
*
|
|
425
|
+
* **`_instanceId`:**
|
|
426
|
+
* Los IDs de `<clipPath>` SVG deben ser únicos por documento; `_instanceId` es un
|
|
427
|
+
* sufijo aleatorio generado una vez en el momento de la instanciación para evitar colisiones de IDs cuando
|
|
428
|
+
* hay múltiples elementos `<moni-progress>` en la misma página.
|
|
429
|
+
*/
|
|
386
430
|
render() {
|
|
387
431
|
switch (this.variant) {
|
|
388
432
|
case 'circular':
|
|
@@ -6,69 +6,72 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { MoniElement } from './_base/index.js';
|
|
8
8
|
/**
|
|
9
|
-
* Material Design 3 Radio Button
|
|
9
|
+
* Componente Material Design 3 Radio Button (Botón de Opción).
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* `<moni-checkbox>`
|
|
11
|
+
* Los botones de opción permiten a los usuarios seleccionar exactamente un elemento de un conjunto de opciones
|
|
12
|
+
* mutuamente excluyentes. Comparten la misma arquitectura visual que
|
|
13
|
+
* `<moni-checkbox>` pero usan `type="radio"` e implementan la deselección de grupo.
|
|
14
14
|
*
|
|
15
|
-
* **
|
|
15
|
+
* **Referencia a la especificación M3:** `m3-docs/components/radio/specs.md`
|
|
16
16
|
*
|
|
17
|
-
* **
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* - `::before` —
|
|
22
|
-
* - `::after` —
|
|
17
|
+
* **Arquitectura visual (Patrón BeerCSS):**
|
|
18
|
+
* Idéntico al patrón de checkbox: el `<input type="radio">` nativo ocupa
|
|
19
|
+
* espacio de diseño real a `--_size` × `--_size` pero se oculta mediante `opacity: 0`.
|
|
20
|
+
* Un `<span>` hermano renderiza:
|
|
21
|
+
* - `::before` — el icono de radio (`radio_button_unchecked` / `radio_button_checked`).
|
|
22
|
+
* - `::after` — el anillo de onda (ripple) de hover/foco.
|
|
23
23
|
*
|
|
24
|
-
* **
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
24
|
+
* **Deselección de grupo:**
|
|
25
|
+
* Cuando se marca un radio, `_onChange` consulta el `getRootNode()` del componente
|
|
26
|
+
* para encontrar todos los elementos `moni-radio` que comparten el mismo atributo `name` y establece
|
|
27
|
+
* su propiedad `checked` en `false`. Esto refleja el comportamiento nativo del navegador
|
|
28
|
+
* para grupos de radio a través de los límites del shadow DOM, donde la agrupación por `name` no
|
|
29
|
+
* funciona de forma nativa.
|
|
30
30
|
*
|
|
31
|
-
* @fires change -
|
|
32
|
-
*
|
|
31
|
+
* @fires change - Burbujea y está compuesto. Se dispara cuando este radio es seleccionado.
|
|
32
|
+
* Lee `element.checked` para obtener el nuevo estado.
|
|
33
33
|
*
|
|
34
34
|
* @example
|
|
35
35
|
* ```html
|
|
36
|
-
* <moni-radio name="color" value="red" label="
|
|
37
|
-
* <moni-radio name="color" value="green" label="
|
|
38
|
-
* <moni-radio name="color" value="blue" label="
|
|
36
|
+
* <moni-radio name="color" value="red" label="Rojo"></moni-radio>
|
|
37
|
+
* <moni-radio name="color" value="green" label="Verde"></moni-radio>
|
|
38
|
+
* <moni-radio name="color" value="blue" label="Azul" checked></moni-radio>
|
|
39
39
|
* ```
|
|
40
40
|
*
|
|
41
|
-
* @csspart radio -
|
|
41
|
+
* @csspart radio - El elemento `<label>` exterior.
|
|
42
42
|
*/
|
|
43
43
|
export declare class MoniRadio extends MoniElement {
|
|
44
|
+
static formAssociated: boolean;
|
|
45
|
+
private _internals;
|
|
46
|
+
constructor();
|
|
44
47
|
/**
|
|
45
|
-
*
|
|
48
|
+
* Etiqueta de texto mostrada a la derecha del icono de radio.
|
|
46
49
|
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
50
|
+
* Cuando no está vacía, se renderiza como un nodo de texto. Cuando está vacía, se renderiza la ranura (slot)
|
|
51
|
+
* por defecto, permitiendo contenido HTML en la ranura como etiqueta.
|
|
49
52
|
*
|
|
50
53
|
* @default ''
|
|
51
54
|
*/
|
|
52
55
|
label: string;
|
|
53
56
|
/**
|
|
54
|
-
*
|
|
57
|
+
* Indica si este botón de opción está actualmente seleccionado.
|
|
55
58
|
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
59
|
+
* Se refleja como un atributo para que los selectores CSS puedan apuntarlo. Se sincroniza con
|
|
60
|
+
* el input nativo a través de `updated()`.
|
|
58
61
|
*
|
|
59
62
|
* @default false
|
|
60
63
|
*/
|
|
61
64
|
checked: boolean;
|
|
62
65
|
/**
|
|
63
|
-
*
|
|
66
|
+
* Cuando es `true`, el radio no es interactivo y se renderiza a un 50% de opacidad.
|
|
64
67
|
*
|
|
65
68
|
* @default false
|
|
66
69
|
*/
|
|
67
70
|
disabled: boolean;
|
|
68
71
|
/**
|
|
69
|
-
*
|
|
72
|
+
* Tamaño visual del icono de radio y su área de interacción (hit area) invisible.
|
|
70
73
|
*
|
|
71
|
-
* |
|
|
74
|
+
* | Valor | `--_size` |
|
|
72
75
|
* |------------|-----------|
|
|
73
76
|
* | `'small'` | 1rem |
|
|
74
77
|
* | `'medium'` | 1.5rem |
|
|
@@ -79,46 +82,55 @@ export declare class MoniRadio extends MoniElement {
|
|
|
79
82
|
*/
|
|
80
83
|
size: 'small' | 'medium' | 'large' | 'extra';
|
|
81
84
|
/**
|
|
82
|
-
*
|
|
83
|
-
*
|
|
85
|
+
* Nombre del grupo de radio. Los radios con el mismo `name` en el mismo nodo raíz
|
|
86
|
+
* se tratan como un grupo de exclusión mutua por `_onChange`.
|
|
84
87
|
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
+
* Nota: Los grupos nativos de `<input type="radio">` solo funcionan dentro de la misma
|
|
89
|
+
* raíz de documento. Dado que `moni-radio` usa shadow DOM, la deselección
|
|
90
|
+
* de los hermanos se maneja imperativamente en `_onChange`.
|
|
88
91
|
*
|
|
89
92
|
* @default ''
|
|
90
93
|
*/
|
|
91
94
|
name: string;
|
|
92
95
|
/**
|
|
93
|
-
*
|
|
94
|
-
*
|
|
96
|
+
* Se retransmite al atributo nativo `<input value>`.
|
|
97
|
+
* El valor enviado en un formulario cuando este radio es seleccionado.
|
|
95
98
|
*
|
|
96
99
|
* @default ''
|
|
97
100
|
*/
|
|
98
101
|
value: string;
|
|
99
|
-
/**
|
|
102
|
+
/** Referencia directa al elemento input nativo para acceso programático. */
|
|
100
103
|
private _input;
|
|
101
104
|
/**
|
|
102
|
-
*
|
|
105
|
+
* Sincroniza `checked` y `disabled` con el input nativo después de cada ciclo de renderizado.
|
|
103
106
|
*
|
|
104
|
-
* @param changed -
|
|
107
|
+
* @param changed - Mapa de los nombres de propiedades modificadas con sus valores anteriores.
|
|
105
108
|
*/
|
|
106
109
|
updated(changed: Map<string, unknown>): void;
|
|
107
110
|
static styles: import("lit").CSSResult[];
|
|
108
111
|
/**
|
|
109
|
-
*
|
|
112
|
+
* Maneja el evento nativo `change` del input.
|
|
110
113
|
*
|
|
111
|
-
*
|
|
112
|
-
* `name`
|
|
113
|
-
*
|
|
114
|
-
*
|
|
114
|
+
* Al seleccionarse, deselecciona todos los elementos `moni-radio` hermanos con el mismo
|
|
115
|
+
* `name` en el mismo nodo raíz (documento o raíz shadow). Esto es necesario
|
|
116
|
+
* porque la exclusión de grupo de radio nativa solo funciona dentro de la misma raíz
|
|
117
|
+
* de documento y no cruza los límites del shadow DOM.
|
|
115
118
|
*
|
|
116
|
-
*
|
|
117
|
-
* audible
|
|
119
|
+
* Después de la deselección, despacha un evento `'change'` compuesto para que sea
|
|
120
|
+
* audible para los elementos padres en el DOM ligero (light DOM).
|
|
118
121
|
*
|
|
119
|
-
* @param e -
|
|
122
|
+
* @param e - El evento nativo `change` del `<input>` oculto.
|
|
120
123
|
*/
|
|
121
124
|
private _onChange;
|
|
125
|
+
/**
|
|
126
|
+
* Renderiza el radio como un `<input type="radio">` oculto + indicador visual `<span>`.
|
|
127
|
+
*
|
|
128
|
+
* El input oculto se mantiene en el DOM (opacity: 0) para participar en el envío nativo
|
|
129
|
+
* de formularios y exclusión de grupo de radios. Los navegadores aplican automáticamente
|
|
130
|
+
* exclusión mutua entre entradas de radio que comparten el mismo atributo `name`.
|
|
131
|
+
* El círculo visual es dibujado por los pseudo-elementos `::before` / `::after` en
|
|
132
|
+
* el `<span>` y animado mediante transiciones CSS de `scale`.
|
|
133
|
+
*/
|
|
122
134
|
render(): import("lit").TemplateResult<1>;
|
|
123
135
|
}
|
|
124
136
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moni-radio.d.ts","sourceRoot":"","sources":["../../src/components/moni-radio.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBACa,SAAU,SAAQ,WAAW;IACzC;;;;;;;OAOG;IAC0B,KAAK,SAAM;IAExC;;;;;;;OAOG;IACyC,OAAO,UAAS;IAE5D;;;;OAIG;IACyC,QAAQ,UAAS;IAE7D;;;;;;;;;;;OAWG;IAEH,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAY;IAExD;;;;;;;;;OASG;IAC0B,IAAI,SAAM;IAEvC;;;;;OAKG;IAC0B,KAAK,SAAM;IAExC,4EAA4E;IAC5D,OAAO,CAAC,MAAM,CAAoB;IAElD;;;;OAIG;IACM,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"moni-radio.d.ts","sourceRoot":"","sources":["../../src/components/moni-radio.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBACa,SAAU,SAAQ,WAAW;IACzC,MAAM,CAAC,cAAc,UAAQ;IAC7B,OAAO,CAAC,UAAU,CAAmB;;IAOrC;;;;;;;OAOG;IAC0B,KAAK,SAAM;IAExC;;;;;;;OAOG;IACyC,OAAO,UAAS;IAE5D;;;;OAIG;IACyC,QAAQ,UAAS;IAE7D;;;;;;;;;;;OAWG;IAEH,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAY;IAExD;;;;;;;;;OASG;IAC0B,IAAI,SAAM;IAEvC;;;;;OAKG;IAC0B,KAAK,SAAM;IAExC,4EAA4E;IAC5D,OAAO,CAAC,MAAM,CAAoB;IAElD;;;;OAIG;IACM,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAU9C,OAAgB,MAAM,4BA8GpB;IAEF;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,SAAS;IAgBjB;;;;;;;;OAQG;IACM,MAAM;CAiBf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,YAAY,EAAE,SAAS,CAAC;KACxB;CACD;AAED,eAAe,SAAS,CAAC"}
|