@moni-labs/moni-ui 0.4.13 → 0.4.14
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 +91 -81
- package/dist/browser/moni-ui.iife.min.js +1537 -1384
- package/dist/browser/moni-ui.iife.min.js.br +0 -0
- package/dist/browser/moni-ui.iife.min.js.gz +0 -0
- package/dist/browser/moni-ui.iife.min.js.map +1 -1
- package/dist/browser/moni-ui.min.js +2703 -2481
- package/dist/browser/moni-ui.min.js.br +0 -0
- package/dist/browser/moni-ui.min.js.gz +0 -0
- package/dist/browser/moni-ui.min.js.map +1 -1
- package/dist/cdn/chunks/{class-map-DsL1Jr2T.js → class-map-QyT9W7rZ.js} +1 -1
- package/dist/cdn/chunks/{decorate-DxJYS4gw.js → decorate-B7wZvwrn.js} +629 -543
- package/dist/cdn/chunks/if-defined-5hr_ccFw.js +1 -0
- package/dist/cdn/chunks/{live-D52JqeKf.js → live-Hm1Di_ND.js} +1 -1
- package/dist/cdn/components/moni-app-bar.js +1 -1
- package/dist/cdn/components/moni-badge.js +1 -1
- package/dist/cdn/components/moni-bottom-sheet.js +1 -1
- package/dist/cdn/components/moni-button-group.js +1 -1
- package/dist/cdn/components/moni-button-segment.js +1 -1
- package/dist/cdn/components/moni-button.js +1 -1
- package/dist/cdn/components/moni-card.js +1 -1
- package/dist/cdn/components/moni-carousel.js +1 -1
- package/dist/cdn/components/moni-checkbox.js +1 -1
- package/dist/cdn/components/moni-chip.js +1 -1
- package/dist/cdn/components/moni-color-field.js +1 -1
- package/dist/cdn/components/moni-context-menu.js +1 -1
- package/dist/cdn/components/moni-dialog.js +1 -1
- package/dist/cdn/components/moni-divider.js +1 -1
- package/dist/cdn/components/moni-expansion.js +1 -1
- package/dist/cdn/components/moni-fab-menu.js +1 -1
- package/dist/cdn/components/moni-fab.js +1 -1
- package/dist/cdn/components/moni-file-field.js +1 -1
- package/dist/cdn/components/moni-icon.js +1 -1
- package/dist/cdn/components/moni-list-item.js +1 -1
- package/dist/cdn/components/moni-list.js +1 -1
- package/dist/cdn/components/moni-loading-indicator.js +1 -1
- package/dist/cdn/components/moni-menu-item.js +1 -1
- package/dist/cdn/components/moni-menu.js +1 -1
- package/dist/cdn/components/moni-morph-modal.js +3 -2
- package/dist/cdn/components/moni-nav-item.js +1 -1
- package/dist/cdn/components/moni-nav.js +1 -1
- package/dist/cdn/components/moni-progress.js +1 -1
- package/dist/cdn/components/moni-radio.js +1 -1
- package/dist/cdn/components/moni-ripple.js +1 -1
- package/dist/cdn/components/moni-segmented-button.js +1 -1
- package/dist/cdn/components/moni-select-option.js +1 -1
- package/dist/cdn/components/moni-select.js +512 -473
- package/dist/cdn/components/moni-shape.js +1 -1
- package/dist/cdn/components/moni-side-sheet.js +1 -1
- package/dist/cdn/components/moni-slider.js +1 -1
- package/dist/cdn/components/moni-snackbar.js +1 -1
- package/dist/cdn/components/moni-split-button.js +1 -1
- package/dist/cdn/components/moni-step.js +1 -1
- package/dist/cdn/components/moni-stepper.js +1 -1
- package/dist/cdn/components/moni-switch.js +1 -1
- package/dist/cdn/components/moni-tab.js +1 -1
- package/dist/cdn/components/moni-tabs.js +1 -1
- package/dist/cdn/components/moni-text-field.js +122 -95
- package/dist/cdn/components/moni-textarea.js +52 -52
- package/dist/cdn/components/moni-time-picker.js +1 -1
- package/dist/cdn/components/moni-toolbar.js +1 -1
- package/dist/cdn/components/moni-tooltip.js +1 -1
- package/dist/cdn/components/moni-typography.js +1 -1
- package/dist/cdn/importmap.json +98 -98
- package/dist/components/_base/field-styles.d.ts.map +1 -1
- package/dist/components/_base/field-styles.js +662 -576
- package/dist/components/moni-morph-modal.d.ts +10 -0
- package/dist/components/moni-morph-modal.d.ts.map +1 -1
- package/dist/components/moni-morph-modal.js +323 -217
- package/dist/components/moni-select.d.ts +16 -16
- package/dist/components/moni-select.d.ts.map +1 -1
- package/dist/components/moni-select.js +797 -727
- package/dist/components/moni-text-field.d.ts +15 -15
- package/dist/components/moni-text-field.d.ts.map +1 -1
- package/dist/components/moni-text-field.js +224 -180
- package/dist/components/moni-textarea.d.ts +13 -13
- package/dist/components/moni-textarea.d.ts.map +1 -1
- package/dist/components/moni-textarea.js +127 -122
- package/docs/api.json +97 -88
- package/docs/assets/moni-morph-modal/autoHeight--false.png +0 -0
- package/docs/assets/moni-morph-modal/autoHeight--true.png +0 -0
- package/docs/components/morph-modal.md +16 -7
- package/docs/components/select.md +74 -74
- package/docs/components/text-field.md +75 -66
- package/docs/components/textarea.md +51 -51
- package/docs/llms.txt +3 -3
- package/package.json +1 -1
- package/src/components/_base/field-styles.ts +723 -637
- package/src/components/moni-morph-modal.test.ts +490 -413
- package/src/components/moni-morph-modal.ts +2274 -2162
- package/src/components/moni-select.test.ts +489 -466
- package/src/components/moni-select.ts +1963 -1815
- package/src/components/moni-text-field.test.ts +366 -342
- package/src/components/moni-text-field.ts +717 -645
- package/src/components/moni-textarea.test.ts +201 -197
- package/src/components/moni-textarea.ts +476 -460
- package/dist/cdn/chunks/if-defined-DdzvcoI7.js +0 -1
|
Binary file
|
|
Binary file
|
|
@@ -50,8 +50,8 @@ Las utilities aplicadas directamente al tag afectan su caja anfitriona. No uses
|
|
|
50
50
|
|
|
51
51
|
| Atributo | Propiedad | Tipo | Default | Descripción |
|
|
52
52
|
|---|---|---|---|---|
|
|
53
|
-
| `target` | `target` | `string` | `''` | Selector del elemento disparador desde el cual transformarse (ej. '#fab' o '.my-button').
|
|
54
|
-
| `open` | `open` | `boolean` | `false` | Controla el estado abierto/cerrado del modal. Puede establecerse directamente, o se gestiona internamente cuando se hace clic en el elemento `target`. |
|
|
53
|
+
| `target` | `target` | `string` | `''` | Selector del elemento disparador desde el cual transformarse (ej. '#fab' o '.my-button').
|
|
55
54
|
Si se omite, el modal aún puede activarse programáticamente estableciendo `open = true`. |
|
|
55
|
+
| `open` | `open` | `boolean` | `false` | Controla el estado abierto/cerrado del modal.
|
|
56
56
|
Puede establecerse directamente, o se gestiona internamente cuando se hace clic en el elemento `target`. |
|
|
57
57
|
| `modal` | `modal` | `boolean` | `true` | Si es true, renderiza un fondo y atrapa el foco, actuando como un verdadero diálogo modal. |
|
|
58
58
|
| `placement` | `placement` | `Placement` | `'center'` | Posición preferida del modal en relación con la ventana gráfica. |
|
|
59
59
|
| `expanded-width` | `expandedWidth` | `string` | `'22rem'` | El ancho del modal cuando está completamente expandido. |
|
|
@@ -65,6 +65,7 @@ Las utilities aplicadas directamente al tag afectan su caja anfitriona. No uses
|
|
|
65
65
|
| `hide-target` | `hideTarget` | `boolean` | `false` | Si es true, oculta el elemento disparador (target) mientras el modal está abierto. |
|
|
66
66
|
| `cover-target` | `coverTarget` | `boolean` | `false` | Si es true, fuerza al modal a cubrir visualmente la ubicación original del target antes de expandirse. |
|
|
67
67
|
| `auto-size` | `autoSize` | `boolean` | `false` | Si es true, el modal calcula automáticamente su tamaño final basándose en el contenido interno (ignora expandedWidth y expandedHeight). |
|
|
68
|
+
| `auto-height` | `autoHeight` | `boolean` | `false` | Ajusta sólo la altura al contenido, sin superar expanded-height. |
|
|
68
69
|
| `fullscreen` | `fullscreen` | `boolean` | `false` | Fuerza al modal expandido a ocupar todo el viewport. |
|
|
69
70
|
| `responsive-fullscreen` | `responsiveFullscreen` | `boolean` | `false` | Activa fullscreen únicamente cuando el viewport no supera el breakpoint configurado. |
|
|
70
71
|
| `fullscreen-breakpoint` | `fullscreenBreakpoint` | `number` | `600` | Ancho máximo del viewport, en píxeles, para aplicar responsive-fullscreen. |
|
|
@@ -81,11 +82,11 @@ No declara eventos propios.
|
|
|
81
82
|
|
|
82
83
|
## Métodos públicos
|
|
83
84
|
|
|
84
|
-
- `show(): void` — Dispara la apertura del modal y coordina la animación de FLIP (First, Last, Invert, Play) / Morphing.
|
|
85
|
-
1. Oculta visualmente el target original.
|
|
86
|
-
2. Posiciona el modal colapsado exactamente sobre el target original (mismas dimensiones, color, y radios).
|
|
85
|
+
- `show(): void` — Dispara la apertura del modal y coordina la animación de FLIP (First, Last, Invert, Play) / Morphing.
|
|
86
|
+
1. Oculta visualmente el target original.
|
|
87
|
+
2. Posiciona el modal colapsado exactamente sobre el target original (mismas dimensiones, color, y radios).
|
|
87
88
|
3. Expande fluidamente el modal a sus dimensiones finales mediante transformaciones CSS.
|
|
88
|
-
- `showFrom(target: HTMLElement): void` — Abre el modal realizando el morph desde un elemento proporcionado directamente.
|
|
89
|
+
- `showFrom(target: HTMLElement): void` — Abre el modal realizando el morph desde un elemento proporcionado directamente.
|
|
89
90
|
Útil cuando el trigger vive dentro de un Shadow DOM y no puede resolverse con `target`.
|
|
90
91
|
- `resizeTo(width: string, height: string, anchor: 'center' | 'top-left' = 'center'): void` — Redimensiona y reposiciona suavemente un modal que ya está abierto.
|
|
91
92
|
- `hide(): void` — Método público hide.
|
|
@@ -130,7 +131,7 @@ Cada imagen se genera con el componente real: cambia solo la variable indicada y
|
|
|
130
131
|
|
|
131
132
|
### `open`
|
|
132
133
|
|
|
133
|
-
Controla el estado abierto/cerrado del modal.
|
|
134
|
+
Controla el estado abierto/cerrado del modal.
|
|
134
135
|
Puede establecerse directamente, o se gestiona internamente cuando se hace clic en el elemento `target`.
|
|
135
136
|
|
|
136
137
|

