@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
|
@@ -6,78 +6,81 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { MoniElement } from './_base/index.js';
|
|
8
8
|
/**
|
|
9
|
-
* Material Design 3 Checkbox
|
|
9
|
+
* Componente Material Design 3 Checkbox.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
* Los checkboxes permiten a los usuarios seleccionar uno o más elementos de un conjunto, o alternar
|
|
12
|
+
* una sola opción binaria. Son envolturas solo visuales — el consumidor es
|
|
13
|
+
* responsable de conectar la lógica de envío y validación del formulario.
|
|
14
14
|
*
|
|
15
|
-
* **
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* - `::before` —
|
|
20
|
-
* - `::after` —
|
|
15
|
+
* **Arquitectura visual (Patrón BeerCSS):**
|
|
16
|
+
* El `<input type="checkbox">` nativo ocupa espacio real en el diseño (mínimo 16×16)
|
|
17
|
+
* pero está oculto visualmente con `opacity: 0`. Un hermano `<span>` renderizado después
|
|
18
|
+
* del input contiene dos pseudo-elementos:
|
|
19
|
+
* - `::before` — el icono visible del checkbox (ligadura de Material Symbols).
|
|
20
|
+
* - `::after` — el anillo de onda (ripple) de la capa de estado hover/focus.
|
|
21
21
|
*
|
|
22
|
-
*
|
|
23
|
-
* - `'check_box_outline_blank'` (
|
|
24
|
-
* - `'check_box'` (
|
|
25
|
-
* - `'indeterminate_check_box'` (
|
|
22
|
+
* El contenido de `::before` cambia entre:
|
|
23
|
+
* - `'check_box_outline_blank'` (desmarcado)
|
|
24
|
+
* - `'check_box'` (marcado)
|
|
25
|
+
* - `'indeterminate_check_box'` (estado nativo indeterminado)
|
|
26
26
|
*
|
|
27
|
-
* **
|
|
28
|
-
*
|
|
29
|
-
*
|
|
27
|
+
* **Integración de formulario:**
|
|
28
|
+
* Establecer `name` y `value` los pasa al elemento `<input>` nativo,
|
|
29
|
+
* permitiendo la participación en envíos de formularios HTML.
|
|
30
30
|
*
|
|
31
|
-
* @fires change -
|
|
32
|
-
*
|
|
31
|
+
* @fires moni-change - Burbujea y está compuesto. Se dispara cuando se alterna el checkbox.
|
|
32
|
+
* El consumidor puede leer `element.checked` para el nuevo estado.
|
|
33
33
|
*
|
|
34
34
|
* @example
|
|
35
35
|
* ```html
|
|
36
|
-
* <moni-checkbox label="
|
|
36
|
+
* <moni-checkbox label="Aceptar términos" name="terms" value="yes"></moni-checkbox>
|
|
37
37
|
*
|
|
38
38
|
* <script>
|
|
39
|
-
* document.querySelector('moni-checkbox').addEventListener('change', (e) => {
|
|
39
|
+
* document.querySelector('moni-checkbox').addEventListener('moni-change', (e) => {
|
|
40
40
|
* console.log('checked:', e.target.checked);
|
|
41
41
|
* });
|
|
42
42
|
* </script>
|
|
43
43
|
* ```
|
|
44
44
|
*
|
|
45
|
-
* @csspart checkbox -
|
|
45
|
+
* @csspart checkbox - El elemento exterior `<label>`.
|
|
46
46
|
*/
|
|
47
47
|
export declare class MoniCheckbox extends MoniElement {
|
|
48
|
+
static formAssociated: boolean;
|
|
49
|
+
private _internals;
|
|
50
|
+
constructor();
|
|
48
51
|
/**
|
|
49
|
-
*
|
|
52
|
+
* Texto de la etiqueta mostrado a la derecha del icono del checkbox.
|
|
50
53
|
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
54
|
+
* Cuando no está vacío, la etiqueta se renderiza como un nodo de texto dentro del `<span>`.
|
|
55
|
+
* Cuando está vacío, el slot por defecto se renderiza en su lugar, permitiendo HTML en el slot.
|
|
53
56
|
*
|
|
54
57
|
* @default ''
|
|
55
58
|
*/
|
|
56
59
|
label: string;
|
|
57
60
|
/**
|
|
58
|
-
*
|
|
61
|
+
* Si el checkbox está actualmente marcado.
|
|
59
62
|
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
+
* Reflejado como un atributo para que los selectores de atributos CSS y los lectores
|
|
64
|
+
* de estado externos puedan observar el estado marcado sin acceder a la propiedad JS.
|
|
65
|
+
* Sincronizado con el input nativo a través de `updated()`.
|
|
63
66
|
*
|
|
64
67
|
* @default false
|
|
65
68
|
*/
|
|
66
69
|
checked: boolean;
|
|
67
70
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
71
|
+
* Cuando es `true`, el input nativo se deshabilita: el checkbox no es interactivo
|
|
72
|
+
* y se renderiza con opacidad del 50%.
|
|
70
73
|
*
|
|
71
74
|
* @default false
|
|
72
75
|
*/
|
|
73
76
|
disabled: boolean;
|
|
74
77
|
/**
|
|
75
|
-
*
|
|
78
|
+
* Tamaño visual del icono del checkbox.
|
|
76
79
|
*
|
|
77
|
-
*
|
|
78
|
-
* input
|
|
80
|
+
* Se mapea a la propiedad personalizada `--_size` que controla tanto el área de impacto
|
|
81
|
+
* del input invisible como el tamaño del icono visible `::before`.
|
|
79
82
|
*
|
|
80
|
-
* |
|
|
83
|
+
* | Valor | `--_size` |
|
|
81
84
|
* |------------|-----------|
|
|
82
85
|
* | `'small'` | 1rem |
|
|
83
86
|
* | `'medium'` | 1.5rem |
|
|
@@ -88,30 +91,30 @@ export declare class MoniCheckbox extends MoniElement {
|
|
|
88
91
|
*/
|
|
89
92
|
size: 'small' | 'medium' | 'large' | 'extra';
|
|
90
93
|
/**
|
|
91
|
-
*
|
|
92
|
-
*
|
|
94
|
+
* Reenviado al atributo `<input name>` nativo.
|
|
95
|
+
* Requerido para agrupar checkboxes dentro de un formulario.
|
|
93
96
|
*
|
|
94
97
|
* @default ''
|
|
95
98
|
*/
|
|
96
99
|
name: string;
|
|
97
100
|
/**
|
|
98
|
-
*
|
|
99
|
-
*
|
|
101
|
+
* Reenviado al atributo `<input value>` nativo.
|
|
102
|
+
* El valor enviado en un formulario cuando este checkbox está marcado.
|
|
100
103
|
*
|
|
101
104
|
* @default ''
|
|
102
105
|
*/
|
|
103
106
|
value: string;
|
|
104
|
-
/**
|
|
107
|
+
/** Referencia directa al elemento input nativo para acceso programático. */
|
|
105
108
|
private _input;
|
|
106
109
|
/**
|
|
107
|
-
*
|
|
108
|
-
*
|
|
110
|
+
* Sincroniza `checked` y `disabled` de vuelta al elemento input nativo después
|
|
111
|
+
* del ciclo de renderizado de Lit, asegurando que el DOM se mantenga sincronizado con el estado del componente.
|
|
109
112
|
*
|
|
110
|
-
*
|
|
111
|
-
* DOM
|
|
112
|
-
*
|
|
113
|
+
* Esto es necesario porque el enlace `.property=${value}` de Lit actualiza la
|
|
114
|
+
* propiedad DOM, pero la directiva `live()` y la asignación directa de propiedad
|
|
115
|
+
* son más fiables para entradas booleanas en diferentes implementaciones de navegadores.
|
|
113
116
|
*
|
|
114
|
-
* @param changed -
|
|
117
|
+
* @param changed - Mapa de nombres de propiedades cambiadas a sus valores anteriores.
|
|
115
118
|
*/
|
|
116
119
|
updated(changed: Map<string, unknown>): void;
|
|
117
120
|
static styles: import("lit").CSSResult[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moni-checkbox.d.ts","sourceRoot":"","sources":["../../src/components/moni-checkbox.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"moni-checkbox.d.ts","sourceRoot":"","sources":["../../src/components/moni-checkbox.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAG7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBACa,YAAa,SAAQ,WAAW;IAC5C,MAAM,CAAC,cAAc,UAAQ;IAC7B,OAAO,CAAC,UAAU,CAAmB;;IAOrC;;;;;;;OAOG;IAC0B,KAAK,SAAM;IAExC;;;;;;;;OAQG;IACyC,OAAO,UAAS;IAE5D;;;;;OAKG;IACyC,QAAQ,UAAS;IAE7D;;;;;;;;;;;;;;OAcG;IAEH,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAY;IAExD;;;;;OAKG;IAC0B,IAAI,SAAM;IAEvC;;;;;OAKG;IAC0B,KAAK,SAAM;IAExC,4EAA4E;IAC5D,OAAO,CAAC,MAAM,CAAoB;IAElD;;;;;;;;;OASG;IACM,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAU9C,OAAgB,MAAM,4BAoHpB;IAEF;;;;;;;;OAQG;IACH,OAAO,CAAC,SAAS;IAOjB;;;;;;;OAOG;IACM,MAAM;CAiBf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,eAAe,EAAE,YAAY,CAAC;KAC9B;CACD;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -15,81 +15,83 @@ import { customElement, property, query } from 'lit/decorators.js';
|
|
|
15
15
|
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
16
16
|
import { live } from 'lit/directives/live.js';
|
|
17
17
|
import { MoniElement, sharedStyles } from './_base/index.js';
|
|
18
|
+
import { emitMoniEvent } from '../utils/event-emitter.js';
|
|
18
19
|
/**
|
|
19
|
-
* Material Design 3 Checkbox
|
|
20
|
+
* Componente Material Design 3 Checkbox.
|
|
20
21
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
22
|
+
* Los checkboxes permiten a los usuarios seleccionar uno o más elementos de un conjunto, o alternar
|
|
23
|
+
* una sola opción binaria. Son envolturas solo visuales — el consumidor es
|
|
24
|
+
* responsable de conectar la lógica de envío y validación del formulario.
|
|
24
25
|
*
|
|
25
|
-
* **
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* - `::before` —
|
|
30
|
-
* - `::after` —
|
|
26
|
+
* **Arquitectura visual (Patrón BeerCSS):**
|
|
27
|
+
* El `<input type="checkbox">` nativo ocupa espacio real en el diseño (mínimo 16×16)
|
|
28
|
+
* pero está oculto visualmente con `opacity: 0`. Un hermano `<span>` renderizado después
|
|
29
|
+
* del input contiene dos pseudo-elementos:
|
|
30
|
+
* - `::before` — el icono visible del checkbox (ligadura de Material Symbols).
|
|
31
|
+
* - `::after` — el anillo de onda (ripple) de la capa de estado hover/focus.
|
|
31
32
|
*
|
|
32
|
-
*
|
|
33
|
-
* - `'check_box_outline_blank'` (
|
|
34
|
-
* - `'check_box'` (
|
|
35
|
-
* - `'indeterminate_check_box'` (
|
|
33
|
+
* El contenido de `::before` cambia entre:
|
|
34
|
+
* - `'check_box_outline_blank'` (desmarcado)
|
|
35
|
+
* - `'check_box'` (marcado)
|
|
36
|
+
* - `'indeterminate_check_box'` (estado nativo indeterminado)
|
|
36
37
|
*
|
|
37
|
-
* **
|
|
38
|
-
*
|
|
39
|
-
*
|
|
38
|
+
* **Integración de formulario:**
|
|
39
|
+
* Establecer `name` y `value` los pasa al elemento `<input>` nativo,
|
|
40
|
+
* permitiendo la participación en envíos de formularios HTML.
|
|
40
41
|
*
|
|
41
|
-
* @fires change -
|
|
42
|
-
*
|
|
42
|
+
* @fires moni-change - Burbujea y está compuesto. Se dispara cuando se alterna el checkbox.
|
|
43
|
+
* El consumidor puede leer `element.checked` para el nuevo estado.
|
|
43
44
|
*
|
|
44
45
|
* @example
|
|
45
46
|
* ```html
|
|
46
|
-
* <moni-checkbox label="
|
|
47
|
+
* <moni-checkbox label="Aceptar términos" name="terms" value="yes"></moni-checkbox>
|
|
47
48
|
*
|
|
48
49
|
* <script>
|
|
49
|
-
* document.querySelector('moni-checkbox').addEventListener('change', (e) => {
|
|
50
|
+
* document.querySelector('moni-checkbox').addEventListener('moni-change', (e) => {
|
|
50
51
|
* console.log('checked:', e.target.checked);
|
|
51
52
|
* });
|
|
52
53
|
* </script>
|
|
53
54
|
* ```
|
|
54
55
|
*
|
|
55
|
-
* @csspart checkbox -
|
|
56
|
+
* @csspart checkbox - El elemento exterior `<label>`.
|
|
56
57
|
*/
|
|
57
58
|
let MoniCheckbox = class MoniCheckbox extends MoniElement {
|
|
59
|
+
static { this.formAssociated = true; }
|
|
58
60
|
constructor() {
|
|
59
|
-
super(
|
|
61
|
+
super();
|
|
60
62
|
/**
|
|
61
|
-
*
|
|
63
|
+
* Texto de la etiqueta mostrado a la derecha del icono del checkbox.
|
|
62
64
|
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
+
* Cuando no está vacío, la etiqueta se renderiza como un nodo de texto dentro del `<span>`.
|
|
66
|
+
* Cuando está vacío, el slot por defecto se renderiza en su lugar, permitiendo HTML en el slot.
|
|
65
67
|
*
|
|
66
68
|
* @default ''
|
|
67
69
|
*/
|
|
68
70
|
this.label = '';
|
|
69
71
|
/**
|
|
70
|
-
*
|
|
72
|
+
* Si el checkbox está actualmente marcado.
|
|
71
73
|
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
74
|
+
* Reflejado como un atributo para que los selectores de atributos CSS y los lectores
|
|
75
|
+
* de estado externos puedan observar el estado marcado sin acceder a la propiedad JS.
|
|
76
|
+
* Sincronizado con el input nativo a través de `updated()`.
|
|
75
77
|
*
|
|
76
78
|
* @default false
|
|
77
79
|
*/
|
|
78
80
|
this.checked = false;
|
|
79
81
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
+
* Cuando es `true`, el input nativo se deshabilita: el checkbox no es interactivo
|
|
83
|
+
* y se renderiza con opacidad del 50%.
|
|
82
84
|
*
|
|
83
85
|
* @default false
|
|
84
86
|
*/
|
|
85
87
|
this.disabled = false;
|
|
86
88
|
/**
|
|
87
|
-
*
|
|
89
|
+
* Tamaño visual del icono del checkbox.
|
|
88
90
|
*
|
|
89
|
-
*
|
|
90
|
-
* input
|
|
91
|
+
* Se mapea a la propiedad personalizada `--_size` que controla tanto el área de impacto
|
|
92
|
+
* del input invisible como el tamaño del icono visible `::before`.
|
|
91
93
|
*
|
|
92
|
-
* |
|
|
94
|
+
* | Valor | `--_size` |
|
|
93
95
|
* |------------|-----------|
|
|
94
96
|
* | `'small'` | 1rem |
|
|
95
97
|
* | `'medium'` | 1.5rem |
|
|
@@ -100,34 +102,37 @@ let MoniCheckbox = class MoniCheckbox extends MoniElement {
|
|
|
100
102
|
*/
|
|
101
103
|
this.size = 'medium';
|
|
102
104
|
/**
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
+
* Reenviado al atributo `<input name>` nativo.
|
|
106
|
+
* Requerido para agrupar checkboxes dentro de un formulario.
|
|
105
107
|
*
|
|
106
108
|
* @default ''
|
|
107
109
|
*/
|
|
108
110
|
this.name = '';
|
|
109
111
|
/**
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
+
* Reenviado al atributo `<input value>` nativo.
|
|
113
|
+
* El valor enviado en un formulario cuando este checkbox está marcado.
|
|
112
114
|
*
|
|
113
115
|
* @default ''
|
|
114
116
|
*/
|
|
115
117
|
this.value = '';
|
|
118
|
+
this._internals = this.attachInternals();
|
|
116
119
|
}
|
|
117
120
|
/**
|
|
118
|
-
*
|
|
119
|
-
*
|
|
121
|
+
* Sincroniza `checked` y `disabled` de vuelta al elemento input nativo después
|
|
122
|
+
* del ciclo de renderizado de Lit, asegurando que el DOM se mantenga sincronizado con el estado del componente.
|
|
120
123
|
*
|
|
121
|
-
*
|
|
122
|
-
* DOM
|
|
123
|
-
*
|
|
124
|
+
* Esto es necesario porque el enlace `.property=${value}` de Lit actualiza la
|
|
125
|
+
* propiedad DOM, pero la directiva `live()` y la asignación directa de propiedad
|
|
126
|
+
* son más fiables para entradas booleanas en diferentes implementaciones de navegadores.
|
|
124
127
|
*
|
|
125
|
-
* @param changed -
|
|
128
|
+
* @param changed - Mapa de nombres de propiedades cambiadas a sus valores anteriores.
|
|
126
129
|
*/
|
|
127
130
|
updated(changed) {
|
|
128
131
|
if (this._input) {
|
|
129
|
-
if (changed.has('checked'))
|
|
132
|
+
if (changed.has('checked')) {
|
|
130
133
|
this._input.checked = this.checked;
|
|
134
|
+
this._internals?.setFormValue?.(this.checked ? (this.value || 'on') : null);
|
|
135
|
+
}
|
|
131
136
|
if (changed.has('disabled'))
|
|
132
137
|
this._input.disabled = this.disabled;
|
|
133
138
|
}
|
|
@@ -260,7 +265,9 @@ let MoniCheckbox = class MoniCheckbox extends MoniElement {
|
|
|
260
265
|
*/
|
|
261
266
|
_onChange(e) {
|
|
262
267
|
this.checked = e.target.checked;
|
|
263
|
-
this
|
|
268
|
+
emitMoniEvent(this, 'moni-change', {
|
|
269
|
+
detail: { value: this.checked, originalEvent: e }
|
|
270
|
+
});
|
|
264
271
|
}
|
|
265
272
|
/**
|
|
266
273
|
* Renders the accessible checkbox label structure.
|
|
@@ -8,70 +8,137 @@ import { MoniElement } from './_base/index.js';
|
|
|
8
8
|
import './moni-icon.js';
|
|
9
9
|
import './moni-progress.js';
|
|
10
10
|
/**
|
|
11
|
-
* Material Design 3 Chip
|
|
11
|
+
* Componente Material Design 3 Chip.
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* Los chips (fichas) son elementos compactos e interactivos que representan acciones, filtros,
|
|
14
|
+
* atributos o entradas de usuario. Son contenedores solo visuales — el consumidor
|
|
15
|
+
* es dueño de todo el manejo del estado (selección, eliminación, estado de filtro activo).
|
|
16
16
|
*
|
|
17
|
-
* **
|
|
17
|
+
* **Referencia de la especificación M3:** `m3-docs/components/chips/specs.md`
|
|
18
18
|
*
|
|
19
|
-
* **
|
|
20
|
-
* - `assist` (
|
|
21
|
-
*
|
|
22
|
-
* - `filter` —
|
|
23
|
-
* `selected`. Alias: `fill`.
|
|
24
|
-
* - `input` —
|
|
25
|
-
*
|
|
26
|
-
* - `suggestion` —
|
|
19
|
+
* **Variantes:**
|
|
20
|
+
* - `assist` (por defecto) — Acciones inteligentes o sugeridas. Usa borde `var(--outline)`
|
|
21
|
+
* para asegurar un contraste de 3:1 según la especificación de accesibilidad de M3. Alias: `outlined`.
|
|
22
|
+
* - `filter` — Filtros para una colección de contenido. Muestra una marca de verificación al principio cuando
|
|
23
|
+
* está `selected`. Alias: `fill`.
|
|
24
|
+
* - `input` — Representa una entrada de usuario discreta (etiquetas, tokens). Añade un icono de
|
|
25
|
+
* eliminación al final cuando es `removable`.
|
|
26
|
+
* - `suggestion` — Sugerencias generadas por el producto. Con contorno, sin iconos.
|
|
27
27
|
*
|
|
28
|
-
* **M3
|
|
29
|
-
* -
|
|
30
|
-
* -
|
|
31
|
-
* -
|
|
32
|
-
* - `medium`
|
|
28
|
+
* **Medidas M3:**
|
|
29
|
+
* - Altura por defecto: 32dp (tamaño `small` = línea base de la especificación M3).
|
|
30
|
+
* - Radio de esquina: 8dp.
|
|
31
|
+
* - Tamaño de icono: 18dp.
|
|
32
|
+
* - Los tamaños `medium` y `large` son extensiones de Moni con áreas táctiles más grandes.
|
|
33
33
|
*
|
|
34
|
-
* **
|
|
35
|
-
* `assist`
|
|
36
|
-
*
|
|
37
|
-
* `filter`
|
|
38
|
-
*
|
|
34
|
+
* **Accesibilidad:**
|
|
35
|
+
* Los chips `assist` y `suggestion` usan `var(--outline)` para su trazo para
|
|
36
|
+
* garantizar un contraste de 3:1 contra el fondo de la superficie en reposo.
|
|
37
|
+
* `filter` e `input` usan `outline-variant` en reposo pero logran contraste
|
|
38
|
+
* a través del relleno `secondary-container` cuando se seleccionan.
|
|
39
39
|
*
|
|
40
|
-
* @fires remove -
|
|
41
|
-
*
|
|
40
|
+
* @fires remove - Burbujea y está compuesto. Se dispara cuando el icono de eliminación
|
|
41
|
+
* final se hace clic en un chip `input` con `removable`.
|
|
42
42
|
*
|
|
43
43
|
* @example
|
|
44
44
|
* ```html
|
|
45
|
-
* <!--
|
|
45
|
+
* <!-- Chip de filtro con estado seleccionado -->
|
|
46
46
|
* <moni-chip variant="filter" selected>Technology</moni-chip>
|
|
47
47
|
*
|
|
48
|
-
* <!--
|
|
48
|
+
* <!-- Chip de entrada (etiqueta/token) -->
|
|
49
49
|
* <moni-chip variant="input" removable icon="label">TypeScript</moni-chip>
|
|
50
50
|
*
|
|
51
|
-
* <!--
|
|
51
|
+
* <!-- Chip de asistencia con icono -->
|
|
52
52
|
* <moni-chip icon="directions_car">Get directions</moni-chip>
|
|
53
53
|
* ```
|
|
54
54
|
*
|
|
55
|
-
* @slot default -
|
|
56
|
-
* @slot icon -
|
|
55
|
+
* @slot default - El texto de la etiqueta del chip.
|
|
56
|
+
* @slot icon - Anula el icono inicial (alternativa al atributo `icon`).
|
|
57
57
|
*
|
|
58
|
-
* @csspart chip -
|
|
59
|
-
* @csspart label -
|
|
58
|
+
* @csspart chip - El elemento interno `<button>`.
|
|
59
|
+
* @csspart label - El elemento `<span>` de la etiqueta.
|
|
60
60
|
*/
|
|
61
61
|
export declare class MoniChip extends MoniElement {
|
|
62
|
+
/**
|
|
63
|
+
* Variante visual del chip.
|
|
64
|
+
* @type {'assist' | 'filter' | 'input' | 'suggestion' | 'outlined' | 'fill'}
|
|
65
|
+
* @default 'assist'
|
|
66
|
+
*/
|
|
62
67
|
variant: 'assist' | 'filter' | 'input' | 'suggestion' | 'outlined' | 'fill';
|
|
68
|
+
/**
|
|
69
|
+
* Define las dimensiones del chip.
|
|
70
|
+
* @type {'small' | 'medium' | 'large'}
|
|
71
|
+
* @default 'small'
|
|
72
|
+
*/
|
|
63
73
|
size: 'small' | 'medium' | 'large';
|
|
74
|
+
/**
|
|
75
|
+
* Forma del radio del borde del chip.
|
|
76
|
+
* @type {'round' | 'no-round' | 'square' | 'circle' | 'left-round' | 'right-round' | 'top-round' | 'bottom-round'}
|
|
77
|
+
* @default 'round'
|
|
78
|
+
*/
|
|
64
79
|
shape: 'round' | 'no-round' | 'square' | 'circle' | 'left-round' | 'right-round' | 'top-round' | 'bottom-round';
|
|
80
|
+
/**
|
|
81
|
+
* Si es true, marca el chip como seleccionado (útil para chips de filtro).
|
|
82
|
+
* @type {boolean}
|
|
83
|
+
*/
|
|
65
84
|
selected: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Si es true, muestra un icono de cierre al final para permitir la eliminación.
|
|
87
|
+
* @type {boolean}
|
|
88
|
+
*/
|
|
66
89
|
removable: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Deshabilita el chip.
|
|
92
|
+
* @type {boolean}
|
|
93
|
+
*/
|
|
67
94
|
disabled: boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Si es true, muestra un indicador de carga dentro del chip.
|
|
97
|
+
* @type {boolean}
|
|
98
|
+
*/
|
|
68
99
|
loading: boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Nombre del icono inicial (Material Symbols).
|
|
102
|
+
* @type {string}
|
|
103
|
+
*/
|
|
69
104
|
icon: string;
|
|
70
105
|
private _hasSlottedIcon;
|
|
106
|
+
/**
|
|
107
|
+
* Manejador del slot interno de icono (Slot Change).
|
|
108
|
+
* Determina si el desarrollador proporcionó un icono dinámicamente vía Light DOM
|
|
109
|
+
* (`<moni-icon slot="icon">`), permitiendo que el componente ajuste
|
|
110
|
+
* sus márgenes internos (`padding`) y espaciados dinámicamente.
|
|
111
|
+
*/
|
|
71
112
|
private _handleSlotChange;
|
|
72
|
-
/**
|
|
113
|
+
/**
|
|
114
|
+
* Manejador de clics en el icono de remover.
|
|
115
|
+
* Detiene la propagación para no disparar el clic del chip y emite un evento custom 'remove'.
|
|
116
|
+
*/
|
|
117
|
+
private _handleRemoveClick;
|
|
118
|
+
/** Normaliza los nombres de variantes heredadas a la especificación M3. */
|
|
73
119
|
private get _variant();
|
|
74
120
|
static styles: import("lit").CSSResult[];
|
|
121
|
+
/**
|
|
122
|
+
* Renderiza el elemento `<button>` del chip con su lista de clases calculada.
|
|
123
|
+
*
|
|
124
|
+
* **Normalización de variantes:**
|
|
125
|
+
* `_variant` mapea nombres de alias heredados (`'outlined'` → `'assist'`, `'fill'` → `'filter'`)
|
|
126
|
+
* a nombres de variantes canónicas de M3 antes de inyectarlos como clases CSS.
|
|
127
|
+
*
|
|
128
|
+
* **Ruta rápida de carga:**
|
|
129
|
+
* Cuando `loading=true`, se devuelve temprano un botón mínimo con solo un indicador de carga
|
|
130
|
+
* (sin slot de icono, sin etiqueta, sin botón de eliminación) con `aria-busy="true"`.
|
|
131
|
+
*
|
|
132
|
+
* **Lógica del botón de eliminación:**
|
|
133
|
+
* `showRemove` es `true` cuando:
|
|
134
|
+
* - `variant='input'` (Especificación M3: los chips de entrada siempre tienen un icono de cierre al final), o
|
|
135
|
+
* - `removable=true` se establece explícitamente.
|
|
136
|
+
*
|
|
137
|
+
* **Resolución de icono:**
|
|
138
|
+
* Si se establece el atributo `icon`, se renderiza un `<moni-icon>`. De lo contrario, se usa el
|
|
139
|
+
* slot nombrado `icon`, con `_hasSlottedIcon` rastreando si se proyectó contenido en el slot
|
|
140
|
+
* (usado para añadir condicionalmente los ajustes de relleno `has-icon`).
|
|
141
|
+
*/
|
|
75
142
|
render(): import("lit").TemplateResult<1>;
|
|
76
143
|
}
|
|
77
144
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moni-chip.d.ts","sourceRoot":"","sources":["../../src/components/moni-chip.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,gBAAgB,CAAC;AACxB,OAAO,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,qBACa,QAAS,SAAQ,WAAW;
|
|
1
|
+
{"version":3,"file":"moni-chip.d.ts","sourceRoot":"","sources":["../../src/components/moni-chip.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,gBAAgB,CAAC;AACxB,OAAO,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,qBACa,QAAS,SAAQ,WAAW;IACxC;;;;OAIG;IAEH,OAAO,EACJ,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,YAAY,GACZ,UAAU,GACV,MAAM,CAAY;IAErB;;;;OAIG;IAEH,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAW;IAE7C;;;;OAIG;IAEH,KAAK,EACF,OAAO,GACP,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,aAAa,GACb,WAAW,GACX,cAAc,CAAW;IAE5B;;;OAGG;IACyC,QAAQ,UAAS;IAE7D;;;OAGG;IACyC,SAAS,UAAS;IAE9D;;;OAGG;IACyC,QAAQ,UAAS;IAE7D;;;OAGG;IACyC,OAAO,UAAS;IAE5D;;;OAGG;IAC0B,IAAI,SAAM;IAGvC,OAAO,CAAC,eAAe,CAAS;IAEhC;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAK1B,2EAA2E;IAC3E,OAAO,KAAK,QAAQ,GAInB;IAED,OAAgB,MAAM,4BAqLpB;IAEF;;;;;;;;;;;;;;;;;;;;OAoBG;IACM,MAAM;CA+Df;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,WAAW,EAAE,QAAQ,CAAC;KACtB;CACD;AAED,eAAe,QAAQ,CAAC"}
|