@moni-labs/moni-ui 0.4.13 → 0.4.16

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.
Files changed (104) hide show
  1. package/custom-elements.json +101 -81
  2. package/dist/browser/moni-ui.iife.min.js +1538 -1384
  3. package/dist/browser/moni-ui.iife.min.js.br +0 -0
  4. package/dist/browser/moni-ui.iife.min.js.gz +0 -0
  5. package/dist/browser/moni-ui.iife.min.js.map +1 -1
  6. package/dist/browser/moni-ui.min.js +2751 -2501
  7. package/dist/browser/moni-ui.min.js.br +0 -0
  8. package/dist/browser/moni-ui.min.js.gz +0 -0
  9. package/dist/browser/moni-ui.min.js.map +1 -1
  10. package/dist/cdn/chunks/{class-map-DsL1Jr2T.js → class-map-QyT9W7rZ.js} +1 -1
  11. package/dist/cdn/chunks/{decorate-DxJYS4gw.js → decorate-B7wZvwrn.js} +629 -543
  12. package/dist/cdn/chunks/if-defined-5hr_ccFw.js +1 -0
  13. package/dist/cdn/chunks/{live-D52JqeKf.js → live-Hm1Di_ND.js} +1 -1
  14. package/dist/cdn/components/moni-app-bar.js +1 -1
  15. package/dist/cdn/components/moni-badge.js +1 -1
  16. package/dist/cdn/components/moni-bottom-sheet.js +2 -1
  17. package/dist/cdn/components/moni-button-group.js +1 -1
  18. package/dist/cdn/components/moni-button-segment.js +1 -1
  19. package/dist/cdn/components/moni-button.js +1 -1
  20. package/dist/cdn/components/moni-card.js +1 -1
  21. package/dist/cdn/components/moni-carousel.js +1 -1
  22. package/dist/cdn/components/moni-checkbox.js +1 -1
  23. package/dist/cdn/components/moni-chip.js +1 -1
  24. package/dist/cdn/components/moni-color-field.js +1 -1
  25. package/dist/cdn/components/moni-context-menu.js +1 -1
  26. package/dist/cdn/components/moni-dialog.js +1 -1
  27. package/dist/cdn/components/moni-divider.js +1 -1
  28. package/dist/cdn/components/moni-expansion.js +1 -1
  29. package/dist/cdn/components/moni-fab-menu.js +1 -1
  30. package/dist/cdn/components/moni-fab.js +1 -1
  31. package/dist/cdn/components/moni-file-field.js +1 -1
  32. package/dist/cdn/components/moni-icon.js +1 -1
  33. package/dist/cdn/components/moni-list-item.js +1 -1
  34. package/dist/cdn/components/moni-list.js +1 -1
  35. package/dist/cdn/components/moni-loading-indicator.js +1 -1
  36. package/dist/cdn/components/moni-menu-item.js +1 -1
  37. package/dist/cdn/components/moni-menu.js +1 -1
  38. package/dist/cdn/components/moni-morph-modal.js +3 -2
  39. package/dist/cdn/components/moni-nav-item.js +1 -1
  40. package/dist/cdn/components/moni-nav.js +1 -1
  41. package/dist/cdn/components/moni-progress.js +1 -1
  42. package/dist/cdn/components/moni-radio.js +1 -1
  43. package/dist/cdn/components/moni-ripple.js +1 -1
  44. package/dist/cdn/components/moni-segmented-button.js +1 -1
  45. package/dist/cdn/components/moni-select-option.js +1 -1
  46. package/dist/cdn/components/moni-select.js +512 -473
  47. package/dist/cdn/components/moni-shape.js +1 -1
  48. package/dist/cdn/components/moni-side-sheet.js +1 -1
  49. package/dist/cdn/components/moni-slider.js +1 -1
  50. package/dist/cdn/components/moni-snackbar.js +1 -1
  51. package/dist/cdn/components/moni-split-button.js +1 -1
  52. package/dist/cdn/components/moni-step.js +1 -1
  53. package/dist/cdn/components/moni-stepper.js +1 -1
  54. package/dist/cdn/components/moni-switch.js +1 -1
  55. package/dist/cdn/components/moni-tab.js +1 -1
  56. package/dist/cdn/components/moni-tabs.js +1 -1
  57. package/dist/cdn/components/moni-text-field.js +122 -95
  58. package/dist/cdn/components/moni-textarea.js +52 -52
  59. package/dist/cdn/components/moni-time-picker.js +1 -1
  60. package/dist/cdn/components/moni-toolbar.js +1 -1
  61. package/dist/cdn/components/moni-tooltip.js +1 -1
  62. package/dist/cdn/components/moni-typography.js +1 -1
  63. package/dist/cdn/importmap.json +98 -98
  64. package/dist/components/_base/field-styles.d.ts.map +1 -1
  65. package/dist/components/_base/field-styles.js +662 -576
  66. package/dist/components/moni-bottom-sheet.d.ts +19 -5
  67. package/dist/components/moni-bottom-sheet.d.ts.map +1 -1
  68. package/dist/components/moni-bottom-sheet.js +111 -30
  69. package/dist/components/moni-morph-modal.d.ts +10 -0
  70. package/dist/components/moni-morph-modal.d.ts.map +1 -1
  71. package/dist/components/moni-morph-modal.js +323 -217
  72. package/dist/components/moni-select.d.ts +16 -16
  73. package/dist/components/moni-select.d.ts.map +1 -1
  74. package/dist/components/moni-select.js +797 -727
  75. package/dist/components/moni-text-field.d.ts +15 -15
  76. package/dist/components/moni-text-field.d.ts.map +1 -1
  77. package/dist/components/moni-text-field.js +224 -180
  78. package/dist/components/moni-textarea.d.ts +13 -13
  79. package/dist/components/moni-textarea.d.ts.map +1 -1
  80. package/dist/components/moni-textarea.js +127 -122
  81. package/docs/api.json +109 -89
  82. package/docs/assets/moni-color-field/shape--square.png +0 -0
  83. package/docs/assets/moni-file-field/shape--square.png +0 -0
  84. package/docs/assets/moni-morph-modal/autoHeight--false.png +0 -0
  85. package/docs/assets/moni-morph-modal/autoHeight--true.png +0 -0
  86. package/docs/components/bottom-sheet.md +2 -1
  87. package/docs/components/morph-modal.md +16 -7
  88. package/docs/components/select.md +74 -74
  89. package/docs/components/text-field.md +75 -66
  90. package/docs/components/textarea.md +51 -51
  91. package/docs/llms.txt +3 -3
  92. package/package.json +1 -1
  93. package/src/components/_base/field-styles.ts +723 -637
  94. package/src/components/moni-bottom-sheet.test.ts +331 -0
  95. package/src/components/moni-bottom-sheet.ts +117 -29
  96. package/src/components/moni-morph-modal.test.ts +490 -413
  97. package/src/components/moni-morph-modal.ts +2274 -2162
  98. package/src/components/moni-select.test.ts +489 -466
  99. package/src/components/moni-select.ts +1963 -1815
  100. package/src/components/moni-text-field.test.ts +366 -342
  101. package/src/components/moni-text-field.ts +717 -645
  102. package/src/components/moni-textarea.test.ts +201 -197
  103. package/src/components/moni-textarea.ts +476 -460
  104. package/dist/cdn/chunks/if-defined-DdzvcoI7.js +0 -1