|
|
@@ -184,3 +185,11 @@ Si es true, el modal calcula automáticamente su tamaño final basándose en el
|
|
|
184
185
|

|
|
185
186
|
|
|
186
187
|

|
|
188
|
+
|
|
189
|
+
### `auto-height`
|
|
190
|
+
|
|
191
|
+
Ajusta sólo la altura al contenido, sin superar expanded-height.
|
|
192
|
+
|
|
193
|
+

|
|
194
|
+
|
|
195
|
+

|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
# Select
|
|
2
2
|
|
|
3
|
-
Componente Material Design 3 Select (Menú Desplegable).
|
|
4
|
-
|
|
5
|
-
Un menú desplegable select personalizado completo con capacidad de búsqueda, grupos de opciones,
|
|
6
|
-
navegación por teclado, animación y un modo de cajón/hoja (drawer/sheet) móvil opcional.
|
|
7
|
-
Reemplaza el elemento nativo `<select>` con una alternativa completamente estilizada y accesible
|
|
8
|
-
que cumple con M3.
|
|
9
|
-
|
|
10
|
-
**Referencia a la especificación M3:** `m3-docs/components/menus/specs.md` (menús desplegables)
|
|
11
|
-
|
|
12
|
-
**Resumen de características:**
|
|
13
|
-
- Variantes Filled y Outlined que coinciden con los estilos de campo de texto de M3.
|
|
14
|
-
- Etiqueta flotante (floating label) con la animación estándar de etiqueta flotante de estilos de campo.
|
|
15
|
-
- Modo de búsqueda: el atributo `searchable` agrega un campo de entrada de filtro en línea.
|
|
16
|
-
- Grupos de opciones: elementos `<moni-select-group>` en el slot para opciones jerárquicas.
|
|
17
|
-
- Cajón móvil: el atributo `drawer` abre las opciones en un `<moni-bottom-sheet>`
|
|
18
|
-
en lugar de un popup desplegable, ideal para interfaces táctiles (touch UIs).
|
|
19
|
-
- Navegación por teclado: Teclas de flecha, Enter, Escape y Tab según combobox de ARIA.
|
|
20
|
-
- Estado de carga: `loading` muestra un progreso circular indeterminado.
|
|
21
|
-
- Soporte multi-valor: `multiple` permite selección múltiple.
|
|
22
|
-
|
|
23
|
-
**Fuentes de opciones:**
|
|
24
|
-
Las opciones se pueden proporcionar de dos maneras:
|
|
25
|
-
1. **Elementos `<moni-select-option>` en la ranura (slot)** (por defecto, recomendado para SSR).
|
|
26
|
-
2. **Propiedad `options`** — un array de `DropdownNode[]` para un control completamente programático.
|
|
27
|
-
|
|
28
|
-
**Vinculación de valores (Value binding):**
|
|
29
|
-
La propiedad `value` contiene la cadena de valor de la opción actualmente seleccionada.
|
|
30
|
-
Para selección múltiple, `values` contiene `string[]`. Al cambiar, se dispara un
|
|
3
|
+
Componente Material Design 3 Select (Menú Desplegable).
|
|
4
|
+
|
|
5
|
+
Un menú desplegable select personalizado completo con capacidad de búsqueda, grupos de opciones,
|
|
6
|
+
navegación por teclado, animación y un modo de cajón/hoja (drawer/sheet) móvil opcional.
|
|
7
|
+
Reemplaza el elemento nativo `<select>` con una alternativa completamente estilizada y accesible
|
|
8
|
+
que cumple con M3.
|
|
9
|
+
|
|
10
|
+
**Referencia a la especificación M3:** `m3-docs/components/menus/specs.md` (menús desplegables)
|
|
11
|
+
|
|
12
|
+
**Resumen de características:**
|
|
13
|
+
- Variantes Filled y Outlined que coinciden con los estilos de campo de texto de M3.
|
|
14
|
+
- Etiqueta flotante (floating label) con la animación estándar de etiqueta flotante de estilos de campo.
|
|
15
|
+
- Modo de búsqueda: el atributo `searchable` agrega un campo de entrada de filtro en línea.
|
|
16
|
+
- Grupos de opciones: elementos `<moni-select-group>` en el slot para opciones jerárquicas.
|
|
17
|
+
- Cajón móvil: el atributo `drawer` abre las opciones en un `<moni-bottom-sheet>`
|
|
18
|
+
en lugar de un popup desplegable, ideal para interfaces táctiles (touch UIs).
|
|
19
|
+
- Navegación por teclado: Teclas de flecha, Enter, Escape y Tab según combobox de ARIA.
|
|
20
|
+
- Estado de carga: `loading` muestra un progreso circular indeterminado.
|
|
21
|
+
- Soporte multi-valor: `multiple` permite selección múltiple.
|
|
22
|
+
|
|
23
|
+
**Fuentes de opciones:**
|
|
24
|
+
Las opciones se pueden proporcionar de dos maneras:
|
|
25
|
+
1. **Elementos `<moni-select-option>` en la ranura (slot)** (por defecto, recomendado para SSR).
|
|
26
|
+
2. **Propiedad `options`** — un array de `DropdownNode[]` para un control completamente programático.
|
|
27
|
+
|
|
28
|
+
**Vinculación de valores (Value binding):**
|
|
29
|
+
La propiedad `value` contiene la cadena de valor de la opción actualmente seleccionada.
|
|
30
|
+
Para selección múltiple, `values` contiene `string[]`. Al cambiar, se dispara un
|
|
31
31
|
evento compuesto `'moni-change'`.
|
|
32
32
|
|
|
33
33
|
- Tag: `moni-select`
|
|
@@ -40,18 +40,18 @@ Usa `moni-select` cuando la interfaz necesite el patrón que describe este compo
|
|
|
40
40
|
|
|
41
41
|
## Uso básico
|
|
42
42
|
|
|
43
|
-
```html
|
|
44
|
-
<moni-select label="País" name="country" variant="outlined">
|
|
45
|
-
<moni-select-option value="us">Estados Unidos</moni-select-option>
|
|
46
|
-
<moni-select-option value="gb">Reino Unido</moni-select-option>
|
|
47
|
-
<moni-select-option value="de">Alemania</moni-select-option>
|
|
48
|
-
</moni-select>
|
|
49
|
-
|
|
50
|
-
<!-- Select con búsqueda -->
|
|
51
|
-
<moni-select label="Idioma" searchable>
|
|
52
|
-
<moni-select-option value="ts">TypeScript</moni-select-option>
|
|
53
|
-
<moni-select-option value="py">Python</moni-select-option>
|
|
54
|
-
</moni-select>
|
|
43
|
+
```html
|
|
44
|
+
<moni-select label="País" name="country" variant="outlined">
|
|
45
|
+
<moni-select-option value="us">Estados Unidos</moni-select-option>
|
|
46
|
+
<moni-select-option value="gb">Reino Unido</moni-select-option>
|
|
47
|
+
<moni-select-option value="de">Alemania</moni-select-option>
|
|
48
|
+
</moni-select>
|
|
49
|
+
|
|
50
|
+
<!-- Select con búsqueda -->
|
|
51
|
+
<moni-select label="Idioma" searchable>
|
|
52
|
+
<moni-select-option value="ts">TypeScript</moni-select-option>
|
|
53
|
+
<moni-select-option value="py">Python</moni-select-option>
|
|
54
|
+
</moni-select>
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
## Ejemplo práctico con Tailwind CSS v4
|
|
@@ -90,28 +90,28 @@ Las utilities aplicadas directamente al tag afectan su caja anfitriona. No uses
|
|
|
90
90
|
|
|
91
91
|
| Atributo | Propiedad | Tipo | Default | Descripción |
|
|
92
92
|
|---|---|---|---|---|
|
|
93
|
-
| `name` | `name` | `string` | `
|
|
94
|
-
| `label` | `label` | `string` | `
|
|
95
|
-
| `variant` | `variant` | `
|
|
96
|
-
| `size` | `size` | `
|
|
97
|
-
| `shape` | `shape` | `
|
|
93
|
+
| `name` | `name` | `string` | `""` | Nombre del campo select, usado para el envío del formulario. |
|
|
94
|
+
| `label` | `label` | `string` | `""` | Texto de la etiqueta flotante. |
|
|
95
|
+
| `variant` | `variant` | `"filled" \| "outlined"` | `"filled"` | Variante visual del campo select. |
|
|
96
|
+
| `size` | `size` | `"small" \| "medium" \| "large" \| "extra"` | `"medium"` | Define las dimensiones del campo select. |
|
|
97
|
+
| `shape` | `shape` | `"round" \| "small-round" \| "square" \| "no-round"` | `"no-round"` | Forma (radio de borde) del campo. |
|
|
98
98
|
| `disabled` | `disabled` | `boolean` | `false` | Deshabilita el campo select. |
|
|
99
|
-
| `required` | `required` | `boolean` | `false` | Obliga a elegir una opción antes de enviar el formulario.
|
|
99
|
+
| `required` | `required` | `boolean` | `false` | Obliga a elegir una opción antes de enviar el formulario.
|
|
100
100
|
|
|
101
101
|
El `<input>` visible es de sólo lectura, así que la validación nativa no
|
|
102
102
|
se aplica sobre él: la restricción se declara en el host con
|
|
103
103
|
`ElementInternals.setValidity`, que es lo que mira el formulario. |
|
|
104
104
|
| `loading` | `loading` | `boolean` | `false` | Si es verdadero, muestra un indicador de carga (progreso lineal). |
|
|
105
|
-
| `helper` | `helper` | `string` | `
|
|
106
|
-
| `error-text` | `errorText` | `string` | `
|
|
105
|
+
| `helper` | `helper` | `string` | `""` | Texto de ayuda mostrado debajo del campo. |
|
|
106
|
+
| `error-text` | `errorText` | `string` | `""` | Texto de error mostrado debajo del campo cuando `error` es true.
|
|
107
107
|
Reemplaza al texto de ayuda. |
|
|
108
108
|
| `error` | `error` | `boolean` | `false` | Si es verdadero, establece el campo en un estado de error. |
|
|
109
|
-
| `value` | `value` | `string` | `
|
|
110
|
-
| `icon` | `icon` | `string` | `
|
|
111
|
-
| `trailing-icon` | `trailingIcon` | `string` | `
|
|
109
|
+
| `value` | `value` | `string` | `""` | El valor actual del select. |
|
|
110
|
+
| `icon` | `icon` | `string` | `""` | Nombre del icono principal (leading icon, Material Symbols). |
|
|
111
|
+
| `trailing-icon` | `trailingIcon` | `string` | `"arrow_drop_down"` | Nombre del icono final (trailing icon, Material Symbols) que indica el estado del menú desplegable. |
|
|
112
112
|
| `searchable` | `searchable` | `boolean` | `false` | Habilita un campo de búsqueda en la parte superior del menú desplegable para filtrar opciones. |
|
|
113
113
|
| `clearable` | `clearable` | `boolean` | `false` | Muestra un botón de limpieza cuando se selecciona un valor para restablecer fácilmente el campo. |
|
|
114
114
|
| `sheet` | `sheet` | `boolean` | `false` | Renderiza las opciones como una hoja inferior (bottom sheet, ideal para dispositivos móviles) en lugar de un menú desplegable. |
|
|
115
|
-
| `placeholder` | `placeholder` | `string` | `
|
|
116
|
-
| `positioning` | `positioning` | `
|
|
117
|
-
| `placement` | `placement` | `'top' \| 'bottom' \| 'left' \| 'right' \| 'auto'` | `'auto'` | Ubicación preferida del menú desplegable con respecto al disparador (trigger). |
|
|
118
|
-
| `dropdown-width` | `dropdownWidth` | `string` | `'trigger'` | Restricción de ancho del menú desplegable. - `'trigger'`: Coincide con el ancho del campo de entrada. - `'auto'`: Coincide con el ancho del contenido del menú desplegable. - O cualquier valor CSS de ancho válido (ej. '200px'). |
|
|
119
|
-
| `dropdown-max-height` | `dropdownMaxHeight` | `string` | `''` | Límite manual opcional para la altura del menú. Acepta cualquier longitud CSS válida, por ejemplo `240px`, `40vh` o `calc(100vh - 8rem)`. El valor nunca supera el límite automático calculado según el viewport, la posición del campo y el tope predeterminado de 75vh. Una cadena vacía conserva el cálculo automático. |
|
|
115
|
+
| `placeholder` | `placeholder` | `string` | `""` | Texto de marcador de posición (placeholder) mostrado cuando no hay ningún valor seleccionado. |
|
|
116
|
+
| `positioning` | `positioning` | `"absolute" \| "fixed" \| "body"` | `"absolute"` | Estrategia de posicionamiento para el menú desplegable.
|
|
120
117
|
|
|
121
118
|
- `'absolute'`: permanece en el contexto de posicionamiento del select.
|
|
122
119
|
- `'fixed'`: usa coordenadas del viewport, pero conserva su contexto de apilamiento.
|
|
123
120
|
- `'body'`: usa la capa superior nativa (Popover API) para escapar de `overflow`,
|
|
124
121
|
diálogos, bottom sheets y contextos de apilamiento. |
|
|
122
|
+
| `placement` | `placement` | `"top" \| "bottom" \| "left" \| "right" \| "auto"` | `"auto"` | Ubicación preferida del menú desplegable con respecto al disparador (trigger). |
|
|
123
|
+
| `dropdown-width` | `dropdownWidth` | `string` | `"trigger"` | Restricción de ancho del menú desplegable.
|
|
125
124
|
- `'trigger'`: Coincide con el ancho del campo de entrada.
|
|
126
125
|
- `'auto'`: Coincide con el ancho del contenido del menú desplegable.
|
|
127
126
|
- O cualquier valor CSS de ancho válido (ej. '200px'). |
|
|
127
|
+
| `dropdown-max-height` | `dropdownMaxHeight` | `string` | `""` | Límite manual opcional para la altura del menú.
|
|
128
128
|
|
|
129
129
|
Acepta cualquier longitud CSS válida, por ejemplo `240px`, `40vh` o
|
|
130
130
|
`calc(100vh - 8rem)`. El valor nunca supera el límite automático calculado
|
|
131
131
|
según el viewport, la posición del campo y el tope predeterminado de 75vh.
|
|
132
132
|
Una cadena vacía conserva el cálculo automático. |
|
|
133
133
|
|
|
134
134
|
## Slots
|
|
135
135
|
|
|
@@ -211,10 +211,10 @@ Deshabilita el campo select.
|
|
|
211
211
|
|
|
212
212
|
### `required`
|
|
213
213
|
|
|
214
|
-
Obliga a elegir una opción antes de enviar el formulario.
|
|
215
|
-
|
|
216
|
-
El `<input>` visible es de sólo lectura, así que la validación nativa no
|
|
217
|
-
se aplica sobre él: la restricción se declara en el host con
|
|
214
|
+
Obliga a elegir una opción antes de enviar el formulario.
|
|
215
|
+
|
|
216
|
+
El `<input>` visible es de sólo lectura, así que la validación nativa no
|
|
217
|
+
se aplica sobre él: la restricción se declara en el host con
|
|
218
218
|
`ElementInternals.setValidity`, que es lo que mira el formulario.
|
|
219
219
|
|
|
220
220
|

