@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,44 +6,44 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { MoniElement } from './_base/index.js';
|
|
8
8
|
/**
|
|
9
|
-
* Material Design 3 Menu
|
|
9
|
+
* Componente Material Design 3 Menu (Menú).
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* Los menús muestran una lista de opciones en una superficie temporal. Aparecen cuando
|
|
12
|
+
* los usuarios interactúan con un botón, acción u otro control.
|
|
13
13
|
*
|
|
14
|
-
* **
|
|
14
|
+
* **Referencia de la especificación M3:** `m3-docs/components/menus/guidelines.md`
|
|
15
15
|
*
|
|
16
|
-
* **
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* **Crucial:**
|
|
21
|
-
*
|
|
16
|
+
* **Arquitectura de posicionamiento:**
|
|
17
|
+
* El menú usa `position: absolute` relativo a su ancestro posicionado más cercano.
|
|
18
|
+
* El `:host` del componente usa `display: contents`, lo que significa que el
|
|
19
|
+
* elemento interior `<menu>` participa directamente en el contexto de diseño del consumidor.
|
|
20
|
+
* **Crucial:** El consumidor debe aplicar `position: relative` al elemento contenedor
|
|
21
|
+
* que contiene tanto el activador (trigger) como el `<moni-menu>`.
|
|
22
22
|
*
|
|
23
|
-
* **
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* - **
|
|
27
|
-
*
|
|
28
|
-
* - **Fallback:**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
23
|
+
* **Posicionamiento de auto-volteo (auto-flip):**
|
|
24
|
+
* Según las pautas de M3, los menús deben voltearse hacia el lado opuesto del anclaje
|
|
25
|
+
* si se desbordan de la ventana gráfica (viewport).
|
|
26
|
+
* - **Navegadores modernos (Chrome/Edge 125+, Safari 18+):** Utiliza el posicionamiento
|
|
27
|
+
* de anclaje de CSS y `@position-try-fallback` nativamente cuando `flip=true`.
|
|
28
|
+
* - **Alternativa (Fallback):** Un polyfill de JavaScript mide el menú después de que se abre. Si
|
|
29
|
+
* se desborda de la posición `placement` solicitada, establece un estado interno para voltear
|
|
30
|
+
* las clases de posicionamiento.
|
|
31
31
|
*
|
|
32
|
-
* **
|
|
33
|
-
*
|
|
34
|
-
*
|
|
32
|
+
* **Gestión del estado:**
|
|
33
|
+
* El atributo `active` controla la visibilidad. Los consumidores deben escuchar los eventos
|
|
34
|
+
* del activador (como `click`) y alternar la propiedad `active`.
|
|
35
35
|
*
|
|
36
36
|
* @example
|
|
37
37
|
* ```html
|
|
38
|
-
* <!--
|
|
38
|
+
* <!-- El contenedor debe tener position: relative -->
|
|
39
39
|
* <div style="position: relative; display: inline-block;">
|
|
40
|
-
* <moni-button id="menu-trigger">
|
|
40
|
+
* <moni-button id="menu-trigger">Abrir Menú</moni-button>
|
|
41
41
|
*
|
|
42
42
|
* <moni-menu placement="bottom" flip id="my-menu">
|
|
43
|
-
* <moni-menu-item icon="edit">
|
|
44
|
-
* <moni-menu-item icon="content_copy">
|
|
43
|
+
* <moni-menu-item icon="edit">Editar</moni-menu-item>
|
|
44
|
+
* <moni-menu-item icon="content_copy">Copiar</moni-menu-item>
|
|
45
45
|
* <moni-divider></moni-divider>
|
|
46
|
-
* <moni-menu-item icon="delete">
|
|
46
|
+
* <moni-menu-item icon="delete">Eliminar</moni-menu-item>
|
|
47
47
|
* </moni-menu>
|
|
48
48
|
* </div>
|
|
49
49
|
*
|
|
@@ -54,21 +54,74 @@ import { MoniElement } from './_base/index.js';
|
|
|
54
54
|
* </script>
|
|
55
55
|
* ```
|
|
56
56
|
*
|
|
57
|
-
* @slot default - `<moni-menu-item>`, `<moni-divider>`,
|
|
57
|
+
* @slot default - Elementos `<moni-menu-item>`, `<moni-divider>`, o elementos `<li>` en bruto.
|
|
58
58
|
*
|
|
59
|
-
* @csspart menu -
|
|
59
|
+
* @csspart menu - El contenedor interior `<menu>`.
|
|
60
60
|
*/
|
|
61
61
|
export declare class MoniMenu extends MoniElement {
|
|
62
|
+
/**
|
|
63
|
+
* Posición preferida en relación con el anclaje padre.
|
|
64
|
+
* @type {'bottom' | 'top' | 'left' | 'right' | 'min' | 'max'}
|
|
65
|
+
* @default 'bottom'
|
|
66
|
+
*/
|
|
62
67
|
placement: 'bottom' | 'top' | 'left' | 'right' | 'min' | 'max';
|
|
68
|
+
/**
|
|
69
|
+
* Deshabilita el ajuste de texto dentro del menú.
|
|
70
|
+
* @type {boolean}
|
|
71
|
+
*/
|
|
63
72
|
noWrap: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Controla si el menú está visible.
|
|
75
|
+
* @type {boolean}
|
|
76
|
+
*/
|
|
64
77
|
active: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Lógica de espaciado entre el anclaje y el menú.
|
|
80
|
+
* @type {'no-space' | 'space' | 'small-space' | 'medium-space' | 'large-space' | 'extra-space'}
|
|
81
|
+
* @default 'no-space'
|
|
82
|
+
*/
|
|
65
83
|
space: 'no-space' | 'space' | 'small-space' | 'medium-space' | 'large-space' | 'extra-space';
|
|
84
|
+
/**
|
|
85
|
+
* Habilita la evitación de colisiones basada en JS (volteando la posición si está fuera de los límites).
|
|
86
|
+
* Útil para navegadores que carecen de soporte para anclaje CSS.
|
|
87
|
+
* @type {boolean}
|
|
88
|
+
*/
|
|
66
89
|
flip: boolean;
|
|
67
90
|
private _resolvedPlacement;
|
|
68
91
|
private _menuEl?;
|
|
92
|
+
/**
|
|
93
|
+
* Hook de ciclo de vida de Lit.
|
|
94
|
+
* Detecta si el menú se acaba de abrir (active = true) con la propiedad de 'flip' habilitada.
|
|
95
|
+
* Usa una Promesa (`updateComplete`) para esperar a que Lit termine de renderizar el DOM y
|
|
96
|
+
* el navegador haga el reflow antes de medir sus dimensiones.
|
|
97
|
+
*/
|
|
69
98
|
updated(changed: Map<string, unknown>): void;
|
|
99
|
+
/**
|
|
100
|
+
* Polyfill manual en JS para "position-try-fallbacks" (CSS Anchoring API).
|
|
101
|
+
* Si el menú desborda el viewport en su posición actual, invierte lógicamente
|
|
102
|
+
* su colocación (ej. de 'bottom' a 'top') calculando los BoundingClientRect.
|
|
103
|
+
*/
|
|
70
104
|
private _maybeFlip;
|
|
71
105
|
static styles: import("lit").CSSResult[];
|
|
106
|
+
/**
|
|
107
|
+
* Renderiza el menú como una superposición Popover API o un `<div>` posicionado.
|
|
108
|
+
*
|
|
109
|
+
* **Popover API (`popover="auto"`):**
|
|
110
|
+
* Cuando se establece `popover`, el menú usa la Popover API nativa del navegador.
|
|
111
|
+
* Esto proporciona descarte ligero (light-dismiss) automático (clic fuera para cerrar) y
|
|
112
|
+
* apilamiento en la capa superior sin gestión de `z-index`.
|
|
113
|
+
*
|
|
114
|
+
* **Patrón de menú ARIA:**
|
|
115
|
+
* El contenedor del menú lleva `role="menu"`. Cada hijo `<moni-menu-item>`
|
|
116
|
+
* debe llevar `role="menuitem"`. La navegación con las teclas de flecha se maneja a través de
|
|
117
|
+
* `@keydown` en el contenedor del menú, ciclando a través de los elementos usando
|
|
118
|
+
* `_focusedItemIndex` (incrementado/decrementado con ciclo continuo).
|
|
119
|
+
*
|
|
120
|
+
* **Posicionamiento:**
|
|
121
|
+
* Cuando se establece `anchor`, `_computeStyle()` calcula `top`/`left` desde
|
|
122
|
+
* `getBoundingClientRect()` del elemento anclaje y los inyecta como
|
|
123
|
+
* estilos en línea en el `<div>` del menú.
|
|
124
|
+
*/
|
|
72
125
|
render(): import("lit").TemplateResult<1>;
|
|
73
126
|
}
|
|
74
127
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moni-menu.d.ts","sourceRoot":"","sources":["../../src/components/moni-menu.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,qBACa,QAAS,SAAQ,WAAW;
|
|
1
|
+
{"version":3,"file":"moni-menu.d.ts","sourceRoot":"","sources":["../../src/components/moni-menu.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,qBACa,QAAS,SAAQ,WAAW;IACxC;;;;OAIG;IAEH,SAAS,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAY;IAE1E;;;OAGG;IAC+D,MAAM,UAAS;IAEjF;;;OAGG;IACyC,MAAM,UAAS;IAE3D;;;;OAIG;IAEH,KAAK,EACF,UAAU,GACV,OAAO,GACP,aAAa,GACb,cAAc,GACd,aAAa,GACb,aAAa,CAAc;IAE9B;;;;OAIG;IACyC,IAAI,UAAS;IAEhD,OAAO,CAAC,kBAAkB,CAMf;IAEL,OAAO,CAAC,OAAO,CAAC,CAAc;IAE7C;;;;;OAKG;IACM,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAO9C;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAyBlB,OAAgB,MAAM,4BAkKpB;IAEF;;;;;;;;;;;;;;;;;;OAkBG;IACM,MAAM;CAkBf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,WAAW,EAAE,QAAQ,CAAC;KACtB;CACD;AAED,eAAe,QAAQ,CAAC"}
|
|
@@ -14,44 +14,44 @@ import { html, css } from 'lit';
|
|
|
14
14
|
import { customElement, property, query, state } from 'lit/decorators.js';
|
|
15
15
|
import { MoniElement, sharedStyles } from './_base/index.js';
|
|
16
16
|
/**
|
|
17
|
-
* Material Design 3 Menu
|
|
17
|
+
* Componente Material Design 3 Menu (Menú).
|
|
18
18
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
19
|
+
* Los menús muestran una lista de opciones en una superficie temporal. Aparecen cuando
|
|
20
|
+
* los usuarios interactúan con un botón, acción u otro control.
|
|
21
21
|
*
|
|
22
|
-
* **
|
|
22
|
+
* **Referencia de la especificación M3:** `m3-docs/components/menus/guidelines.md`
|
|
23
23
|
*
|
|
24
|
-
* **
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* **Crucial:**
|
|
29
|
-
*
|
|
24
|
+
* **Arquitectura de posicionamiento:**
|
|
25
|
+
* El menú usa `position: absolute` relativo a su ancestro posicionado más cercano.
|
|
26
|
+
* El `:host` del componente usa `display: contents`, lo que significa que el
|
|
27
|
+
* elemento interior `<menu>` participa directamente en el contexto de diseño del consumidor.
|
|
28
|
+
* **Crucial:** El consumidor debe aplicar `position: relative` al elemento contenedor
|
|
29
|
+
* que contiene tanto el activador (trigger) como el `<moni-menu>`.
|
|
30
30
|
*
|
|
31
|
-
* **
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* - **
|
|
35
|
-
*
|
|
36
|
-
* - **Fallback:**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
31
|
+
* **Posicionamiento de auto-volteo (auto-flip):**
|
|
32
|
+
* Según las pautas de M3, los menús deben voltearse hacia el lado opuesto del anclaje
|
|
33
|
+
* si se desbordan de la ventana gráfica (viewport).
|
|
34
|
+
* - **Navegadores modernos (Chrome/Edge 125+, Safari 18+):** Utiliza el posicionamiento
|
|
35
|
+
* de anclaje de CSS y `@position-try-fallback` nativamente cuando `flip=true`.
|
|
36
|
+
* - **Alternativa (Fallback):** Un polyfill de JavaScript mide el menú después de que se abre. Si
|
|
37
|
+
* se desborda de la posición `placement` solicitada, establece un estado interno para voltear
|
|
38
|
+
* las clases de posicionamiento.
|
|
39
39
|
*
|
|
40
|
-
* **
|
|
41
|
-
*
|
|
42
|
-
*
|
|
40
|
+
* **Gestión del estado:**
|
|
41
|
+
* El atributo `active` controla la visibilidad. Los consumidores deben escuchar los eventos
|
|
42
|
+
* del activador (como `click`) y alternar la propiedad `active`.
|
|
43
43
|
*
|
|
44
44
|
* @example
|
|
45
45
|
* ```html
|
|
46
|
-
* <!--
|
|
46
|
+
* <!-- El contenedor debe tener position: relative -->
|
|
47
47
|
* <div style="position: relative; display: inline-block;">
|
|
48
|
-
* <moni-button id="menu-trigger">
|
|
48
|
+
* <moni-button id="menu-trigger">Abrir Menú</moni-button>
|
|
49
49
|
*
|
|
50
50
|
* <moni-menu placement="bottom" flip id="my-menu">
|
|
51
|
-
* <moni-menu-item icon="edit">
|
|
52
|
-
* <moni-menu-item icon="content_copy">
|
|
51
|
+
* <moni-menu-item icon="edit">Editar</moni-menu-item>
|
|
52
|
+
* <moni-menu-item icon="content_copy">Copiar</moni-menu-item>
|
|
53
53
|
* <moni-divider></moni-divider>
|
|
54
|
-
* <moni-menu-item icon="delete">
|
|
54
|
+
* <moni-menu-item icon="delete">Eliminar</moni-menu-item>
|
|
55
55
|
* </moni-menu>
|
|
56
56
|
* </div>
|
|
57
57
|
*
|
|
@@ -62,28 +62,60 @@ import { MoniElement, sharedStyles } from './_base/index.js';
|
|
|
62
62
|
* </script>
|
|
63
63
|
* ```
|
|
64
64
|
*
|
|
65
|
-
* @slot default - `<moni-menu-item>`, `<moni-divider>`,
|
|
65
|
+
* @slot default - Elementos `<moni-menu-item>`, `<moni-divider>`, o elementos `<li>` en bruto.
|
|
66
66
|
*
|
|
67
|
-
* @csspart menu -
|
|
67
|
+
* @csspart menu - El contenedor interior `<menu>`.
|
|
68
68
|
*/
|
|
69
69
|
let MoniMenu = class MoniMenu extends MoniElement {
|
|
70
70
|
constructor() {
|
|
71
71
|
super(...arguments);
|
|
72
|
+
/**
|
|
73
|
+
* Posición preferida en relación con el anclaje padre.
|
|
74
|
+
* @type {'bottom' | 'top' | 'left' | 'right' | 'min' | 'max'}
|
|
75
|
+
* @default 'bottom'
|
|
76
|
+
*/
|
|
72
77
|
this.placement = 'bottom';
|
|
78
|
+
/**
|
|
79
|
+
* Deshabilita el ajuste de texto dentro del menú.
|
|
80
|
+
* @type {boolean}
|
|
81
|
+
*/
|
|
73
82
|
this.noWrap = false;
|
|
83
|
+
/**
|
|
84
|
+
* Controla si el menú está visible.
|
|
85
|
+
* @type {boolean}
|
|
86
|
+
*/
|
|
74
87
|
this.active = false;
|
|
88
|
+
/**
|
|
89
|
+
* Lógica de espaciado entre el anclaje y el menú.
|
|
90
|
+
* @type {'no-space' | 'space' | 'small-space' | 'medium-space' | 'large-space' | 'extra-space'}
|
|
91
|
+
* @default 'no-space'
|
|
92
|
+
*/
|
|
75
93
|
this.space = 'no-space';
|
|
94
|
+
/**
|
|
95
|
+
* Habilita la evitación de colisiones basada en JS (volteando la posición si está fuera de los límites).
|
|
96
|
+
* Útil para navegadores que carecen de soporte para anclaje CSS.
|
|
97
|
+
* @type {boolean}
|
|
98
|
+
*/
|
|
76
99
|
this.flip = false;
|
|
77
100
|
this._resolvedPlacement = 'bottom';
|
|
78
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Hook de ciclo de vida de Lit.
|
|
104
|
+
* Detecta si el menú se acaba de abrir (active = true) con la propiedad de 'flip' habilitada.
|
|
105
|
+
* Usa una Promesa (`updateComplete`) para esperar a que Lit termine de renderizar el DOM y
|
|
106
|
+
* el navegador haga el reflow antes de medir sus dimensiones.
|
|
107
|
+
*/
|
|
79
108
|
updated(changed) {
|
|
80
109
|
super.updated(changed);
|
|
81
110
|
if (changed.has('active') && this.active && this.flip) {
|
|
82
|
-
// JS polyfill for browsers without @position-try-fallback.
|
|
83
|
-
// Wait one frame so the menu is laid out, then measure.
|
|
84
111
|
this.updateComplete.then(() => this._maybeFlip());
|
|
85
112
|
}
|
|
86
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Polyfill manual en JS para "position-try-fallbacks" (CSS Anchoring API).
|
|
116
|
+
* Si el menú desborda el viewport en su posición actual, invierte lógicamente
|
|
117
|
+
* su colocación (ej. de 'bottom' a 'top') calculando los BoundingClientRect.
|
|
118
|
+
*/
|
|
87
119
|
_maybeFlip() {
|
|
88
120
|
const menu = this._menuEl;
|
|
89
121
|
if (!menu || !this.flip)
|
|
@@ -274,6 +306,25 @@ let MoniMenu = class MoniMenu extends MoniElement {
|
|
|
274
306
|
}
|
|
275
307
|
`
|
|
276
308
|
]; }
|
|
309
|
+
/**
|
|
310
|
+
* Renderiza el menú como una superposición Popover API o un `<div>` posicionado.
|
|
311
|
+
*
|
|
312
|
+
* **Popover API (`popover="auto"`):**
|
|
313
|
+
* Cuando se establece `popover`, el menú usa la Popover API nativa del navegador.
|
|
314
|
+
* Esto proporciona descarte ligero (light-dismiss) automático (clic fuera para cerrar) y
|
|
315
|
+
* apilamiento en la capa superior sin gestión de `z-index`.
|
|
316
|
+
*
|
|
317
|
+
* **Patrón de menú ARIA:**
|
|
318
|
+
* El contenedor del menú lleva `role="menu"`. Cada hijo `<moni-menu-item>`
|
|
319
|
+
* debe llevar `role="menuitem"`. La navegación con las teclas de flecha se maneja a través de
|
|
320
|
+
* `@keydown` en el contenedor del menú, ciclando a través de los elementos usando
|
|
321
|
+
* `_focusedItemIndex` (incrementado/decrementado con ciclo continuo).
|
|
322
|
+
*
|
|
323
|
+
* **Posicionamiento:**
|
|
324
|
+
* Cuando se establece `anchor`, `_computeStyle()` calcula `top`/`left` desde
|
|
325
|
+
* `getBoundingClientRect()` del elemento anclaje y los inyecta como
|
|
326
|
+
* estilos en línea en el `<div>` del menú.
|
|
327
|
+
*/
|
|
277
328
|
render() {
|
|
278
329
|
const effectivePlacement = this.active && this.flip
|
|
279
330
|
? this._resolvedPlacement
|
|
@@ -8,20 +8,95 @@ import { MoniElement } from './_base/index.js';
|
|
|
8
8
|
import './moni-icon.js';
|
|
9
9
|
type Placement = 'center' | 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end' | 'viewport-center' | 'viewport-top' | 'viewport-bottom' | 'viewport-left' | 'viewport-right' | 'viewport-top-left' | 'viewport-top-right' | 'viewport-bottom-left' | 'viewport-bottom-right';
|
|
10
10
|
export declare class MoniMorphModal extends MoniElement {
|
|
11
|
+
/**
|
|
12
|
+
* Selector del elemento disparador desde el cual transformarse (ej. '#fab' o '.my-button').
|
|
13
|
+
* Si se omite, el modal aún puede activarse programáticamente estableciendo `open = true`.
|
|
14
|
+
* @type {string}
|
|
15
|
+
*/
|
|
11
16
|
target: string;
|
|
17
|
+
/**
|
|
18
|
+
* Controla el estado abierto/cerrado del modal.
|
|
19
|
+
* Puede establecerse directamente, o se gestiona internamente cuando se hace clic en el elemento `target`.
|
|
20
|
+
* @type {boolean}
|
|
21
|
+
*/
|
|
12
22
|
open: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Si es true, renderiza un fondo y atrapa el foco, actuando como un verdadero diálogo modal.
|
|
25
|
+
* @type {boolean}
|
|
26
|
+
* @default true
|
|
27
|
+
*/
|
|
13
28
|
modal: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Posición preferida del modal en relación con la ventana gráfica.
|
|
31
|
+
* @type {Placement}
|
|
32
|
+
* @default 'center'
|
|
33
|
+
*/
|
|
14
34
|
placement: Placement;
|
|
35
|
+
/**
|
|
36
|
+
* El ancho del modal cuando está completamente expandido.
|
|
37
|
+
* @type {string}
|
|
38
|
+
* @default '22rem'
|
|
39
|
+
*/
|
|
15
40
|
expandedWidth: string;
|
|
41
|
+
/**
|
|
42
|
+
* La altura del modal cuando está completamente expandido.
|
|
43
|
+
* @type {string}
|
|
44
|
+
* @default '18rem'
|
|
45
|
+
*/
|
|
16
46
|
expandedHeight: string;
|
|
47
|
+
/**
|
|
48
|
+
* Si es true, hacer clic fuera del modal lo cerrará.
|
|
49
|
+
* @type {boolean}
|
|
50
|
+
* @default true
|
|
51
|
+
*/
|
|
17
52
|
closeOnClickOutside: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Si es true, presionar la tecla Escape cerrará el modal.
|
|
55
|
+
* @type {boolean}
|
|
56
|
+
* @default true
|
|
57
|
+
*/
|
|
18
58
|
closeOnEsc: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Si es true, muestra un botón de icono de cierre por defecto en el encabezado.
|
|
61
|
+
* @type {boolean}
|
|
62
|
+
*/
|
|
19
63
|
showCloseButton: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Si es true, intenta fundir/transformar una etiqueta del disparador hacia el encabezado del modal.
|
|
66
|
+
* @type {boolean}
|
|
67
|
+
*/
|
|
20
68
|
morphLabel: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Un selector CSS personalizado utilizado para encontrar el elemento de etiqueta específico dentro del target a transformar.
|
|
71
|
+
* @type {string}
|
|
72
|
+
*/
|
|
21
73
|
morphLabelSelector: string;
|
|
74
|
+
/**
|
|
75
|
+
* Si es true, renderiza un fondo atenuado detrás del modal.
|
|
76
|
+
* @type {boolean}
|
|
77
|
+
* @default true
|
|
78
|
+
*/
|
|
22
79
|
hasBackdrop: boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Si es true, oculta el elemento disparador (target) mientras el modal está abierto.
|
|
82
|
+
* @type {boolean}
|
|
83
|
+
*/
|
|
23
84
|
hideTarget: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Si es true, fuerza al modal a cubrir visualmente la ubicación original del target antes de expandirse.
|
|
87
|
+
* @type {boolean}
|
|
88
|
+
*/
|
|
24
89
|
coverTarget: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Si es true, el modal calcula automáticamente su tamaño final basándose en el contenido interno (ignora expandedWidth y expandedHeight).
|
|
92
|
+
* @type {boolean}
|
|
93
|
+
*/
|
|
94
|
+
autoSize: boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Si es true, aplica un efecto de desenfoque (blur) al contenido durante la animación de entrada y salida.
|
|
97
|
+
* @type {boolean}
|
|
98
|
+
*/
|
|
99
|
+
blurContent: boolean;
|
|
25
100
|
private _panel;
|
|
26
101
|
private _inner;
|
|
27
102
|
private _backdrop;
|
|
@@ -37,19 +112,64 @@ export declare class MoniMorphModal extends MoniElement {
|
|
|
37
112
|
private _morphEls;
|
|
38
113
|
private static _openStack;
|
|
39
114
|
private _targetStylesCache;
|
|
115
|
+
/**
|
|
116
|
+
* Handler encapsulado para el evento click en el trigger.
|
|
117
|
+
* Dispara la animación de apertura.
|
|
118
|
+
*/
|
|
40
119
|
private _onTargetClick;
|
|
120
|
+
/**
|
|
121
|
+
* Handler encapsulado para interceptar teclas a nivel global (ej: Escape).
|
|
122
|
+
*/
|
|
41
123
|
private _onDocKeydown;
|
|
124
|
+
/**
|
|
125
|
+
* Handler de clics globales para detectar interacciones fuera del modal (Click outside).
|
|
126
|
+
* Sólo cierra el modal si `closeOnClickOutside` es true y el usuario no hizo clic
|
|
127
|
+
* dentro de las dimensiones del panel animado ni del botón original.
|
|
128
|
+
*/
|
|
42
129
|
private _onDocClick;
|
|
43
130
|
connectedCallback(): void;
|
|
44
131
|
disconnectedCallback(): void;
|
|
132
|
+
/**
|
|
133
|
+
* Hook del ciclo de vida reactivo (Lit).
|
|
134
|
+
* Observa cambios asíncronos en el atributo `target` para re-bindear el disparador,
|
|
135
|
+
* y reacciona a cambios programáticos de la propiedad `open` para ejecutar
|
|
136
|
+
* imperativamente la animación de apertura (`show`) o cierre (`hide`).
|
|
137
|
+
*/
|
|
45
138
|
updated(changed: Map<string, unknown>): void;
|
|
139
|
+
/**
|
|
140
|
+
* Busca en el DOM el elemento que dispara el modal (el trigger) basándose en la propiedad `target`.
|
|
141
|
+
* Establece el listener de click que iniciará la animación de morphing.
|
|
142
|
+
*/
|
|
46
143
|
private _resolveTarget;
|
|
144
|
+
/**
|
|
145
|
+
* Dispara la apertura del modal y coordina la animación de FLIP (First, Last, Invert, Play) / Morphing.
|
|
146
|
+
* 1. Oculta visualmente el target original.
|
|
147
|
+
* 2. Posiciona el modal colapsado exactamente sobre el target original (mismas dimensiones, color, y radios).
|
|
148
|
+
* 3. Expande fluidamente el modal a sus dimensiones finales mediante transformaciones CSS.
|
|
149
|
+
*/
|
|
47
150
|
show(): void;
|
|
151
|
+
/**
|
|
152
|
+
* Solución a un caso borde de FLIP Animations:
|
|
153
|
+
* Si el `.panel` original carece de un color de fondo sólido, la interpolación
|
|
154
|
+
* de GSAP puede comportarse erráticamente. Este método "asciende" el árbol del DOM
|
|
155
|
+
* hasta encontrar un padre con un color de fondo sólido y lo aplica, garantizando
|
|
156
|
+
* que el modal no colapse de forma transparente de regreso hacia el gatillo.
|
|
157
|
+
*/
|
|
48
158
|
private _ensureSolidPanelBackground;
|
|
49
159
|
hide(): void;
|
|
50
160
|
toggle(): void;
|
|
51
161
|
private _handleDocKeydown;
|
|
162
|
+
/**
|
|
163
|
+
* Fase "First" de la animación (Cierre del Trigger):
|
|
164
|
+
* Determina cómo desaparecer u ocultar el botón original mientras el modal ocupa su lugar.
|
|
165
|
+
* Mantiene el cache de opacidades y colores originales para poder restaurarlos
|
|
166
|
+
* idénticamente al cerrar el modal (evitando saltos visuales).
|
|
167
|
+
*/
|
|
52
168
|
private _hideTargetContent;
|
|
169
|
+
/**
|
|
170
|
+
* Restaura puramente los estilos originales del botón Trigger tras terminar
|
|
171
|
+
* la animación de cierre, leyendo las opacidades/colores almacenados en caché.
|
|
172
|
+
*/
|
|
53
173
|
private _restoreTargetContent;
|
|
54
174
|
private _onHeaderSlotChange;
|
|
55
175
|
private _onFooterSlotChange;
|
|
@@ -73,6 +193,27 @@ export declare class MoniMorphModal extends MoniElement {
|
|
|
73
193
|
private _computeFinalRect;
|
|
74
194
|
private _parseSize;
|
|
75
195
|
static styles: import("lit").CSSResult[];
|
|
196
|
+
/**
|
|
197
|
+
* Renderiza el caparazón del modal morph: fondo opcional + contenedor de panel.
|
|
198
|
+
*
|
|
199
|
+
* **Bandera `_visible`:**
|
|
200
|
+
* `visible = this._visible || this.open` mantiene vivo el DOM mientras se reproduce
|
|
201
|
+
* la animación de cierre de GSAP. `_visible` se establece en `true` al inicio de la apertura y
|
|
202
|
+
* en `false` solo después de que se dispara el `onComplete` de la animación de cierre. Sin esto,
|
|
203
|
+
* Lit eliminaría el panel del DOM antes de que la animación termine.
|
|
204
|
+
*
|
|
205
|
+
* **Condicional del fondo (backdrop):**
|
|
206
|
+
* El div `.backdrop` solo se renderiza cuando `hasBackdrop=true`. Cuando `modal=false`,
|
|
207
|
+
* el `background-color` del fondo se establece en `transparent` para que el fondo superpuesto
|
|
208
|
+
* (scrim) sea invisible, pero los eventos del puntero aún se consumen (clic para cerrar).
|
|
209
|
+
*
|
|
210
|
+
* **Objetivo de morphing de GSAP:**
|
|
211
|
+
* `.panel` es el objetivo de la animación GSAP. Al abrir: se anima desde el
|
|
212
|
+
* `getBoundingClientRect()` del elemento anclaje (posición + tamaño) a su tamaño CSS natural
|
|
213
|
+
* mediante `gsap.fromTo()`. Al cerrar: a la inversa. `.panel-inner` recibe una
|
|
214
|
+
* contra-escala para evitar que el contenido interno se escale junto con el panel,
|
|
215
|
+
* creando una ilusión física de "expandirse desde el origen".
|
|
216
|
+
*/
|
|
76
217
|
render(): import("lit").TemplateResult<1>;
|
|
77
218
|
}
|
|
78
219
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moni-morph-modal.d.ts","sourceRoot":"","sources":["../../src/components/moni-morph-modal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAI7D,OAAO,gBAAgB,CAAC;AAQxB,KAAK,SAAS,GACX,QAAQ,GACR,KAAK,GACL,WAAW,GACX,SAAS,GACT,QAAQ,GACR,cAAc,GACd,YAAY,GACZ,MAAM,GACN,YAAY,GACZ,UAAU,GACV,OAAO,GACP,aAAa,GACb,WAAW,GACX,iBAAiB,GACjB,cAAc,GACd,iBAAiB,GACjB,eAAe,GACf,gBAAgB,GAChB,mBAAmB,GACnB,oBAAoB,GACpB,sBAAsB,GACtB,uBAAuB,CAAC;AA2E3B,qBACa,cAAe,SAAQ,WAAW;
|
|
1
|
+
{"version":3,"file":"moni-morph-modal.d.ts","sourceRoot":"","sources":["../../src/components/moni-morph-modal.ts"],"names":[],"mappings":"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"}
|