@@ -102,7 +102,8 @@ No declara eventos propios.
102
102
 
103
103
  ## Métodos públicos
104
104
 
105
- No expone métodos públicos adicionales.
105
+ - `show()` Abre el bottom sheet.
106
+ - `close()` — Cierra el bottom sheet ejecutando la animación fluida hacia abajo.
106
107
 
107
108
  ## CSS Parts
108
109
 
@@ -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'). Si se omite, el modal aún puede activarse programáticamente estableciendo `open = true`. |
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
  ![moni-morph-modal — open=true](../assets/moni-morph-modal/open--true.png)
@@ -184,3 +185,11 @@ Si es true, el modal calcula automáticamente su tamaño final basándose en el
184
185
  ![moni-morph-modal — auto-size=false](../assets/moni-morph-modal/autoSize--false.png)
185
186
 
186
187
  ![moni-morph-modal — auto-size=true](../assets/moni-morph-modal/autoSize--true.png)
188
+
189
+ ### `auto-height`
190
+
191
+ Ajusta sólo la altura al contenido, sin superar expanded-height.
192
+
193
+ ![moni-morph-modal — auto-height=false](../assets/moni-morph-modal/autoHeight--false.png)
194
+
195
+ ![moni-morph-modal — auto-height=true](../assets/moni-morph-modal/autoHeight--true.png)
@@ -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` | `''` | 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. |
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. El `<input>` visible es de sólo lectura, así que la validación nativa no se aplica sobre él: la restricción se declara en el host con `ElementInternals.setValidity`, que es lo que mira 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` | `''` | Texto de ayuda mostrado debajo del campo. |
106
- | `error-text` | `errorText` | `string` | `''` | Texto de error mostrado debajo del campo cuando `error` es true. Reemplaza al texto de ayuda. |
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` | `''` | 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. |
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` | `''` | 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. - `'absolute'`: permanece en el contexto de posicionamiento del select. - `'fixed'`: usa coordenadas del viewport, pero conserva su contexto de apilamiento. - `'body'`: usa la capa superior nativa (Popover API) para escapar de `overflow`, diálogos, bottom sheets y contextos de apilamiento. |
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
  ![moni-select — required=false](../assets/moni-select/required--false.png)
@@ -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
  ![moni-select — error-text=default](../assets/moni-select/errorText--default.png)
@@ -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
  ![moni-select — positioning=absolute](../assets/moni-select/positioning--absolute.png)
@@ -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
  ![moni-select — dropdown-width=default](../assets/moni-select/dropdownWidth--default.png)
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
  ![moni-select — dropdown-max-height=default](../assets/moni-select/dropdownMaxHeight--default.png)
@@ -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` | `''` | 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. Sobrescribe el texto de ayuda. |
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` | `''` | 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. |
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` | `''` | 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`. |
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` | `''` | 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 `\|`, cuantificadores `{n,m}` y los tokens `9`, `a`, `*` y `K` (RUT). |
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(options: InputmaskOptions, noRemask?: boolean): InputmaskInstance | undefined;` — Método público maskOption.
135
- - `maskOption(nameOrOptions: string | InputmaskOptions, noRemask = false): unknown` — Método público maskOption.
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(value: string, metadata = false): string |` — Método público 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
  ![moni-text-field — error-text=default](../assets/moni-text-field/errorText--default.png)
@@ -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
  ![moni-text-field — mask=default](../assets/moni-text-field/mask--default.png)