@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
|
@@ -17,71 +17,73 @@ import { ifDefined } from 'lit/directives/if-defined.js';
|
|
|
17
17
|
import { live } from 'lit/directives/live.js';
|
|
18
18
|
import { MoniElement, sharedStyles } from './_base/index.js';
|
|
19
19
|
/**
|
|
20
|
-
* Material Design 3 Radio Button
|
|
20
|
+
* Componente Material Design 3 Radio Button (Botón de Opción).
|
|
21
21
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* `<moni-checkbox>`
|
|
22
|
+
* Los botones de opción permiten a los usuarios seleccionar exactamente un elemento de un conjunto de opciones
|
|
23
|
+
* mutuamente excluyentes. Comparten la misma arquitectura visual que
|
|
24
|
+
* `<moni-checkbox>` pero usan `type="radio"` e implementan la deselección de grupo.
|
|
25
25
|
*
|
|
26
|
-
* **
|
|
26
|
+
* **Referencia a la especificación M3:** `m3-docs/components/radio/specs.md`
|
|
27
27
|
*
|
|
28
|
-
* **
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* - `::before` —
|
|
33
|
-
* - `::after` —
|
|
28
|
+
* **Arquitectura visual (Patrón BeerCSS):**
|
|
29
|
+
* Idéntico al patrón de checkbox: el `<input type="radio">` nativo ocupa
|
|
30
|
+
* espacio de diseño real a `--_size` × `--_size` pero se oculta mediante `opacity: 0`.
|
|
31
|
+
* Un `<span>` hermano renderiza:
|
|
32
|
+
* - `::before` — el icono de radio (`radio_button_unchecked` / `radio_button_checked`).
|
|
33
|
+
* - `::after` — el anillo de onda (ripple) de hover/foco.
|
|
34
34
|
*
|
|
35
|
-
* **
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
35
|
+
* **Deselección de grupo:**
|
|
36
|
+
* Cuando se marca un radio, `_onChange` consulta el `getRootNode()` del componente
|
|
37
|
+
* para encontrar todos los elementos `moni-radio` que comparten el mismo atributo `name` y establece
|
|
38
|
+
* su propiedad `checked` en `false`. Esto refleja el comportamiento nativo del navegador
|
|
39
|
+
* para grupos de radio a través de los límites del shadow DOM, donde la agrupación por `name` no
|
|
40
|
+
* funciona de forma nativa.
|
|
41
41
|
*
|
|
42
|
-
* @fires change -
|
|
43
|
-
*
|
|
42
|
+
* @fires change - Burbujea y está compuesto. Se dispara cuando este radio es seleccionado.
|
|
43
|
+
* Lee `element.checked` para obtener el nuevo estado.
|
|
44
44
|
*
|
|
45
45
|
* @example
|
|
46
46
|
* ```html
|
|
47
|
-
* <moni-radio name="color" value="red" label="
|
|
48
|
-
* <moni-radio name="color" value="green" label="
|
|
49
|
-
* <moni-radio name="color" value="blue" label="
|
|
47
|
+
* <moni-radio name="color" value="red" label="Rojo"></moni-radio>
|
|
48
|
+
* <moni-radio name="color" value="green" label="Verde"></moni-radio>
|
|
49
|
+
* <moni-radio name="color" value="blue" label="Azul" checked></moni-radio>
|
|
50
50
|
* ```
|
|
51
51
|
*
|
|
52
|
-
* @csspart radio -
|
|
52
|
+
* @csspart radio - El elemento `<label>` exterior.
|
|
53
53
|
*/
|
|
54
54
|
let MoniRadio = class MoniRadio extends MoniElement {
|
|
55
|
+
static { MoniRadio_1 = this; }
|
|
56
|
+
static { this.formAssociated = true; }
|
|
55
57
|
constructor() {
|
|
56
|
-
super(
|
|
58
|
+
super();
|
|
57
59
|
/**
|
|
58
|
-
*
|
|
60
|
+
* Etiqueta de texto mostrada a la derecha del icono de radio.
|
|
59
61
|
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
+
* Cuando no está vacía, se renderiza como un nodo de texto. Cuando está vacía, se renderiza la ranura (slot)
|
|
63
|
+
* por defecto, permitiendo contenido HTML en la ranura como etiqueta.
|
|
62
64
|
*
|
|
63
65
|
* @default ''
|
|
64
66
|
*/
|
|
65
67
|
this.label = '';
|
|
66
68
|
/**
|
|
67
|
-
*
|
|
69
|
+
* Indica si este botón de opción está actualmente seleccionado.
|
|
68
70
|
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
+
* Se refleja como un atributo para que los selectores CSS puedan apuntarlo. Se sincroniza con
|
|
72
|
+
* el input nativo a través de `updated()`.
|
|
71
73
|
*
|
|
72
74
|
* @default false
|
|
73
75
|
*/
|
|
74
76
|
this.checked = false;
|
|
75
77
|
/**
|
|
76
|
-
*
|
|
78
|
+
* Cuando es `true`, el radio no es interactivo y se renderiza a un 50% de opacidad.
|
|
77
79
|
*
|
|
78
80
|
* @default false
|
|
79
81
|
*/
|
|
80
82
|
this.disabled = false;
|
|
81
83
|
/**
|
|
82
|
-
*
|
|
84
|
+
* Tamaño visual del icono de radio y su área de interacción (hit area) invisible.
|
|
83
85
|
*
|
|
84
|
-
* |
|
|
86
|
+
* | Valor | `--_size` |
|
|
85
87
|
* |------------|-----------|
|
|
86
88
|
* | `'small'` | 1rem |
|
|
87
89
|
* | `'medium'` | 1.5rem |
|
|
@@ -92,34 +94,36 @@ let MoniRadio = class MoniRadio extends MoniElement {
|
|
|
92
94
|
*/
|
|
93
95
|
this.size = 'medium';
|
|
94
96
|
/**
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
+
* Nombre del grupo de radio. Los radios con el mismo `name` en el mismo nodo raíz
|
|
98
|
+
* se tratan como un grupo de exclusión mutua por `_onChange`.
|
|
97
99
|
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
100
|
+
* Nota: Los grupos nativos de `<input type="radio">` solo funcionan dentro de la misma
|
|
101
|
+
* raíz de documento. Dado que `moni-radio` usa shadow DOM, la deselección
|
|
102
|
+
* de los hermanos se maneja imperativamente en `_onChange`.
|
|
101
103
|
*
|
|
102
104
|
* @default ''
|
|
103
105
|
*/
|
|
104
106
|
this.name = '';
|
|
105
107
|
/**
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
+
* Se retransmite al atributo nativo `<input value>`.
|
|
109
|
+
* El valor enviado en un formulario cuando este radio es seleccionado.
|
|
108
110
|
*
|
|
109
111
|
* @default ''
|
|
110
112
|
*/
|
|
111
113
|
this.value = '';
|
|
114
|
+
this._internals = this.attachInternals();
|
|
112
115
|
}
|
|
113
|
-
static { MoniRadio_1 = this; }
|
|
114
116
|
/**
|
|
115
|
-
*
|
|
117
|
+
* Sincroniza `checked` y `disabled` con el input nativo después de cada ciclo de renderizado.
|
|
116
118
|
*
|
|
117
|
-
* @param changed -
|
|
119
|
+
* @param changed - Mapa de los nombres de propiedades modificadas con sus valores anteriores.
|
|
118
120
|
*/
|
|
119
121
|
updated(changed) {
|
|
120
122
|
if (this._input) {
|
|
121
|
-
if (changed.has('checked'))
|
|
123
|
+
if (changed.has('checked')) {
|
|
122
124
|
this._input.checked = this.checked;
|
|
125
|
+
this._internals?.setFormValue?.(this.checked ? (this.value || 'on') : null);
|
|
126
|
+
}
|
|
123
127
|
if (changed.has('disabled'))
|
|
124
128
|
this._input.disabled = this.disabled;
|
|
125
129
|
}
|
|
@@ -236,17 +240,17 @@ let MoniRadio = class MoniRadio extends MoniElement {
|
|
|
236
240
|
`
|
|
237
241
|
]; }
|
|
238
242
|
/**
|
|
239
|
-
*
|
|
243
|
+
* Maneja el evento nativo `change` del input.
|
|
240
244
|
*
|
|
241
|
-
*
|
|
242
|
-
* `name`
|
|
243
|
-
*
|
|
244
|
-
*
|
|
245
|
+
* Al seleccionarse, deselecciona todos los elementos `moni-radio` hermanos con el mismo
|
|
246
|
+
* `name` en el mismo nodo raíz (documento o raíz shadow). Esto es necesario
|
|
247
|
+
* porque la exclusión de grupo de radio nativa solo funciona dentro de la misma raíz
|
|
248
|
+
* de documento y no cruza los límites del shadow DOM.
|
|
245
249
|
*
|
|
246
|
-
*
|
|
247
|
-
* audible
|
|
250
|
+
* Después de la deselección, despacha un evento `'change'` compuesto para que sea
|
|
251
|
+
* audible para los elementos padres en el DOM ligero (light DOM).
|
|
248
252
|
*
|
|
249
|
-
* @param e -
|
|
253
|
+
* @param e - El evento nativo `change` del `<input>` oculto.
|
|
250
254
|
*/
|
|
251
255
|
_onChange(e) {
|
|
252
256
|
this.checked = e.target.checked;
|
|
@@ -263,6 +267,15 @@ let MoniRadio = class MoniRadio extends MoniElement {
|
|
|
263
267
|
}
|
|
264
268
|
this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));
|
|
265
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* Renderiza el radio como un `<input type="radio">` oculto + indicador visual `<span>`.
|
|
272
|
+
*
|
|
273
|
+
* El input oculto se mantiene en el DOM (opacity: 0) para participar en el envío nativo
|
|
274
|
+
* de formularios y exclusión de grupo de radios. Los navegadores aplican automáticamente
|
|
275
|
+
* exclusión mutua entre entradas de radio que comparten el mismo atributo `name`.
|
|
276
|
+
* El círculo visual es dibujado por los pseudo-elementos `::before` / `::after` en
|
|
277
|
+
* el `<span>` y animado mediante transiciones CSS de `scale`.
|
|
278
|
+
*/
|
|
266
279
|
render() {
|
|
267
280
|
return html `<label part="radio">
|
|
268
281
|
<input
|
|
@@ -6,135 +6,150 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { MoniElement } from './_base/index.js';
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* Componente de decoración de onda (ripple) puramente visual.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
11
|
+
* Proporciona una animación de onda con origen en el puntero: el círculo expansivo comienza
|
|
12
|
+
* en las coordenadas exactas donde se pulsó (pointer-down) en lugar de en el centro del elemento.
|
|
13
|
+
* Esta es la onda M3 de alta fidelidad; para una onda central más simple solo con CSS,
|
|
14
|
+
* usa el pseudo-elemento `.interactive::after` de `interactionStyles` en su lugar.
|
|
15
15
|
*
|
|
16
|
-
* **
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
16
|
+
* **Uso:**
|
|
17
|
+
* Coloca `<moni-ripple>` como **hijo** de cualquier elemento interactivo. El componente
|
|
18
|
+
* adjunta automáticamente un listener de `pointerdown` a su `parentElement` y
|
|
19
|
+
* calcula el origen de la onda en coordenadas porcentuales relativas al padre.
|
|
20
20
|
*
|
|
21
|
-
*
|
|
22
|
-
* `position: relative`
|
|
21
|
+
* El elemento padre NO debe tener `position: static` (la onda aplica
|
|
22
|
+
* `position: relative` automáticamente en `connectedCallback`).
|
|
23
23
|
*
|
|
24
|
-
* **
|
|
25
|
-
*
|
|
26
|
-
* 1. `active = false`
|
|
27
|
-
* 2.
|
|
28
|
-
* 3. `active = true`
|
|
29
|
-
* 4.
|
|
24
|
+
* **Modelo de tiempo:**
|
|
25
|
+
* En `pointerdown`:
|
|
26
|
+
* 1. Se establece `active = false` (cancela cualquier onda en progreso).
|
|
27
|
+
* 2. Un tick de `requestAnimationFrame` asegura que el navegador haya procesado el reinicio.
|
|
28
|
+
* 3. `active = true` activa la animación de escala CSS.
|
|
29
|
+
* 4. Un `setTimeout` de duración `duration` ms (basado en `speed`) reinicia `active = false`.
|
|
30
30
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
31
|
+
* La duración coincide con la duración de la transición CSS para que el desvanecimiento de la opacidad
|
|
32
|
+
* se complete antes de que se limpie `active`.
|
|
33
33
|
*
|
|
34
|
-
* **Cleanup:**
|
|
35
|
-
* `disconnectedCallback`
|
|
36
|
-
*
|
|
34
|
+
* **Limpieza (Cleanup):**
|
|
35
|
+
* `disconnectedCallback` elimina el listener de `pointerdown` y borra cualquier
|
|
36
|
+
* tiempo de espera (timeout) pendiente. Llama siempre a `super.disconnectedCallback()` si usas subclases.
|
|
37
37
|
*
|
|
38
38
|
* @example
|
|
39
39
|
* ```html
|
|
40
|
-
* <!--
|
|
40
|
+
* <!-- Onda en un elemento personalizado -->
|
|
41
41
|
* <div class="my-button" style="position: relative; overflow: hidden;">
|
|
42
|
-
*
|
|
42
|
+
* Haz clic
|
|
43
43
|
* <moni-ripple color="primary"></moni-ripple>
|
|
44
44
|
* </div>
|
|
45
45
|
* ```
|
|
46
46
|
*
|
|
47
|
-
* @csspart ripple -
|
|
47
|
+
* @csspart ripple - El `<span>` interno que realiza la animación de escala.
|
|
48
48
|
*/
|
|
49
49
|
export declare class MoniRipple extends MoniElement {
|
|
50
50
|
/**
|
|
51
|
-
*
|
|
51
|
+
* Origen horizontal de la onda como porcentaje del ancho del padre.
|
|
52
52
|
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
53
|
+
* Se establece automáticamente por `_onPointerDown` basándose en las coordenadas del puntero.
|
|
54
|
+
* Se puede configurar manualmente para activar una onda en una ubicación específica.
|
|
55
55
|
*
|
|
56
56
|
* @default 50
|
|
57
57
|
*/
|
|
58
58
|
x: number;
|
|
59
59
|
/**
|
|
60
|
-
*
|
|
60
|
+
* Origen vertical de la onda como porcentaje de la altura del padre.
|
|
61
61
|
*
|
|
62
|
-
*
|
|
62
|
+
* Se establece automáticamente por `_onPointerDown` basándose en las coordenadas del puntero.
|
|
63
63
|
*
|
|
64
64
|
* @default 50
|
|
65
65
|
*/
|
|
66
66
|
y: number;
|
|
67
67
|
/**
|
|
68
|
-
*
|
|
68
|
+
* Cuando es `true`, la onda es visible y se está animando.
|
|
69
69
|
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
70
|
+
* Alternado automáticamente por `_onPointerDown`. Se puede configurar manualmente para
|
|
71
|
+
* efectos de onda disparados programáticamente.
|
|
72
72
|
*
|
|
73
73
|
* @default false
|
|
74
74
|
*/
|
|
75
75
|
active: boolean;
|
|
76
76
|
/**
|
|
77
|
-
*
|
|
77
|
+
* Velocidad de animación de la secuencia de expansión y desvanecimiento de la onda.
|
|
78
78
|
*
|
|
79
|
-
*
|
|
79
|
+
* Se asigna a la propiedad personalizada CSS `--_dur`:
|
|
80
80
|
* - `'fast'` — 300ms
|
|
81
|
-
* - `'normal'` — 600ms (
|
|
81
|
+
* - `'normal'` — 600ms (por defecto)
|
|
82
82
|
* - `'slow'` — 1200ms
|
|
83
83
|
*
|
|
84
84
|
* @default 'normal'
|
|
85
85
|
*/
|
|
86
86
|
speed: 'fast' | 'normal' | 'slow';
|
|
87
87
|
/**
|
|
88
|
-
*
|
|
88
|
+
* Token de color para la superposición de la onda.
|
|
89
89
|
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
90
|
+
* Establece la propiedad CSS `color` en `:host`, que el span `.ripple`
|
|
91
|
+
* hereda a través de `background-color: currentColor`.
|
|
92
92
|
*
|
|
93
|
-
* - `'primary'` — `--primary` (
|
|
93
|
+
* - `'primary'` — `--primary` (por defecto)
|
|
94
94
|
* - `'secondary'` — `--secondary`
|
|
95
|
-
* - `'surface'` — `--surface-variant` (
|
|
95
|
+
* - `'surface'` — `--surface-variant` (sutil, para contenedores de superficie)
|
|
96
96
|
*
|
|
97
97
|
* @default 'primary'
|
|
98
98
|
*/
|
|
99
99
|
color: 'primary' | 'secondary' | 'surface';
|
|
100
100
|
/**
|
|
101
|
-
*
|
|
102
|
-
*
|
|
101
|
+
* Referencia al elemento padre al que está anclada la onda.
|
|
102
|
+
* Poblado en `connectedCallback`, borrado en `disconnectedCallback`.
|
|
103
103
|
*/
|
|
104
104
|
private _target;
|
|
105
105
|
/**
|
|
106
|
-
* ID
|
|
107
|
-
*
|
|
108
|
-
*
|
|
106
|
+
* ID del `setTimeout` pendiente que borra `active` después de la animación.
|
|
107
|
+
* Almacenado para que pueda cancelarse si se dispara un segundo evento de puntero antes
|
|
108
|
+
* de que termine la primera onda (prevención de doble toque rápido).
|
|
109
109
|
*/
|
|
110
110
|
private _timeoutId;
|
|
111
111
|
/**
|
|
112
|
-
*
|
|
112
|
+
* Adjunta la onda a su elemento padre.
|
|
113
113
|
*
|
|
114
|
-
* -
|
|
115
|
-
* -
|
|
116
|
-
*
|
|
117
|
-
* -
|
|
114
|
+
* - Almacena una referencia a `parentElement` para la escucha de eventos del puntero.
|
|
115
|
+
* - Asegura que el padre tenga `position: relative` para que el `position: absolute`
|
|
116
|
+
* de la onda se mantenga dentro de los límites.
|
|
117
|
+
* - Registra el listener de eventos `_onPointerDown`.
|
|
118
118
|
*/
|
|
119
119
|
connectedCallback(): void;
|
|
120
120
|
/**
|
|
121
|
-
*
|
|
121
|
+
* Desvincula la onda de su elemento padre.
|
|
122
122
|
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
123
|
+
* Elimina el listener de `pointerdown` y borra cualquier timeout pendiente para
|
|
124
|
+
* evitar que la bandera `active` se establezca después de que se elimine el elemento.
|
|
125
125
|
*/
|
|
126
126
|
disconnectedCallback(): void;
|
|
127
127
|
/**
|
|
128
|
-
*
|
|
128
|
+
* Maneja los eventos de puntero (pointer-down) en el elemento padre.
|
|
129
129
|
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
130
|
+
* Calcula el origen de la onda como un porcentaje del rectángulo delimitador (bounding rect) del padre,
|
|
131
|
+
* cancela cualquier onda en curso y luego activa una nueva después de un
|
|
132
|
+
* frame de animación para garantizar que la transición CSS se dispare desde la nueva posición.
|
|
133
133
|
*
|
|
134
|
-
* @param e -
|
|
134
|
+
* @param e - El `PointerEvent` del listener `pointerdown` del padre.
|
|
135
135
|
*/
|
|
136
136
|
private _onPointerDown;
|
|
137
137
|
static styles: import("lit").CSSResult[];
|
|
138
|
+
/**
|
|
139
|
+
* Renderiza el elemento `<span>` de la onda con las coordenadas de origen actuales.
|
|
140
|
+
*
|
|
141
|
+
* Este método de renderizado intencionalmente hace muy poco: la onda es fundamentalmente
|
|
142
|
+
* una animación CSS (`scale`, `opacity`) impulsada por la clase `.active` que es
|
|
143
|
+
* alternada por la API de activación de JavaScript (`MoniRipple.activate()`).
|
|
144
|
+
*
|
|
145
|
+
* `--_x` y `--_y` inyectan el origen del toque/clic como valores porcentuales:
|
|
146
|
+
* - `x=0%, y=0%` — la onda se origina desde la esquina superior izquierda.
|
|
147
|
+
* - `x=50%, y=50%` — origen central (por defecto para activación por teclado).
|
|
148
|
+
* - `x=clientX%, y=clientY%` — onda con origen en el puntero para una sensación táctil natural.
|
|
149
|
+
*
|
|
150
|
+
* La clase CSS `.ripple` maneja la animación de expansión `scale(0)` → `scale(1)`
|
|
151
|
+
* y el desvanecimiento `opacity 1` → `opacity 0` a través de transiciones CSS en `.active`.
|
|
152
|
+
*/
|
|
138
153
|
render(): import("lit").TemplateResult<1>;
|
|
139
154
|
}
|
|
140
155
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moni-ripple.d.ts","sourceRoot":"","sources":["../../src/components/moni-ripple.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBACa,UAAW,SAAQ,WAAW;IAC1C;;;;;;;OAOG;IACwC,CAAC,SAAM;IAElD;;;;;;OAMG;IACwC,CAAC,SAAM;IAElD;;;;;;;OAOG;IACyC,MAAM,UAAS;IAE3D;;;;;;;;;OASG;IAEH,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAY;IAE7C;;;;;;;;;;;OAWG;IAEH,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAa;IAEvD;;;OAGG;IACH,OAAO,CAAC,OAAO,CAA4B;IAE3C;;;;OAIG;IACH,OAAO,CAAC,UAAU,CAAa;IAE/B;;;;;;;OAOG;IACM,iBAAiB;IAY1B;;;;;OAKG;IACM,oBAAoB;IAU7B;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc,CAqBpB;IAEF,OAAgB,MAAM,4BAqDpB;
|
|
1
|
+
{"version":3,"file":"moni-ripple.d.ts","sourceRoot":"","sources":["../../src/components/moni-ripple.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBACa,UAAW,SAAQ,WAAW;IAC1C;;;;;;;OAOG;IACwC,CAAC,SAAM;IAElD;;;;;;OAMG;IACwC,CAAC,SAAM;IAElD;;;;;;;OAOG;IACyC,MAAM,UAAS;IAE3D;;;;;;;;;OASG;IAEH,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAY;IAE7C;;;;;;;;;;;OAWG;IAEH,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAa;IAEvD;;;OAGG;IACH,OAAO,CAAC,OAAO,CAA4B;IAE3C;;;;OAIG;IACH,OAAO,CAAC,UAAU,CAAa;IAE/B;;;;;;;OAOG;IACM,iBAAiB;IAY1B;;;;;OAKG;IACM,oBAAoB;IAU7B;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc,CAqBpB;IAEF,OAAgB,MAAM,4BAqDpB;IAEF;;;;;;;;;;;;;;OAcG;IACM,MAAM;CAOf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,aAAa,EAAE,UAAU,CAAC;KAC1B;CACD;AAED,eAAe,UAAU,CAAC"}
|