@ajuarezso/sui-design-system 0.25.2 → 0.26.1

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 (69) hide show
  1. package/docs/INDEX.md +3 -3
  2. package/docs/TEXTOS.md +85 -0
  3. package/docs/sui-activity-feed/README.md +19 -4
  4. package/docs/sui-alert/README.md +10 -0
  5. package/docs/sui-avatar-group/README.md +10 -0
  6. package/docs/sui-banner/README.md +10 -0
  7. package/docs/sui-brand-logo/README.md +10 -0
  8. package/docs/sui-breadcrumbs/README.md +10 -0
  9. package/docs/sui-checkbox-card/README.md +2 -1
  10. package/docs/sui-circular-progress-bar/README.md +10 -0
  11. package/docs/sui-color-dot/README.md +20 -0
  12. package/docs/sui-color-picker/README.md +20 -3
  13. package/docs/sui-command-menu-footer/README.md +17 -4
  14. package/docs/sui-command-menu-item/README.md +18 -10
  15. package/docs/sui-command-menu-search/README.md +18 -8
  16. package/docs/sui-compact-select/README.md +2 -0
  17. package/docs/sui-content-card/README.md +11 -1
  18. package/docs/sui-content-divider/README.md +11 -0
  19. package/docs/sui-counter-input/README.md +13 -2
  20. package/docs/sui-date-selector/README.md +11 -0
  21. package/docs/sui-datepicker/README.md +17 -0
  22. package/docs/sui-day-cell/README.md +10 -0
  23. package/docs/sui-drawer-footer/README.md +17 -2
  24. package/docs/sui-drawer-header/README.md +11 -1
  25. package/docs/sui-dropdown-menu/README.md +9 -1
  26. package/docs/sui-dropdown-search/README.md +21 -10
  27. package/docs/sui-file-icon/README.md +11 -0
  28. package/docs/sui-file-upload/README.md +14 -1
  29. package/docs/sui-file-upload-card/README.md +20 -4
  30. package/docs/sui-filter/README.md +27 -15
  31. package/docs/sui-image-upload/README.md +19 -0
  32. package/docs/sui-image-upload-profile/README.md +16 -2
  33. package/docs/sui-inline-input/README.md +15 -2
  34. package/docs/sui-input/README.md +12 -0
  35. package/docs/sui-integration-switch/README.md +10 -0
  36. package/docs/sui-modal/README.md +51 -3
  37. package/docs/sui-modal-footer/README.md +10 -0
  38. package/docs/sui-modal-header/README.md +10 -0
  39. package/docs/sui-modal-sheet/README.md +29 -14
  40. package/docs/sui-notification/README.md +12 -0
  41. package/docs/sui-notification-footer/README.md +14 -2
  42. package/docs/sui-notification-tab-menu/README.md +11 -1
  43. package/docs/sui-otp-input/README.md +12 -1
  44. package/docs/sui-pagination/README.md +16 -0
  45. package/docs/sui-password-strength/README.md +21 -3
  46. package/docs/sui-popover/README.md +15 -2
  47. package/docs/sui-progress-bar/README.md +10 -0
  48. package/docs/sui-radio/README.md +4 -1
  49. package/docs/sui-radio-label/README.md +5 -2
  50. package/docs/sui-rating/README.md +16 -2
  51. package/docs/sui-rich-editor/README.md +25 -2
  52. package/docs/sui-select/README.md +11 -1
  53. package/docs/sui-sidebar/README.md +18 -1
  54. package/docs/sui-slider/README.md +11 -0
  55. package/docs/sui-social-button/README.md +10 -0
  56. package/docs/sui-stepper/README.md +12 -1
  57. package/docs/sui-tab-chips/README.md +11 -0
  58. package/docs/sui-table/README.md +15 -1
  59. package/docs/sui-tag/README.md +11 -1
  60. package/docs/sui-tag-input/README.md +12 -1
  61. package/docs/sui-time-picker/README.md +19 -1
  62. package/docs/sui-toast/README.md +11 -0
  63. package/docs/sui-tooltip/README.md +10 -0
  64. package/docs/sui-topbar/README.md +15 -2
  65. package/docs/sui-topbar-user/README.md +10 -0
  66. package/fesm2022/ajuarezso-sui-design-system.mjs +857 -278
  67. package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
  68. package/package.json +1 -1
  69. package/types/ajuarezso-sui-design-system.d.ts +633 -91
@@ -1,5 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { InjectionToken, Signal, TemplateRef, ElementRef, OnDestroy, AfterViewInit, OnInit, QueryList } from '@angular/core';
2
+ import { InjectionToken, Signal, Provider, TemplateRef, ElementRef, AfterViewInit, OnChanges, OnDestroy, OnInit, QueryList } from '@angular/core';
3
+ import * as _ajuarezso_sui_design_system from '@ajuarezso/sui-design-system';
3
4
  import { ControlValueAccessor } from '@angular/forms';
4
5
  export { addMonths, isSameDay, subMonths } from 'date-fns';
5
6
 
@@ -46,6 +47,305 @@ declare class SuiToque {
46
47
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SuiToque, "[suiToque]", never, {}, {}, never, never, true, never>;
47
48
  }
48
49
 
50
+ /**
51
+ * Los textos que escribe la librería por su cuenta (19-10-2026, MASTER-88).
52
+ *
53
+ * Nombres accesibles (`aria-label` de las X, de las flechas, de los checkbox
54
+ * de la tabla), textos solo para lector de pantalla y los textos por defecto
55
+ * (placeholders, botones de un footer, «Subiendo…»). Hasta la 0.25 estaban
56
+ * escritos en español dentro de cada componente: una app en inglés seguía
57
+ * anunciando «Cerrar» o «Mostrar contraseña».
58
+ *
59
+ * Ahora salen de un solo lugar. Por defecto, `SUI_TEXTOS_ES`; la app cambia los
60
+ * que quiera con `provideSuiTextos()`, y si le pasa una función que lee un
61
+ * signal (el idioma), los textos cambian en vivo, sin recargar.
62
+ *
63
+ * ```ts
64
+ * // app.config.ts — fijo
65
+ * provideSuiTextos({ comun: { cerrar: 'Close' }, input: { mostrarContrasena: 'Show password' } })
66
+ *
67
+ * // app.config.ts — sigue al idioma de la app
68
+ * provideSuiTextos(() => (idioma() === 'en' ? SUI_EN : {}))
69
+ * ```
70
+ *
71
+ * Lo no pasado cae al español. El input puntual de un componente (`ariaLabel`,
72
+ * `placeholder`, `cancelLabel`…) sigue ganándole al texto global.
73
+ *
74
+ * Los textos con una variable la llevan entre llaves (`'Página {n}'`); la
75
+ * librería la rellena con `rellenarSuiTexto`. Es la misma convención que usan
76
+ * los diccionarios de las apps (`t('x', { n })`), así que un texto traducido
77
+ * pasa tal cual.
78
+ */
79
+ interface SuiTextos {
80
+ /** Los que se repiten en varios componentes. */
81
+ comun: {
82
+ /** X de modal, banner, alert, toast, popover, tooltip, notificación y drawer. */
83
+ cerrar: string;
84
+ /** Botón de borrar el contenido de `sui-input`. */
85
+ limpiar: string;
86
+ /** X de los buscadores (dropdown, sidebar, menú de comandos). */
87
+ limpiarBusqueda: string;
88
+ /** Botón de tres puntos (editor, notificación, actividad). */
89
+ masOpciones: string;
90
+ /** Barra o pasos de progreso sin nombre propio. */
91
+ progreso: string;
92
+ /** Placeholder de los buscadores (topbar, sidebar, dropdown). */
93
+ buscar: string;
94
+ /** Sello de cuenta verificada (sidebar, topbar). */
95
+ verificado: string;
96
+ cancelar: string;
97
+ confirmar: string;
98
+ continuar: string;
99
+ editar: string;
100
+ /** X de un tag. */
101
+ quitar: string;
102
+ /** X de cada tag de `sui-tag-input`. `{nombre}` = el tag. */
103
+ quitarNombre: string;
104
+ /** Placeholder de `sui-select`. */
105
+ elige: string;
106
+ /** Placeholder de `sui-inline-input`. */
107
+ escribeAqui: string;
108
+ /** Placeholder de `sui-tag-input`. */
109
+ agregaEtiqueta: string;
110
+ /** Botón de acción de `sui-content-divider` sin `ariaLabel`. */
111
+ accion: string;
112
+ /** Lo mismo cuando hay varios. `{n}` = valor o índice. */
113
+ accionN: string;
114
+ /** Nombre por defecto de un paso del stepper. `{n}` = número. */
115
+ paso: string;
116
+ /** «Paso 2 de 4» del drawer-footer y el popover. */
117
+ pasoDe: string;
118
+ /** Flechas de las listas con scroll horizontal (tabs, chips, tabla). */
119
+ verMasIzquierda: string;
120
+ verMasDerecha: string;
121
+ /** Chip de archivo de `sui-activity-feed`. `{nombre}` = archivo. */
122
+ descargar: string;
123
+ /** «+3 más» del avatar-group. `{n}` = el «+3». */
124
+ masN: string;
125
+ };
126
+ input: {
127
+ mostrarContrasena: string;
128
+ ocultarContrasena: string;
129
+ };
130
+ tabla: {
131
+ seleccionarTodas: string;
132
+ seleccionarFila: string;
133
+ sinDatos: string;
134
+ };
135
+ paginacion: {
136
+ nombre: string;
137
+ primera: string;
138
+ anterior: string;
139
+ /** `{n}` = número de página. */
140
+ pagina: string;
141
+ siguiente: string;
142
+ ultima: string;
143
+ /** Opciones del tamaño de página. `{n}` = cantidad. */
144
+ porPagina: string;
145
+ };
146
+ editorTexto: {
147
+ barra: string;
148
+ encabezado: string;
149
+ tamano: string;
150
+ negrita: string;
151
+ cursiva: string;
152
+ subrayado: string;
153
+ tachado: string;
154
+ alineacion: string;
155
+ comentario: string;
156
+ enlace: string;
157
+ mencionar: string;
158
+ placeholder: string;
159
+ titulo: string;
160
+ };
161
+ selectorColor: {
162
+ nombre: string;
163
+ placeholder: string;
164
+ recomendados: string;
165
+ saturacion: string;
166
+ matiz: string;
167
+ opacidad: string;
168
+ cuentagotas: string;
169
+ hexadecimal: string;
170
+ /** `sui-color-dot` sin `ariaLabel`. `{hex}` = el color. */
171
+ color: string;
172
+ /** Nombre de cada color de `sui-color-dot`. */
173
+ gris: string;
174
+ azul: string;
175
+ naranja: string;
176
+ rojo: string;
177
+ verde: string;
178
+ amarillo: string;
179
+ morado: string;
180
+ celeste: string;
181
+ rosado: string;
182
+ turquesa: string;
183
+ };
184
+ contrasena: {
185
+ nombre: string;
186
+ titulo: string;
187
+ mayuscula: string;
188
+ numero: string;
189
+ ochoCaracteres: string;
190
+ vacia: string;
191
+ debil: string;
192
+ moderada: string;
193
+ fuerte: string;
194
+ };
195
+ otp: {
196
+ nombre: string;
197
+ /** `{n}` = posición del dígito. */
198
+ digito: string;
199
+ };
200
+ calificacion: {
201
+ nombre: string;
202
+ motivo: string;
203
+ una: string;
204
+ varias: string;
205
+ /** Nombre de la nota de solo lectura. `{nombre}`, `{valor}`, `{max}`. */
206
+ nota: string;
207
+ };
208
+ contador: {
209
+ disminuir: string;
210
+ aumentar: string;
211
+ };
212
+ deslizador: {
213
+ minimo: string;
214
+ maximo: string;
215
+ };
216
+ archivo: {
217
+ /** `sui-file-icon` sin extensión. */
218
+ icono: string;
219
+ /** `sui-file-icon`. `{ext}` = PDF, DOC… */
220
+ tipo: string;
221
+ buscar: string;
222
+ soltarUno: string;
223
+ soltarVarios: string;
224
+ oClic: string;
225
+ cancelarSubida: string;
226
+ quitar: string;
227
+ progreso: string;
228
+ reintentar: string;
229
+ subiendo: string;
230
+ completado: string;
231
+ fallo: string;
232
+ };
233
+ imagen: {
234
+ vistaPrevia: string;
235
+ editar: string;
236
+ quitar: string;
237
+ cambiar: string;
238
+ subeFoto: string;
239
+ subeLogo: string;
240
+ formatos: string;
241
+ /** `{formatos}` y `{tamano}`. */
242
+ formatosMax: string;
243
+ tipoNoSoportado: string;
244
+ /** `{tamano}` = el máximo. */
245
+ superaTamano: string;
246
+ perfilTitulo: string;
247
+ perfilSubtitulo: string;
248
+ subir: string;
249
+ eliminar: string;
250
+ cambiarCorto: string;
251
+ };
252
+ menuComandos: {
253
+ placeholder: string;
254
+ navegar: string;
255
+ seleccionar: string;
256
+ ayuda: string;
257
+ centroAyuda: string;
258
+ abrir: string;
259
+ };
260
+ notificacion: {
261
+ /** Región de los toasts para el lector de pantalla. */
262
+ region: string;
263
+ noLeido: string;
264
+ filtrar: string;
265
+ usa: string;
266
+ paraMoverte: string;
267
+ administrar: string;
268
+ };
269
+ filtro: {
270
+ limpiar: string;
271
+ aplicar: string;
272
+ };
273
+ navegacion: {
274
+ /** `<nav>` del topbar. */
275
+ principal: string;
276
+ /** `<nav>` de las migas. */
277
+ migas: string;
278
+ cambiarWorkspace: string;
279
+ opcionesPerfil: string;
280
+ };
281
+ fecha: {
282
+ mesAnterior: string;
283
+ mesSiguiente: string;
284
+ /** Celda sin `ariaLabel`. `{n}` = día. */
285
+ dia: string;
286
+ rangos: string;
287
+ eligeFecha: string;
288
+ eligePeriodo: string;
289
+ elegirFecha: string;
290
+ elegirPeriodo: string;
291
+ hora: string;
292
+ minuto: string;
293
+ amPm: string;
294
+ duracionRapida: string;
295
+ eligeHora: string;
296
+ disponible: string;
297
+ ocupado: string;
298
+ enReunion: string;
299
+ desconectado: string;
300
+ };
301
+ popover: {
302
+ atras: string;
303
+ siguiente: string;
304
+ };
305
+ varios: {
306
+ /** X de `sui-content-card`. */
307
+ descartar: string;
308
+ /** Botón de `sui-integration-switch`. */
309
+ administrar: string;
310
+ /** Link de respuesta de `sui-activity-feed`. */
311
+ responder: string;
312
+ /** `sui-social-button`. `{marca}` = Google, Apple… */
313
+ continuarCon: string;
314
+ /** `sui-brand-logo` sin `ariaLabel`. `{marca}`. */
315
+ logoDe: string;
316
+ };
317
+ }
318
+ /** Los textos de siempre: español de Perú, tuteo, imperativo. */
319
+ declare const SUI_TEXTOS_ES: SuiTextos;
320
+ /** Lo que pasa la app: cualquier grupo, cualquier subconjunto de claves. */
321
+ type SuiTextosParciales = {
322
+ [G in keyof SuiTextos]?: Partial<SuiTextos[G]>;
323
+ };
324
+ /**
325
+ * Un objeto fijo, o una función que se lee dentro de un `computed`: si lee un
326
+ * signal (un `signal`, un `computed` o una flecha que llama a uno), los textos
327
+ * de la librería se vuelven a pintar cuando cambia.
328
+ */
329
+ type SuiTextosFuente = SuiTextosParciales | (() => SuiTextosParciales);
330
+ /**
331
+ * Los textos vigentes. Sin `provideSuiTextos`, el español de siempre.
332
+ *
333
+ * Una app con el i18n en un servicio lo conecta directo:
334
+ * `{ provide: SUI_TEXTOS, useFactory: () => { const i18n = inject(MiI18n); return computed(() => mezclarSuiTextos(i18n.sui())); } }`.
335
+ */
336
+ declare const SUI_TEXTOS: InjectionToken<Signal<SuiTextos>>;
337
+ /** Los textos de la app sobre el español, grupo por grupo. */
338
+ declare function mezclarSuiTextos(parciales: SuiTextosParciales | null | undefined): SuiTextos;
339
+ /**
340
+ * Cambia los textos de la librería. Va en los `providers` de la app (o de un
341
+ * componente, si solo una parte de la pantalla los necesita distintos).
342
+ */
343
+ declare function provideSuiTextos(fuente: SuiTextosFuente): Provider;
344
+ /** Los textos vigentes, dentro de un componente: `protected readonly textos = injectSuiTextos();`. */
345
+ declare function injectSuiTextos(): Signal<SuiTextos>;
346
+ /** `rellenarSuiTexto('Página {n}', { n: 3 })` → «Página 3». Una variable que no llega queda como está. */
347
+ declare function rellenarSuiTexto(texto: string, params: Record<string, string | number>): string;
348
+
49
349
  type SuiBadgeColor = 'gray' | 'blue' | 'orange' | 'red' | 'green' | 'yellow' | 'purple' | 'sky' | 'pink' | 'teal';