|
|
@@ -237,7 +237,7 @@ Texto de ayuda mostrado debajo del campo.
|
|
|
237
237
|
|
|
238
238
|
### `error-text`
|
|
239
239
|
|
|
240
|
-
Texto de error mostrado debajo del campo cuando `error` es true.
|
|
240
|
+
Texto de error mostrado debajo del campo cuando `error` es true.
|
|
241
241
|
Reemplaza al texto de ayuda.
|
|
242
242
|
|
|
243
243
|

|
|
@@ -300,11 +300,11 @@ Texto de marcador de posición (placeholder) mostrado cuando no hay ningún valo
|
|
|
300
300
|
|
|
301
301
|
### `positioning`
|
|
302
302
|
|
|
303
|
-
Estrategia de posicionamiento para el menú desplegable.
|
|
304
|
-
|
|
305
|
-
- `'absolute'`: permanece en el contexto de posicionamiento del select.
|
|
306
|
-
- `'fixed'`: usa coordenadas del viewport, pero conserva su contexto de apilamiento.
|
|
307
|
-
- `'body'`: usa la capa superior nativa (Popover API) para escapar de `overflow`,
|
|
303
|
+
Estrategia de posicionamiento para el menú desplegable.
|
|
304
|
+
|
|
305
|
+
- `'absolute'`: permanece en el contexto de posicionamiento del select.
|
|
306
|
+
- `'fixed'`: usa coordenadas del viewport, pero conserva su contexto de apilamiento.
|
|
307
|
+
- `'body'`: usa la capa superior nativa (Popover API) para escapar de `overflow`,
|
|
308
308
|
diálogos, bottom sheets y contextos de apilamiento.
|
|
309
309
|
|
|
310
310
|

