@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,70 +6,148 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { MoniElement } from './_base/index.js';
|
|
8
8
|
/**
|
|
9
|
-
* Material Design 3 Button Group
|
|
9
|
+
* Componente Material Design 3 Button Group.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* Organiza múltiples componentes `<moni-button>` o `<moni-icon-button>`
|
|
12
|
+
* en una sola fila.
|
|
13
13
|
*
|
|
14
|
-
* **
|
|
15
|
-
* - `standard` (
|
|
16
|
-
* - `connected` —
|
|
17
|
-
*
|
|
18
|
-
*
|
|
14
|
+
* **Variantes:**
|
|
15
|
+
* - `standard` (por defecto) — Una fila flex simple con un espacio entre botones.
|
|
16
|
+
* - `connected` — El reemplazo de M3 Expressive para los botones segmentados. En este
|
|
17
|
+
* modo, los botones comparten bordes y forman una sola forma de píldora continua. El
|
|
18
|
+
* grupo gestiona el estado de selección única/múltiple de sus hijos.
|
|
19
19
|
*
|
|
20
|
-
*
|
|
21
|
-
* - **
|
|
22
|
-
* (`left-round-flat`, `no-round`, `right-round-flat`)
|
|
23
|
-
*
|
|
24
|
-
* - **
|
|
25
|
-
* `active
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* - **
|
|
20
|
+
* **Detalles de la variante `connected`:**
|
|
21
|
+
* - **Propagación de forma:** El grupo propaga automáticamente las clases de forma M3
|
|
22
|
+
* (`left-round-flat`, `no-round`, `right-round-flat`) a sus hijos para
|
|
23
|
+
* que se entrelacen sin problemas.
|
|
24
|
+
* - **Gestión del interruptor:** El grupo escucha los clics de los hijos y cambia sus
|
|
25
|
+
* atributos `active`. Cuando `multi=false` (por defecto), solo un botón puede estar
|
|
26
|
+
* activo a la vez (comportamiento de radio button). Cuando `multi=true`, múltiples botones
|
|
27
|
+
* pueden estar activos (comportamiento de checkbox).
|
|
28
|
+
* - **Propagación de eventos:** Dispara un evento `'change'` cuando la selección cambia.
|
|
29
29
|
*
|
|
30
|
-
* **
|
|
31
|
-
* -
|
|
32
|
-
* -
|
|
33
|
-
*
|
|
30
|
+
* **Accesibilidad:**
|
|
31
|
+
* - Renderiza con `role="group"` (puede ser sobrescrito a `toolbar` o `radiogroup`).
|
|
32
|
+
* - Los consumidores deben proporcionar un atributo `aria-label` o `aria-labelledby`
|
|
33
|
+
* para identificar el propósito del grupo para las tecnologías de asistencia.
|
|
34
34
|
*
|
|
35
|
-
* @fires change -
|
|
36
|
-
*
|
|
35
|
+
* @fires change - Disparado cuando se hace clic en un botón en modo `connected` y el
|
|
36
|
+
* estado de selección se actualiza.
|
|
37
37
|
*
|
|
38
38
|
* @example
|
|
39
39
|
* ```html
|
|
40
|
-
* <!--
|
|
41
|
-
* <moni-button-group variant="connected" label="
|
|
40
|
+
* <!-- Grupo conectado de selección única -->
|
|
41
|
+
* <moni-button-group variant="connected" label="Alineación">
|
|
42
42
|
* <moni-button icon="format_align_left" active></moni-button>
|
|
43
43
|
* <moni-button icon="format_align_center"></moni-button>
|
|
44
44
|
* <moni-button icon="format_align_right"></moni-button>
|
|
45
45
|
* </moni-button-group>
|
|
46
46
|
*
|
|
47
|
-
* <!--
|
|
47
|
+
* <!-- Fila estándar de botones -->
|
|
48
48
|
* <moni-button-group gap="1rem">
|
|
49
|
-
* <moni-button variant="text">
|
|
50
|
-
* <moni-button>
|
|
49
|
+
* <moni-button variant="text">Cancelar</moni-button>
|
|
50
|
+
* <moni-button>Guardar</moni-button>
|
|
51
51
|
* </moni-button-group>
|
|
52
52
|
* ```
|
|
53
53
|
*
|
|
54
|
-
* @slot default -
|
|
54
|
+
* @slot default - Los elementos `<moni-button>` que conforman el grupo.
|
|
55
55
|
*/
|
|
56
56
|
export declare class MoniButtonGroup extends MoniElement {
|
|
57
|
+
/**
|
|
58
|
+
* Variante visual del grupo de botones.
|
|
59
|
+
* - `standard`: Los elementos se espacian normalmente.
|
|
60
|
+
* - `connected`: Los elementos se unen con bordes colapsados y radios internos aplanados.
|
|
61
|
+
* @type {'standard' | 'connected'}
|
|
62
|
+
* @default 'standard'
|
|
63
|
+
*/
|
|
57
64
|
variant: 'standard' | 'connected';
|
|
65
|
+
/**
|
|
66
|
+
* Tamaño de los botones en el grupo. Si se especifica, se propaga hacia abajo a los hijos.
|
|
67
|
+
* @type {'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'extra'}
|
|
68
|
+
* @default 'medium'
|
|
69
|
+
*/
|
|
58
70
|
size: 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'extra';
|
|
71
|
+
/**
|
|
72
|
+
* Permite que múltiples botones estén activos a la vez (solo aplica a grupos seleccionables).
|
|
73
|
+
* @type {boolean}
|
|
74
|
+
*/
|
|
59
75
|
multi: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Espacio CSS personalizado entre botones (ej., '1rem').
|
|
78
|
+
* Solo se aplica cuando la variante es 'standard'.
|
|
79
|
+
* @type {string}
|
|
80
|
+
*/
|
|
60
81
|
gap: string;
|
|
82
|
+
/**
|
|
83
|
+
* Rol ARIA del contenedor del grupo.
|
|
84
|
+
* @type {'group' | 'toolbar' | 'radiogroup'}
|
|
85
|
+
* @default 'group'
|
|
86
|
+
*/
|
|
61
87
|
role: 'group' | 'toolbar' | 'radiogroup';
|
|
88
|
+
/**
|
|
89
|
+
* Una etiqueta accesible para el grupo (`aria-label`).
|
|
90
|
+
* @type {string}
|
|
91
|
+
*/
|
|
62
92
|
label: string;
|
|
93
|
+
/**
|
|
94
|
+
* ID de un elemento que etiqueta este grupo (`aria-labelledby`).
|
|
95
|
+
* @type {string}
|
|
96
|
+
*/
|
|
63
97
|
labelledBy: string;
|
|
64
98
|
private slottedButtons;
|
|
65
99
|
static styles: import("lit").CSSResult[];
|
|
100
|
+
/**
|
|
101
|
+
* Hook del ciclo de vida reactivo (Lit).
|
|
102
|
+
* Detecta alteraciones estructurales en el propio grupo (como `variant`, `size` o `gap`)
|
|
103
|
+
* y fuerza una re-sincronización de todos los botones hijos para aplicar las físicas CSS.
|
|
104
|
+
*/
|
|
66
105
|
protected updated(changedProperties: Map<string | number | symbol, unknown>): void;
|
|
106
|
+
/**
|
|
107
|
+
* Manejador del slot interno (`<slot>`).
|
|
108
|
+
* Cuando el desarrollador inyecta dinámicamente o remueve botones en runtime,
|
|
109
|
+
* re-sincroniza las formas (shapes) y tamaños de todo el listado.
|
|
110
|
+
*/
|
|
67
111
|
private handleSlotChange;
|
|
68
112
|
private getGapValue;
|
|
113
|
+
/**
|
|
114
|
+
* Sincronizador de Propiedades (Engine interno).
|
|
115
|
+
* Itera sobre cada botón hijo para transferirle jerárquicamente las configuraciones
|
|
116
|
+
* del grupo. Si el grupo es del tipo `connected` (botones pegados), evalúa matemáticamente
|
|
117
|
+
* la posición del índice actual (primero, en medio o último) e inyecta la propiedad `shape`
|
|
118
|
+
* correspondiente (`left-round-flat`, `inner-round`, etc.) para formar una cápsula unificada.
|
|
119
|
+
*/
|
|
69
120
|
private updateChildren;
|
|
121
|
+
/**
|
|
122
|
+
* Maneja la interacción táctil o de mouse (Pointer Down).
|
|
123
|
+
* Genera un micro-efecto físico (Squish effect). Cuando el usuario presiona un botón
|
|
124
|
+
* dentro de un listado estándar, empuja físicamente (`scaleX` / `translateX`) a los
|
|
125
|
+
* botones adyacentes para simular presión material y desplazamiento.
|
|
126
|
+
*/
|
|
70
127
|
private handlePointerDown;
|
|
128
|
+
/**
|
|
129
|
+
* Conclusión de la interacción táctil (Pointer Up).
|
|
130
|
+
* Restaura todas las transformaciones elásticas aplicadas a los botones adyacentes
|
|
131
|
+
* a su estado nativo neutro.
|
|
132
|
+
*/
|
|
71
133
|
private handlePointerUp;
|
|
134
|
+
/**
|
|
135
|
+
* Interceptor de clics de delegación.
|
|
136
|
+
* En grupos de tipo 'segment', garantiza que solo un botón tenga la clase activa
|
|
137
|
+
* o el atributo encendido de forma excluyente, actuando como un gestor de radio-buttons.
|
|
138
|
+
*/
|
|
72
139
|
private handleClick;
|
|
140
|
+
/**
|
|
141
|
+
* Renders the button group container with `role="group"` semantics.
|
|
142
|
+
*
|
|
143
|
+
* The group is a flex container that distributes its slotted `<moni-button>`
|
|
144
|
+
* or `<moni-button-segment>` children in a row or column (based on `orientation`).
|
|
145
|
+
* CSS handles the shared-border collapse between adjacent segments:
|
|
146
|
+
* - Middle segments use `border-radius: 0` and `margin-inline-start: -1px`
|
|
147
|
+
* to prevent doubled borders.
|
|
148
|
+
* - `_syncSegments()` in `firstUpdated()` injects `left-round` / `right-round`
|
|
149
|
+
* shape attributes into the first and last children for correct pill termination.
|
|
150
|
+
*/
|
|
73
151
|
render(): import("lit").TemplateResult<1>;
|
|
74
152
|
}
|
|
75
153
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moni-button-group.d.ts","sourceRoot":"","sources":["../../src/components/moni-button-group.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,qBACa,eAAgB,SAAQ,WAAW;
|
|
1
|
+
{"version":3,"file":"moni-button-group.d.ts","sourceRoot":"","sources":["../../src/components/moni-button-group.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,qBACa,eAAgB,SAAQ,WAAW;IAC/C;;;;;;OAMG;IAEH,OAAO,EAAE,UAAU,GAAG,WAAW,CAAc;IAE/C;;;;OAIG;IAEH,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAY;IAE9E;;;OAGG;IAEH,KAAK,UAAS;IAEd;;;;OAIG;IAEH,GAAG,SAAM;IAET;;;;OAIG;IAEH,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY,CAAW;IAEnD;;;OAGG;IAEH,KAAK,SAAM;IAEX;;;OAGG;IAEH,UAAU,SAAM;IAGhB,OAAO,CAAC,cAAc,CAAiB;IAEvC,OAAgB,MAAM,4BAuCpB;IAEF;;;;OAIG;cACgB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC;IAOpF;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,WAAW;IAWnB;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IA0CtB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IA2BzB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAUvB;;;;OAIG;IACH,OAAO,CAAC,WAAW;IA2CnB;;;;;;;;;;OAUG;IACM,MAAM;CAyBf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,mBAAmB,EAAE,eAAe,CAAC;KACrC;CACD;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -14,62 +14,96 @@ import { html, css, nothing } from 'lit';
|
|
|
14
14
|
import { customElement, property, queryAssignedElements } from 'lit/decorators.js';
|
|
15
15
|
import { MoniElement, sharedStyles } from './_base/index.js';
|
|
16
16
|
/**
|
|
17
|
-
* Material Design 3 Button Group
|
|
17
|
+
* Componente Material Design 3 Button Group.
|
|
18
18
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
19
|
+
* Organiza múltiples componentes `<moni-button>` o `<moni-icon-button>`
|
|
20
|
+
* en una sola fila.
|
|
21
21
|
*
|
|
22
|
-
* **
|
|
23
|
-
* - `standard` (
|
|
24
|
-
* - `connected` —
|
|
25
|
-
*
|
|
26
|
-
*
|
|
22
|
+
* **Variantes:**
|
|
23
|
+
* - `standard` (por defecto) — Una fila flex simple con un espacio entre botones.
|
|
24
|
+
* - `connected` — El reemplazo de M3 Expressive para los botones segmentados. En este
|
|
25
|
+
* modo, los botones comparten bordes y forman una sola forma de píldora continua. El
|
|
26
|
+
* grupo gestiona el estado de selección única/múltiple de sus hijos.
|
|
27
27
|
*
|
|
28
|
-
*
|
|
29
|
-
* - **
|
|
30
|
-
* (`left-round-flat`, `no-round`, `right-round-flat`)
|
|
31
|
-
*
|
|
32
|
-
* - **
|
|
33
|
-
* `active
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* - **
|
|
28
|
+
* **Detalles de la variante `connected`:**
|
|
29
|
+
* - **Propagación de forma:** El grupo propaga automáticamente las clases de forma M3
|
|
30
|
+
* (`left-round-flat`, `no-round`, `right-round-flat`) a sus hijos para
|
|
31
|
+
* que se entrelacen sin problemas.
|
|
32
|
+
* - **Gestión del interruptor:** El grupo escucha los clics de los hijos y cambia sus
|
|
33
|
+
* atributos `active`. Cuando `multi=false` (por defecto), solo un botón puede estar
|
|
34
|
+
* activo a la vez (comportamiento de radio button). Cuando `multi=true`, múltiples botones
|
|
35
|
+
* pueden estar activos (comportamiento de checkbox).
|
|
36
|
+
* - **Propagación de eventos:** Dispara un evento `'change'` cuando la selección cambia.
|
|
37
37
|
*
|
|
38
|
-
* **
|
|
39
|
-
* -
|
|
40
|
-
* -
|
|
41
|
-
*
|
|
38
|
+
* **Accesibilidad:**
|
|
39
|
+
* - Renderiza con `role="group"` (puede ser sobrescrito a `toolbar` o `radiogroup`).
|
|
40
|
+
* - Los consumidores deben proporcionar un atributo `aria-label` o `aria-labelledby`
|
|
41
|
+
* para identificar el propósito del grupo para las tecnologías de asistencia.
|
|
42
42
|
*
|
|
43
|
-
* @fires change -
|
|
44
|
-
*
|
|
43
|
+
* @fires change - Disparado cuando se hace clic en un botón en modo `connected` y el
|
|
44
|
+
* estado de selección se actualiza.
|
|
45
45
|
*
|
|
46
46
|
* @example
|
|
47
47
|
* ```html
|
|
48
|
-
* <!--
|
|
49
|
-
* <moni-button-group variant="connected" label="
|
|
48
|
+
* <!-- Grupo conectado de selección única -->
|
|
49
|
+
* <moni-button-group variant="connected" label="Alineación">
|
|
50
50
|
* <moni-button icon="format_align_left" active></moni-button>
|
|
51
51
|
* <moni-button icon="format_align_center"></moni-button>
|
|
52
52
|
* <moni-button icon="format_align_right"></moni-button>
|
|
53
53
|
* </moni-button-group>
|
|
54
54
|
*
|
|
55
|
-
* <!--
|
|
55
|
+
* <!-- Fila estándar de botones -->
|
|
56
56
|
* <moni-button-group gap="1rem">
|
|
57
|
-
* <moni-button variant="text">
|
|
58
|
-
* <moni-button>
|
|
57
|
+
* <moni-button variant="text">Cancelar</moni-button>
|
|
58
|
+
* <moni-button>Guardar</moni-button>
|
|
59
59
|
* </moni-button-group>
|
|
60
60
|
* ```
|
|
61
61
|
*
|
|
62
|
-
* @slot default -
|
|
62
|
+
* @slot default - Los elementos `<moni-button>` que conforman el grupo.
|
|
63
63
|
*/
|
|
64
64
|
let MoniButtonGroup = class MoniButtonGroup extends MoniElement {
|
|
65
65
|
constructor() {
|
|
66
66
|
super(...arguments);
|
|
67
|
+
/**
|
|
68
|
+
* Variante visual del grupo de botones.
|
|
69
|
+
* - `standard`: Los elementos se espacian normalmente.
|
|
70
|
+
* - `connected`: Los elementos se unen con bordes colapsados y radios internos aplanados.
|
|
71
|
+
* @type {'standard' | 'connected'}
|
|
72
|
+
* @default 'standard'
|
|
73
|
+
*/
|
|
67
74
|
this.variant = 'standard';
|
|
75
|
+
/**
|
|
76
|
+
* Tamaño de los botones en el grupo. Si se especifica, se propaga hacia abajo a los hijos.
|
|
77
|
+
* @type {'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'extra'}
|
|
78
|
+
* @default 'medium'
|
|
79
|
+
*/
|
|
68
80
|
this.size = 'medium';
|
|
81
|
+
/**
|
|
82
|
+
* Permite que múltiples botones estén activos a la vez (solo aplica a grupos seleccionables).
|
|
83
|
+
* @type {boolean}
|
|
84
|
+
*/
|
|
69
85
|
this.multi = false;
|
|
86
|
+
/**
|
|
87
|
+
* Espacio CSS personalizado entre botones (ej., '1rem').
|
|
88
|
+
* Solo se aplica cuando la variante es 'standard'.
|
|
89
|
+
* @type {string}
|
|
90
|
+
*/
|
|
70
91
|
this.gap = '';
|
|
92
|
+
/**
|
|
93
|
+
* Rol ARIA del contenedor del grupo.
|
|
94
|
+
* @type {'group' | 'toolbar' | 'radiogroup'}
|
|
95
|
+
* @default 'group'
|
|
96
|
+
*/
|
|
71
97
|
this.role = 'group';
|
|
98
|
+
/**
|
|
99
|
+
* Una etiqueta accesible para el grupo (`aria-label`).
|
|
100
|
+
* @type {string}
|
|
101
|
+
*/
|
|
72
102
|
this.label = '';
|
|
103
|
+
/**
|
|
104
|
+
* ID de un elemento que etiqueta este grupo (`aria-labelledby`).
|
|
105
|
+
* @type {string}
|
|
106
|
+
*/
|
|
73
107
|
this.labelledBy = '';
|
|
74
108
|
}
|
|
75
109
|
static { this.styles = [
|
|
@@ -112,12 +146,22 @@ let MoniButtonGroup = class MoniButtonGroup extends MoniElement {
|
|
|
112
146
|
}
|
|
113
147
|
`
|
|
114
148
|
]; }
|
|
149
|
+
/**
|
|
150
|
+
* Hook del ciclo de vida reactivo (Lit).
|
|
151
|
+
* Detecta alteraciones estructurales en el propio grupo (como `variant`, `size` o `gap`)
|
|
152
|
+
* y fuerza una re-sincronización de todos los botones hijos para aplicar las físicas CSS.
|
|
153
|
+
*/
|
|
115
154
|
updated(changedProperties) {
|
|
116
155
|
super.updated(changedProperties);
|
|
117
156
|
if (changedProperties.has('variant') || changedProperties.has('size') || changedProperties.has('gap')) {
|
|
118
157
|
this.updateChildren();
|
|
119
158
|
}
|
|
120
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Manejador del slot interno (`<slot>`).
|
|
162
|
+
* Cuando el desarrollador inyecta dinámicamente o remueve botones en runtime,
|
|
163
|
+
* re-sincroniza las formas (shapes) y tamaños de todo el listado.
|
|
164
|
+
*/
|
|
121
165
|
handleSlotChange() {
|
|
122
166
|
this.updateChildren();
|
|
123
167
|
}
|
|
@@ -137,6 +181,13 @@ let MoniButtonGroup = class MoniButtonGroup extends MoniElement {
|
|
|
137
181
|
return '0.5rem';
|
|
138
182
|
return gap;
|
|
139
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Sincronizador de Propiedades (Engine interno).
|
|
186
|
+
* Itera sobre cada botón hijo para transferirle jerárquicamente las configuraciones
|
|
187
|
+
* del grupo. Si el grupo es del tipo `connected` (botones pegados), evalúa matemáticamente
|
|
188
|
+
* la posición del índice actual (primero, en medio o último) e inyecta la propiedad `shape`
|
|
189
|
+
* correspondiente (`left-round-flat`, `inner-round`, etc.) para formar una cápsula unificada.
|
|
190
|
+
*/
|
|
140
191
|
updateChildren() {
|
|
141
192
|
const buttons = this.slottedButtons.filter((el) => el.tagName.toLowerCase() === 'moni-button' || el.tagName.toLowerCase() === 'moni-icon-button');
|
|
142
193
|
buttons.forEach((btn, index) => {
|
|
@@ -182,6 +233,12 @@ let MoniButtonGroup = class MoniButtonGroup extends MoniElement {
|
|
|
182
233
|
}
|
|
183
234
|
});
|
|
184
235
|
}
|
|
236
|
+
/**
|
|
237
|
+
* Maneja la interacción táctil o de mouse (Pointer Down).
|
|
238
|
+
* Genera un micro-efecto físico (Squish effect). Cuando el usuario presiona un botón
|
|
239
|
+
* dentro de un listado estándar, empuja físicamente (`scaleX` / `translateX`) a los
|
|
240
|
+
* botones adyacentes para simular presión material y desplazamiento.
|
|
241
|
+
*/
|
|
185
242
|
handlePointerDown(e) {
|
|
186
243
|
if (this.variant !== 'standard')
|
|
187
244
|
return;
|
|
@@ -206,6 +263,11 @@ let MoniButtonGroup = class MoniButtonGroup extends MoniElement {
|
|
|
206
263
|
next.style.transformOrigin = 'left center';
|
|
207
264
|
}
|
|
208
265
|
}
|
|
266
|
+
/**
|
|
267
|
+
* Conclusión de la interacción táctil (Pointer Up).
|
|
268
|
+
* Restaura todas las transformaciones elásticas aplicadas a los botones adyacentes
|
|
269
|
+
* a su estado nativo neutro.
|
|
270
|
+
*/
|
|
209
271
|
handlePointerUp() {
|
|
210
272
|
const buttons = this.slottedButtons.filter((el) => el.tagName.toLowerCase() === 'moni-button' || el.tagName.toLowerCase() === 'moni-icon-button');
|
|
211
273
|
buttons.forEach((btn) => {
|
|
@@ -213,6 +275,11 @@ let MoniButtonGroup = class MoniButtonGroup extends MoniElement {
|
|
|
213
275
|
btn.style.transformOrigin = '';
|
|
214
276
|
});
|
|
215
277
|
}
|
|
278
|
+
/**
|
|
279
|
+
* Interceptor de clics de delegación.
|
|
280
|
+
* En grupos de tipo 'segment', garantiza que solo un botón tenga la clase activa
|
|
281
|
+
* o el atributo encendido de forma excluyente, actuando como un gestor de radio-buttons.
|
|
282
|
+
*/
|
|
216
283
|
handleClick(e) {
|
|
217
284
|
const target = e.target;
|
|
218
285
|
const clickedButton = target.closest('moni-button, moni-icon-button');
|
|
@@ -247,6 +314,17 @@ let MoniButtonGroup = class MoniButtonGroup extends MoniElement {
|
|
|
247
314
|
}
|
|
248
315
|
}));
|
|
249
316
|
}
|
|
317
|
+
/**
|
|
318
|
+
* Renders the button group container with `role="group"` semantics.
|
|
319
|
+
*
|
|
320
|
+
* The group is a flex container that distributes its slotted `<moni-button>`
|
|
321
|
+
* or `<moni-button-segment>` children in a row or column (based on `orientation`).
|
|
322
|
+
* CSS handles the shared-border collapse between adjacent segments:
|
|
323
|
+
* - Middle segments use `border-radius: 0` and `margin-inline-start: -1px`
|
|
324
|
+
* to prevent doubled borders.
|
|
325
|
+
* - `_syncSegments()` in `firstUpdated()` injects `left-round` / `right-round`
|
|
326
|
+
* shape attributes into the first and last children for correct pill termination.
|
|
327
|
+
*/
|
|
250
328
|
render() {
|
|
251
329
|
const resolvedGap = this.getGapValue(this.gap);
|
|
252
330
|
const inlineStyles = resolvedGap
|
|
@@ -7,37 +7,78 @@
|
|
|
7
7
|
import { MoniElement } from './_base/index.js';
|
|
8
8
|
import './moni-icon.js';
|
|
9
9
|
/**
|
|
10
|
-
* Material Design 3 Segmented Button
|
|
10
|
+
* Componente Material Design 3 Segmented Button (Heredado).
|
|
11
11
|
*
|
|
12
|
-
* **
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
12
|
+
* **Aviso de obsolescencia:** La especificación M3 (`m3-docs/components/segmented-buttons/overview.md`)
|
|
13
|
+
* ha reemplazado el componente a medida "segmented button" con botones estándar organizados
|
|
14
|
+
* en un grupo "conectado". Por favor usa `<moni-button-group variant="connected">`
|
|
15
|
+
* conteniendo elementos `<moni-button>` estándar en lugar de este componente.
|
|
16
16
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
17
|
+
* Este componente permanece por compatibilidad hacia atrás pero será eliminado en una
|
|
18
|
+
* futura versión mayor. Renderiza un segmento único dentro de un `<moni-segmented-button>`.
|
|
19
19
|
*
|
|
20
|
-
* @deprecated
|
|
20
|
+
* @deprecated Usa `<moni-button-group variant="connected">` en su lugar.
|
|
21
21
|
*
|
|
22
22
|
* @example
|
|
23
23
|
* ```html
|
|
24
|
-
* <!--
|
|
24
|
+
* <!-- Uso heredado (no recomendado) -->
|
|
25
25
|
* <moni-segmented-button>
|
|
26
|
-
* <moni-button-segment value="day" checked>
|
|
27
|
-
* <moni-button-segment value="week">
|
|
26
|
+
* <moni-button-segment value="day" checked>Día</moni-button-segment>
|
|
27
|
+
* <moni-button-segment value="week">Semana</moni-button-segment>
|
|
28
28
|
* </moni-segmented-button>
|
|
29
29
|
* ```
|
|
30
30
|
*
|
|
31
|
-
* @slot default -
|
|
31
|
+
* @slot default - El texto de la etiqueta del segmento.
|
|
32
32
|
*/
|
|
33
33
|
export declare class MoniButtonSegment extends MoniElement {
|
|
34
|
+
/**
|
|
35
|
+
* Valor asociado con el segmento, usado por el grupo padre.
|
|
36
|
+
* @type {string}
|
|
37
|
+
* @default 'on'
|
|
38
|
+
*/
|
|
34
39
|
value: string;
|
|
40
|
+
/**
|
|
41
|
+
* Estado seleccionado del segmento.
|
|
42
|
+
* @type {boolean}
|
|
43
|
+
*/
|
|
35
44
|
checked: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Tamaño del segmento (usualmente heredado del botón segmentado padre).
|
|
47
|
+
* @type {'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'extra'}
|
|
48
|
+
* @default 'medium'
|
|
49
|
+
*/
|
|
36
50
|
size: 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'extra';
|
|
51
|
+
/**
|
|
52
|
+
* Deshabilita el segmento.
|
|
53
|
+
* @type {boolean}
|
|
54
|
+
*/
|
|
37
55
|
disabled: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Índice posicional del segmento dentro del grupo.
|
|
58
|
+
* Determina la lógica de redondeo del border-radius.
|
|
59
|
+
* @type {'first' | 'middle' | 'last' | 'solo'}
|
|
60
|
+
* @default 'solo'
|
|
61
|
+
*/
|
|
38
62
|
position: 'first' | 'middle' | 'last' | 'solo';
|
|
63
|
+
/**
|
|
64
|
+
* Si es verdadero, oculta el icono de marca de verificación que normalmente reemplaza al icono inicial cuando se selecciona.
|
|
65
|
+
* @type {boolean}
|
|
66
|
+
*/
|
|
39
67
|
hideCheck: boolean;
|
|
40
68
|
static styles: import("lit").CSSResult[];
|
|
69
|
+
/**
|
|
70
|
+
* Renders the segment as a `role="radio"` toggle button within its group.
|
|
71
|
+
*
|
|
72
|
+
* **`role="radio"` + `aria-checked`:**
|
|
73
|
+
* Per the ARIA Segmented Button pattern, each segment acts as a radio button
|
|
74
|
+
* (`role="radio"`, `aria-checked=${this.active}`) within a `role="radiogroup"`
|
|
75
|
+
* container (the parent `<moni-segmented-button>`).
|
|
76
|
+
*
|
|
77
|
+
* **Checkmark icon:**
|
|
78
|
+
* When `active=true`, a `<moni-icon name="check">` is prepended to the label
|
|
79
|
+
* to signal the selected state visually (M3 Segmented Button spec, Figure 5).
|
|
80
|
+
* This icon disappears with a `scale(0)` transition when `active=false`.
|
|
81
|
+
*/
|
|
41
82
|
render(): import("lit").TemplateResult<1>;
|
|
42
83
|
}
|
|
43
84
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moni-button-segment.d.ts","sourceRoot":"","sources":["../../src/components/moni-button-segment.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBACa,iBAAkB,SAAQ,WAAW;
|
|
1
|
+
{"version":3,"file":"moni-button-segment.d.ts","sourceRoot":"","sources":["../../src/components/moni-button-segment.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBACa,iBAAkB,SAAQ,WAAW;IACjD;;;;OAIG;IAEH,KAAK,SAAQ;IAEb;;;OAGG;IAEH,OAAO,UAAS;IAEhB;;;;OAIG;IAEH,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAY;IAE9E;;;OAGG;IAEH,QAAQ,UAAS;IAEjB;;;;;OAKG;IAEH,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAU;IAExD;;;OAGG;IAEH,SAAS,UAAS;IAElB,OAAgB,MAAM,4BA0OpB;IAEF;;;;;;;;;;;;OAYG;IACM,MAAM;CAWf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,qBAAqB,EAAE,iBAAiB,CAAC;KACzC;CACD;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -15,37 +15,65 @@ import { customElement, property } from 'lit/decorators.js';
|
|
|
15
15
|
import { MoniElement, sharedStyles } from './_base/index.js';
|
|
16
16
|
import './moni-icon.js';
|
|
17
17
|
/**
|
|
18
|
-
* Material Design 3 Segmented Button
|
|
18
|
+
* Componente Material Design 3 Segmented Button (Heredado).
|
|
19
19
|
*
|
|
20
|
-
* **
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
20
|
+
* **Aviso de obsolescencia:** La especificación M3 (`m3-docs/components/segmented-buttons/overview.md`)
|
|
21
|
+
* ha reemplazado el componente a medida "segmented button" con botones estándar organizados
|
|
22
|
+
* en un grupo "conectado". Por favor usa `<moni-button-group variant="connected">`
|
|
23
|
+
* conteniendo elementos `<moni-button>` estándar en lugar de este componente.
|
|
24
24
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
25
|
+
* Este componente permanece por compatibilidad hacia atrás pero será eliminado en una
|
|
26
|
+
* futura versión mayor. Renderiza un segmento único dentro de un `<moni-segmented-button>`.
|
|
27
27
|
*
|
|
28
|
-
* @deprecated
|
|
28
|
+
* @deprecated Usa `<moni-button-group variant="connected">` en su lugar.
|
|
29
29
|
*
|
|
30
30
|
* @example
|
|
31
31
|
* ```html
|
|
32
|
-
* <!--
|
|
32
|
+
* <!-- Uso heredado (no recomendado) -->
|
|
33
33
|
* <moni-segmented-button>
|
|
34
|
-
* <moni-button-segment value="day" checked>
|
|
35
|
-
* <moni-button-segment value="week">
|
|
34
|
+
* <moni-button-segment value="day" checked>Día</moni-button-segment>
|
|
35
|
+
* <moni-button-segment value="week">Semana</moni-button-segment>
|
|
36
36
|
* </moni-segmented-button>
|
|
37
37
|
* ```
|
|
38
38
|
*
|
|
39
|
-
* @slot default -
|
|
39
|
+
* @slot default - El texto de la etiqueta del segmento.
|
|
40
40
|
*/
|
|
41
41
|
let MoniButtonSegment = class MoniButtonSegment extends MoniElement {
|
|
42
42
|
constructor() {
|
|
43
43
|
super(...arguments);
|
|
44
|
+
/**
|
|
45
|
+
* Valor asociado con el segmento, usado por el grupo padre.
|
|
46
|
+
* @type {string}
|
|
47
|
+
* @default 'on'
|
|
48
|
+
*/
|
|
44
49
|
this.value = 'on';
|
|
50
|
+
/**
|
|
51
|
+
* Estado seleccionado del segmento.
|
|
52
|
+
* @type {boolean}
|
|
53
|
+
*/
|
|
45
54
|
this.checked = false;
|
|
55
|
+
/**
|
|
56
|
+
* Tamaño del segmento (usualmente heredado del botón segmentado padre).
|
|
57
|
+
* @type {'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'extra'}
|
|
58
|
+
* @default 'medium'
|
|
59
|
+
*/
|
|
46
60
|
this.size = 'medium';
|
|
61
|
+
/**
|
|
62
|
+
* Deshabilita el segmento.
|
|
63
|
+
* @type {boolean}
|
|
64
|
+
*/
|
|
47
65
|
this.disabled = false;
|
|
66
|
+
/**
|
|
67
|
+
* Índice posicional del segmento dentro del grupo.
|
|
68
|
+
* Determina la lógica de redondeo del border-radius.
|
|
69
|
+
* @type {'first' | 'middle' | 'last' | 'solo'}
|
|
70
|
+
* @default 'solo'
|
|
71
|
+
*/
|
|
48
72
|
this.position = 'solo';
|
|
73
|
+
/**
|
|
74
|
+
* Si es verdadero, oculta el icono de marca de verificación que normalmente reemplaza al icono inicial cuando se selecciona.
|
|
75
|
+
* @type {boolean}
|
|
76
|
+
*/
|
|
49
77
|
this.hideCheck = false;
|
|
50
78
|
}
|
|
51
79
|
static { this.styles = [
|
|
@@ -283,6 +311,19 @@ let MoniButtonSegment = class MoniButtonSegment extends MoniElement {
|
|
|
283
311
|
}
|
|
284
312
|
`
|
|
285
313
|
]; }
|
|
314
|
+
/**
|
|
315
|
+
* Renders the segment as a `role="radio"` toggle button within its group.
|
|
316
|
+
*
|
|
317
|
+
* **`role="radio"` + `aria-checked`:**
|
|
318
|
+
* Per the ARIA Segmented Button pattern, each segment acts as a radio button
|
|
319
|
+
* (`role="radio"`, `aria-checked=${this.active}`) within a `role="radiogroup"`
|
|
320
|
+
* container (the parent `<moni-segmented-button>`).
|
|
321
|
+
*
|
|
322
|
+
* **Checkmark icon:**
|
|
323
|
+
* When `active=true`, a `<moni-icon name="check">` is prepended to the label
|
|
324
|
+
* to signal the selected state visually (M3 Segmented Button spec, Figure 5).
|
|
325
|
+
* This icon disappears with a `scale(0)` transition when `active=false`.
|
|
326
|
+
*/
|
|
286
327
|
render() {
|
|
287
328
|
return html `
|
|
288
329
|
<button class="button ${this.size}" type="button" ?disabled=${this.disabled}>
|