50
350
  type SuiBadgeVariant = 'filled' | 'light' | 'lighter' | 'stroke' | 'dark';
51
351
  type SuiBadgeSize = 'small' | 'medium' | 'large' | 'xlarge';
@@ -663,7 +963,10 @@ interface SuiActivityFile {
663
963
  name: string;
664
964
  /** Etiqueta corta del peso. Ej: "(4mb)" — formatear desde el consumer. */
665
965
  size?: string;
666
- /** URL opcional. Si está, el download button dispara navigate. */
966
+ /** URL opcional. Si está, el botón de descarga es un `<a download>` que baja
967
+ * el archivo (o lo abre en otra pestaña si es de otro origen) sin código del
968
+ * consumer; `(fileDownload)` sale igual. Sin href, la descarga la hace quien
969
+ * escucha `(fileDownload)`. */
667
970
  href?: string;
668
971
  }
669
972
  interface SuiActivityTask {
@@ -816,6 +1119,9 @@ type SuiActivityFeedItem = (SuiActivityFeedItemBase & {
816
1119
  * (fileDownload)="onDownload($event)" (reply)="onReply($event)" />
817
1120
  */
818
1121
  declare class SuiActivityFeed {
1122
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
1123
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
1124
+ protected readonly rellenar: typeof rellenarSuiTexto;
819
1125
  readonly items: _angular_core.InputSignal<readonly SuiActivityFeedItem[]>;
820
1126
  /** Click en el 3-dot menu trailing de cualquier row. */
821
1127
  readonly action: _angular_core.OutputEmitterRef<{
@@ -1018,6 +1324,8 @@ interface SuiAlertAction {
1018
1324
  * large → padding 14px 14px 16px, gap 12, radius-12 (default — full layout)
1019
1325
  */
1020
1326
  declare class SuiAlert {
1327
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
1328
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
1021
1329
  readonly variant: _angular_core.InputSignal<SuiAlertVariant>;
1022
1330
  readonly variantStyle: _angular_core.InputSignal<SuiAlertStyle>;
1023
1331
  readonly size: _angular_core.InputSignal<SuiAlertSize>;
@@ -1220,6 +1528,9 @@ interface SuiAvatarGroupItem {
1220
1528
  alt?: string;
1221
1529
  }
1222
1530
  declare class SuiAvatarGroup {
1531
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
1532
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
1533
+ protected readonly rellenar: typeof rellenarSuiTexto;
1223
1534
  readonly size: _angular_core.InputSignal<SuiAvatarSize>;
1224
1535
  readonly items: _angular_core.InputSignal<readonly SuiAvatarGroupItem[]>;
1225
1536
  /** Máximo de avatares visibles antes de colapsar en "+N". Default 4. */
@@ -1327,6 +1638,8 @@ type SuiBannerStyle = 'filled' | 'light' | 'lighter' | 'stroke';
1327
1638
  * </sui-banner>
1328
1639
  */
1329
1640
  declare class SuiBanner {
1641
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
1642
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
1330
1643
  readonly variant: _angular_core.InputSignal<SuiBannerVariant>;
1331
1644
  readonly variantStyle: _angular_core.InputSignal<SuiBannerStyle>;
1332
1645
  readonly title: _angular_core.InputSignal<string | null>;
@@ -1400,6 +1713,8 @@ type SuiBrandLogoSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
1400
1713
  * ariaLabel="Síguenos en GitHub" />
1401
1714
  */
1402
1715
  declare class SuiBrandLogo {
1716
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
1717
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
1403
1718
  readonly company: _angular_core.InputSignal<"adobe" | "amazon" | "apple" | "bitcoin" | "discord" | "dropbox" | "facebook" | "figma" | "framer" | "github" | "google" | "instagram" | "linkedin" | "microsoft" | "netflix" | "notion" | "paypal" | "pinterest" | "slack" | "spotify" | "stripe" | "telegram" | "twitch" | "webflow" | "whatsapp" | "wise" | "x-twitter" | "youtube">;
1404
1719
  readonly variant: _angular_core.InputSignal<SuiBrandLogoStyle>;
1405
1720
  readonly size: _angular_core.InputSignal<SuiBrandLogoSize>;
@@ -1547,6 +1862,8 @@ interface SuiBreadcrumbEntry {
1547
1862
  * - Dividers `aria-hidden="true"`.
1548
1863
  */
1549
1864
  declare class SuiBreadcrumbs {
1865
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
1866
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
1550
1867
  readonly items: _angular_core.InputSignal<readonly SuiBreadcrumbEntry[]>;
1551
1868
  readonly divider: _angular_core.InputSignal<SuiBreadcrumbDivider>;
1552
1869
  /** Emitido cuando un item NO-active es clickeado. */
@@ -2565,6 +2882,8 @@ type SuiCircularProgressBarSize = 48 | 56 | 64 | 72 | 80;
2565
2882
  * - ariaLabel: string opcional para `aria-label` del role=progressbar.
2566
2883
  */
2567
2884
  declare class SuiCircularProgressBar {
2885
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
2886
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
2568
2887
  readonly value: _angular_core.InputSignal<number>;
2569
2888
  readonly size: _angular_core.InputSignal<SuiCircularProgressBarSize>;
2570
2889
  readonly color: _angular_core.InputSignal<SuiCircularProgressBarColor>;
@@ -2671,6 +2990,8 @@ declare function normalizeHex(input: string | null | undefined): string | null;
2671
2990
  * iOS active fix: el host es un `<button>` con touchstart/touchend.
2672
2991
  */
2673
2992
  declare class SuiColorDot {
2993
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
2994
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
2674
2995
  /** Nombre del preset. Default `gray` cuando se usa customHex (el preset no aplica). */
2675
2996
  readonly color: _angular_core.InputSignal<SuiColorDotColor>;
2676
2997
  /**
@@ -2698,7 +3019,7 @@ declare class SuiColorDot {
2698
3019
  /** aria-label override. */
2699
3020
  readonly ariaLabel: _angular_core.InputSignal<string>;
2700
3021
  readonly clicked: _angular_core.OutputEmitterRef<void>;
2701
- /** Label por default: nombre del color capitalizado en spanish, o el hex. */
3022
+ /** Label por default: el nombre del color (`textos.selectorColor`), o el hex. */
2702
3023
  readonly defaultAriaLabel: _angular_core.Signal<string>;
2703
3024
  protected onClick(): void;
2704
3025
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiColorDot, never>;
@@ -2775,6 +3096,8 @@ type SuiColorPickerSize = 'medium' | 'large';
2775
3096
  * - Dots: role="radio" + aria-checked (los renderea sui-color-dot)
2776
3097
  */
2777
3098
  declare class SuiColorPicker {
3099
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
3100
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
2778
3101
  private readonly hostRef;
2779
3102
  /**
2780
3103
  * Lista de colores recomendados (grid). Default los 10 canon SUI.
@@ -2790,9 +3113,11 @@ declare class SuiColorPicker {
2790
3113
  */
2791
3114
  readonly value: _angular_core.ModelSignal<string | null>;
2792
3115
  /** Label visible cuando no hay color seleccionado. Imperativo con tuteo (dueño, 05-10-2026, P4 a). */
2793
- readonly placeholder: _angular_core.InputSignal<string>;
3116
+ readonly placeholder: _angular_core.InputSignal<string | null>;
3117
+ protected readonly placeholderTexto: _angular_core.Signal<string>;
2794
3118
  /** Etiqueta de la sección Recommended Colors dentro del panel. */
2795
- readonly recommendedLabel: _angular_core.InputSignal<string>;
3119
+ readonly recommendedLabel: _angular_core.InputSignal<string | null>;
3120
+ protected readonly recommendedLabelTexto: _angular_core.Signal<string>;
2796
3121
  /** Si true, oculta el HSV spectrum + sliders + hex input — solo grid de presets. */
2797
3122
  readonly presetsOnly: _angular_core.InputSignal<boolean>;
2798
3123
  /**
@@ -2826,7 +3151,8 @@ declare class SuiColorPicker {
2826
3151
  * nuevo 04-10-2026 (dueño: piso táctil 44 en el teléfono). */
2827
3152
  readonly size: _angular_core.InputSignal<SuiColorPickerSize>;
2828
3153
  /** aria-label del trigger. */
2829
- readonly ariaLabel: _angular_core.InputSignal<string>;
3154
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
3155
+ protected readonly ariaLabelTexto: _angular_core.Signal<string>;
2830
3156
  /** Emitido cuando el value cambia (cualquier interacción). */
2831
3157
  readonly change: _angular_core.OutputEmitterRef<string>;
2832
3158
  /** Estado interno del popover. */
@@ -2962,22 +3288,22 @@ declare class SuiColorPicker {
2962
3288
  * Footer del command menu (⌘K palette). 3 grupos:
2963
3289
  * 1. Navigate: kbd ↑ + kbd ↓ + text "Navigate"
2964
3290
  * 2. Select: kbd ↵ + text "Select"
2965
- * 3. Help text + link button "Help Center" (push right via flex-1 + justify-end)
3291
+ * 3. Help text + link button «Centro de ayuda» (push right via flex-1 + justify-end)
2966
3292
  *
2967
3293
  * Container: bg=white, border-top stroke-soft-200, padding 14px 20px, gap=12,
2968
3294
  * items-center, w=600px.
2969
3295
  *
2970
3296
  * EXACT:
2971
- * Text labels (Navigate/Select/help): Paragraph/X Small 12/16 text-sub-600
3297
+ * Text labels (Navegar/Seleccionar/ayuda): Paragraph/X Small 12/16 text-sub-600
2972
3298
  * Link button: Label/X Small Medium 12/16 primary-base (sin underline default)
2973
3299
  * Kbds: variant subtle, contienen iconos 16×16
2974
3300
  *
2975
3301
  * API:
2976
- * - navigateLabel: string ('Navigate' por default)
2977
- * - selectLabel: string ('Select')
2978
- * - helpText: string | null ('Not what you're looking for? Try the')
3302
+ * - navigateLabel: string ('Navegar' por default)
3303
+ * - selectLabel: string ('Seleccionar')
3304
+ * - helpText: string | null ('¿No es lo que buscas? Prueba el')
2979
3305
  * — copy previo al link; null oculta el bloque de ayuda completo
2980
- * - helpLink: SuiLinkConfig | string | null ('Help Center') — string
3306
+ * - helpLink: SuiLinkConfig | string | null ('Centro de ayuda') — string
2981
3307
  * shorthand = solo label (renderiza <button>, emite helpClicked);
2982
3308
  * SuiLinkConfig { label, href?, target?, rel? } = <a> real con
2983
3309
  * rel automático 'noopener noreferrer' si target='_blank'.
@@ -2985,13 +3311,20 @@ declare class SuiColorPicker {
2985
3311
  * - (helpClicked): output cuando el link se clickea
2986
3312
  */
2987
3313
  declare class SuiCommandMenuFooter {
2988
- readonly navigateLabel: _angular_core.InputSignal<string>;
2989
- readonly selectLabel: _angular_core.InputSignal<string>;
2990
- readonly helpText: _angular_core.InputSignal<string | null>;
3314
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
3315
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
3316
+ readonly navigateLabel: _angular_core.InputSignal<string | null>;
3317
+ protected readonly navigateLabelTexto: _angular_core.Signal<string>;
3318
+ readonly selectLabel: _angular_core.InputSignal<string | null>;
3319
+ protected readonly selectLabelTexto: _angular_core.Signal<string>;
3320
+ /** Texto antes del link. Sin pasar: `textos.menuComandos.ayuda`; `null` lo oculta. */
3321
+ readonly helpText: _angular_core.InputSignal<string | null | undefined>;
3322
+ protected readonly helpTextTexto: _angular_core.Signal<string | null>;
2991
3323
  /** Link de ayuda — string shorthand (solo label, emite `helpClicked`) o
2992
3324
  * SuiLinkConfig { label, href?, target?, rel? }: con href renderiza <a> real;
2993
- * rel automático 'noopener noreferrer' para _blank. null = sin link. */
2994
- readonly helpLink: _angular_core.InputSignal<string | SuiLinkConfig | null>;
3325
+ * rel automático 'noopener noreferrer' para _blank. null = sin link.
3326
+ * Sin pasar: `textos.menuComandos.centroAyuda`. */
3327
+ readonly helpLink: _angular_core.InputSignal<string | SuiLinkConfig | null | undefined>;
2995
3328
  /** Config resuelta del link (string → { label }, rel automático). */
2996
3329
  protected readonly helpLinkCfg: _angular_core.Signal<SuiLinkConfig | null>;
2997
3330
  readonly helpClicked: _angular_core.OutputEmitterRef<MouseEvent>;
@@ -3065,6 +3398,8 @@ declare class SuiCommandMenuFooter {
3065
3398
  type SuiCommandMenuItemType = 'basic' | 'left-icon' | 'avatar' | 'brand' | 'company' | 'country';
3066
3399
  type SuiCommandMenuItemSize = 'small' | 'medium';
3067
3400
  declare class SuiCommandMenuItem {
3401
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
3402
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
3068
3403
  readonly type: _angular_core.InputSignal<SuiCommandMenuItemType>;
3069
3404
  readonly size: _angular_core.InputSignal<SuiCommandMenuItemSize>;
3070
3405
  readonly title: _angular_core.InputSignal<string>;
@@ -3096,6 +3431,14 @@ declare class SuiCommandMenuItem {
3096
3431
  readonly leadingSize: _angular_core.Signal<20 | 40>;
3097
3432
  /** Para sui-avatar, traduce a SuiAvatarSize. */
3098
3433
  readonly avatarSize: _angular_core.Signal<"xs" | "lg">;
3434
+ private readonly _el;
3435
+ private _spacePressed;
3436
+ /** Solo las teclas sobre el propio item: Enter en el botón de la flecha es
3437
+ de ese botón, no del item. */
3438
+ private _esDelHost;
3439
+ _onEnter(event: Event): void;
3440
+ _onSpaceDown(event: Event): void;
3441
+ _onSpaceUp(event: Event): void;
3099
3442
  onClick(event: MouseEvent): void;
3100
3443
  onButtonClick(event: MouseEvent): void;
3101
3444
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiCommandMenuItem, never>;
@@ -3134,8 +3477,13 @@ declare class SuiCommandMenuItem {
3134
3477
  * (#335cff). El search icon en active sale naranja por override de marca.
3135
3478
  */
3136
3479
  declare class SuiCommandMenuSearch {
3480
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
3481
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
3137
3482
  readonly value: _angular_core.InputSignal<string>;
3138
- readonly placeholder: _angular_core.InputSignal<string>;
3483
+ readonly placeholder: _angular_core.InputSignal<string | null>;
3484
+ protected readonly placeholderTexto: _angular_core.Signal<string>;
3485
+ /** Nombre accesible del campo. Sin pasarlo, el lector anuncia el placeholder. */
3486
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
3139
3487
  /** Mostrar el chip ⌘K cuando el input está vacío. */
3140
3488
  readonly shortcut: _angular_core.InputSignal<boolean>;
3141
3489
  /** Mostrar el botón derecho (info en default, close en active). */
@@ -3149,7 +3497,7 @@ declare class SuiCommandMenuSearch {
3149
3497
  onInput(event: Event): void;
3150
3498
  onClear(): void;
3151
3499
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiCommandMenuSearch, never>;
3152
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiCommandMenuSearch, "sui-command-menu-search", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "shortcut": { "alias": "shortcut"; "required": false; "isSignal": true; }; "button": { "alias": "button"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "cleared": "cleared"; }, never, never, true, never>;
3500
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiCommandMenuSearch, "sui-command-menu-search", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "shortcut": { "alias": "shortcut"; "required": false; "isSignal": true; }; "button": { "alias": "button"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "cleared": "cleared"; }, never, never, true, never>;
3153
3501
  }
3154
3502
 
3155
3503
  /**
@@ -3482,7 +3830,9 @@ declare class SuiCompactSelect<T = string> implements ControlValueAccessor {
3482
3830
  * Nombre accesible del trigger (fix a11y 04-10-2026). Imprescindible con
3483
3831
  * `type="icon"`, que no muestra texto: sin esto el lector anunciaba «botón»
3484
3832
  * sin decir qué elige. Sin `ariaLabel`, el tipo icon usa el label del ítem
3485
- * elegido o el placeholder.
3833
+ * elegido o el placeholder. También va con `type="country"` cuando solo se
3834
+ * ve la bandera (sin `value` ni `placeholder`): el trigger no tiene otro
3835
+ * nombre que leer (axe: aria-command-name, 09-10-2026).
3486
3836
  */
3487
3837
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
3488
3838
  readonly clicked: _angular_core.OutputEmitterRef<Event>;
@@ -3745,6 +4095,8 @@ type SuiContentCardType = 'basic' | 'left-icon' | 'avatar' | 'card-provider' | '
3745
4095
  área táctil de 40 (extensión SUI 03-10-2026, mobile). */
3746
4096
  type SuiContentCardSize = 'medium' | 'large';
3747
4097
  declare class SuiContentCard {
4098
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
4099
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
3748
4100
  /** Tipo de leading visual. */
3749
4101
  readonly type: _angular_core.InputSignal<SuiContentCardType>;
3750
4102
  /** Título — Label/Small 14/20, text-strong-950. */
@@ -3775,7 +4127,8 @@ declare class SuiContentCard {
3775
4127
  /** Mostrar el botón X de dismiss. Default true. */
3776
4128
  readonly dismissible: _angular_core.InputSignal<boolean>;
3777
4129
  /** aria-label del botón X. */
3778
- readonly dismissAriaLabel: _angular_core.InputSignal<string>;
4130
+ readonly dismissAriaLabel: _angular_core.InputSignal<string | null>;
4131
+ protected readonly dismissAriaLabelTexto: _angular_core.Signal<string>;
3779
4132
  /**
3780
4133
  * Tamaño de la X de quitar (la fila no cambia: sigue en 72).
3781
4134
  * `medium` (default, Figma): 20 × 20 sin área extra.
@@ -3898,6 +4251,9 @@ interface SuiContentDividerItem {
3898
4251
  * (itemClick)="onNav($event)" />
3899
4252
  */
3900
4253
  declare class SuiContentDivider {
4254
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
4255
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
4256
+ protected readonly rellenar: typeof rellenarSuiTexto;
3901
4257
  readonly type: _angular_core.InputSignal<SuiContentDividerType>;
3902
4258
  /** Texto para los variants text-line / text / solid-text / text-button. */
3903
4259
  readonly text: _angular_core.InputSignal<string>;
@@ -4070,6 +4426,8 @@ type SuiCounterInputSize = '2xsmall' | 'xsmall' | 'small' | 'medium' | 'large' |
4070
4426
  * <sui-counter-input formControlName="cantidad" [min]="0" />
4071
4427
  */
4072
4428
  declare class SuiCounterInput implements ControlValueAccessor {
4429
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
4430
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
4073
4431
  readonly size: _angular_core.InputSignal<SuiCounterInputSize>;
4074
4432
  /** El form-label no tiene 'large' — se capea a medium (el label no escala). */
4075
4433
  protected readonly labelSize: _angular_core.Signal<SuiFormLabelSize>;
@@ -4089,8 +4447,10 @@ declare class SuiCounterInput implements ControlValueAccessor {
4089
4447
  readonly step: _angular_core.InputSignal<number>;
4090
4448
  readonly disabled: _angular_core.InputSignal<boolean>;
4091
4449
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
4092
- readonly decrementLabel: _angular_core.InputSignal<string>;
4093
- readonly incrementLabel: _angular_core.InputSignal<string>;
4450
+ readonly decrementLabel: _angular_core.InputSignal<string | null>;
4451
+ protected readonly decrementLabelTexto: _angular_core.Signal<string>;
4452
+ readonly incrementLabel: _angular_core.InputSignal<string | null>;
4453
+ protected readonly incrementLabelTexto: _angular_core.Signal<string>;
4094
4454
  /** a11y (04-10-2026): el spinbutton toma su nombre del label visible
4095
4455
  * (aria-labelledby) salvo que se pase `ariaLabel`, y se describe con el hint. */
4096
4456
  protected readonly _labelId: string;
@@ -4168,6 +4528,8 @@ type SuiDateSelectorSize = 'medium' | 'large';
4168
4528
  * <sui-date-selector label="Enero 2025" [leftIcon]="false" [rightIcon]="false" />
4169
4529
  */
4170
4530
  declare class SuiDateSelector {
4531
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
4532
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
4171
4533
  /** Texto del label (ej. "Enero 2025", "January 2024"). */
4172
4534
  readonly label: _angular_core.InputSignal<string>;
4173
4535
  /** Mostrar arrow izquierdo (prev). Default true. */
@@ -4334,6 +4696,8 @@ interface CalendarRow {
4334
4696
  * - Inline: pasar [inline]="true" para renderear el calendar SIN trigger
4335
4697
  */
4336
4698
  declare class SuiDatepicker implements ControlValueAccessor {
4699
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
4700
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
4337
4701
  private readonly hostEl;
4338
4702
  private readonly destroyRef;
4339
4703
  readonly mode: _angular_core.InputSignal<SuiDatepickerMode>;
@@ -4434,7 +4798,7 @@ declare class SuiDatepicker implements ControlValueAccessor {
4434
4798
  /** ¿El trigger muestra un valor (no el placeholder)? Pinta el texto oscuro. */
4435
4799
  readonly hasDisplayValue: _angular_core.Signal<boolean>;
4436
4800
  /** Nombre del panel para el lector de pantalla (role dialog / group). */
4437
- readonly panelAriaLabel: _angular_core.Signal<"Elegir período" | "Elegir fecha">;
4801
+ readonly panelAriaLabel: _angular_core.Signal<string>;
4438
4802
  /** «martes 7 de octubre de 2026» para cada celda (antes «Día 7»). */
4439
4803
  cellAriaLabel(cell: CalendarCell): string;
4440
4804
  /** a11y (04-10-2026): flechas dentro de la grilla mueven el foco entre los
@@ -4530,6 +4894,8 @@ type SuiDayCellSize = 'medium' | 'large';
4530
4894
  * <sui-day-cell day="14" [disabled]="true" />
4531
4895
  */
4532
4896
  declare class SuiDayCell {
4897
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
4898
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
4533
4899
  /** Número del día (1-31). Se acepta string para flexibilidad. */
4534
4900
  readonly day: _angular_core.InputSignal<string | number>;
4535
4901
  /** Type=Basic (default) o Range (entre extremos / extremo del range). */
@@ -4672,17 +5038,28 @@ type SuiDrawerFooterSize = 'medium' | 'large';
4672
5038
  * />
4673
5039
  */
4674
5040
  declare class SuiDrawerFooter {
5041
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
5042
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
5043
+ protected readonly rellenar: typeof rellenarSuiTexto;
5044
+ private static _nextId;
5045
+ /** El texto del checkbox / switch nombra al control vía aria-labelledby: el
5046
+ * <label> nativo no nombra a un host con role=checkbox/switch (a11y
5047
+ * 09-10-2026). */
5048
+ private readonly uid;
5049
+ protected readonly checkboxLabelId: string;
5050
+ protected readonly toggleLabelId: string;
4675
5051
  readonly type: _angular_core.InputSignal<SuiDrawerFooterType>;
4676
5052
  /** Botones del pie: `medium` 40 (default) · `large` 48 para el teléfono
4677
5053
  * (04-10-2026, piso táctil 44). */
4678
5054
  readonly size: _angular_core.InputSignal<SuiDrawerFooterSize>;
4679
5055
  /** Botón primario (filled primary-base) — string shorthand (solo label) o
4680
5056
  * SuiFooterButtonConfig { label, disabled? }. Interfaz compartida con
4681
- * sui-filter-panel-footer. */
4682
- readonly primaryButton: _angular_core.InputSignal<string | SuiFooterButtonConfig>;
5057
+ * sui-filter-panel-footer. Sin pasar: `textos.comun.continuar`. */
5058
+ readonly primaryButton: _angular_core.InputSignal<string | SuiFooterButtonConfig | null>;
4683
5059
  /** Botón secundario (stroke neutral) — string shorthand o
4684
- * SuiFooterButtonConfig. null (o label vacío) = ocultar. */
4685
- readonly secondaryButton: _angular_core.InputSignal<string | SuiFooterButtonConfig | null>;
5060
+ * SuiFooterButtonConfig. null (o label vacío) = ocultar. Sin pasar:
5061
+ * `textos.comun.cancelar`. */
5062
+ readonly secondaryButton: _angular_core.InputSignal<string | SuiFooterButtonConfig | null | undefined>;
4686
5063
  /** Config resuelta del botón primario (string → { label }). */
4687
5064
  protected readonly primaryCfg: _angular_core.Signal<SuiFooterButtonConfig>;
4688
5065
  /** Config resuelta del botón secundario (string → { label }; null/label vacío
@@ -4804,6 +5181,8 @@ type SuiDrawerHeaderSize = 'small' | 'large' | 'xlarge';
4804
5181
  * />
4805
5182
  */
4806
5183
  declare class SuiDrawerHeader {
5184
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
5185
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
4807
5186
  readonly type: _angular_core.InputSignal<SuiDrawerHeaderType>;
4808
5187
  readonly size: _angular_core.InputSignal<SuiDrawerHeaderSize>;
4809
5188
  readonly title: _angular_core.InputSignal<string>;
@@ -4839,7 +5218,8 @@ declare class SuiDrawerHeader {
4839
5218
  /** Muestra divider 1px al fondo del header. Default false. */
4840
5219
  readonly showDivider: _angular_core.InputSignal<boolean>;
4841
5220
  /** aria-label del close button. */
4842
- readonly dismissAriaLabel: _angular_core.InputSignal<string>;
5221
+ readonly dismissAriaLabel: _angular_core.InputSignal<string | null>;
5222
+ protected readonly dismissAriaLabelTexto: _angular_core.Signal<string>;
4843
5223
  /** Click en el close button. */
4844
5224
  readonly dismiss: _angular_core.OutputEmitterRef<MouseEvent>;
4845
5225
  /** Click en el Link Button inline (solo cuando `link` está set). */
@@ -5056,6 +5436,16 @@ declare class SuiDropdownItem {
5056
5436
  * - panelClass: sui-dropdown-menu__overlay-pane (estilos globales en
5057
5437
  * src/styles/_sui-dropdown-menu-overlay.scss)
5058
5438
  *
5439
+ * Accesibilidad (fix a11y 09-10-2026):
5440
+ * - `aria-haspopup` + `aria-expanded` van en el CONTROL proyectado como
5441
+ * trigger (el `<button>`, el host de `sui-button` con role=button, el
5442
+ * `<button>` interno de `sui-compact-button`), no en el span wrapper:
5443
+ * el span es genérico, no recibe foco y axe rechaza `aria-expanded` ahí.
5444
+ * - Sin `[origin]` y con `popupRole="menu"`, el pane del overlay lleva
5445
+ * `role="menu"` — los `sui-dropdown-item` (role=menuitem) necesitan ese
5446
+ * padre. Con `[origin]` no se toca: select / pickers traen su propio
5447
+ * `listbox` / `dialog` dentro del panel.
5448
+ *
5059
5449
  * Estilos del panel viven en `src/styles/_sui-dropdown-menu-overlay.scss`
5060
5450
  * (global, porque CDK Overlay monta el panel fuera del shadow del component).
5061
5451
  */
@@ -5072,7 +5462,7 @@ type SuiDropdownMenuPosition = 'auto' | 'below' | 'above';
5072
5462
  * 'listbox' solo es válido cuando los hijos son option, no menuitem.
5073
5463
  */
5074
5464
  type SuiDropdownMenuPopupRole = 'menu' | 'listbox' | 'true';
5075
- declare class SuiDropdownMenu {
5465
+ declare class SuiDropdownMenu implements AfterViewInit, OnChanges {
5076
5466
  /** Si true, el panel matchea el ancho del trigger. Default: auto width. */
5077
5467
  readonly matchWidth: _angular_core.InputSignal<boolean>;
5078
5468
  /** Estrategia ante espacio insuficiente. Default (true): el pane se ENCOGE
@@ -5102,6 +5492,11 @@ declare class SuiDropdownMenu {
5102
5492
  * proyectados llevan role="menuitem"). Los consumers de tipo listbox
5103
5493
  * (sui-select / compact-selects, items con role="option") DEBEN pasar
5104
5494
  * `popupRole="listbox"`. Ver SuiDropdownMenuPopupRole.
5495
+ *
5496
+ * Con 'menu' (y sin `[origin]`) el pane del overlay recibe `role="menu"`.
5497
+ * Un panel que mezcla items con un buscador u otros controles no es un
5498
+ * menú ARIA válido: ahí va `popupRole="true"` y el consumer envuelve sus
5499
+ * items en un contenedor propio con `role="menu"`.
5105
5500
  */
5106
5501
  readonly popupRole: _angular_core.InputSignal<SuiDropdownMenuPopupRole>;
5107
5502
  /**
@@ -5125,6 +5520,16 @@ declare class SuiDropdownMenu {
5125
5520
  private _overlaySubs;
5126
5521
  private _resizeObserver;
5127
5522
  constructor();
5523
+ ngAfterViewInit(): void;
5524
+ ngOnChanges(): void;
5525
+ /** Control proyectado como trigger: un botón o enlace (nativo o con
5526
+ * role=button). Se busca en cada llamada (barato) para tolerar triggers que
5527
+ * pintan su `<button>` interno tarde. Sin fallback a un elemento genérico
5528
+ * (ni a un `[tabindex]` sin rol): ponerle `aria-expanded` a algo sin rol es
5529
+ * justo la falla que se arregla acá. */
5530
+ private _getTriggerControl;
5531
+ /** Espeja `popupRole` e `isOpen` en el control proyectado. */
5532
+ private _syncTriggerAria;
5128
5533
  onTriggerClick(event: MouseEvent): void;
5129
5534
  onTriggerKeydown(event: KeyboardEvent): void;
5130
5535
  toggle(): void;
@@ -5178,7 +5583,7 @@ declare class SuiDropdownPanel {
5178
5583
  *
5179
5584
  * Default:
5180
5585
  * search icon 20×20 leading, color text-soft-400
5181
- * placeholder text "Search..." color text-soft-400
5586
+ * placeholder «Buscar…» color text-soft-400 (16 px en ≤767 por el zoom de iOS)
5182
5587
  *
5183
5588
  * Active (con valor escrito):
5184
5589
  * search icon: icon-sub-600 (oscurece vs el soft-400 de Default)
@@ -5191,9 +5596,14 @@ declare class SuiDropdownPanel {
5191
5596
  * <sui-dropdown-search [(value)]="query" placeholder="Buscar país..." (cleared)="onClear()" />
5192
5597
  */
5193
5598
  declare class SuiDropdownSearch {
5599
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
5600
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
5194
5601
  readonly value: _angular_core.ModelSignal<string>;
5195
- readonly placeholder: _angular_core.InputSignal<string>;
5602
+ readonly placeholder: _angular_core.InputSignal<string | null>;
5603
+ protected readonly placeholderTexto: _angular_core.Signal<string>;
5196
5604
  readonly disabled: _angular_core.InputSignal<boolean>;
5605
+ /** Nombre accesible del campo. Sin pasarlo, el lector anuncia el placeholder. */
5606
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
5197
5607
  /** Fired cuando el user clickea el icono de clear (X). */
5198
5608
  readonly cleared: _angular_core.OutputEmitterRef<void>;
5199
5609
  /** Fired en cada input change (igual que value() pero con event). */
@@ -5202,7 +5612,7 @@ declare class SuiDropdownSearch {
5202
5612
  onInput(event: Event): void;
5203
5613
  onClear(event: MouseEvent): void;
5204
5614
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiDropdownSearch, never>;
5205
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiDropdownSearch, "sui-dropdown-search", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "cleared": "cleared"; "valueChanged": "valueChanged"; }, never, never, true, never>;
5615
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiDropdownSearch, "sui-dropdown-search", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "cleared": "cleared"; "valueChanged": "valueChanged"; }, never, never, true, never>;
5206
5616
  }
5207
5617
 
5208
5618
  /**
@@ -5593,6 +6003,9 @@ type SuiFileIconColor = 'red' | 'orange' | 'yellow' | 'green' | 'teal' | 'blue'
5593
6003
  * auto-detect from extension. Defaults to gray for unknown types.
5594
6004
  */
5595
6005
  declare class SuiFileIcon {
6006
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
6007
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
6008
+ protected readonly rellenar: typeof rellenarSuiTexto;
5596
6009
  readonly filename: _angular_core.InputSignal<string>;
5597
6010
  readonly extension: _angular_core.InputSignal<string>;
5598
6011
  readonly size: _angular_core.InputSignal<SuiFileIconSize>;
@@ -5716,6 +6129,8 @@ interface SuiFileUploadCardFile {
5716
6129
  * - retryClicked: click en "Try Again" (solo state==='error')
5717
6130
  */
5718
6131
  declare class SuiFileUploadCard {
6132
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
6133
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
5719
6134
  /** Archivo mostrado — string shorthand (= filename) o { filename, extension? }. */
5720
6135
  readonly file: _angular_core.InputSignal<string | SuiFileUploadCardFile>;
5721
6136
  /** Config resuelta del archivo (string → { filename }). */
@@ -5726,10 +6141,14 @@ declare class SuiFileUploadCard {
5726
6141
  readonly statusText: _angular_core.InputSignal<string | null>;
5727
6142
  readonly showStatus: _angular_core.InputSignal<boolean>;
5728
6143
  /** Textos para el lector de pantalla (antes fijos en inglés). */
5729
- readonly cancelLabel: _angular_core.InputSignal<string>;
5730
- readonly removeLabel: _angular_core.InputSignal<string>;
5731
- readonly progressLabel: _angular_core.InputSignal<string>;
5732
- readonly retryLabel: _angular_core.InputSignal<string>;
6144
+ readonly cancelLabel: _angular_core.InputSignal<string | null>;
6145
+ protected readonly cancelLabelTexto: _angular_core.Signal<string>;
6146
+ readonly removeLabel: _angular_core.InputSignal<string | null>;
6147
+ protected readonly removeLabelTexto: _angular_core.Signal<string>;
6148
+ readonly progressLabel: _angular_core.InputSignal<string | null>;
6149
+ protected readonly progressLabelTexto: _angular_core.Signal<string>;
6150
+ readonly retryLabel: _angular_core.InputSignal<string | null>;
6151
+ protected readonly retryLabelTexto: _angular_core.Signal<string>;
5733
6152
  readonly actionClicked: _angular_core.OutputEmitterRef<void>;
5734
6153
  readonly retryClicked: _angular_core.OutputEmitterRef<void>;
5735
6154
  /** Default status text por state — override-able vía input. */
@@ -5817,12 +6236,15 @@ type SuiFileUploadSize = 'small' | 'medium' | 'large' | 'xlarge';
5817
6236
  * - errorEvent: emite string con el motivo del rechazo si falla validación.
5818
6237
  */
5819
6238
  declare class SuiFileUpload {
6239
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
6240
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
5820
6241
  readonly accept: _angular_core.InputSignal<string>;
5821
6242
  readonly multiple: _angular_core.InputSignal<boolean>;
5822
6243
  readonly maxSize: _angular_core.InputSignal<number>;
5823
6244
  readonly title: _angular_core.InputSignal<string | null>;
5824
6245
  readonly subtitle: _angular_core.InputSignal<string | null>;
5825
- readonly browseLabel: _angular_core.InputSignal<string>;
6246
+ readonly browseLabel: _angular_core.InputSignal<string | null>;
6247
+ protected readonly browseLabelTexto: _angular_core.Signal<string>;
5826
6248
  readonly disabled: _angular_core.InputSignal<boolean>;
5827
6249
  readonly error: _angular_core.InputSignal<boolean>;
5828
6250
  readonly errorMessage: _angular_core.InputSignal<string | null>;
@@ -5982,7 +6404,7 @@ declare class SuiFilterItem {
5982
6404
  * leftIcon(on | off) × linkButton(on | off) = 4 combos
5983
6405
  *
5984
6406
  * Header del panel de filtros vertical. Slot izquierdo opcional (icono), label
5985
- * en negrita al centro/izquierda, y un link "Clear" opcional a la derecha.
6407
+ * en negrita al centro/izquierda, y un link «Limpiar» opcional a la derecha.
5986
6408
  *
5987
6409
  * EXACT (pulled from audit reports.json → name="Filters"):
5988
6410
  * Container px-20 py-16, border-bottom stroke/soft-200, w-400px
@@ -6009,10 +6431,12 @@ declare class SuiFilterItem {
6009
6431
  * (clearClick)="onClear()" />
6010
6432
  */
6011
6433
  declare class SuiFilterPanelHeader {
6434
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
6435
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
6012
6436
  readonly label: _angular_core.InputSignal<string>;
6013
6437
  /** Icono opcional a la izquierda del label (20×20). */
6014
6438
  readonly leftIcon: _angular_core.InputSignal<string | null>;
6015
- /** Link de limpieza a la derecha: `true` = label default 'Clear', string =
6439
+ /** Link de limpieza a la derecha: `true` = label default 'Limpiar', string =
6016
6440
  * label custom, `false` (default) = oculto. */
6017
6441
  readonly clear: _angular_core.InputSignal<string | boolean>;
6018
6442
  /** Label resuelto del link (null = oculto). */
@@ -6032,12 +6456,14 @@ declare class SuiFilterPanelHeader {
6032
6456
  * Type(Buttons) = 1 combo
6033
6457
  *
6034
6458
  * Footer del panel de filtros vertical: dos botones full-width lado a lado —
6035
- * "Clear" (stroke, bg/white-0 + border) y "Apply" (filled primary).
6459
+ * «Limpiar» (stroke, bg/white-0 + border) y «Aplicar» (filled primary).
6036
6460
  *
6037
6461
  * EXACT (verificado vía Figma MCP — node 4415:863 / outer 4415:858,
6038
6462
  * Actions wrapper 4415:857):
6039
6463
  * Container px-20 py-16, border-top stroke/soft-200, overflow-clip,
6040
- * w-472px (aquí fluido al 100%), gap 16px entre botones
6464
+ * w-472px (aquí fluido al 100%), gap 16px entre botones en
6465
+ * Figma → 12 aquí (canon de la app: sui-modal-footer legisla
6466
+ * todos los grupos de botones, gap 12; 19-10-2026)
6041
6467
  * Clear button bg-white + border stroke/soft-200, p-8px, radius-8,
6042
6468
  * text/sub-600 → sui-button variant="stroke" color="neutral" size="small"
6043
6469
  * Apply button bg primary-base, text static-white, p-8px, radius-8
@@ -6047,7 +6473,7 @@ declare class SuiFilterPanelHeader {
6047
6473
  * Token map (Figma → sui-tokens.scss):
6048
6474
  * px-20 py-16 → 16px 20px
6049
6475
  * border-top → 1px solid --sui-stroke-soft-200
6050
- * gap (Actions) → 16px
6476
+ * gap (Actions) → 12px (Figma dice 16; manda el canon de sui-modal-footer)
6051
6477
  * primary-base → --sui-primary-base (via sui-button filled primary)
6052
6478
  * button p-8/r-8 → sui-button size="small" (height 36, padding 8, radius 8)
6053
6479
  *
@@ -6061,14 +6487,19 @@ declare class SuiFilterPanelHeader {
6061
6487
  * (apply)="onApply()" />
6062
6488
  */
6063
6489
  declare class SuiFilterPanelFooter {
6490
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
6491
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
6064
6492
  /** Botón "Clear" (stroke neutral) — string shorthand (solo label) o
6065
6493
  * SuiFooterButtonConfig { label, disabled? }. Interfaz compartida con
6066
- * sui-drawer-footer. */
6067
- readonly clearButton: _angular_core.InputSignal<string | SuiFooterButtonConfig>;
6068
- /** Botón "Apply" (filled primary) — string shorthand o SuiFooterButtonConfig. */
6069
- readonly applyButton: _angular_core.InputSignal<string | SuiFooterButtonConfig>;
6070
- /** Tamaño de los botones. Default 'small' (Figma: p-8px/radius-8 = size small). */
6071
- readonly size: _angular_core.InputSignal<"small" | "medium">;
6494
+ * sui-drawer-footer. Sin pasar: `textos.filtro.limpiar`. */
6495
+ readonly clearButton: _angular_core.InputSignal<string | SuiFooterButtonConfig | null>;
6496
+ /** Botón "Apply" (filled primary) — string shorthand o SuiFooterButtonConfig.
6497
+ * Sin pasar: `textos.filtro.aplicar`. */
6498
+ readonly applyButton: _angular_core.InputSignal<string | SuiFooterButtonConfig | null>;
6499
+ /** Tamaño de los botones. Default 'medium' (40, la computadora; D16: nada
6500
+ * en small). 'large' (48) para el teléfono y la tablet táctil (piso de 44).
6501
+ * 'small' (36, el que dibuja Figma) queda por compatibilidad. */
6502
+ readonly size: _angular_core.InputSignal<"small" | "medium" | "large">;
6072
6503
  /** Config resuelta del botón Clear (string → { label }). */
6073
6504
  protected readonly clearCfg: _angular_core.Signal<SuiFooterButtonConfig>;
6074
6505
  /** Config resuelta del botón Apply (string → { label }). */
@@ -6311,10 +6742,14 @@ interface SuiImageUploadProfileLabels {
6311
6742
  * el consumer cablea (upload)/(change) a su propio <input type=file> o flujo.
6312
6743
  */
6313
6744
  declare class SuiImageUploadProfile implements ControlValueAccessor {
6745
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
6746
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
6314
6747
  readonly imageUrl: _angular_core.InputSignal<string | null>;
6315
6748
  readonly companyLogoSrc: _angular_core.InputSignal<string | null>;
6316
- readonly title: _angular_core.InputSignal<string>;
6317
- readonly subtitle: _angular_core.InputSignal<string>;
6749
+ readonly title: _angular_core.InputSignal<string | null>;
6750
+ protected readonly titleTexto: _angular_core.Signal<string>;
6751
+ readonly subtitle: _angular_core.InputSignal<string | null>;
6752
+ protected readonly subtitleTexto: _angular_core.Signal<string>;
6318
6753
  readonly alignment: _angular_core.InputSignal<SuiImageUploadProfileAlignment>;
6319
6754
  readonly type: _angular_core.InputSignal<SuiImageUploadProfileType>;
6320
6755
  /** Copy de los botones (i18n) — objeto parcial; lo no seteado cae al default. */
@@ -6451,6 +6886,8 @@ declare function esImagenAceptada(file: Pick<File, 'type' | 'name'>): boolean;
6451
6886
  * - errorEvent: mensaje de error de validación
6452
6887
  */
6453
6888
  declare class SuiImageUpload {
6889
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
6890
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
6454
6891
  /**
6455
6892
  * Ocupa el ancho del contenedor en vez del cuadrado fijo de `size`.
6456
6893
  *
@@ -6597,10 +7034,13 @@ declare class SuiImageUpload {
6597
7034
  * No se modeló como prop; el render lo cubre el value().
6598
7035
  */
6599
7036
  declare class SuiInlineInput implements ControlValueAccessor {
7037
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
7038
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
6600
7039
  /** Valor del input (two-way bindable + CVA). */
6601
7040
  readonly value: _angular_core.ModelSignal<string>;
6602
7041
  /** Placeholder mostrado cuando value está vacío. */
6603
- readonly placeholder: _angular_core.InputSignal<string>;
7042
+ readonly placeholder: _angular_core.InputSignal<string | null>;
7043
+ protected readonly placeholderTexto: _angular_core.Signal<string>;
6604
7044
  /**
6605
7045
  * Leading icon (RemixIcon name). `false` lo oculta. Default 'user-3-line'
6606
7046
  * (espeja el símbolo Figma).
@@ -6611,7 +7051,8 @@ declare class SuiInlineInput implements ControlValueAccessor {
6611
7051
  /** Deshabilita la interacción. */
6612
7052
  readonly disabled: _angular_core.InputSignal<boolean>;
6613
7053
  /** Texto del botón "editar" para a11y (aria-label). */
6614
- readonly editLabel: _angular_core.InputSignal<string>;
7054
+ readonly editLabel: _angular_core.InputSignal<string | null>;
7055
+ protected readonly editLabelTexto: _angular_core.Signal<string>;
6615
7056
  /** Emite el valor confirmado (botón check / Enter). */
6616
7057
  readonly confirm: _angular_core.OutputEmitterRef<string>;
6617
7058
  /** Emite cuando se cancela la edición (botón close / Escape). */
@@ -6738,6 +7179,8 @@ type SuiInputMode = 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' |
6738
7179
  */
6739
7180
  type SuiInputEnterKeyHint = 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send';
6740
7181
  declare class SuiInput implements ControlValueAccessor {
7182
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
7183
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
6741
7184
  readonly size: _angular_core.InputSignal<SuiInputSize>;
6742
7185
  readonly type: _angular_core.InputSignal<SuiInputType>;
6743
7186
  readonly placeholder: _angular_core.InputSignal<string>;
@@ -7115,6 +7558,8 @@ interface SuiIntegrationManageConfig {
7115
7558
  * <sui-integration-switch title="..." [manage]="false" />
7116
7559
  */
7117
7560
  declare class SuiIntegrationSwitch implements ControlValueAccessor {
7561
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
7562
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
7118
7563
  private static _nextId;
7119
7564
  /** El sui-switch interno toma su nombre del título (aria-labelledby) y su
7120
7565
  * descripción de la descripción: antes el lector decía solo «interruptor»
@@ -7538,6 +7983,10 @@ declare class SuiModalSheet implements OnDestroy {
7538
7983
  excede un threshold y la condición de scroll lo permite. Sirve para no
7539
7984
  robar tap/click a buttons internos. */
7540
7985
  private bodyDragArmed;
7986
+ /** Dónde nació el gesto (pointerdown / touchstart): de ahí se buscan las
7987
+ listas con scroll propio que tiene el contenido (ver scrollersDe). */
7988
+ private bodyDragTarget;
7989
+ private touchTarget;
7541
7990
  /** Threshold de movimiento (px) para decidir que un pointermove en body es
7542
7991
  drag (no tap). 5px = más sensible que el iOS canon de 8px: el dueño pidió
7543
7992
  "como nativo" y el 8 sentía que tardaba en activar. Trade-off: 5px puede
@@ -7621,6 +8070,11 @@ declare class SuiModalSheet implements OnDestroy {
7621
8070
  /** Heurística: ignorar drag si el target es un input/textarea/select/button
7622
8071
  interactivo. El user está intentando interactuar, no arrastrar. */
7623
8072
  private shouldIgnoreBodyDrag;
8073
+ /** Lo que scrollea bajo un gesto que nace en `target`: cada ancestro con
8074
+ `overflow-y` auto/scroll y contenido de sobra (o ya scrolleado), desde
8075
+ el dedo hasta el body (sin incluirlo), más el body si desborda. Vacío =
8076
+ nada scrollea. */
8077
+ private scrollersDe;
7624
8078
  /** Duración del snap en función de la distancia restante y la velocidad del
7625
8079
  dedo (px/ms): un fling rápido cierra la distancia en poco tiempo; un
7626
8080
  release lento o un snap programático usa la duración larga. Acotado a
@@ -7766,6 +8220,8 @@ type SuiModalStatusAlignment = 'horizontal' | 'vertical';
7766
8220
  * [slot="footer"]: action buttons row
7767
8221
  */
7768
8222
  declare class SuiModal implements AfterViewInit, OnDestroy {
8223
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
8224
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
7769
8225
  private readonly doc;
7770
8226
  readonly open: _angular_core.ModelSignal<boolean>;
7771
8227
  readonly size: _angular_core.InputSignal<SuiModalSize>;
@@ -7940,6 +8396,8 @@ type SuiModalHeaderVariant = 'info' | 'success' | 'warning' | 'error';
7940
8396
  * <sui-modal-header size="small" title="Filtros" (closed)="cerrar()" />
7941
8397
  */
7942
8398
  declare class SuiModalHeader {
8399
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
8400
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
7943
8401
  /** Título del header (Label/Small). */
7944
8402
  readonly title: _angular_core.InputSignal<string>;
7945
8403
  /** Descripción bajo el título (Paragraph/X-Small). */
@@ -8071,10 +8529,12 @@ declare class SuiModalFooter {
8071
8529
  * que existe en RemixIcon; si el panel real usa otro glyph, ajustar el name.
8072
8530
  */
8073
8531
  declare class SuiNotificationFooter {
8074
- /** Label default del link de gestión (Figma "Manage Notification"). */
8075
- private static readonly DEFAULT_MANAGE_LABEL;
8076
- readonly usePrefix: _angular_core.InputSignal<string>;
8077
- readonly useSuffix: _angular_core.InputSignal<string>;
8532
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
8533
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
8534
+ readonly usePrefix: _angular_core.InputSignal<string | null>;
8535
+ protected readonly usePrefixTexto: _angular_core.Signal<string>;
8536
+ readonly useSuffix: _angular_core.InputSignal<string | null>;
8537
+ protected readonly useSuffixTexto: _angular_core.Signal<string>;
8078
8538
  /** Link de gestión — true = label default ('Administrar notificaciones'); string =
8079
8539
  * label custom (emite `manageClick`); SuiLinkConfig { label, href?, target?,
8080
8540
  * rel? }: con href renderiza <a> real, rel automático 'noopener noreferrer'
@@ -8184,12 +8644,15 @@ interface SuiNotificationTab<T = string> {
8184
8644
  * trae el fix dentro de <sui-compact-button>.
8185
8645
  */
8186
8646
  declare class SuiNotificationTabMenu<T = string> {
8647
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
8648
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
8187
8649
  readonly tabs: _angular_core.InputSignal<SuiNotificationTab<T>[]>;
8188
8650
  readonly active: _angular_core.ModelSignal<T | undefined>;
8189
8651
  /** Renderiza el botón de filtro absoluto a la derecha (Figma prop `button`). */
8190
8652
  readonly showFilter: _angular_core.InputSignal<boolean>;
8191
8653
  /** aria-label del botón de filtro. */
8192
- readonly filterLabel: _angular_core.InputSignal<string>;
8654
+ readonly filterLabel: _angular_core.InputSignal<string | null>;
8655
+ protected readonly filterLabelTexto: _angular_core.Signal<string>;
8193
8656
  readonly tabChange: _angular_core.OutputEmitterRef<T>;
8194
8657
  readonly filterClick: _angular_core.OutputEmitterRef<MouseEvent>;
8195
8658
  private readonly tabItems?;
@@ -8271,6 +8734,8 @@ type SuiNotificationStyle = 'filled' | 'light' | 'lighter' | 'stroke';
8271
8734
  * - showIcon/iconName status icons
8272
8735
  */
8273
8736
  declare class SuiNotification {
8737
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
8738
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
8274
8739
  readonly variant: _angular_core.InputSignal<SuiNotificationVariant>;
8275
8740
  readonly variantStyle: _angular_core.InputSignal<SuiNotificationStyle>;
8276
8741
  readonly title: _angular_core.InputSignal<string | null>;
@@ -8388,13 +8853,17 @@ type SuiOtpInputSize = 'large' | 'medium' | 'small';
8388
8853
  * diseño los pide en una pantalla concreta, se compone con 2 sui-otp-input.
8389
8854
  */
8390
8855
  declare class SuiOtpInput implements ControlValueAccessor {
8856
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
8857
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
8858
+ protected readonly rellenar: typeof rellenarSuiTexto;
8391
8859
  readonly length: _angular_core.InputSignal<number>;
8392
8860
  /** Tamaño de la celda: large 80×64 (guía, default) · medium 52×56 · small 44×48. */
8393
8861
  readonly size: _angular_core.InputSignal<SuiOtpInputSize>;
8394
8862
  readonly type: _angular_core.InputSignal<SuiOtpInputType>;
8395
8863
  readonly disabled: _angular_core.ModelSignal<boolean>;
8396
8864
  readonly error: _angular_core.InputSignal<boolean>;
8397
- readonly ariaLabel: _angular_core.InputSignal<string>;
8865
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
8866
+ protected readonly ariaLabelTexto: _angular_core.Signal<string>;
8398
8867
  readonly value: _angular_core.ModelSignal<string>;
8399
8868
  readonly completed: _angular_core.OutputEmitterRef<string>;
8400
8869
  /** Array de caracteres, length === this.length(). */
@@ -8513,6 +8982,9 @@ type SuiPaginationInfoFormat = 'items' | 'pages';
8513
8982
  * @output pageSizeChange Emite el nuevo page size cuando el user lo cambia
8514
8983
  */
8515
8984
  declare class SuiPagination {
8985
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
8986
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
8987
+ protected readonly rellenar: typeof rellenarSuiTexto;
8516
8988
  readonly total: _angular_core.InputSignal<number>;
8517
8989
  readonly pageSize: _angular_core.ModelSignal<number>;
8518
8990
  readonly siblingCount: _angular_core.InputSignal<number>;
@@ -8640,18 +9112,24 @@ declare const SUI_PASSWORD_STRENGTH_DEFAULT_LEVEL_LABELS: Record<SuiPasswordStre
8640
9112
  * <sui-password-strength strength="moderate" [conditions]="[]" caption="" />
8641
9113
  */
8642
9114
  declare class SuiPasswordStrength {
9115
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
9116
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
8643
9117
  /** Contraseña a evaluar — deriva las condiciones cumplidas y el nivel. */
8644
9118
  readonly value: _angular_core.InputSignal<string>;
8645
9119
  /** Override manual del nivel — presente gana sobre el derivado de `value`. */
8646
9120
  readonly strength: _angular_core.InputSignal<SuiPasswordStrengthLevel | null>;
8647
9121
  /** Caption sobre la checklist. '' = oculto. */
8648
- readonly caption: _angular_core.InputSignal<string>;
8649
- /** Checklist de condiciones. [] = sin checklist (solo barra + caption). */
8650
- readonly conditions: _angular_core.InputSignal<SuiPasswordStrengthCondition[]>;
9122
+ readonly caption: _angular_core.InputSignal<string | null>;
9123
+ protected readonly captionTexto: _angular_core.Signal<string>;
9124
+ /** Checklist de condiciones. [] = sin checklist (solo barra + caption).
9125
+ * Sin pasar: las tres de siempre, con los textos de `textos.contrasena`. */
9126
+ readonly conditions: _angular_core.InputSignal<SuiPasswordStrengthCondition[] | null>;
9127
+ protected readonly conditionsTexto: _angular_core.Signal<SuiPasswordStrengthCondition[]>;
8651
9128
  /** Textos del nivel para lectores de pantalla (merge sobre los defaults ES). */
8652
9129
  readonly levelLabels: _angular_core.InputSignal<Partial<Record<SuiPasswordStrengthLevel, string>>>;
8653
9130
  /** Label accesible del progressbar. */
8654
- readonly ariaLabel: _angular_core.InputSignal<string>;
9131
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
9132
+ protected readonly ariaLabelTexto: _angular_core.Signal<string>;
8655
9133
  /** Emite el nivel resuelto cada vez que cambia (no emite el inicial). */
8656
9134
  readonly strengthChange: _angular_core.OutputEmitterRef<SuiPasswordStrengthLevel>;
8657
9135
  /** Condiciones evaluadas: `met` manual gana; sino corre `test` sobre `value`. */
@@ -8759,6 +9237,8 @@ type SuiPopoverFooter = 'none' | 'stretch' | 'text-stepper' | 'stepper';
8759
9237
  teléfono — size nuevo 04-10-2026 (dueño: piso táctil 44). */
8760
9238
  type SuiPopoverSize = 'small' | 'medium' | 'large';
8761
9239
  declare class SuiPopover {
9240
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
9241
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
8762
9242
  /** Placement axis del tail relativo al trigger (12 variantes Figma). */
8763
9243
  readonly position: _angular_core.InputSignal<SuiPopoverPosition>;
8764
9244
  /** Mostrar la cola/flecha (tail SVG). */
@@ -8773,10 +9253,12 @@ declare class SuiPopover {
8773
9253
  readonly dismissIcon: _angular_core.InputSignal<boolean>;
8774
9254
  /** Tipo de footer. `none` oculta el footer y el separador. */
8775
9255
  readonly footer: _angular_core.InputSignal<SuiPopoverFooter>;
8776
- /** Texto del botón secundario (izquierda). */
8777
- readonly backLabel: _angular_core.InputSignal<string>;
8778
- /** Texto del botón primario (derecha). */
8779
- readonly nextLabel: _angular_core.InputSignal<string>;
9256
+ /** Texto del botón secundario (izquierda). Sin pasar: `textos.popover.atras` («Atrás»). */
9257
+ readonly backLabel: _angular_core.InputSignal<string | null>;
9258
+ /** Texto del botón primario (derecha). Sin pasar: `textos.popover.siguiente` («Siguiente»). */
9259
+ readonly nextLabel: _angular_core.InputSignal<string | null>;
9260
+ protected readonly backLabelTexto: _angular_core.Signal<string>;
9261
+ protected readonly nextLabelTexto: _angular_core.Signal<string>;
8780
9262
  /** Renderear el botón secundario (Back). Si false, solo se muestra el primario. */
8781
9263
  readonly doubleButton: _angular_core.InputSignal<boolean>;
8782
9264
  /** Progreso del stepper — { current (1-based), total }. Usado en text-stepper
@@ -8865,6 +9347,8 @@ type SuiProgressBarSize = 'small' | 'medium' | 'large' | 'xlarge';
8865
9347
  * - ariaLabel: string opcional para `aria-label` del role=progressbar.
8866
9348
  */
8867
9349
  declare class SuiProgressBar {
9350
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
9351
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
8868
9352
  readonly value: _angular_core.InputSignal<number>;
8869
9353
  readonly color: _angular_core.InputSignal<SuiProgressBarColor>;
8870
9354
  readonly size: _angular_core.InputSignal<SuiProgressBarSize>;
@@ -8993,7 +9477,8 @@ interface SuiRadioGroupItem {
8993
9477
  value(): unknown;
8994
9478
  /** Deshabilitada por input, por form o por el grupo. */
8995
9479
  isDisabled(): boolean;
8996
- /** Elemento que recibe el foco (el host con role=radio). */
9480
+ /** Elemento que recibe el foco: el que tiene role=radio (el host, o el
9481
+ * contenedor interno en sui-radio-label). */
8997
9482
  readonly el: HTMLElement;
8998
9483
  /** Selecciona la opción por su camino normal (emite sus outputs). */
8999
9484
  activateFromGroup(): void;
@@ -9285,11 +9770,14 @@ type SuiRadioLabelSize = 'medium' | 'large' | 'xlarge' | '2xlarge';
9285
9770
  * (group.value() === value() ⇒ checked; click ⇒ group.select(value)).
9286
9771
  * - Standalone: model two-way `checked` + output `selected`.
9287
9772
  * - El sui-radio interno es SOLO visual (pointer-events none en SCSS):
9288
- * todos los clicks/teclas los maneja el host — una sola fuente de
9773
+ * los clicks los maneja el host y las teclas el control — una sola fuente de
9289
9774
  * selección, sin doble-toggle.
9290
9775
  *
9291
- * A11y: host role="radio" + aria-checked + Space/Enter seleccionan.
9292
- * iOS WKWebView fix: touchstart/touchend en host (SUI canon).
9776
+ * A11y: el contenedor interno `.sui-radio-label__control` es el role="radio"
9777
+ * (aria-checked, tabindex, Space/Enter); el Link Button va FUERA de él, como
9778
+ * hermano, para no anidar un botón dentro del radio (axe nested-interactive,
9779
+ * 09-10-2026). El click de toda la fila sigue en el host.
9780
+ * iOS WKWebView fix: touchstart/touchend en el control (SUI canon).
9293
9781
  *
9294
9782
  * Usage:
9295
9783
  * <sui-radio-group [(ngModel)]="plan">
@@ -9303,7 +9791,12 @@ declare class SuiRadioLabel implements OnInit, SuiRadioGroupItem {
9303
9791
  private static _nextId;
9304
9792
  private readonly group;
9305
9793
  private readonly destroyRef;
9306
- readonly el: HTMLElement;
9794
+ private readonly host;
9795
+ private readonly control;
9796
+ /** Elemento con role=radio que recibe el foco (lo usa el grupo para el
9797
+ * roving con flechas). Antes de crear la vista cae al host, que lo contiene:
9798
+ * el orden en el DOM es el mismo. */
9799
+ get el(): HTMLElement;
9307
9800
  protected readonly labelId: string;
9308
9801
  protected readonly descriptionId: string;
9309
9802
  /** Valor que representa esta opción dentro del grupo. */
@@ -9363,7 +9856,7 @@ declare class SuiRadioLabel implements OnInit, SuiRadioGroupItem {
9363
9856
  private select;
9364
9857
  onLinkClick(event: MouseEvent): void;
9365
9858
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiRadioLabel, never>;
9366
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiRadioLabel, "sui-radio-label", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "sublabel": { "alias": "sublabel"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "link": { "alias": "link"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "flip": { "alias": "flip"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "selected": "selected"; "linkClick": "linkClick"; }, never, never, true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
9859
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiRadioLabel, "sui-radio-label", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "sublabel": { "alias": "sublabel"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "link": { "alias": "link"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "flip": { "alias": "flip"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "selected": "selected"; "linkClick": "linkClick"; }, never, never, true, never>;
9367
9860
  }
9368
9861
 
9369
9862
  type SuiRatingAppearance = 'inline' | 'cell' | 'bar' | 'bar-area';
@@ -9504,6 +9997,8 @@ interface SuiRatingCellView {
9504
9997
  * disabled deshabilita clicks/hover igual que readonly=true (ver isInteractive).
9505
9998
  */
9506
9999
  declare class SuiRating implements ControlValueAccessor {
10000
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
10001
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
9507
10002
  private readonly el;
9508
10003
  readonly appearance: _angular_core.InputSignal<SuiRatingAppearance>;
9509
10004
  readonly type: _angular_core.InputSignal<SuiRatingType>;
@@ -9523,14 +10018,16 @@ declare class SuiRating implements ControlValueAccessor {
9523
10018
  * Si pasas un string que NO está en el map, sui-emoji renderea broken image.
9524
10019
  */
9525
10020
  readonly emojis: _angular_core.InputSignal<string[]>;
9526
- readonly ariaLabel: _angular_core.InputSignal<string>;
10021
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
10022
+ protected readonly ariaLabelTexto: _angular_core.Signal<string>;
9527
10023
  /**
9528
10024
  * appearance='bar-area' — texto del reason (textarea "Tell us why!").
9529
10025
  * model<string> para two-way binding. Ignorado en inline/bar.
9530
10026
  */
9531
10027
  readonly reason: _angular_core.ModelSignal<string>;
9532
10028
  /** Placeholder del textarea en bar-area. Figma: "Tell us why!". */
9533
- readonly reasonPlaceholder: _angular_core.InputSignal<string>;
10029
+ readonly reasonPlaceholder: _angular_core.InputSignal<string | null>;
10030
+ protected readonly reasonPlaceholderTexto: _angular_core.Signal<string>;
9534
10031
  /** Filas del textarea en bar-area. El alto mínimo del área de comentario lo
9535
10032
  * fija el CSS (min-height 72px = Figma) para preservar el envelope del card;
9536
10033
  * `rows` solo importa si se quiere un área inicial MÁS alta que ese piso. */
@@ -9690,6 +10187,8 @@ interface SuiRichEditorAction {
9690
10187
  active: boolean;
9691
10188
  }
9692
10189
  declare class SuiRichEditor {
10190
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
10191
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
9693
10192
  /** Layout del toolbar (4 variantes Figma). Default `full`. */
9694
10193
  readonly layout: _angular_core.InputSignal<SuiRichEditorLayout>;
9695
10194
  /** Muestra el divider + botón `more-2-line` (overflow) al final. Default true. */
@@ -9702,11 +10201,13 @@ declare class SuiRichEditor {
9702
10201
  */
9703
10202
  readonly editable: _angular_core.InputSignal<boolean>;
9704
10203
  /** Placeholder del área editable. */
9705
- readonly placeholder: _angular_core.InputSignal<string>;
10204
+ readonly placeholder: _angular_core.InputSignal<string | null>;
10205
+ protected readonly placeholderTexto: _angular_core.Signal<string>;
9706
10206
  /** Contenido HTML del editable. Two-way `[(value)]`. */
9707
10207
  readonly value: _angular_core.ModelSignal<string>;
9708
10208
  /** Label de heading mostrado en el item tipo text (layout full/compact). */
9709
- readonly headingLabel: _angular_core.InputSignal<string>;
10209
+ readonly headingLabel: _angular_core.InputSignal<string | null>;
10210
+ protected readonly headingLabelTexto: _angular_core.Signal<string>;
9710
10211
  /** Label de tamaño de fuente mostrado en el item tipo text. */
9711
10212
  readonly fontSizeLabel: _angular_core.InputSignal<string>;
9712
10213
  /** Emitido cada vez que se acciona un comando del toolbar. */
@@ -9833,11 +10334,14 @@ interface SuiSelectOption<T = any> {
9833
10334
  * naranja, DECISIONES.md §1) replican pixel-exacto el chip del Figma.
9834
10335
  */
9835
10336
  declare class SuiSelect<T = any> implements ControlValueAccessor {
10337
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
10338
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
9836
10339
  readonly size: _angular_core.InputSignal<SuiSelectSize>;
9837
10340
  /** El rótulo no crece con el control: su escala llega a `medium`. Ver la nota
9838
10341
  * en `sui-input`, que hace exactamente lo mismo. */
9839
10342
  protected readonly labelSize: _angular_core.Signal<SuiFormLabelSize>;
9840
- readonly placeholder: _angular_core.InputSignal<string>;
10343
+ readonly placeholder: _angular_core.InputSignal<string | null>;
10344
+ protected readonly placeholderTexto: _angular_core.Signal<string>;
9841
10345
  readonly options: _angular_core.InputSignal<SuiSelectOption<T>[]>;
9842
10346
  readonly disabled: _angular_core.InputSignal<boolean>;
9843
10347
  readonly error: _angular_core.InputSignal<boolean>;
@@ -9978,8 +10482,10 @@ interface SuiSidebarBrandConfig {
9978
10482
  }
9979
10483
  /** Config del search slot (Figma prop search=true). Patrón objeto, como `profile`. */
9980
10484
  interface SuiSidebarSearchConfig {
9981
- /** Placeholder del input. Default 'Search...'. */
10485
+ /** Placeholder del input. Default 'Buscar…'. */
9982
10486
  placeholder?: string;
10487
+ /** Nombre accesible del campo. Omitir → el lector anuncia el placeholder. */
10488
+ ariaLabel?: string;
9983
10489
  /** Shortcut pill dentro del search (ej. '⌘1'). Omitir → sin pill. */
9984
10490
  shortcut?: string;
9985
10491
  }
@@ -9999,6 +10505,8 @@ interface SuiSidebarProfile {
9999
10505
  /** Color del indicator bar / icon activo. */
10000
10506
  type SuiSidebarIndicatorColor = 'information' | 'brand';
10001
10507
  declare class SuiSidebar {
10508
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
10509
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
10002
10510
  /**
10003
10511
  * Estado colapsado (icon-only, 80px). Oculta labels/subtítulos/shortcuts/
10004
10512
  * badges y centra los iconos. Figma variant Collapsed=On. Default false.
@@ -10030,7 +10538,7 @@ declare class SuiSidebar {
10030
10538
  /**
10031
10539
  * Search encima de las secciones:
10032
10540
  * - `false` / `null` (default): sin search
10033
- * - `true`: search con defaults (placeholder 'Search...', sin shortcut)
10541
+ * - `true`: search con defaults (placeholder 'Buscar…', sin shortcut)
10034
10542
  * - objeto `{ placeholder?, shortcut? }`: search configurado
10035
10543
  */
10036
10544
  readonly search: _angular_core.InputSignal<boolean | SuiSidebarSearchConfig | null>;
@@ -10112,10 +10620,11 @@ declare class SuiSidebar {
10112
10620
  protected readonly brandCfg: _angular_core.Signal<SuiSidebarBrandConfig>;
10113
10621
  /**
10114
10622
  * Search normalizado: null → sin search; objeto con defaults aplicados
10115
- * (placeholder 'Search...') cuando search=true o config parcial.
10623
+ * (placeholder 'Buscar…') cuando search=true o config parcial.
10116
10624
  */
10117
10625
  protected readonly searchCfg: _angular_core.Signal<{
10118
10626
  placeholder: string;
10627
+ ariaLabel: string;
10119
10628
  shortcut: string | null;
10120
10629
  } | null>;
10121
10630
  /**
@@ -10205,6 +10714,8 @@ type SuiSliderType = 'single' | 'range';
10205
10714
  */
10206
10715
  type SuiSliderSize = 'medium' | 'large';
10207
10716
  declare class SuiSlider implements ControlValueAccessor {
10717
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
10718
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
10208
10719
  private readonly hostRef;
10209
10720
  readonly type: _angular_core.InputSignal<SuiSliderType>;
10210
10721
  /** `medium` (default, Figma) o `large` (mobile, extensión SUI). */
@@ -10268,7 +10779,7 @@ declare class SuiSlider implements ControlValueAccessor {
10268
10779
  /** Single: el texto de `amount` (lo que se ve) o el valor con la unidad. */
10269
10780
  readonly singleValueText: _angular_core.Signal<string | null>;
10270
10781
  /** Range: cada manija dice cuál es («Precio, mínimo» / «Precio, máximo»). */
10271
- thumbLabel(extremo: 'mínimo' | 'máximo'): string;
10782
+ thumbLabel(cual: 'min' | 'max'): string;
10272
10783
  private showTooltipFor;
10273
10784
  readonly showSingleTooltip: _angular_core.Signal<boolean>;
10274
10785
  readonly showMinTooltip: _angular_core.Signal<boolean>;
@@ -10366,6 +10877,8 @@ type SuiSocialButtonSize = 'medium' | 'large';
10366
10877
  * target="_blank" />
10367
10878
  */
10368
10879
  declare class SuiSocialButton {
10880
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
10881
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
10369
10882
  readonly brand: _angular_core.InputSignal<SuiSocialButtonBrand>;
10370
10883
  readonly variantStyle: _angular_core.InputSignal<SuiSocialButtonStyle>;
10371
10884
  readonly onlyIcon: _angular_core.InputSignal<boolean>;
@@ -10611,6 +11124,8 @@ interface SuiStepperItemView {
10611
11124
  * proyecto, NO existen en los nodos Figma auditados — preservados intactos.
10612
11125
  */
10613
11126
  declare class SuiStepper {
11127
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
11128
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
10614
11129
  readonly variant: _angular_core.InputSignal<SuiStepperVariant>;
10615
11130
  readonly steps: _angular_core.InputSignal<SuiStepperItem[]>;
10616
11131
  readonly count: _angular_core.InputSignal<number>;
@@ -10621,7 +11136,8 @@ declare class SuiStepper {
10621
11136
  readonly errorStep: _angular_core.InputSignal<number | null>;
10622
11137
  readonly size: _angular_core.InputSignal<SuiStepperSize>;
10623
11138
  readonly interactive: _angular_core.InputSignal<boolean>;
10624
- readonly ariaLabel: _angular_core.InputSignal<string>;
11139
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
11140
+ protected readonly ariaLabelTexto: _angular_core.Signal<string>;
10625
11141
  readonly stepClick: _angular_core.OutputEmitterRef<number>;
10626
11142
  /** Ícono del indicador (completed / error): 24 en medium, 20 en los de Figma.
10627
11143
  * Es el indicador mismo, por eso crece; separador y chevron se quedan en 20. */
@@ -11541,11 +12057,14 @@ type SuiTableSize = 'small' | 'medium' | 'large' | 'xlarge';
11541
12057
  * Si no hay template para una columna, renderiza row[column.key] directo.
11542
12058
  */
11543
12059
  declare class SuiTable<T = any> {
12060
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
12061
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
11544
12062
  readonly columns: _angular_core.InputSignal<SuiTableColumn<T>[]>;
11545
12063
  readonly rows: _angular_core.InputSignal<T[]>;
11546
12064
  readonly size: _angular_core.InputSignal<SuiTableSize>;
11547
12065
  readonly loading: _angular_core.InputSignal<boolean>;
11548
- readonly emptyMessage: _angular_core.InputSignal<string>;
12066
+ readonly emptyMessage: _angular_core.InputSignal<string | null>;
12067
+ protected readonly emptyMessageTexto: _angular_core.Signal<string>;
11549
12068
  readonly striped: _angular_core.InputSignal<boolean>;
11550
12069
  readonly selectable: _angular_core.InputSignal<boolean>;
11551
12070
  readonly rowKey: _angular_core.InputSignal<keyof T | ((row: T) => any) | undefined>;
@@ -11929,6 +12448,8 @@ type SuiTagSize = 'medium' | 'large' | 'xlarge';
11929
12448
  * reporte de auditoría estaba vacío.
11930
12449
  */
11931
12450
  declare class SuiTag {
12451
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
12452
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
11932
12453
  /** Visual style. `stroke` = white bg + soft border; `gray` = weak-50 bg, no border. Default stroke. */
11933
12454
  readonly tagStyle: _angular_core.InputSignal<SuiTagStyle>;
11934
12455
  /** Tamaño: medium 24 (default, Figma) · large 32 · xlarge 40 (mobile). */
@@ -11953,7 +12474,8 @@ declare class SuiTag {
11953
12474
  /** Estado deshabilitado: override de tokens a disabled-300, pointer-events none. */
11954
12475
  readonly disabled: _angular_core.InputSignal<boolean>;
11955
12476
  /** aria-label opcional para el botón de cierre. Default 'Quitar'. */
11956
- readonly dismissLabel: _angular_core.InputSignal<string>;
12477
+ readonly dismissLabel: _angular_core.InputSignal<string | null>;
12478
+ protected readonly dismissLabelTexto: _angular_core.Signal<string>;
11957
12479
  /** Emitido al clickear el botón de cierre (solo si dismissible y no disabled). */
11958
12480
  readonly dismiss: _angular_core.OutputEmitterRef<void>;
11959
12481
  /** True cuando hay sublabel no vacío para renderizar el span secundario. */
@@ -12060,8 +12582,12 @@ type SuiTagInputSize = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';
12060
12582
  * - allowDuplicates / maxTags / addOnBlur.
12061
12583
  */
12062
12584
  declare class SuiTagInput implements ControlValueAccessor {
12585
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
12586
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
12587
+ protected readonly rellenar: typeof rellenarSuiTexto;
12063
12588
  readonly size: _angular_core.InputSignal<SuiTagInputSize>;
12064
- readonly placeholder: _angular_core.InputSignal<string>;
12589
+ readonly placeholder: _angular_core.InputSignal<string | null>;
12590
+ protected readonly placeholderTexto: _angular_core.Signal<string>;
12065
12591
  readonly disabled: _angular_core.InputSignal<boolean>;
12066
12592
  readonly error: _angular_core.InputSignal<boolean>;
12067
12593
  readonly errorMessage: _angular_core.InputSignal<string | null>;
@@ -12459,6 +12985,8 @@ type SuiTimePickerStatusType = 'available' | 'busy' | 'in-meeting' | 'offline';
12459
12985
  * @input disabled
12460
12986
  */
12461
12987
  declare class SuiTimePickerStatus {
12988
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
12989
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
12462
12990
  readonly type: _angular_core.InputSignal<SuiTimePickerStatusType>;
12463
12991
  readonly label: _angular_core.InputSignal<string | null>;
12464
12992
  readonly selected: _angular_core.InputSignal<boolean>;
@@ -12594,6 +13122,8 @@ interface ColumnItem {
12594
13122
  * filas de 44 con texto 16 y Cancelar/Aplicar en large. */
12595
13123
  type SuiTimePickerSize = 'small' | 'medium' | 'large' | 'xlarge';
12596
13124
  declare class SuiTimePicker implements ControlValueAccessor {
13125
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
13126
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
12597
13127
  readonly label: _angular_core.InputSignal<string | null>;
12598
13128
  readonly sublabel: _angular_core.InputSignal<string | null>;
12599
13129
  readonly required: _angular_core.InputSignal<boolean>;
@@ -12602,7 +13132,8 @@ declare class SuiTimePicker implements ControlValueAccessor {
12602
13132
  readonly errorMessage: _angular_core.InputSignal<string | null>;
12603
13133
  readonly error: _angular_core.InputSignal<boolean>;
12604
13134
  /** Texto del campo sin hora. Imperativo con tuteo (dueño, 05-10-2026, P4 a). */
12605
- readonly placeholder: _angular_core.InputSignal<string>;
13135
+ readonly placeholder: _angular_core.InputSignal<string | null>;
13136
+ protected readonly placeholderTexto: _angular_core.Signal<string>;
12606
13137
  readonly disabled: _angular_core.InputSignal<boolean>;
12607
13138
  /**
12608
13139
  * Alto del campo: small 36 · medium 40 (default) · large 48 (extensión SUI,
@@ -12809,6 +13340,8 @@ declare class SuiToastService {
12809
13340
  * <sui-toast-outlet />
12810
13341
  */
12811
13342
  declare class SuiToastOutlet implements OnDestroy {
13343
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
13344
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
12812
13345
  private readonly svc;
12813
13346
  private readonly tabBar;
12814
13347
  readonly toastsByPosition: _angular_core.Signal<Record<SuiToastPosition, SuiToastItem[]>>;
@@ -13029,6 +13562,8 @@ declare class SuiTopbarButton {
13029
13562
  * <sui-topbar-user name="Arthur" avatar="https://..." [verified]="true" [open]="menuOpen()" />
13030
13563
  */
13031
13564
  declare class SuiTopbarUser {
13565
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
13566
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
13032
13567
  /** Nombre visible (Figma editName). Vacío → chip solo-avatar (Figma name=false). */
13033
13568
  readonly name: _angular_core.InputSignal<string>;
13034
13569
  /**
@@ -13079,8 +13614,10 @@ interface SuiTopbarAction {
13079
13614
  }
13080
13615
  /** Config del search slot. Patrón objeto + boolean shorthand (como sui-sidebar). */
13081
13616
  interface SuiTopbarSearchConfig {
13082
- /** Placeholder del input expandido. Default 'Buscar...'. */
13617
+ /** Placeholder del input expandido. Default 'Buscar…'. */
13083
13618
  placeholder?: string;
13619
+ /** Nombre accesible del campo. Omitir → el lector anuncia el placeholder. */
13620
+ ariaLabel?: string;
13084
13621
  /** Shortcut pill dentro del input (ej. '⌘1') — renderiza <sui-kbd>. */
13085
13622
  shortcut?: string;
13086
13623
  /**
@@ -13142,7 +13679,7 @@ interface SuiTopbarUserConfig {
13142
13679
  * Usage:
13143
13680
  * <sui-topbar
13144
13681
  * [items]="items" activeValue="dashboard"
13145
- * [search]="{ placeholder: 'Buscar...', shortcut: '⌘1' }"
13682
+ * [search]="{ placeholder: 'Buscar…', shortcut: '⌘1' }"
13146
13683
  * [actions]="[{ value: 'quick', icon: 'flashlight-line' },
13147
13684
  * { value: 'notifications', icon: 'notification-3-line', dot: true }]"
13148
13685
  * [user]="{ name: 'Sophia', avatar: { initials: 'S', color: 'yellow' } }"
@@ -13151,6 +13688,8 @@ interface SuiTopbarUserConfig {
13151
13688
  * </sui-topbar>
13152
13689
  */
13153
13690
  declare class SuiTopbar {
13691
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
13692
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
13154
13693
  readonly items: _angular_core.InputSignal<SuiTopbarEntry[]>;
13155
13694
  /** value del item activo (bg weak-50 + label strong-950 + icon accent). */
13156
13695
  readonly activeValue: _angular_core.InputSignal<string | null>;
@@ -13181,6 +13720,7 @@ declare class SuiTopbar {
13181
13720
  /** Search normalizado: null → sin search. */
13182
13721
  protected readonly searchCfg: _angular_core.Signal<{
13183
13722
  placeholder: string;
13723
+ ariaLabel: string;
13184
13724
  shortcut: string | null;
13185
13725
  compact: boolean;
13186
13726
  } | null>;
@@ -13315,6 +13855,8 @@ declare class SuiTooltip {
13315
13855
  * envuelve dentro de `max-width` (200px small / 280px medium).
13316
13856
  */
13317
13857
  declare class SuiTooltipPanel {
13858
+ /** Textos de la librería (`provideSuiTextos`); cambian en vivo con el idioma de la app. */
13859
+ protected readonly textos: _angular_core.Signal<_ajuarezso_sui_design_system.SuiTextos>;
13318
13860
  /** Text-only (size small/medium). En size=large se ignora — usar title/description. */
13319
13861
  readonly text: _angular_core.InputSignal<string>;
13320
13862
  readonly position: _angular_core.InputSignal<SuiTooltipPosition>;
@@ -13335,5 +13877,5 @@ declare class SuiTooltipPanel {
13335
13877
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiTooltipPanel, "sui-tooltip-panel", never, { "text": { "alias": "text"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "showArrow": { "alias": "showArrow"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; }, { "dismissed": "dismissed"; }, never, never, true, never>;
13336
13878
  }
13337
13879
 
13338
- export { DAY_LABELS_ES, DEFAULT_DURATION_PRESETS, DEFAULT_PRESETS, EMPTY_STATE_FOX_EMOJI, SUI_BRAND_LOGO_COMPANIES, SUI_CHART_LEGEND_COLORS, SUI_CHART_LEGEND_HEX, SUI_CHART_SERIES_COLORS, SUI_COLOR_DOT_COLORS, SUI_COLOR_DOT_HEX, SUI_CUSTOM_ICONS, SUI_EMOJI_MAP, SUI_EMOJI_STATIC, SUI_FLAG_NAMES, SUI_HEX_TO_COLOR, SUI_IMAGE_UPLOAD_ACCEPT, SUI_KEY_ICON_COLORS, SUI_KEY_ICON_SIZES, SUI_NAVBAR_VISIBILITY, SUI_PASSWORD_STRENGTH_DEFAULT_CONDITIONS, SUI_PASSWORD_STRENGTH_DEFAULT_LEVEL_LABELS, SUI_PAYMENT_ICON_TYPES, SUI_PRODUCT_FALLBACK_COLORS, SUI_TAB_BAR, SuiAccordion, SuiAccordionContent, SuiActivityFeed, SuiActivityFilter, SuiAlert, SuiAppStoreBadge, SuiAvatar, SuiAvatarGroup, SuiBadge, SuiBanner, SuiBrandLogo, SuiBreadcrumbItem, SuiBreadcrumbs, SuiButton, SuiButtonGroup, SuiButtonGroupItem, SuiCard, SuiChartLegend, SuiChartLegendDot, SuiCheckbox, SuiCheckboxCard, SuiCheckboxLabel, SuiCircularProgressBar, SuiColorDot, SuiColorPicker, SuiCommandMenuFooter, SuiCommandMenuItem, SuiCommandMenuSearch, SuiCompactAvatarGroup, SuiCompactButton, SuiCompactSelect, SuiCompactSelectForInput, SuiContentCard, SuiContentDivider, SuiContentLabel, SuiCounterInput, SuiDateSelector, SuiDatepicker, SuiDayCell, SuiDayLabel, SuiDivider, SuiDrawerFooter, SuiDrawerHeader, SuiDropdownCaption, SuiDropdownItem, SuiDropdownMenu, SuiDropdownPanel, SuiDropdownSearch, SuiEmoji, SuiEmptyState, SuiFancyButton, SuiFileIcon, SuiFileUpload, SuiFileUploadCard, SuiFilterBar, SuiFilterItem, SuiFilterPanelFooter, SuiFilterPanelHeader, SuiFlag, SuiFormHint, SuiFormLabel, SuiHref, SuiIcon, SuiImageUpload, SuiImageUploadProfile, SuiImgRetry, SuiInlineInput, SuiInlineSelect, SuiInput, SuiIntegrationSwitch, SuiKbd, SuiKeyIcon, SuiLinkButton, SuiLogo, SuiModal, SuiModalFooter, SuiModalHeader, SuiModalSheet, SuiNotification, SuiNotificationFooter, SuiNotificationTabMenu, SuiOtpInput, SuiPageHeader, SuiPagination, SuiPasswordStrength, SuiPaymentIcon, SuiPeriodRange, SuiPopover, SuiProductCard, SuiProgressBar, SuiProgressBarLabel, SuiRadio, SuiRadioCard, SuiRadioGroup, SuiRadioLabel, SuiRating, SuiRichEditor, SuiRichEditorItem, SuiSegmentedControl, SuiSelect, SuiSidebar, SuiSlider, SuiSocialButton, SuiStatusBadge, SuiStepper, SuiStoreCard, SuiSwitch, SuiSwitchCard, SuiSwitchLabel, SuiTabChips, SuiTabMenuHorizontal, SuiTabMenuVertical, SuiTable, SuiTableCellDirective, SuiTag, SuiTagInput, SuiTextarea, SuiTimePicker, SuiTimePickerDuration, SuiTimePickerItem, SuiTimePickerStatus, SuiToastOutlet, SuiToastService, SuiTooltip, SuiTooltipPanel, SuiTopbar, SuiTopbarButton, SuiTopbarItem, SuiTopbarUser, SuiToque, buildCalendarGrid, buildHourList, buildMinuteList, esImagenAceptada, formatDateInput, formatDateLong, formatDateShort, formatMonthYear, formatTime, isSameTime, normalizeHex, pad2, parseTime, to12h, to24h };
13339
- export type { CalendarCell, CalendarRow, DatepickerPreset, DatepickerPresetId, SuiAccordionFlipIcon, SuiActivityAvatarRef, SuiActivityFeedItem, SuiActivityFile, SuiActivityFilterState, SuiActivityTask, SuiActivityTaskState, SuiAlertAction, SuiAlertRole, SuiAlertSize, SuiAlertStyle, SuiAlertVariant, SuiAppStoreBadgeAppearance, SuiAppStoreBadgeCompany, SuiAvatarColor, SuiAvatarConfig, SuiAvatarGroupItem, SuiAvatarSize, SuiAvatarStatus, SuiAvatarTopBadge, SuiBadgeColor, SuiBadgeConfig, SuiBadgeSize, SuiBadgeType, SuiBadgeVariant, SuiBannerStyle, SuiBannerVariant, SuiBrandLogoCompany, SuiBrandLogoSize, SuiBrandLogoStyle, SuiBreadcrumbDivider, SuiBreadcrumbEntry, SuiButtonColor, SuiButtonGroupEntry, SuiButtonGroupItemSize, SuiButtonSize, SuiButtonVariant, SuiCardSize, SuiCardVariant, SuiChartLegendColor, SuiChartLegendItem, SuiCheckboxCardType, SuiCheckboxLabelSize, SuiCheckboxSize, SuiCircularProgressBarColor, SuiCircularProgressBarSize, SuiColorDotColor, SuiColorDotSize, SuiColorPickerSize, SuiCommandMenuItemSize, SuiCommandMenuItemType, SuiCompactAvatarGroupAppearance, SuiCompactAvatarGroupSize, SuiCompactButtonSize, SuiCompactButtonStyle, SuiCompactSelectForInputItem, SuiCompactSelectForInputSize, SuiCompactSelectItem, SuiCompactSelectSize, SuiCompactSelectType, SuiContentCardSize, SuiContentCardType, SuiContentDividerItem, SuiContentDividerType, SuiContentLabelBadgePlacement, SuiContentLabelSize, SuiContentLabelType, SuiCounterInputSize, SuiDateRange, SuiDateSelectorSize, SuiDatepickerCalendars, SuiDatepickerMode, SuiDatepickerSize, SuiDayCellSize, SuiDayCellType, SuiDividerOrientation, SuiDrawerFooterSize, SuiDrawerFooterType, SuiDrawerHeaderSize, SuiDrawerHeaderType, SuiDropdownItemMode, SuiDropdownItemSize, SuiDropdownMenuPopupRole, SuiDropdownMenuPosition, SuiEmojiName, SuiEmojiSize, SuiEmptyStateAction, SuiEmptyStateSize, SuiFancyButtonSize, SuiFancyButtonType, SuiFileIconColor, SuiFileIconSize, SuiFileUploadCardFile, SuiFileUploadCardState, SuiFileUploadSize, SuiFilterItemState, SuiFlagName, SuiFlagSize, SuiFooterButtonConfig, SuiFormHintVariant, SuiFormLabelSize, SuiImageUploadProfileAlignment, SuiImageUploadProfileLabels, SuiImageUploadProfileType, SuiImageUploadShape, SuiImageUploadSize, SuiInlineSelectItem, SuiInlineSelectType, SuiInputEnterKeyHint, SuiInputMode, SuiInputSize, SuiInputType, SuiIntegrationManageConfig, SuiIntegrationSwitchAppearance, SuiIntegrationSwitchSize, SuiIntegrationSwitchType, SuiKbdVariant, SuiKeyIconColor, SuiKeyIconSize, SuiKeyIconStyle, SuiLinkButtonSize, SuiLinkButtonVariant, SuiLinkConfig, SuiLogoOrientation, SuiLogoSize, SuiModalHeaderVariant, SuiModalIconVariant, SuiModalSize, SuiModalStatusAlignment, SuiNavbarVisibility, SuiNotificationStyle, SuiNotificationTab, SuiNotificationVariant, SuiOtpInputSize, SuiOtpInputType, SuiPaginationInfoFormat, SuiPaginationSize, SuiPaginationType, SuiPasswordStrengthCondition, SuiPasswordStrengthLevel, SuiPaymentIconSize, SuiPaymentIconType, SuiPeriodRangeSize, SuiPopoverFooter, SuiPopoverPosition, SuiPopoverSize, SuiProductCardFallback, SuiProductCardImage, SuiProductCardSize, SuiProgressBarColor, SuiProgressBarLabelType, SuiProgressBarSize, SuiRadioCardType, SuiRadioGroupItem, SuiRadioLabelSize, SuiRadioSize, SuiRadioValue, SuiRatingAlignment, SuiRatingAppearance, SuiRatingReviewLink, SuiRatingSize, SuiRatingType, SuiRichEditorAction, SuiRichEditorCommand, SuiRichEditorItemState, SuiRichEditorItemType, SuiRichEditorLayout, SuiSegmentedControlItem, SuiSegmentedControlSize, SuiSelectOption, SuiSelectSize, SuiSelectType, SuiSidebarBrandConfig, SuiSidebarIndicatorColor, SuiSidebarItem, SuiSidebarMobileMode, SuiSidebarProfile, SuiSidebarSearchConfig, SuiSliderSize, SuiSliderType, SuiSocialButtonBrand, SuiSocialButtonSize, SuiSocialButtonStyle, SuiStatusBadgeAppearance, SuiStatusBadgeSize, SuiStatusBadgeStatus, SuiStepperItem, SuiStepperSize, SuiStepperState, SuiStepperVariant, SuiStoreCardData, SuiStoreCardSize, SuiSwitchCardType, SuiSwitchLabelSize, SuiSwitchSize, SuiTabBar, SuiTabChipItem, SuiTabChipsSize, SuiTabMenuHorizontalItem, SuiTabMenuHorizontalSize, SuiTabMenuVerticalItem, SuiTabMenuVerticalStyle, SuiTableCellMisc, SuiTableCellPriority, SuiTableColumn, SuiTableSize, SuiTagInputSize, SuiTagSize, SuiTagStyle, SuiTextareaSize, SuiTimeDurationPreset, SuiTimeFormat, SuiTimePeriod, SuiTimePickerItemDirection, SuiTimePickerSize, SuiTimePickerStatusType, SuiTimeValue, SuiToastAction, SuiToastData, SuiToastItem, SuiToastPosition, SuiToastStyle, SuiToastVariant, SuiTooltipLargeData, SuiTooltipPosition, SuiTooltipSize, SuiTooltipTheme, SuiTooltipThemeInput, SuiTopbarAccent, SuiTopbarAction, SuiTopbarEntry, SuiTopbarSearchConfig, SuiTopbarUserConfig };
13880
+ export { DAY_LABELS_ES, DEFAULT_DURATION_PRESETS, DEFAULT_PRESETS, EMPTY_STATE_FOX_EMOJI, SUI_BRAND_LOGO_COMPANIES, SUI_CHART_LEGEND_COLORS, SUI_CHART_LEGEND_HEX, SUI_CHART_SERIES_COLORS, SUI_COLOR_DOT_COLORS, SUI_COLOR_DOT_HEX, SUI_CUSTOM_ICONS, SUI_EMOJI_MAP, SUI_EMOJI_STATIC, SUI_FLAG_NAMES, SUI_HEX_TO_COLOR, SUI_IMAGE_UPLOAD_ACCEPT, SUI_KEY_ICON_COLORS, SUI_KEY_ICON_SIZES, SUI_NAVBAR_VISIBILITY, SUI_PASSWORD_STRENGTH_DEFAULT_CONDITIONS, SUI_PASSWORD_STRENGTH_DEFAULT_LEVEL_LABELS, SUI_PAYMENT_ICON_TYPES, SUI_PRODUCT_FALLBACK_COLORS, SUI_TAB_BAR, SUI_TEXTOS, SUI_TEXTOS_ES, SuiAccordion, SuiAccordionContent, SuiActivityFeed, SuiActivityFilter, SuiAlert, SuiAppStoreBadge, SuiAvatar, SuiAvatarGroup, SuiBadge, SuiBanner, SuiBrandLogo, SuiBreadcrumbItem, SuiBreadcrumbs, SuiButton, SuiButtonGroup, SuiButtonGroupItem, SuiCard, SuiChartLegend, SuiChartLegendDot, SuiCheckbox, SuiCheckboxCard, SuiCheckboxLabel, SuiCircularProgressBar, SuiColorDot, SuiColorPicker, SuiCommandMenuFooter, SuiCommandMenuItem, SuiCommandMenuSearch, SuiCompactAvatarGroup, SuiCompactButton, SuiCompactSelect, SuiCompactSelectForInput, SuiContentCard, SuiContentDivider, SuiContentLabel, SuiCounterInput, SuiDateSelector, SuiDatepicker, SuiDayCell, SuiDayLabel, SuiDivider, SuiDrawerFooter, SuiDrawerHeader, SuiDropdownCaption, SuiDropdownItem, SuiDropdownMenu, SuiDropdownPanel, SuiDropdownSearch, SuiEmoji, SuiEmptyState, SuiFancyButton, SuiFileIcon, SuiFileUpload, SuiFileUploadCard, SuiFilterBar, SuiFilterItem, SuiFilterPanelFooter, SuiFilterPanelHeader, SuiFlag, SuiFormHint, SuiFormLabel, SuiHref, SuiIcon, SuiImageUpload, SuiImageUploadProfile, SuiImgRetry, SuiInlineInput, SuiInlineSelect, SuiInput, SuiIntegrationSwitch, SuiKbd, SuiKeyIcon, SuiLinkButton, SuiLogo, SuiModal, SuiModalFooter, SuiModalHeader, SuiModalSheet, SuiNotification, SuiNotificationFooter, SuiNotificationTabMenu, SuiOtpInput, SuiPageHeader, SuiPagination, SuiPasswordStrength, SuiPaymentIcon, SuiPeriodRange, SuiPopover, SuiProductCard, SuiProgressBar, SuiProgressBarLabel, SuiRadio, SuiRadioCard, SuiRadioGroup, SuiRadioLabel, SuiRating, SuiRichEditor, SuiRichEditorItem, SuiSegmentedControl, SuiSelect, SuiSidebar, SuiSlider, SuiSocialButton, SuiStatusBadge, SuiStepper, SuiStoreCard, SuiSwitch, SuiSwitchCard, SuiSwitchLabel, SuiTabChips, SuiTabMenuHorizontal, SuiTabMenuVertical, SuiTable, SuiTableCellDirective, SuiTag, SuiTagInput, SuiTextarea, SuiTimePicker, SuiTimePickerDuration, SuiTimePickerItem, SuiTimePickerStatus, SuiToastOutlet, SuiToastService, SuiTooltip, SuiTooltipPanel, SuiTopbar, SuiTopbarButton, SuiTopbarItem, SuiTopbarUser, SuiToque, buildCalendarGrid, buildHourList, buildMinuteList, esImagenAceptada, formatDateInput, formatDateLong, formatDateShort, formatMonthYear, formatTime, injectSuiTextos, isSameTime, mezclarSuiTextos, normalizeHex, pad2, parseTime, provideSuiTextos, rellenarSuiTexto, to12h, to24h };
13881
+ export type { CalendarCell, CalendarRow, DatepickerPreset, DatepickerPresetId, SuiAccordionFlipIcon, SuiActivityAvatarRef, SuiActivityFeedItem, SuiActivityFile, SuiActivityFilterState, SuiActivityTask, SuiActivityTaskState, SuiAlertAction, SuiAlertRole, SuiAlertSize, SuiAlertStyle, SuiAlertVariant, SuiAppStoreBadgeAppearance, SuiAppStoreBadgeCompany, SuiAvatarColor, SuiAvatarConfig, SuiAvatarGroupItem, SuiAvatarSize, SuiAvatarStatus, SuiAvatarTopBadge, SuiBadgeColor, SuiBadgeConfig, SuiBadgeSize, SuiBadgeType, SuiBadgeVariant, SuiBannerStyle, SuiBannerVariant, SuiBrandLogoCompany, SuiBrandLogoSize, SuiBrandLogoStyle, SuiBreadcrumbDivider, SuiBreadcrumbEntry, SuiButtonColor, SuiButtonGroupEntry, SuiButtonGroupItemSize, SuiButtonSize, SuiButtonVariant, SuiCardSize, SuiCardVariant, SuiChartLegendColor, SuiChartLegendItem, SuiCheckboxCardType, SuiCheckboxLabelSize, SuiCheckboxSize, SuiCircularProgressBarColor, SuiCircularProgressBarSize, SuiColorDotColor, SuiColorDotSize, SuiColorPickerSize, SuiCommandMenuItemSize, SuiCommandMenuItemType, SuiCompactAvatarGroupAppearance, SuiCompactAvatarGroupSize, SuiCompactButtonSize, SuiCompactButtonStyle, SuiCompactSelectForInputItem, SuiCompactSelectForInputSize, SuiCompactSelectItem, SuiCompactSelectSize, SuiCompactSelectType, SuiContentCardSize, SuiContentCardType, SuiContentDividerItem, SuiContentDividerType, SuiContentLabelBadgePlacement, SuiContentLabelSize, SuiContentLabelType, SuiCounterInputSize, SuiDateRange, SuiDateSelectorSize, SuiDatepickerCalendars, SuiDatepickerMode, SuiDatepickerSize, SuiDayCellSize, SuiDayCellType, SuiDividerOrientation, SuiDrawerFooterSize, SuiDrawerFooterType, SuiDrawerHeaderSize, SuiDrawerHeaderType, SuiDropdownItemMode, SuiDropdownItemSize, SuiDropdownMenuPopupRole, SuiDropdownMenuPosition, SuiEmojiName, SuiEmojiSize, SuiEmptyStateAction, SuiEmptyStateSize, SuiFancyButtonSize, SuiFancyButtonType, SuiFileIconColor, SuiFileIconSize, SuiFileUploadCardFile, SuiFileUploadCardState, SuiFileUploadSize, SuiFilterItemState, SuiFlagName, SuiFlagSize, SuiFooterButtonConfig, SuiFormHintVariant, SuiFormLabelSize, SuiImageUploadProfileAlignment, SuiImageUploadProfileLabels, SuiImageUploadProfileType, SuiImageUploadShape, SuiImageUploadSize, SuiInlineSelectItem, SuiInlineSelectType, SuiInputEnterKeyHint, SuiInputMode, SuiInputSize, SuiInputType, SuiIntegrationManageConfig, SuiIntegrationSwitchAppearance, SuiIntegrationSwitchSize, SuiIntegrationSwitchType, SuiKbdVariant, SuiKeyIconColor, SuiKeyIconSize, SuiKeyIconStyle, SuiLinkButtonSize, SuiLinkButtonVariant, SuiLinkConfig, SuiLogoOrientation, SuiLogoSize, SuiModalHeaderVariant, SuiModalIconVariant, SuiModalSize, SuiModalStatusAlignment, SuiNavbarVisibility, SuiNotificationStyle, SuiNotificationTab, SuiNotificationVariant, SuiOtpInputSize, SuiOtpInputType, SuiPaginationInfoFormat, SuiPaginationSize, SuiPaginationType, SuiPasswordStrengthCondition, SuiPasswordStrengthLevel, SuiPaymentIconSize, SuiPaymentIconType, SuiPeriodRangeSize, SuiPopoverFooter, SuiPopoverPosition, SuiPopoverSize, SuiProductCardFallback, SuiProductCardImage, SuiProductCardSize, SuiProgressBarColor, SuiProgressBarLabelType, SuiProgressBarSize, SuiRadioCardType, SuiRadioGroupItem, SuiRadioLabelSize, SuiRadioSize, SuiRadioValue, SuiRatingAlignment, SuiRatingAppearance, SuiRatingReviewLink, SuiRatingSize, SuiRatingType, SuiRichEditorAction, SuiRichEditorCommand, SuiRichEditorItemState, SuiRichEditorItemType, SuiRichEditorLayout, SuiSegmentedControlItem, SuiSegmentedControlSize, SuiSelectOption, SuiSelectSize, SuiSelectType, SuiSidebarBrandConfig, SuiSidebarIndicatorColor, SuiSidebarItem, SuiSidebarMobileMode, SuiSidebarProfile, SuiSidebarSearchConfig, SuiSliderSize, SuiSliderType, SuiSocialButtonBrand, SuiSocialButtonSize, SuiSocialButtonStyle, SuiStatusBadgeAppearance, SuiStatusBadgeSize, SuiStatusBadgeStatus, SuiStepperItem, SuiStepperSize, SuiStepperState, SuiStepperVariant, SuiStoreCardData, SuiStoreCardSize, SuiSwitchCardType, SuiSwitchLabelSize, SuiSwitchSize, SuiTabBar, SuiTabChipItem, SuiTabChipsSize, SuiTabMenuHorizontalItem, SuiTabMenuHorizontalSize, SuiTabMenuVerticalItem, SuiTabMenuVerticalStyle, SuiTableCellMisc, SuiTableCellPriority, SuiTableColumn, SuiTableSize, SuiTagInputSize, SuiTagSize, SuiTagStyle, SuiTextareaSize, SuiTextos, SuiTextosFuente, SuiTextosParciales, SuiTimeDurationPreset, SuiTimeFormat, SuiTimePeriod, SuiTimePickerItemDirection, SuiTimePickerSize, SuiTimePickerStatusType, SuiTimeValue, SuiToastAction, SuiToastData, SuiToastItem, SuiToastPosition, SuiToastStyle, SuiToastVariant, SuiTooltipLargeData, SuiTooltipPosition, SuiTooltipSize, SuiTooltipTheme, SuiTooltipThemeInput, SuiTopbarAccent, SuiTopbarAction, SuiTopbarEntry, SuiTopbarSearchConfig, SuiTopbarUserConfig };