|
|
@@ -329,20 +329,20 @@ Ubicación preferida del menú desplegable con respecto al disparador (trigger).
|
|
|
329
329
|
|
|
330
330
|
### `dropdown-width`
|
|
331
331
|
|
|
332
|
-
Restricción de ancho del menú desplegable.
|
|
333
|
-
- `'trigger'`: Coincide con el ancho del campo de entrada.
|
|
334
|
-
- `'auto'`: Coincide con el ancho del contenido del menú desplegable.
|
|
332
|
+
Restricción de ancho del menú desplegable.
|
|
333
|
+
- `'trigger'`: Coincide con el ancho del campo de entrada.
|
|
334
|
+
- `'auto'`: Coincide con el ancho del contenido del menú desplegable.
|
|
335
335
|
- O cualquier valor CSS de ancho válido (ej. '200px').
|
|
336
336
|
|
|
337
337
|

|
|
338
338
|
|
|
339
339
|
### `dropdown-max-height`
|
|
340
340
|
|
|
341
|
-
Límite manual opcional para la altura del menú.
|
|
342
|
-
|
|
343
|
-
Acepta cualquier longitud CSS válida, por ejemplo `240px`, `40vh` o
|
|
344
|
-
`calc(100vh - 8rem)`. El valor nunca supera el límite automático calculado
|
|
345
|
-
según el viewport, la posición del campo y el tope predeterminado de 75vh.
|
|
341
|
+
Límite manual opcional para la altura del menú.
|
|
342
|
+
|
|
343
|
+
Acepta cualquier longitud CSS válida, por ejemplo `240px`, `40vh` o
|
|
344
|
+
`calc(100vh - 8rem)`. El valor nunca supera el límite automático calculado
|
|
345
|
+
según el viewport, la posición del campo y el tope predeterminado de 75vh.
|
|
346
346
|
Una cadena vacía conserva el cálculo automático.
|
|
347
347
|
|
|
348
348
|

