@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
|
@@ -10,34 +10,34 @@ import { customElement, property } from 'lit/decorators.js';
|
|
|
10
10
|
import { MoniElement, sharedStyles } from './_base/index.js';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
* Material Design 3 App Bar
|
|
13
|
+
* Componente Material Design 3 App Bar.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* Las barras de aplicación proporcionan navegación y controles de acción en la parte superior (o inferior) de una
|
|
16
|
+
* pantalla. Se posicionan fijas (sticky) por defecto para que permanezcan visibles mientras el
|
|
17
|
+
* usuario hace scroll a través del contenido.
|
|
18
18
|
*
|
|
19
|
-
* **
|
|
19
|
+
* **Referencia de la especificación M3:** `m3-docs/components/app-bars/specs.md`
|
|
20
20
|
*
|
|
21
|
-
* **
|
|
22
|
-
* - `top` (
|
|
23
|
-
*
|
|
24
|
-
* - `bottom` —
|
|
25
|
-
* Ideal
|
|
21
|
+
* **Posicionamiento:**
|
|
22
|
+
* - `top` (por defecto) — Encabezado de 64dp fijo arriba del contenido de la página. Usa `position: sticky`
|
|
23
|
+
* con `inset-block-start: 0` para que se mantenga en la parte superior del contenedor.
|
|
24
|
+
* - `bottom` — Pie de navegación móvil anclado a la parte inferior de la ventana.
|
|
25
|
+
* Ideal para albergar iconos de navegación primarios y un botón FAB opcional.
|
|
26
26
|
*
|
|
27
|
-
* **
|
|
28
|
-
* - `standard` —
|
|
29
|
-
* - `floating` —
|
|
30
|
-
*
|
|
27
|
+
* **Variantes:**
|
|
28
|
+
* - `standard` — Superficie plana (sin sombra) cuando el contenido está arriba. Ideal para la mayoría de UIs.
|
|
29
|
+
* - `floating` — Siempre elevada con sombra `--elevate2`. Úsalo cuando la barra visualmente
|
|
30
|
+
* flota sobre el contenido independientemente de la posición del scroll.
|
|
31
31
|
*
|
|
32
|
-
* **
|
|
33
|
-
* - `default` — 64dp (4rem)
|
|
34
|
-
* - `prominent` — 152dp (9.5rem)
|
|
35
|
-
*
|
|
32
|
+
* **Tamaños:**
|
|
33
|
+
* - `default` — 64dp (4rem) de alto. Estándar para la mayoría de casos de uso.
|
|
34
|
+
* - `prominent` — 152dp (9.5rem) de alto. Úsalo cuando se necesita un subtítulo o un área expandida.
|
|
35
|
+
* El atributo `subtitle` solo se renderiza en este tamaño.
|
|
36
36
|
*
|
|
37
37
|
* @example
|
|
38
38
|
* ```html
|
|
39
|
-
* <!-- Top app bar
|
|
40
|
-
* <moni-app-bar title="
|
|
39
|
+
* <!-- Top app bar con icono de navegación y botones de acción -->
|
|
40
|
+
* <moni-app-bar title="Ajustes">
|
|
41
41
|
* <moni-button slot="leading" shape="circle" variant="text" icon="menu"></moni-button>
|
|
42
42
|
* <moni-button slot="trailing" shape="circle" variant="text" icon="search"></moni-button>
|
|
43
43
|
* <moni-button slot="trailing" shape="circle" variant="text" icon="more_vert"></moni-button>
|
|
@@ -46,30 +46,30 @@ import { MoniElement, sharedStyles } from './_base/index.js';
|
|
|
46
46
|
*
|
|
47
47
|
* @example
|
|
48
48
|
* ```html
|
|
49
|
-
* <!--
|
|
50
|
-
* <moni-app-bar size="prominent" title="
|
|
49
|
+
* <!-- App bar prominente con subtítulo -->
|
|
50
|
+
* <moni-app-bar size="prominent" title="Bandeja de entrada" subtitle="12 mensajes no leídos" elevated>
|
|
51
51
|
* </moni-app-bar>
|
|
52
52
|
* ```
|
|
53
53
|
*
|
|
54
|
-
* @slot leading -
|
|
55
|
-
* @slot trailing -
|
|
56
|
-
* @slot fab - FAB
|
|
57
|
-
* @slot default -
|
|
54
|
+
* @slot leading - Icono(s) de navegación colocados en el borde inicial (start).
|
|
55
|
+
* @slot trailing - Icono(s) de acción colocados en el borde final (end).
|
|
56
|
+
* @slot fab - FAB anclado al borde final (solo con posición inferior).
|
|
57
|
+
* @slot default - Contenido adicional (ej. una barra de pestañas debajo de la fila del título).
|
|
58
58
|
*
|
|
59
|
-
* @csspart bar -
|
|
60
|
-
* @csspart leading -
|
|
61
|
-
* @csspart trailing -
|
|
62
|
-
* @csspart title -
|
|
63
|
-
* @csspart subtitle -
|
|
64
|
-
* @csspart actions -
|
|
59
|
+
* @csspart bar - El contenedor grid interno.
|
|
60
|
+
* @csspart leading - El envoltorio del slot leading.
|
|
61
|
+
* @csspart trailing - El envoltorio del slot trailing.
|
|
62
|
+
* @csspart title - El elemento de texto del título.
|
|
63
|
+
* @csspart subtitle - El elemento de texto del subtítulo (solo tamaño prominente).
|
|
64
|
+
* @csspart actions - El envoltorio de las acciones (solo tamaño prominente).
|
|
65
65
|
*/
|
|
66
66
|
@customElement('moni-app-bar')
|
|
67
67
|
export class MoniAppBar extends MoniElement {
|
|
68
68
|
/**
|
|
69
|
-
*
|
|
69
|
+
* Determina si la barra se coloca en la parte superior o inferior de la pantalla.
|
|
70
70
|
*
|
|
71
|
-
* - `'top'` (
|
|
72
|
-
* - `'bottom'` —
|
|
71
|
+
* - `'top'` (por defecto) — Encabezado pegajoso (sticky) en la parte superior del contenedor de scroll.
|
|
72
|
+
* - `'bottom'` — Pie fijo; usado principalmente para patrones de navegación inferior móvil.
|
|
73
73
|
*
|
|
74
74
|
* @default 'top'
|
|
75
75
|
*/
|
|
@@ -77,11 +77,11 @@ export class MoniAppBar extends MoniElement {
|
|
|
77
77
|
placement: 'top' | 'bottom' = 'top';
|
|
78
78
|
|
|
79
79
|
/**
|
|
80
|
-
*
|
|
80
|
+
* Variante visual de la app bar.
|
|
81
81
|
*
|
|
82
|
-
* - `'standard'` (
|
|
83
|
-
*
|
|
84
|
-
* - `'floating'` —
|
|
82
|
+
* - `'standard'` (por defecto) — Superficie plana. Sin sombra en reposo; gana sombra
|
|
83
|
+
* programáticamente a través del atributo `elevated` cuando el contenido se desplaza por debajo de ella.
|
|
84
|
+
* - `'floating'` — Permanentemente elevada con sombra `--elevate2`.
|
|
85
85
|
*
|
|
86
86
|
* @default 'standard'
|
|
87
87
|
*/
|
|
@@ -89,11 +89,11 @@ export class MoniAppBar extends MoniElement {
|
|
|
89
89
|
variant: 'standard' | 'floating' = 'standard';
|
|
90
90
|
|
|
91
91
|
/**
|
|
92
|
-
*
|
|
92
|
+
* Variante de altura de la app bar.
|
|
93
93
|
*
|
|
94
|
-
* - `'default'` — 64dp (4rem).
|
|
95
|
-
* - `'prominent'` — 152dp (9.5rem).
|
|
96
|
-
*
|
|
94
|
+
* - `'default'` — 64dp (4rem). Altura estándar de la top app bar de M3.
|
|
95
|
+
* - `'prominent'` — 152dp (9.5rem). Úsalo cuando se muestra un subtítulo o cuando
|
|
96
|
+
* se necesita espacio vertical adicional para una fila de acciones contextuales.
|
|
97
97
|
*
|
|
98
98
|
* @default 'default'
|
|
99
99
|
*/
|
|
@@ -101,32 +101,32 @@ export class MoniAppBar extends MoniElement {
|
|
|
101
101
|
size: 'default' | 'prominent' = 'default';
|
|
102
102
|
|
|
103
103
|
/**
|
|
104
|
-
*
|
|
104
|
+
* Texto del título mostrado en el centro de la app bar.
|
|
105
105
|
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
106
|
+
* El título está alineado al centro según la especificación de M3. Los títulos largos se truncan con
|
|
107
|
+
* puntos suspensivos. Para un HTML semántico, el consumidor también debería proporcionar un `<h1>`
|
|
108
|
+
* en el contenido de la página que coincida con este título.
|
|
109
109
|
*
|
|
110
110
|
* @default ''
|
|
111
111
|
*/
|
|
112
112
|
@property({ reflect: true }) title = '';
|
|
113
113
|
|
|
114
114
|
/**
|
|
115
|
-
*
|
|
115
|
+
* Subtítulo opcional mostrado debajo del título.
|
|
116
116
|
*
|
|
117
|
-
*
|
|
118
|
-
* (
|
|
117
|
+
* Solo se renderiza cuando `size="prominent"`. Proporciona contexto secundario
|
|
118
|
+
* (ej. nombre de carpeta, recuento de elementos, descripción).
|
|
119
119
|
*
|
|
120
120
|
* @default ''
|
|
121
121
|
*/
|
|
122
122
|
@property({ reflect: true }) subtitle = '';
|
|
123
123
|
|
|
124
124
|
/**
|
|
125
|
-
*
|
|
126
|
-
*
|
|
125
|
+
* Cuando está presente, aplica una sombra `--elevate2` para señalar que el contenido se
|
|
126
|
+
* ha desplazado por debajo de la barra.
|
|
127
127
|
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
128
|
+
* Los consumidores son responsables de alternar este atributo reactivamente basándose en
|
|
129
|
+
* la posición de desplazamiento (scroll) del área de contenido principal:
|
|
130
130
|
* ```ts
|
|
131
131
|
* container.addEventListener('scroll', () => {
|
|
132
132
|
* appBar.elevated = container.scrollTop > 0;
|
|
@@ -245,16 +245,26 @@ export class MoniAppBar extends MoniElement {
|
|
|
245
245
|
];
|
|
246
246
|
|
|
247
247
|
/**
|
|
248
|
-
*
|
|
248
|
+
* Renderiza el diseño de CSS Grid de 3 columnas de la app bar.
|
|
249
249
|
*
|
|
250
|
-
*
|
|
251
|
-
* - Column 1
|
|
252
|
-
* - Column 2
|
|
253
|
-
*
|
|
250
|
+
* **Anatomía del Grid (`grid-template-columns: auto 1fr auto`):**
|
|
251
|
+
* - Column 1 (`.leading`) — auto-width; contains the navigation icon slot.
|
|
252
|
+
* - Column 2 (`.title`) — `1fr` flex-growing center column; the title is
|
|
253
|
+
* center-aligned via `text-align: center`.
|
|
254
|
+
* - Column 3 (`.trailing`) — auto-width; contains action icon slots.
|
|
254
255
|
*
|
|
255
|
-
*
|
|
256
|
-
*
|
|
257
|
-
*
|
|
256
|
+
* **Prominent mode extensions (`size='prominent'`):**
|
|
257
|
+
* - A subtitle element is conditionally rendered in grid row 3 below the title.
|
|
258
|
+
* - An `actions` slot (grid-column: 1 / -1) spans the full width of row 3,
|
|
259
|
+
* allowing a contextual action row (e.g., a tab bar or search field) below
|
|
260
|
+
* the title/subtitle pair.
|
|
261
|
+
* - `hasSubtitle` gates the subtitle element to avoid an empty DOM node.
|
|
262
|
+
* - `hasActions` is always true in `prominent` mode (the slot itself is empty
|
|
263
|
+
* unless content is slotted by the consumer).
|
|
264
|
+
*
|
|
265
|
+
* **FAB slot:**
|
|
266
|
+
* The `fab` named slot is absolutely positioned via CSS (see `::slotted([slot='fab'])`)
|
|
267
|
+
* to the bottom-end of the bar, supporting the M3 bottom app bar + FAB pattern.
|
|
258
268
|
*/
|
|
259
269
|
override render() {
|
|
260
270
|
const hasSubtitle = this.size === 'prominent' && Boolean(this.subtitle);
|
|
@@ -10,26 +10,26 @@ import { customElement, property } from 'lit/decorators.js';
|
|
|
10
10
|
import { MoniElement, sharedStyles } from './_base/index.js';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
* Material Design 3 Badge
|
|
13
|
+
* Componente Material Design 3 Badge.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* Los badges son pequeños descriptores de estado anclados a un elemento padre, usados para
|
|
16
|
+
* transmitir información suplementaria como un conteo de notificaciones, estado
|
|
17
|
+
* en línea, o indicador de selección.
|
|
18
18
|
*
|
|
19
|
-
* **
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
19
|
+
* **Contrato de posicionamiento:**
|
|
20
|
+
* El badge usa `position: absolute` y se ancla al elemento padre.
|
|
21
|
+
* En `connectedCallback`, si el `position` computado del padre es `'static'`,
|
|
22
|
+
* el badge automáticamente establece `parent.style.position = 'relative'`.
|
|
23
|
+
* Los consumidores no necesitan añadir manualmente `position: relative` al padre.
|
|
24
24
|
*
|
|
25
|
-
* **
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
25
|
+
* **Modelo de renderizado:**
|
|
26
|
+
* El `:host` se muestra como `contents`, haciéndolo transparente para el layout.
|
|
27
|
+
* Solo el span interior `.badge` se renderiza visualmente. Esto permite que el badge
|
|
28
|
+
* se inserte dentro de cualquier elemento sin afectar su flujo de layout.
|
|
29
29
|
*
|
|
30
30
|
* @example
|
|
31
31
|
* ```html
|
|
32
|
-
* <!--
|
|
32
|
+
* <!-- Badge de notificación en un botón -->
|
|
33
33
|
* <div style="position: relative; display: inline-flex;">
|
|
34
34
|
* <moni-button icon="notifications" variant="text"></moni-button>
|
|
35
35
|
* <moni-badge value="5"></moni-badge>
|
|
@@ -38,37 +38,37 @@ import { MoniElement, sharedStyles } from './_base/index.js';
|
|
|
38
38
|
*
|
|
39
39
|
* @example
|
|
40
40
|
* ```html
|
|
41
|
-
* <!--
|
|
41
|
+
* <!-- Badge de punto en línea para estado -->
|
|
42
42
|
* <moni-badge shape="min" color="primary" inline></moni-badge>
|
|
43
|
-
*
|
|
43
|
+
* Conectado
|
|
44
44
|
* ```
|
|
45
45
|
*
|
|
46
|
-
* @csspart badge -
|
|
47
|
-
* `color`,
|
|
46
|
+
* @csspart badge - El elemento `<span>` del badge. Sobrescribe `background-color`,
|
|
47
|
+
* `color`, o `border-radius` para personalizar la apariencia.
|
|
48
48
|
*/
|
|
49
49
|
@customElement('moni-badge')
|
|
50
50
|
export class MoniBadge extends MoniElement {
|
|
51
51
|
/**
|
|
52
|
-
*
|
|
52
|
+
* Contenido de texto de la etiqueta del badge.
|
|
53
53
|
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
54
|
+
* También acepta contenido en el slot — el slot por defecto dentro del span del badge
|
|
55
|
+
* usa este valor cuando no hay hijos proporcionados en el slot.
|
|
56
|
+
* Usa un string vacío con `shape="min"` para renderizar un badge de solo punto.
|
|
57
57
|
*
|
|
58
58
|
* @default ''
|
|
59
59
|
*/
|
|
60
60
|
@property({ reflect: true }) value = '';
|
|
61
61
|
|
|
62
62
|
/**
|
|
63
|
-
*
|
|
63
|
+
* Posición de anclaje relativa a los bordes del elemento padre.
|
|
64
64
|
*
|
|
65
|
-
*
|
|
66
|
-
* - `''` (
|
|
67
|
-
* - `'top'` —
|
|
68
|
-
* - `'bottom'` —
|
|
69
|
-
* - `'left'` —
|
|
70
|
-
* - `'right'` —
|
|
71
|
-
* - `'none'` —
|
|
65
|
+
* Usa `inset: 50% auto auto 50%` como base y ajusta la traslación:
|
|
66
|
+
* - `''` (por defecto) — esquina superior derecha (translate: 0, -100%).
|
|
67
|
+
* - `'top'` — igual que por defecto, alias explícito.
|
|
68
|
+
* - `'bottom'` — esquina inferior derecha (translate: 0, 0).
|
|
69
|
+
* - `'left'` — esquina superior izquierda (translate: -100%, -100%).
|
|
70
|
+
* - `'right'` — esquina superior derecha (translate: 0, -100%).
|
|
71
|
+
* - `'none'` — deshabilita el posicionamiento absoluto; ver también el atributo `inline`.
|
|
72
72
|
*
|
|
73
73
|
* @default ''
|
|
74
74
|
*/
|
|
@@ -76,14 +76,14 @@ export class MoniBadge extends MoniElement {
|
|
|
76
76
|
position: 'top' | 'bottom' | 'left' | 'right' | 'none' | '' = '';
|
|
77
77
|
|
|
78
78
|
/**
|
|
79
|
-
*
|
|
79
|
+
* Forma del contenedor del badge.
|
|
80
80
|
*
|
|
81
|
-
* - `''` (
|
|
82
|
-
* - `'circle'` — Alias
|
|
83
|
-
*
|
|
84
|
-
* - `'square'` —
|
|
85
|
-
* - `'min'` —
|
|
86
|
-
*
|
|
81
|
+
* - `''` (por defecto) — Forma de píldora redondeada (border-radius: 1rem).
|
|
82
|
+
* - `'circle'` — Alias para píldora; el badge siempre es circular cuando el
|
|
83
|
+
* contenido es un solo carácter o está ausente.
|
|
84
|
+
* - `'square'` — Sin border-radius (badge angular).
|
|
85
|
+
* - `'min'` — Solo punto; el contenido se oculta mediante `display: none` y la
|
|
86
|
+
* forma se recorta a un círculo pequeño mediante `clip-path`.
|
|
87
87
|
*
|
|
88
88
|
* @default ''
|
|
89
89
|
*/
|
|
@@ -91,13 +91,13 @@ export class MoniBadge extends MoniElement {
|
|
|
91
91
|
shape: 'circle' | 'square' | 'min' | '' = '';
|
|
92
92
|
|
|
93
93
|
/**
|
|
94
|
-
*
|
|
94
|
+
* Rol de color semántico del badge.
|
|
95
95
|
*
|
|
96
|
-
*
|
|
97
|
-
* - `'error'` (
|
|
98
|
-
* - `'primary'` —
|
|
99
|
-
* - `'secondary'` —
|
|
100
|
-
* - `'tertiary'` —
|
|
96
|
+
* Se asigna a los roles de la paleta de colores M3:
|
|
97
|
+
* - `'error'` (por defecto) — Rojo; estándar para conteos de notificaciones y alertas.
|
|
98
|
+
* - `'primary'` — Color primario de la marca; para estados activos o de selección.
|
|
99
|
+
* - `'secondary'` — Acento secundario; para indicadores suplementarios.
|
|
100
|
+
* - `'tertiary'` — Acento terciario; para badges decorativos o informativos.
|
|
101
101
|
*
|
|
102
102
|
* @default 'error'
|
|
103
103
|
*/
|
|
@@ -105,38 +105,36 @@ export class MoniBadge extends MoniElement {
|
|
|
105
105
|
color: 'primary' | 'secondary' | 'tertiary' | 'error' = 'error';
|
|
106
106
|
|
|
107
107
|
/**
|
|
108
|
-
*
|
|
109
|
-
* `position: relative`)
|
|
108
|
+
* Cuando es `true`, el badge se renderiza en línea (restablece `position: absolute` a
|
|
109
|
+
* `position: relative`) en lugar de anclarse al padre.
|
|
110
110
|
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
111
|
+
* Equivalente a la clase `.badge.none` de BeerCSS. Úsalo para indicadores de estado en línea
|
|
112
|
+
* que fluyen dentro de texto o contenedores flex.
|
|
113
113
|
*
|
|
114
114
|
* @default false
|
|
115
115
|
*/
|
|
116
116
|
@property({ type: Boolean, reflect: true }) inline = false;
|
|
117
117
|
|
|
118
118
|
/**
|
|
119
|
-
*
|
|
120
|
-
* -
|
|
121
|
-
* -
|
|
119
|
+
* Cuando está presente, renderiza el badge con un estilo delineado:
|
|
120
|
+
* - El fondo se convierte en `--surface` (igual que el fondo de la página).
|
|
121
|
+
* - El borde y el color del texto usan el token de color de la paleta (ej. `--error`).
|
|
122
122
|
*
|
|
123
|
-
*
|
|
123
|
+
* Equivalente a la clase `.badge.border` de BeerCSS.
|
|
124
124
|
*
|
|
125
125
|
* @default false
|
|
126
126
|
*/
|
|
127
127
|
@property({ type: Boolean, reflect: true }) border = false;
|
|
128
128
|
|
|
129
129
|
/**
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
* consumers to remember to add `position: relative` to the parent themselves.
|
|
130
|
+
* Hook de ciclo de vida de Lit.
|
|
131
|
+
* Mutación imperativa del DOM padre para garantizar el sistema de anclaje (CSS Position).
|
|
132
|
+
* Un badge por defecto usa position: absolute. Si su contenedor padre es estático,
|
|
133
|
+
* el badge "escaparía" hasta el body. Esto detecta el computed style y fuerza
|
|
134
|
+
* un contexto de apilamiento relativo para encapsularlo.
|
|
136
135
|
*/
|
|
137
136
|
override connectedCallback() {
|
|
138
137
|
super.connectedCallback();
|
|
139
|
-
// Ensure the badge's absolutely-positioned anchor point is correct.
|
|
140
138
|
const parent = this.parentElement;
|
|
141
139
|
if (parent) {
|
|
142
140
|
const computed = getComputedStyle(parent);
|
|
@@ -218,16 +216,16 @@ export class MoniBadge extends MoniElement {
|
|
|
218
216
|
];
|
|
219
217
|
|
|
220
218
|
/**
|
|
221
|
-
*
|
|
219
|
+
* Renderiza el span del badge con la lista de clases computada.
|
|
222
220
|
*
|
|
223
|
-
*
|
|
224
|
-
* - `'badge'` —
|
|
225
|
-
* - `this.position` —
|
|
226
|
-
* - `this.shape` —
|
|
227
|
-
* - `'none'` —
|
|
221
|
+
* Composición de clases:
|
|
222
|
+
* - `'badge'` — siempre presente (estilos base).
|
|
223
|
+
* - `this.position` — clase de variante de posición (ej. `'bottom'`, `'left'`).
|
|
224
|
+
* - `this.shape` — clase de variante de forma (ej. `'min'`, `'square'`).
|
|
225
|
+
* - `'none'` — se añade cuando `inline=true` para restablecer el posicionamiento absoluto.
|
|
228
226
|
*
|
|
229
|
-
*
|
|
230
|
-
*
|
|
227
|
+
* Los valores falsos se filtran para que no aparezcan espacios extra en el string de clases.
|
|
228
|
+
* El slot por defecto usa el nodo de texto del atributo `value` como respaldo.
|
|
231
229
|
*/
|
|
232
230
|
override render() {
|
|
233
231
|
const classes = [
|