|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
# Text Field
|
|
2
2
|
|
|
3
|
-
Componente Material Design 3 Text Field (Campo de texto).
|
|
4
|
-
|
|
5
|
-
Un campo de entrada con todas las funciones que envuelve un `<input>` nativo dentro de la
|
|
6
|
-
estructura de campo M3 (clase `.field` de `fieldStyles`). Soporta etiquetas flotantes,
|
|
7
|
-
variantes llenas (filled) y contorneadas (outlined), iconos iniciales/finales (leading/trailing),
|
|
8
|
-
texto de ayuda y estados de error.
|
|
9
|
-
|
|
10
|
-
**Referencia a la especificación M3:** `m3-docs/components/text-fields/specs.md`
|
|
11
|
-
|
|
12
|
-
**Arquitectura visual:**
|
|
13
|
-
Utiliza `fieldStyles` para toda la estructura CSS del campo. El contenedor del campo
|
|
14
|
-
es un `<div class="field [modifiers]">` que envuelve:
|
|
15
|
-
1. Icono inicial (leading) opcional.
|
|
16
|
-
2. Elemento `<input>` nativo.
|
|
17
|
-
3. `<label>` flotante (cuando se establece `label`).
|
|
18
|
-
4. Icono final (trailing) opcional o indicador de carga (spinner).
|
|
19
|
-
5. `<output>` para texto de ayuda/error.
|
|
20
|
-
|
|
21
|
-
**Sincronización de eventos:**
|
|
22
|
-
Emite `moni-input` en cada tipeo y `moni-change` al consolidar el valor (blur/enter).
|
|
3
|
+
Componente Material Design 3 Text Field (Campo de texto).
|
|
4
|
+
|
|
5
|
+
Un campo de entrada con todas las funciones que envuelve un `<input>` nativo dentro de la
|
|
6
|
+
estructura de campo M3 (clase `.field` de `fieldStyles`). Soporta etiquetas flotantes,
|
|
7
|
+
variantes llenas (filled) y contorneadas (outlined), iconos iniciales/finales (leading/trailing),
|
|
8
|
+
texto de ayuda y estados de error.
|
|
9
|
+
|
|
10
|
+
**Referencia a la especificación M3:** `m3-docs/components/text-fields/specs.md`
|
|
11
|
+
|
|
12
|
+
**Arquitectura visual:**
|
|
13
|
+
Utiliza `fieldStyles` para toda la estructura CSS del campo. El contenedor del campo
|
|
14
|
+
es un `<div class="field [modifiers]">` que envuelve:
|
|
15
|
+
1. Icono inicial (leading) opcional.
|
|
16
|
+
2. Elemento `<input>` nativo.
|
|
17
|
+
3. `<label>` flotante (cuando se establece `label`).
|
|
18
|
+
4. Icono final (trailing) opcional o indicador de carga (spinner).
|
|
19
|
+
5. `<output>` para texto de ayuda/error.
|
|
20
|
+
|
|
21
|
+
**Sincronización de eventos:**
|
|
22
|
+
Emite `moni-input` en cada tipeo y `moni-change` al consolidar el valor (blur/enter).
|
|
23
23
|
El valor interno del componente (`this.value`) se mantiene sincronizado automáticamente.
|
|
24
24
|
|
|
25
25
|
- Tag: `moni-text-field`
|
|
@@ -32,23 +32,23 @@ Usa `moni-text-field` cuando la interfaz necesite el patrón que describe este c
|
|
|
32
32
|
|
|
33
33
|
## Uso básico
|
|
34
34
|
|
|
35
|
-
```html
|
|
36
|
-
<moni-text-field
|
|
37
|
-
label="Dirección de correo"
|
|
38
|
-
type="email"
|
|
39
|
-
name="email"
|
|
40
|
-
icon="mail"
|
|
41
|
-
variant="outlined"
|
|
42
|
-
helper="Nunca compartiremos tu correo."
|
|
43
|
-
></moni-text-field>
|
|
44
|
-
|
|
45
|
-
<moni-text-field
|
|
46
|
-
label="Monto"
|
|
47
|
-
type="number"
|
|
48
|
-
prefix="$"
|
|
49
|
-
error
|
|
50
|
-
error-text="El valor debe ser positivo"
|
|
51
|
-
></moni-text-field>
|
|
35
|
+
```html
|
|
36
|
+
<moni-text-field
|
|
37
|
+
label="Dirección de correo"
|
|
38
|
+
type="email"
|
|
39
|
+
name="email"
|
|
40
|
+
icon="mail"
|
|
41
|
+
variant="outlined"
|
|
42
|
+
helper="Nunca compartiremos tu correo."
|
|
43
|
+
></moni-text-field>
|
|
44
|
+
|
|
45
|
+
<moni-text-field
|
|
46
|
+
label="Monto"
|
|
47
|
+
type="number"
|
|
48
|
+
prefix="$"
|
|
49
|
+
error
|
|
50
|
+
error-text="El valor debe ser positivo"
|
|
51
|
+
></moni-text-field>
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
## Ejemplo práctico con Tailwind CSS v4
|
|
@@ -87,37 +87,37 @@ Las utilities aplicadas directamente al tag afectan su caja anfitriona. No uses
|
|
|
87
87
|
|
|
88
88
|
| Atributo | Propiedad | Tipo | Default | Descripción |
|
|
89
89
|
|---|---|---|---|---|
|
|
90
|
-
| `name` | `name` | `string` | `
|
|
91
|
-
| `label` | `label` | `string` | `
|
|
92
|
-
| `variant` | `variant` | `
|
|
93
|
-
| `size` | `size` | `
|
|
94
|
-
| `shape` | `shape` | `
|
|
95
|
-
| `type` | `type` | `
|
|
96
|
-
| `icon` | `icon` | `string` | `
|
|
97
|
-
| `trailing-icon` | `trailingIcon` | `string` | `
|
|
98
|
-
| `prefix` | `prefix` | `string` | `
|
|
99
|
-
| `suffix` | `suffix` | `string` | `
|
|
100
|
-
| `suffix-button-icon` | `suffixButtonIcon` | `string` | `
|
|
101
|
-
| `suffix-button-label` | `suffixButtonLabel` | `string` | `
|
|
102
|
-
| `helper` | `helper` | `string` | `
|
|
103
|
-
| `error-text` | `errorText` | `string` | `
|
|
90
|
+
| `name` | `name` | `string` | `""` | El nombre del input, enviado con los datos del formulario. |
|
|
91
|
+
| `label` | `label` | `string` | `""` | El texto de la etiqueta flotante. |
|
|
92
|
+
| `variant` | `variant` | `"filled" \| "outlined" \| "underlined"` | `"filled"` | Variante visual del campo de texto. |
|
|
93
|
+
| `size` | `size` | `"small" \| "medium" \| "large" \| "extra"` | `"medium"` | Define las dimensiones del campo de texto. |
|
|
94
|
+
| `shape` | `shape` | `"round" \| "small-round" \| "no-round"` | `"no-round"` | Forma del radio del borde (border-radius) del campo. |
|
|
95
|
+
| `type` | `type` | `"text" \| "password" \| "email" \| "number" \| "tel" \| "url" \| "search" \| "date" \| "time" \| "datetime-local" \| "month" \| "week" \| "color"` | `"text"` | El tipo de input HTML nativo. |
|
|
96
|
+
| `icon` | `icon` | `string` | `""` | Nombre del icono inicial (leading) (Material Symbols). |
|
|
97
|
+
| `trailing-icon` | `trailingIcon` | `string` | `""` | Nombre del icono final (trailing) (Material Symbols). |
|
|
98
|
+
| `prefix` | `prefix` | `string` | `""` | Prefijo de texto corto mostrado antes del valor del input. |
|
|
99
|
+
| `suffix` | `suffix` | `string` | `""` | Sufijo de texto corto mostrado después del valor del input. |
|
|
100
|
+
| `suffix-button-icon` | `suffixButtonIcon` | `string` | `""` | Icono del botón interactivo ubicado al final del campo. |
|
|
101
|
+
| `suffix-button-label` | `suffixButtonLabel` | `string` | `"Acción del campo"` | Etiqueta accesible del botón suffix. |
|
|
102
|
+
| `helper` | `helper` | `string` | `""` | Texto de ayuda mostrado debajo del campo. |
|
|
103
|
+
| `error-text` | `errorText` | `string` | `""` | Texto de error mostrado debajo del campo cuando `error` es true.
|
|
104
104
|
Sobrescribe el texto de ayuda. |
|
|
105
105
|
| `error` | `error` | `boolean` | `false` | Si es true, establece el campo en un estado de error. |
|
|
106
106
|
| `loading` | `loading` | `boolean` | `false` | Si es true, muestra un indicador de carga (progreso lineal/circular) al final. |
|
|
107
107
|
| `disabled` | `disabled` | `boolean` | `false` | Deshabilita el campo de texto. |
|
|
108
|
-
| `value` | `value` | `string` | `
|
|
109
|
-
| `placeholder` | `placeholder` | `string` | `
|
|
108
|
+
| `value` | `value` | `string` | `""` | El valor actual del input. |
|
|
109
|
+
| `placeholder` | `placeholder` | `string` | `""` | Texto de marcador de posición (placeholder) mostrado cuando el input está vacío y la etiqueta es flotante. |
|
|
110
110
|
| `required` | `required` | `boolean` | `false` | Marca el campo como obligatorio y lo integra en la validación del formulario. |
|
|
111
111
|
| `readonly` | `readonly` | `boolean` | `false` | Impide editar el valor sin sacarlo del envío ni atenuarlo como `disabled`. |
|
|
112
|
-
| `autocomplete` | `autocomplete` | `string` | `
|
|
113
|
-
| `inputmode` | `inputmode` | `string` | `
|
|
112
|
+
| `autocomplete` | `autocomplete` | `string` | `""` | Pista de autocompletado del navegador, por ejemplo `email` o `current-password`. |
|
|
113
|
+
| `inputmode` | `inputmode` | `string` | `""` | Teclado virtual a mostrar en móvil, por ejemplo `numeric` o `tel`. |
|
|
114
114
|
| `maxlength` | `maxlength` | `number \| null` | `null` | Máximo de caracteres aceptados. |
|
|
115
115
|
| `minlength` | `minlength` | `number \| null` | `null` | Mínimo de caracteres aceptados. |
|
|
116
|
-
| `min` | `min` | `string` | `
|
|
117
|
-
| `max` | `max` | `string` | `
|
|
118
|
-
| `step` | `step` | `string` | `
|
|
119
|
-
| `pattern` | `pattern` | `string` | `
|
|
120
|
-
| `mask` | `mask` | `string` | `
|
|
121
|
-
| `mask-alias` | `maskAlias` | `string` | `''` | Alias integrado de Inputmask, por ejemplo `email`, `datetime`, `numeric`, `currency` o `ip`. |
|
|
116
|
+
| `min` | `min` | `string` | `""` | Valor mínimo para `number` y los tipos de fecha y hora. |
|
|
117
|
+
| `max` | `max` | `string` | `""` | Valor máximo para `number` y los tipos de fecha y hora. |
|
|
118
|
+
| `step` | `step` | `string` | `""` | Incremento para `number` y los tipos de fecha y hora. |
|
|
119
|
+
| `pattern` | `pattern` | `string` | `""` | Expresión regular que debe cumplir el valor. |
|
|
120
|
+
| `mask` | `mask` | `string` | `""` | Patrón Inputmask. Admite opcionales `[]`, grupos `()`, alternadores `\|`,
|
|
122
121
|
cuantificadores `{n,m}` y los tokens `9`, `a`, `*` y `K` (RUT). |
|
|
122
|
+
| `mask-alias` | `maskAlias` | `string` | `""` | Alias integrado de Inputmask, por ejemplo `email`, `datetime`, `numeric`, `currency` o `ip`. |
|
|
123
123
|
| `mask-options` | `maskOptions` | `InputmaskOptions` | `{}` | Opciones avanzadas de Inputmask. También acepta JSON mediante el atributo `mask-options`. |
|
|
124
124
|
|
|
125
125
|
## Slots
|
|
@@ -131,14 +131,23 @@ Este componente no declara slots públicos.
|
|
|
131
131
|
## Métodos públicos
|
|
132
132
|
|
|
133
133
|
- `maskOption(name: string): unknown;` — Lee o actualiza opciones de la instancia activa.
|
|
134
|
-
- `maskOption(
|
|
135
|
-
|
|
134
|
+
- `maskOption(
|
|
135
|
+
options: InputmaskOptions,
|
|
136
|
+
noRemask?: boolean,
|
|
137
|
+
): InputmaskInstance | undefined;` — Método público maskOption.
|
|
138
|
+
- `maskOption(
|
|
139
|
+
nameOrOptions: string | InputmaskOptions,
|
|
140
|
+
noRemask = false,
|
|
141
|
+
): unknown` — Método público maskOption.
|
|
136
142
|
- `getEmptyMask(): string` — Método público getEmptyMask.
|
|
137
143
|
- `hasMaskedValue(): boolean` — Método público hasMaskedValue.
|
|
138
144
|
- `isMaskComplete(): boolean` — Método público isMaskComplete.
|
|
139
145
|
- `isMaskValid(value?: string): boolean` — Método público isMaskValid.
|
|
140
146
|
- `getMaskMetadata(): unknown` — Método público getMaskMetadata.
|
|
141
|
-
- `formatWithMask(
|
|
147
|
+
- `formatWithMask(
|
|
148
|
+
value: string,
|
|
149
|
+
metadata = false,
|
|
150
|
+
): string |` — Método público formatWithMask.
|
|
142
151
|
- `setMaskedValue(value: string): void` — Método público setMaskedValue.
|
|
143
152
|
- `removeMask(): void` — Método público removeMask.
|
|
144
153
|
- `checkValidity(): boolean` — Método público checkValidity.
|
|
@@ -286,7 +295,7 @@ Texto de ayuda mostrado debajo del campo.
|
|
|
286
295
|
|
|
287
296
|
### `error-text`
|
|
288
297
|
|
|
289
|
-
Texto de error mostrado debajo del campo cuando `error` es true.
|
|
298
|
+
Texto de error mostrado debajo del campo cuando `error` es true.
|
|
290
299
|
Sobrescribe el texto de ayuda.
|
|
291
300
|
|
|
292
301
|

|
|
@@ -393,7 +402,7 @@ Expresión regular que debe cumplir el valor.
|
|
|
393
402
|
|
|
394
403
|
### `mask`
|
|
395
404
|
|
|
396
|
-
Patrón Inputmask. Admite opcionales `[]`, grupos `()`, alternadores `|`,
|
|
405
|
+
Patrón Inputmask. Admite opcionales `[]`, grupos `()`, alternadores `|`,
|
|
397
406
|
cuantificadores `{n,m}` y los tokens `9`, `a`, `*` y `K` (RUT).
|
|
398
407
|
|
|
399
408
|

|