@ajuarezso/sui-design-system 0.25.1 → 0.26.0

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 (68) 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-header/README.md +10 -0
  38. package/docs/sui-modal-sheet/README.md +24 -12
  39. package/docs/sui-notification/README.md +12 -0
  40. package/docs/sui-notification-footer/README.md +14 -2
  41. package/docs/sui-notification-tab-menu/README.md +11 -1
  42. package/docs/sui-otp-input/README.md +12 -1
  43. package/docs/sui-pagination/README.md +16 -0
  44. package/docs/sui-password-strength/README.md +21 -3
  45. package/docs/sui-popover/README.md +15 -2
  46. package/docs/sui-progress-bar/README.md +10 -0
  47. package/docs/sui-radio/README.md +4 -1
  48. package/docs/sui-radio-label/README.md +5 -2
  49. package/docs/sui-rating/README.md +16 -2
  50. package/docs/sui-rich-editor/README.md +25 -2
  51. package/docs/sui-select/README.md +11 -1
  52. package/docs/sui-sidebar/README.md +18 -1
  53. package/docs/sui-slider/README.md +11 -0
  54. package/docs/sui-social-button/README.md +10 -0
  55. package/docs/sui-stepper/README.md +12 -1
  56. package/docs/sui-tab-chips/README.md +11 -0
  57. package/docs/sui-table/README.md +15 -1
  58. package/docs/sui-tag/README.md +11 -1
  59. package/docs/sui-tag-input/README.md +12 -1
  60. package/docs/sui-time-picker/README.md +19 -1
  61. package/docs/sui-toast/README.md +11 -0
  62. package/docs/sui-tooltip/README.md +10 -0
  63. package/docs/sui-topbar/README.md +15 -2
  64. package/docs/sui-topbar-user/README.md +10 -0
  65. package/fesm2022/ajuarezso-sui-design-system.mjs +1030 -462
  66. package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
  67. package/package.json +1 -1
  68. package/types/ajuarezso-sui-design-system.d.ts +703 -138
@@ -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
 
@@ -23,6 +24,328 @@ interface SuiTabBar {
23
24
  }
24
25
  declare const SUI_TAB_BAR: InjectionToken<SuiTabBar>;
25
26
 
27
+ /**
28
+ * El arreglo de iOS para el `:active` de todo lo que se toca, con listeners
29
+ * PASIVOS (16-10-2026, MASTER-88).
30
+ *
31
+ * iOS WKWebView necesita un listener de `touchstart` en el elemento para
32
+ * pintar y soltar `:active` a tiempo (sin él se queda pegado 300-500 ms), y el
33
+ * `blur()` en `touchend` suelta el foco. Hasta acá cada componente lo hacía con
34
+ * bindings `(touchstart)` / `(touchend)` de Angular, que se registran NO
35
+ * pasivos: con el dedo encima de una card el navegador tiene que esperar al
36
+ * JavaScript antes de empezar el scroll. En el checkout de Master Pedidos, con
37
+ * nueve radio-cards apiladas, el scroll se sentía trabado.
38
+ *
39
+ * Pasivos hacen exactamente lo mismo (ninguno llamaba a `preventDefault`) sin
40
+ * frenar el scroll. En el host: `hostDirectives: [SuiToque]`; en un elemento
41
+ * de la plantilla: el atributo `suiToque`. No se vuelven a escribir los
42
+ * bindings a mano: `sui-toque.spec.ts` falla si aparece uno.
43
+ */
44
+ declare class SuiToque {
45
+ constructor();
46
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiToque, never>;
47
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SuiToque, "[suiToque]", never, {}, {}, never, never, true, never>;
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
+
26
349
  type SuiBadgeColor = 'gray' | 'blue' | 'orange' | 'red' | 'green' | 'yellow' | 'purple' | 'sky' | 'pink' | 'teal';
27
350
  type SuiBadgeVariant = 'filled' | 'light' | 'lighter' | 'stroke' | 'dark';
28
351
  type SuiBadgeSize = 'small' | 'medium' | 'large' | 'xlarge';
@@ -640,7 +963,10 @@ interface SuiActivityFile {
640
963
  name: string;
641
964
  /** Etiqueta corta del peso. Ej: "(4mb)" — formatear desde el consumer. */
642
965
  size?: string;
643
- /** 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)`. */
644
970
  href?: string;
645
971
  }
646
972
  interface SuiActivityTask {
@@ -793,6 +1119,9 @@ type SuiActivityFeedItem = (SuiActivityFeedItemBase & {
793
1119
  * (fileDownload)="onDownload($event)" (reply)="onReply($event)" />
794
1120
  */
795
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;
796
1125
  readonly items: _angular_core.InputSignal<readonly SuiActivityFeedItem[]>;
797
1126
  /** Click en el 3-dot menu trailing de cualquier row. */
798
1127
  readonly action: _angular_core.OutputEmitterRef<{
@@ -875,7 +1204,7 @@ declare class SuiActivityFilter {
875
1204
  readonly state: _angular_core.Signal<SuiActivityFilterState>;
876
1205
  onClick(event: Event): void;
877
1206
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiActivityFilter, never>;
878
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiActivityFilter, "sui-activity-filter", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["*"], true, never>;
1207
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiActivityFilter, "sui-activity-filter", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["*"], true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
879
1208
  }
880
1209
 
881
1210
  type SuiAlertVariant = 'info' | 'success' | 'warning' | 'error' | 'feature';
@@ -995,6 +1324,8 @@ interface SuiAlertAction {
995
1324
  * large → padding 14px 14px 16px, gap 12, radius-12 (default — full layout)
996
1325
  */
997
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>;
998
1329
  readonly variant: _angular_core.InputSignal<SuiAlertVariant>;
999
1330
  readonly variantStyle: _angular_core.InputSignal<SuiAlertStyle>;
1000
1331
  readonly size: _angular_core.InputSignal<SuiAlertSize>;
@@ -1054,7 +1385,7 @@ declare class SuiAlert {
1054
1385
  * conservar el footprint del icono: xsmall (icon 16) → compact `medium`;
1055
1386
  * small/large (icon 20) → `large`; xlarge (icon 24) → `xlarge`.
1056
1387
  */
1057
- readonly closeButtonSize: _angular_core.Signal<"medium" | "large" | "xlarge">;
1388
+ readonly closeButtonSize: _angular_core.Signal<"large" | "xlarge" | "medium">;
1058
1389
  /**
1059
1390
  * Icon size per size variant (leading + close icons).
1060
1391
  * Figma: xsmall=16px, small=20px, large=20px. Verified 2026-05-29.
@@ -1197,6 +1528,9 @@ interface SuiAvatarGroupItem {
1197
1528
  alt?: string;
1198
1529
  }
1199
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;
1200
1534
  readonly size: _angular_core.InputSignal<SuiAvatarSize>;
1201
1535
  readonly items: _angular_core.InputSignal<readonly SuiAvatarGroupItem[]>;
1202
1536
  /** Máximo de avatares visibles antes de colapsar en "+N". Default 4. */
@@ -1304,6 +1638,8 @@ type SuiBannerStyle = 'filled' | 'light' | 'lighter' | 'stroke';
1304
1638
  * </sui-banner>
1305
1639
  */
1306
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>;
1307
1643
  readonly variant: _angular_core.InputSignal<SuiBannerVariant>;
1308
1644
  readonly variantStyle: _angular_core.InputSignal<SuiBannerStyle>;
1309
1645
  readonly title: _angular_core.InputSignal<string | null>;
@@ -1377,6 +1713,8 @@ type SuiBrandLogoSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
1377
1713
  * ariaLabel="Síguenos en GitHub" />
1378
1714
  */
1379
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>;
1380
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">;
1381
1719
  readonly variant: _angular_core.InputSignal<SuiBrandLogoStyle>;
1382
1720
  readonly size: _angular_core.InputSignal<SuiBrandLogoSize>;
@@ -1524,6 +1862,8 @@ interface SuiBreadcrumbEntry {
1524
1862
  * - Dividers `aria-hidden="true"`.
1525
1863
  */
1526
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>;
1527
1867
  readonly items: _angular_core.InputSignal<readonly SuiBreadcrumbEntry[]>;
1528
1868
  readonly divider: _angular_core.InputSignal<SuiBreadcrumbDivider>;
1529
1869
  /** Emitido cuando un item NO-active es clickeado. */
@@ -1603,7 +1943,7 @@ declare class SuiButtonGroupItem {
1603
1943
  /** aria-label para icon-only buttons */
1604
1944
  readonly ariaLabel: _angular_core.InputSignal<string>;
1605
1945
  /** Estado del data-attribute para CSS scoping */
1606
- readonly state: _angular_core.Signal<"default" | "active" | "disabled">;
1946
+ readonly state: _angular_core.Signal<"default" | "disabled" | "active">;
1607
1947
  /** True cuando solo tiene icon (left o right) sin label */
1608
1948
  readonly onlyIcon: _angular_core.Signal<boolean>;
1609
1949
  /**
@@ -1614,7 +1954,7 @@ declare class SuiButtonGroupItem {
1614
1954
  * - 'both' → ambos iconos: padding cuadrado (p)
1615
1955
  * - 'only' → icon-only: padding cuadrado (p) → square box
1616
1956
  */
1617
- readonly iconLayout: _angular_core.Signal<"none" | "left" | "right" | "both" | "only">;
1957
+ readonly iconLayout: _angular_core.Signal<"none" | "right" | "left" | "both" | "only">;
1618
1958
  /** Tamaño del icono en px según size del item (large/medium/small/xsmall=20, 2xsmall=16).
1619
1959
  * En large y medium el ícono se queda en 20, igual que `sui-button`: el ícono
1620
1960
  * que acompaña texto no escala. */
@@ -1779,7 +2119,7 @@ declare class SuiButton {
1779
2119
  readonly disabled: _angular_core.InputSignal<boolean>;
1780
2120
  readonly leftIcon: _angular_core.InputSignal<string | null>;
1781
2121
  readonly rightIcon: _angular_core.InputSignal<string | null>;
1782
- readonly type: _angular_core.InputSignal<"button" | "submit" | "reset">;
2122
+ readonly type: _angular_core.InputSignal<"button" | "reset" | "submit">;
1783
2123
  private _spacePressed;
1784
2124
  private _esDelHost;
1785
2125
  _onEnter(event: Event): void;
@@ -1790,7 +2130,7 @@ declare class SuiButton {
1790
2130
  bloquea todo. */
1791
2131
  _onClick(event: Event): void;
1792
2132
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiButton, never>;
1793
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiButton, "sui-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "onlyIcon": { "alias": "onlyIcon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "leftIcon": { "alias": "leftIcon"; "required": false; "isSignal": true; }; "rightIcon": { "alias": "rightIcon"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; }, {}, never, ["[data-slot=start]", "*", "[data-slot=end]"], true, never>;
2133
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiButton, "sui-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "onlyIcon": { "alias": "onlyIcon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "leftIcon": { "alias": "leftIcon"; "required": false; "isSignal": true; }; "rightIcon": { "alias": "rightIcon"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; }, {}, never, ["[data-slot=start]", "*", "[data-slot=end]"], true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
1794
2134
  }
1795
2135
 
1796
2136
  type SuiCardVariant = 'default' | 'elevated' | 'flat';
@@ -1852,7 +2192,7 @@ declare class SuiCard {
1852
2192
  */
1853
2193
  protected onKeyActivate(event: Event): void;
1854
2194
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiCard, never>;
1855
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiCard, "sui-card", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; }, {}, never, ["[sui-card-header]", "*", "[sui-card-media]", "[sui-card-footer]"], true, never>;
2195
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiCard, "sui-card", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; }, {}, never, ["[sui-card-header]", "*", "[sui-card-media]", "[sui-card-footer]"], true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
1856
2196
  }
1857
2197
 
1858
2198
  /**
@@ -2016,7 +2356,7 @@ declare class SuiChartLegend {
2016
2356
  * Disposición de los items: `horizontal` (row con wrap, default) o
2017
2357
  * `vertical` (columna — leyendas laterales de donut/pie).
2018
2358
  */
2019
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
2359
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
2020
2360
  /** Items con color efectivo resuelto (disabled > customColor > color > ciclo auto). */
2021
2361
  protected readonly resolvedItems: _angular_core.Signal<ResolvedLegendItem[]>;
2022
2362
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiChartLegend, never>;
@@ -2067,7 +2407,7 @@ declare class SuiCheckbox implements ControlValueAccessor {
2067
2407
  registerOnTouched(fn: any): void;
2068
2408
  setDisabledState(isDisabled: boolean): void;
2069
2409
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiCheckbox, never>;
2070
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiCheckbox, "sui-checkbox", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "focusable": { "alias": "focusable"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; }, never, never, true, never>;
2410
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiCheckbox, "sui-checkbox", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "focusable": { "alias": "focusable"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; }, never, never, true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
2071
2411
  }
2072
2412
 
2073
2413
  type SuiCheckboxCardType = 'basic' | 'left-icon' | 'avatar' | 'card-provider' | 'brand' | 'company';
@@ -2183,7 +2523,7 @@ declare class SuiCheckboxCard implements ControlValueAccessor {
2183
2523
  /** RemixIcon name (sin prefijo "ri-") para type='left-icon'. */
2184
2524
  readonly icon: _angular_core.InputSignal<string | null>;
2185
2525
  /** Emoji del catálogo SUI_EMOJI_MAP — alternativa a icon para type='left-icon'. */
2186
- readonly emoji: _angular_core.InputSignal<"label" | "warning" | "pensive-face" | "confused-face" | "neutral-face" | "slightly-smiling-face" | "grinning-face-smiling-eyes" | "thinking-face" | "grinning-face" | "smiling-face-hearts" | "face-with-rolling-eyes" | "face-screaming" | "partying-face" | "star-struck" | "sleeping-face" | "package" | "receipt" | "money-bag" | "money-with-wings" | "shopping-cart" | "shopping-bags" | "card-index-dividers" | "bell" | "bell-with-slash" | "pushpin" | "mobile-phone" | "gear" | "locked" | "unlocked" | "wrench" | "hammer" | "magnifying-glass-tilted-left" | "spiral-calendar" | "bar-chart" | "delivery-truck" | "motorcycle" | "rocket" | "house" | "office-building" | "shop" | "dollar-banknote" | "glowing-star" | "kick-scooter" | "check-mark" | "check-mark-button" | "cross-mark" | "no-entry" | "sparkles" | "party-popper" | "waving-hand" | "thumbs-up" | "clapping-hands" | "handshake" | "busts-in-silhouette" | "pizza" | "hamburger" | "taco" | "birthday-cake" | null>;
2526
+ readonly emoji: _angular_core.InputSignal<"warning" | "label" | "pensive-face" | "confused-face" | "neutral-face" | "slightly-smiling-face" | "grinning-face-smiling-eyes" | "thinking-face" | "grinning-face" | "smiling-face-hearts" | "face-with-rolling-eyes" | "face-screaming" | "partying-face" | "star-struck" | "sleeping-face" | "package" | "receipt" | "money-bag" | "money-with-wings" | "shopping-cart" | "shopping-bags" | "card-index-dividers" | "bell" | "bell-with-slash" | "pushpin" | "mobile-phone" | "gear" | "locked" | "unlocked" | "wrench" | "hammer" | "magnifying-glass-tilted-left" | "spiral-calendar" | "bar-chart" | "delivery-truck" | "motorcycle" | "rocket" | "house" | "office-building" | "shop" | "dollar-banknote" | "glowing-star" | "kick-scooter" | "check-mark" | "check-mark-button" | "cross-mark" | "no-entry" | "sparkles" | "party-popper" | "waving-hand" | "thumbs-up" | "clapping-hands" | "handshake" | "busts-in-silhouette" | "pizza" | "hamburger" | "taco" | "birthday-cake" | null>;
2187
2527
  /** URL directa al emoji para type='left-icon'. Precedencia: icon > emoji > iconSrc. */
2188
2528
  readonly iconSrc: _angular_core.InputSignal<string | null>;
2189
2529
  /** URL de imagen para type='avatar'. Si falla, fallback a iniciales del label. */
@@ -2217,7 +2557,7 @@ declare class SuiCheckboxCard implements ControlValueAccessor {
2217
2557
  registerOnTouched(fn: () => void): void;
2218
2558
  setDisabledState(isDisabled: boolean): void;
2219
2559
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiCheckboxCard, never>;
2220
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiCheckboxCard, "sui-checkbox-card", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "sublabel": { "alias": "sublabel"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "emoji": { "alias": "emoji"; "required": false; "isSignal": true; }; "iconSrc": { "alias": "iconSrc"; "required": false; "isSignal": true; }; "imageUrl": { "alias": "imageUrl"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "checkedChange2": "checkedChange2"; }, never, ["[slot=leading]"], true, never>;
2560
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiCheckboxCard, "sui-checkbox-card", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "sublabel": { "alias": "sublabel"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "emoji": { "alias": "emoji"; "required": false; "isSignal": true; }; "iconSrc": { "alias": "iconSrc"; "required": false; "isSignal": true; }; "imageUrl": { "alias": "imageUrl"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "checkedChange2": "checkedChange2"; }, never, ["[slot=leading]"], true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
2221
2561
  }
2222
2562
 
2223
2563
  type SuiLinkButtonVariant = 'gray' | 'black' | 'primary' | 'error' | 'modifiable';
@@ -2311,7 +2651,7 @@ declare class SuiLinkButton {
2311
2651
  readonly href: _angular_core.InputSignal<string | null>;
2312
2652
  readonly target: _angular_core.InputSignal<string | null>;
2313
2653
  readonly rel: _angular_core.InputSignal<string | null>;
2314
- readonly type: _angular_core.InputSignal<"button" | "submit" | "reset">;
2654
+ readonly type: _angular_core.InputSignal<"button" | "reset" | "submit">;
2315
2655
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
2316
2656
  readonly clicked: _angular_core.OutputEmitterRef<MouseEvent>;
2317
2657
  /** Px de los íconos por tamaño: large 20 · medium 20 · small 16. */
@@ -2542,6 +2882,8 @@ type SuiCircularProgressBarSize = 48 | 56 | 64 | 72 | 80;
2542
2882
  * - ariaLabel: string opcional para `aria-label` del role=progressbar.
2543
2883
  */
2544
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>;
2545
2887
  readonly value: _angular_core.InputSignal<number>;
2546
2888
  readonly size: _angular_core.InputSignal<SuiCircularProgressBarSize>;
2547
2889
  readonly color: _angular_core.InputSignal<SuiCircularProgressBarColor>;
@@ -2648,6 +2990,8 @@ declare function normalizeHex(input: string | null | undefined): string | null;
2648
2990
  * iOS active fix: el host es un `<button>` con touchstart/touchend.
2649
2991
  */
2650
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>;
2651
2995
  /** Nombre del preset. Default `gray` cuando se usa customHex (el preset no aplica). */
2652
2996
  readonly color: _angular_core.InputSignal<SuiColorDotColor>;
2653
2997
  /**
@@ -2666,7 +3010,7 @@ declare class SuiColorDot {
2666
3010
  * - `selected` → dot 12×12 + ring 2px.
2667
3011
  * - `disabled` → dot gris pálido, sin pointer events.
2668
3012
  */
2669
- readonly state: _angular_core.InputSignal<"default" | "disabled" | "hover" | "selected">;
3013
+ readonly state: _angular_core.InputSignal<"default" | "hover" | "selected" | "disabled">;
2670
3014
  /**
2671
3015
  * Tamaño. `medium` (default, Figma 24): dot 16 / hover 14 / selected 12 + anillo 18.
2672
3016
  * `large` (32, extensión SUI para mobile): dot 22 / hover 18 / selected 16 + anillo 24.
@@ -2675,7 +3019,7 @@ declare class SuiColorDot {
2675
3019
  /** aria-label override. */
2676
3020
  readonly ariaLabel: _angular_core.InputSignal<string>;
2677
3021
  readonly clicked: _angular_core.OutputEmitterRef<void>;
2678
- /** 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. */
2679
3023
  readonly defaultAriaLabel: _angular_core.Signal<string>;
2680
3024
  protected onClick(): void;
2681
3025
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiColorDot, never>;
@@ -2752,6 +3096,8 @@ type SuiColorPickerSize = 'medium' | 'large';
2752
3096
  * - Dots: role="radio" + aria-checked (los renderea sui-color-dot)
2753
3097
  */
2754
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>;
2755
3101
  private readonly hostRef;
2756
3102
  /**
2757
3103
  * Lista de colores recomendados (grid). Default los 10 canon SUI.
@@ -2767,9 +3113,11 @@ declare class SuiColorPicker {
2767
3113
  */
2768
3114
  readonly value: _angular_core.ModelSignal<string | null>;
2769
3115
  /** Label visible cuando no hay color seleccionado. Imperativo con tuteo (dueño, 05-10-2026, P4 a). */
2770
- readonly placeholder: _angular_core.InputSignal<string>;
3116
+ readonly placeholder: _angular_core.InputSignal<string | null>;
3117
+ protected readonly placeholderTexto: _angular_core.Signal<string>;
2771
3118
  /** Etiqueta de la sección Recommended Colors dentro del panel. */
2772
- readonly recommendedLabel: _angular_core.InputSignal<string>;
3119
+ readonly recommendedLabel: _angular_core.InputSignal<string | null>;
3120
+ protected readonly recommendedLabelTexto: _angular_core.Signal<string>;
2773
3121
  /** Si true, oculta el HSV spectrum + sliders + hex input — solo grid de presets. */
2774
3122
  readonly presetsOnly: _angular_core.InputSignal<boolean>;
2775
3123
  /**
@@ -2803,7 +3151,8 @@ declare class SuiColorPicker {
2803
3151
  * nuevo 04-10-2026 (dueño: piso táctil 44 en el teléfono). */
2804
3152
  readonly size: _angular_core.InputSignal<SuiColorPickerSize>;
2805
3153
  /** aria-label del trigger. */
2806
- readonly ariaLabel: _angular_core.InputSignal<string>;
3154
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
3155
+ protected readonly ariaLabelTexto: _angular_core.Signal<string>;
2807
3156
  /** Emitido cuando el value cambia (cualquier interacción). */
2808
3157
  readonly change: _angular_core.OutputEmitterRef<string>;
2809
3158
  /** Estado interno del popover. */
@@ -2939,22 +3288,22 @@ declare class SuiColorPicker {
2939
3288
  * Footer del command menu (⌘K palette). 3 grupos:
2940
3289
  * 1. Navigate: kbd ↑ + kbd ↓ + text "Navigate"
2941
3290
  * 2. Select: kbd ↵ + text "Select"
2942
- * 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)
2943
3292
  *
2944
3293
  * Container: bg=white, border-top stroke-soft-200, padding 14px 20px, gap=12,
2945
3294
  * items-center, w=600px.
2946
3295
  *
2947
3296
  * EXACT:
2948
- * 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
2949
3298
  * Link button: Label/X Small Medium 12/16 primary-base (sin underline default)
2950
3299
  * Kbds: variant subtle, contienen iconos 16×16
2951
3300
  *
2952
3301
  * API:
2953
- * - navigateLabel: string ('Navigate' por default)
2954
- * - selectLabel: string ('Select')
2955
- * - 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')
2956
3305
  * — copy previo al link; null oculta el bloque de ayuda completo
2957
- * - helpLink: SuiLinkConfig | string | null ('Help Center') — string
3306
+ * - helpLink: SuiLinkConfig | string | null ('Centro de ayuda') — string
2958
3307
  * shorthand = solo label (renderiza <button>, emite helpClicked);
2959
3308
  * SuiLinkConfig { label, href?, target?, rel? } = <a> real con
2960
3309
  * rel automático 'noopener noreferrer' si target='_blank'.
@@ -2962,13 +3311,20 @@ declare class SuiColorPicker {
2962
3311
  * - (helpClicked): output cuando el link se clickea
2963
3312
  */
2964
3313
  declare class SuiCommandMenuFooter {
2965
- readonly navigateLabel: _angular_core.InputSignal<string>;
2966
- readonly selectLabel: _angular_core.InputSignal<string>;
2967
- 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>;
2968
3323
  /** Link de ayuda — string shorthand (solo label, emite `helpClicked`) o
2969
3324
  * SuiLinkConfig { label, href?, target?, rel? }: con href renderiza <a> real;
2970
- * rel automático 'noopener noreferrer' para _blank. null = sin link. */
2971
- 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>;
2972
3328
  /** Config resuelta del link (string → { label }, rel automático). */
2973
3329
  protected readonly helpLinkCfg: _angular_core.Signal<SuiLinkConfig | null>;
2974
3330
  readonly helpClicked: _angular_core.OutputEmitterRef<MouseEvent>;
@@ -3042,6 +3398,8 @@ declare class SuiCommandMenuFooter {
3042
3398
  type SuiCommandMenuItemType = 'basic' | 'left-icon' | 'avatar' | 'brand' | 'company' | 'country';
3043
3399
  type SuiCommandMenuItemSize = 'small' | 'medium';
3044
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>;
3045
3403
  readonly type: _angular_core.InputSignal<SuiCommandMenuItemType>;
3046
3404
  readonly size: _angular_core.InputSignal<SuiCommandMenuItemSize>;
3047
3405
  readonly title: _angular_core.InputSignal<string>;
@@ -3073,10 +3431,18 @@ declare class SuiCommandMenuItem {
3073
3431
  readonly leadingSize: _angular_core.Signal<20 | 40>;
3074
3432
  /** Para sui-avatar, traduce a SuiAvatarSize. */
3075
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;
3076
3442
  onClick(event: MouseEvent): void;
3077
3443
  onButtonClick(event: MouseEvent): void;
3078
3444
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiCommandMenuItem, never>;
3079
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiCommandMenuItem, "sui-command-menu-item", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "sublabel": { "alias": "sublabel"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "avatar": { "alias": "avatar"; "required": false; "isSignal": true; }; "flagName": { "alias": "flagName"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "shortcut": { "alias": "shortcut"; "required": false; "isSignal": true; }; "showButton": { "alias": "showButton"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; "buttonClicked": "buttonClicked"; }, never, ["[slot=brand]"], true, never>;
3445
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiCommandMenuItem, "sui-command-menu-item", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "sublabel": { "alias": "sublabel"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "avatar": { "alias": "avatar"; "required": false; "isSignal": true; }; "flagName": { "alias": "flagName"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "shortcut": { "alias": "shortcut"; "required": false; "isSignal": true; }; "showButton": { "alias": "showButton"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; "buttonClicked": "buttonClicked"; }, never, ["[slot=brand]"], true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
3080
3446
  }
3081
3447
 
3082
3448
  /**
@@ -3111,8 +3477,13 @@ declare class SuiCommandMenuItem {
3111
3477
  * (#335cff). El search icon en active sale naranja por override de marca.
3112
3478
  */
3113
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>;
3114
3482
  readonly value: _angular_core.InputSignal<string>;
3115
- 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>;
3116
3487
  /** Mostrar el chip ⌘K cuando el input está vacío. */
3117
3488
  readonly shortcut: _angular_core.InputSignal<boolean>;
3118
3489
  /** Mostrar el botón derecho (info en default, close en active). */
@@ -3126,7 +3497,7 @@ declare class SuiCommandMenuSearch {
3126
3497
  onInput(event: Event): void;
3127
3498
  onClear(): void;
3128
3499
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiCommandMenuSearch, never>;
3129
- 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>;
3130
3501
  }
3131
3502
 
3132
3503
  /**
@@ -3272,7 +3643,7 @@ declare class SuiCompactButton {
3272
3643
  readonly href: _angular_core.InputSignal<string | null>;
3273
3644
  readonly target: _angular_core.InputSignal<string | null>;
3274
3645
  readonly rel: _angular_core.InputSignal<string | null>;
3275
- readonly type: _angular_core.InputSignal<"button" | "submit" | "reset">;
3646
+ readonly type: _angular_core.InputSignal<"button" | "reset" | "submit">;
3276
3647
  readonly ariaLabel: _angular_core.InputSignal<string>;
3277
3648
  readonly clicked: _angular_core.OutputEmitterRef<MouseEvent>;
3278
3649
  readonly iconSize: _angular_core.Signal<number>;
@@ -3369,7 +3740,7 @@ declare class SuiCompactSelectForInput<T = string> implements ControlValueAccess
3369
3740
  readonly arrowIcon: _angular_core.Signal<"arrow-up-s-line" | "arrow-down-s-line">;
3370
3741
  readonly displayValue: _angular_core.Signal<string>;
3371
3742
  readonly displayFlag: _angular_core.Signal<"abkhazia" | "afghanistan" | "aland-islands" | "albania" | "algeria" | "american-samoa" | "andorra" | "angola" | "anguilla" | "antigua-and-barbuda" | "argentina" | "armenia" | "aruba" | "australia" | "austria" | "azerbaijan" | "azores-islands" | "bahamas" | "bahrain" | "balearic-islands" | "bangladesh" | "barbados" | "basque-country" | "belarus" | "belgium" | "belize" | "benin" | "bermuda" | "bhutan" | "bolivia" | "bonaire" | "bosnia-and-herzegovina" | "botswana" | "brazil" | "british-columbia" | "british-indian-ocean-territory" | "british-virgin-islands" | "brunei" | "bulgaria" | "burkina-faso" | "burundi" | "cambodia" | "cameroon" | "canada" | "canary-islands" | "cape-verde" | "cayman-islands" | "central-african-republic" | "ceuta" | "chad" | "chile" | "china" | "christmas-island" | "cocos-island" | "colombia" | "comoros" | "cook-islands" | "corsica" | "costa-rica" | "croatia" | "cuba" | "curacao" | "cyprus" | "czech-republic" | "democratic-republic-of-congo" | "denmark" | "djibouti" | "dominica" | "dominican-republic" | "east-timor" | "ecuador" | "egypt" | "el-salvador" | "england" | "equatorial-guinea" | "eritrea" | "estonia" | "ethiopia" | "european-union" | "falkland-islands" | "faroe-islands" | "fiji" | "finland" | "france" | "french-polynesia" | "gabon" | "galapagos-islands" | "gambia" | "georgia" | "germany" | "ghana" | "gibraltar" | "greece" | "greenland" | "grenada" | "guam" | "guatemala" | "guernsey" | "guinea-bissau" | "guinea" | "guyana" | "haiti" | "hawaii" | "honduras" | "hong-kong" | "hungary" | "iceland" | "india" | "indonesia" | "iran" | "iraq" | "ireland" | "isle-of-man" | "israel" | "italy" | "ivory-coast" | "jamaica" | "japan" | "jersey" | "jordan" | "kazakhstan" | "kenya" | "kiribati" | "kosovo" | "kuwait" | "kyrgyzstan" | "laos" | "latvia" | "lebanon" | "lesotho" | "liberia" | "libya" | "liechtenstein" | "lithuania" | "luxembourg" | "macao" | "madagascar" | "madeira" | "malawi" | "malaysia" | "maldives" | "mali" | "malta" | "marshall-island" | "martinique" | "mauritania" | "mauritus" | "melilla" | "mexico" | "micronesia" | "moldova" | "monaco" | "mongolia" | "montenegro" | "montserrat" | "morocco" | "mozambique" | "myanmar" | "namibia" | "nato" | "nauru" | "nepal" | "netherlands" | "new-zealand" | "nicaragua" | "niger" | "nigeria" | "niue" | "norfolk-island" | "north-korea" | "northern-cyprus" | "northern-marianas-islands" | "norway" | "oman" | "orkney-islands" | "ossetia" | "pakistan" | "palau" | "palestine" | "panama" | "papua-new-guinea" | "paraguay" | "peru" | "philippines" | "pitcairn-islands" | "poland" | "portugal" | "puerto-rico" | "qatar" | "rapa-nui" | "republic-of-macedonia" | "republic-of-the-congo" | "romania" | "russia" | "rwanda" | "saba-island" | "sahrawi-arab-democratic-republic" | "saint-kitts-and-nevis" | "samoa" | "san-marino" | "sao-tome-and-prince" | "sardinia" | "saudi-arabia" | "scotland" | "senegal" | "serbia" | "seychelles" | "sierra-leone" | "singapore" | "sint-eustatius" | "sint-maarten" | "slovakia" | "slovania" | "solomon-islands" | "somalia" | "somaliland" | "south-africa" | "south-korea" | "south-sudan" | "spain" | "sri-lanka" | "st-barts" | "st-lucia" | "st-vincent-and-the-grenadines" | "sudan" | "suriname" | "swaziland" | "sweden" | "switzerland" | "syria" | "taijikistan" | "taiwan" | "tanzania" | "thailand" | "tibet" | "togo" | "tokelau" | "tonga" | "transnistria" | "trinidad-and-tobago" | "tunisia" | "turkey" | "turkmenistan" | "turks-and-caicos" | "tuvalu" | "uganda" | "ukraine" | "united-arab-emirates" | "united-kingdom" | "united-nations" | "united-states" | "uruguay" | "uzbekistan" | "vanuatu" | "vatican-city" | "venezuela" | "vietnam" | "virgin-islands" | "wales" | "yemen" | "zambia" | "zimbabwe" | null>;
3372
- readonly flagSizePx: _angular_core.Signal<20 | 16>;
3743
+ readonly flagSizePx: _angular_core.Signal<16 | 20>;
3373
3744
  onHostClick(event: Event): void;
3374
3745
  protected onMenuOpenedChange(open: boolean): void;
3375
3746
  protected selectItem(item: SuiCompactSelectForInputItem<T>): void;
@@ -3378,7 +3749,7 @@ declare class SuiCompactSelectForInput<T = string> implements ControlValueAccess
3378
3749
  registerOnTouched(fn: () => void): void;
3379
3750
  setDisabledState(isDisabled: boolean): void;
3380
3751
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiCompactSelectForInput<any>, never>;
3381
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiCompactSelectForInput<any>, "sui-compact-select-for-input", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "country": { "alias": "country"; "required": false; "isSignal": true; }; "flag": { "alias": "flag"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "selected": "selectedChange"; "clicked": "clicked"; "selectedChange": "selectedChange"; }, never, never, true, never>;
3752
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiCompactSelectForInput<any>, "sui-compact-select-for-input", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "country": { "alias": "country"; "required": false; "isSignal": true; }; "flag": { "alias": "flag"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "selected": "selectedChange"; "clicked": "clicked"; "selectedChange": "selectedChange"; }, never, never, true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
3382
3753
  }
3383
3754
 
3384
3755
  /**
@@ -3459,7 +3830,9 @@ declare class SuiCompactSelect<T = string> implements ControlValueAccessor {
3459
3830
  * Nombre accesible del trigger (fix a11y 04-10-2026). Imprescindible con
3460
3831
  * `type="icon"`, que no muestra texto: sin esto el lector anunciaba «botón»
3461
3832
  * sin decir qué elige. Sin `ariaLabel`, el tipo icon usa el label del ítem
3462
- * 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).
3463
3836
  */
3464
3837
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
3465
3838
  readonly clicked: _angular_core.OutputEmitterRef<Event>;
@@ -3722,6 +4095,8 @@ type SuiContentCardType = 'basic' | 'left-icon' | 'avatar' | 'card-provider' | '
3722
4095
  área táctil de 40 (extensión SUI 03-10-2026, mobile). */
3723
4096
  type SuiContentCardSize = 'medium' | 'large';
3724
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>;
3725
4100
  /** Tipo de leading visual. */
3726
4101
  readonly type: _angular_core.InputSignal<SuiContentCardType>;
3727
4102
  /** Título — Label/Small 14/20, text-strong-950. */
@@ -3752,7 +4127,8 @@ declare class SuiContentCard {
3752
4127
  /** Mostrar el botón X de dismiss. Default true. */
3753
4128
  readonly dismissible: _angular_core.InputSignal<boolean>;
3754
4129
  /** aria-label del botón X. */
3755
- readonly dismissAriaLabel: _angular_core.InputSignal<string>;
4130
+ readonly dismissAriaLabel: _angular_core.InputSignal<string | null>;
4131
+ protected readonly dismissAriaLabelTexto: _angular_core.Signal<string>;
3756
4132
  /**
3757
4133
  * Tamaño de la X de quitar (la fila no cambia: sigue en 72).
3758
4134
  * `medium` (default, Figma): 20 × 20 sin área extra.
@@ -3875,6 +4251,9 @@ interface SuiContentDividerItem {
3875
4251
  * (itemClick)="onNav($event)" />
3876
4252
  */
3877
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;
3878
4257
  readonly type: _angular_core.InputSignal<SuiContentDividerType>;
3879
4258
  /** Texto para los variants text-line / text / solid-text / text-button. */
3880
4259
  readonly text: _angular_core.InputSignal<string>;
@@ -4047,11 +4426,13 @@ type SuiCounterInputSize = '2xsmall' | 'xsmall' | 'small' | 'medium' | 'large' |
4047
4426
  * <sui-counter-input formControlName="cantidad" [min]="0" />
4048
4427
  */
4049
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>;
4050
4431
  readonly size: _angular_core.InputSignal<SuiCounterInputSize>;
4051
4432
  /** El form-label no tiene 'large' — se capea a medium (el label no escala). */
4052
4433
  protected readonly labelSize: _angular_core.Signal<SuiFormLabelSize>;
4053
4434
  /** Ícono de los botones − / +: 20 hasta large, 24 en xlarge (botón de 44). */
4054
- protected readonly iconSize: _angular_core.Signal<20 | 24>;
4435
+ protected readonly iconSize: _angular_core.Signal<24 | 20>;
4055
4436
  readonly label: _angular_core.InputSignal<string | null>;
4056
4437
  readonly sublabel: _angular_core.InputSignal<string | null>;
4057
4438
  readonly required: _angular_core.InputSignal<boolean>;
@@ -4066,8 +4447,10 @@ declare class SuiCounterInput implements ControlValueAccessor {
4066
4447
  readonly step: _angular_core.InputSignal<number>;
4067
4448
  readonly disabled: _angular_core.InputSignal<boolean>;
4068
4449
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
4069
- readonly decrementLabel: _angular_core.InputSignal<string>;
4070
- 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>;
4071
4454
  /** a11y (04-10-2026): el spinbutton toma su nombre del label visible
4072
4455
  * (aria-labelledby) salvo que se pase `ariaLabel`, y se describe con el hint. */
4073
4456
  protected readonly _labelId: string;
@@ -4145,6 +4528,8 @@ type SuiDateSelectorSize = 'medium' | 'large';
4145
4528
  * <sui-date-selector label="Enero 2025" [leftIcon]="false" [rightIcon]="false" />
4146
4529
  */
4147
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>;
4148
4533
  /** Texto del label (ej. "Enero 2025", "January 2024"). */
4149
4534
  readonly label: _angular_core.InputSignal<string>;
4150
4535
  /** Mostrar arrow izquierdo (prev). Default true. */
@@ -4311,6 +4696,8 @@ interface CalendarRow {
4311
4696
  * - Inline: pasar [inline]="true" para renderear el calendar SIN trigger
4312
4697
  */
4313
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>;
4314
4701
  private readonly hostEl;
4315
4702
  private readonly destroyRef;
4316
4703
  readonly mode: _angular_core.InputSignal<SuiDatepickerMode>;
@@ -4379,7 +4766,7 @@ declare class SuiDatepicker implements ControlValueAccessor {
4379
4766
  * `large` (44) solo con el campo xlarge — canon del dueño 04-10-2026, piso
4380
4767
  * táctil de 44. Con el resto de sizes, las piezas de siempre (medium).
4381
4768
  */
4382
- readonly partSize: _angular_core.Signal<"medium" | "large">;
4769
+ readonly partSize: _angular_core.Signal<"large" | "medium">;
4383
4770
  readonly effectiveCalendars: _angular_core.Signal<SuiDatepickerCalendars>;
4384
4771
  private _onChange;
4385
4772
  private _onTouched;
@@ -4411,7 +4798,7 @@ declare class SuiDatepicker implements ControlValueAccessor {
4411
4798
  /** ¿El trigger muestra un valor (no el placeholder)? Pinta el texto oscuro. */
4412
4799
  readonly hasDisplayValue: _angular_core.Signal<boolean>;
4413
4800
  /** Nombre del panel para el lector de pantalla (role dialog / group). */
4414
- readonly panelAriaLabel: _angular_core.Signal<"Elegir período" | "Elegir fecha">;
4801
+ readonly panelAriaLabel: _angular_core.Signal<string>;
4415
4802
  /** «martes 7 de octubre de 2026» para cada celda (antes «Día 7»). */
4416
4803
  cellAriaLabel(cell: CalendarCell): string;
4417
4804
  /** a11y (04-10-2026): flechas dentro de la grilla mueven el foco entre los
@@ -4507,6 +4894,8 @@ type SuiDayCellSize = 'medium' | 'large';
4507
4894
  * <sui-day-cell day="14" [disabled]="true" />
4508
4895
  */
4509
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>;
4510
4899
  /** Número del día (1-31). Se acepta string para flexibilidad. */
4511
4900
  readonly day: _angular_core.InputSignal<string | number>;
4512
4901
  /** Type=Basic (default) o Range (entre extremos / extremo del range). */
@@ -4649,17 +5038,28 @@ type SuiDrawerFooterSize = 'medium' | 'large';
4649
5038
  * />
4650
5039
  */
4651
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;
4652
5051
  readonly type: _angular_core.InputSignal<SuiDrawerFooterType>;
4653
5052
  /** Botones del pie: `medium` 40 (default) · `large` 48 para el teléfono
4654
5053
  * (04-10-2026, piso táctil 44). */
4655
5054
  readonly size: _angular_core.InputSignal<SuiDrawerFooterSize>;
4656
5055
  /** Botón primario (filled primary-base) — string shorthand (solo label) o
4657
5056
  * SuiFooterButtonConfig { label, disabled? }. Interfaz compartida con
4658
- * sui-filter-panel-footer. */
4659
- 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>;
4660
5059
  /** Botón secundario (stroke neutral) — string shorthand o
4661
- * SuiFooterButtonConfig. null (o label vacío) = ocultar. */
4662
- 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>;
4663
5063
  /** Config resuelta del botón primario (string → { label }). */
4664
5064
  protected readonly primaryCfg: _angular_core.Signal<SuiFooterButtonConfig>;
4665
5065
  /** Config resuelta del botón secundario (string → { label }; null/label vacío
@@ -4781,6 +5181,8 @@ type SuiDrawerHeaderSize = 'small' | 'large' | 'xlarge';
4781
5181
  * />
4782
5182
  */
4783
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>;
4784
5186
  readonly type: _angular_core.InputSignal<SuiDrawerHeaderType>;
4785
5187
  readonly size: _angular_core.InputSignal<SuiDrawerHeaderSize>;
4786
5188
  readonly title: _angular_core.InputSignal<string>;
@@ -4816,7 +5218,8 @@ declare class SuiDrawerHeader {
4816
5218
  /** Muestra divider 1px al fondo del header. Default false. */
4817
5219
  readonly showDivider: _angular_core.InputSignal<boolean>;
4818
5220
  /** aria-label del close button. */
4819
- readonly dismissAriaLabel: _angular_core.InputSignal<string>;
5221
+ readonly dismissAriaLabel: _angular_core.InputSignal<string | null>;
5222
+ protected readonly dismissAriaLabelTexto: _angular_core.Signal<string>;
4820
5223
  /** Click en el close button. */
4821
5224
  readonly dismiss: _angular_core.OutputEmitterRef<MouseEvent>;
4822
5225
  /** Click en el Link Button inline (solo cuando `link` está set). */
@@ -4988,7 +5391,7 @@ declare class SuiDropdownItem {
4988
5391
  readonly showCheck: _angular_core.Signal<boolean>;
4989
5392
  onClick(event: Event): void;
4990
5393
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiDropdownItem, never>;
4991
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiDropdownItem, "sui-dropdown-item", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "sublabel": { "alias": "sublabel"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "leadingFramed": { "alias": "leadingFramed"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "highlighted": { "alias": "highlighted"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "shortcut": { "alias": "shortcut"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["[slot=leading]", "[slot=trailing]"], true, never>;
5394
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiDropdownItem, "sui-dropdown-item", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "sublabel": { "alias": "sublabel"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "leadingFramed": { "alias": "leadingFramed"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "highlighted": { "alias": "highlighted"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "shortcut": { "alias": "shortcut"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["[slot=leading]", "[slot=trailing]"], true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
4992
5395
  }
4993
5396
 
4994
5397
  /**
@@ -5033,6 +5436,16 @@ declare class SuiDropdownItem {
5033
5436
  * - panelClass: sui-dropdown-menu__overlay-pane (estilos globales en
5034
5437
  * src/styles/_sui-dropdown-menu-overlay.scss)
5035
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
+ *
5036
5449
  * Estilos del panel viven en `src/styles/_sui-dropdown-menu-overlay.scss`
5037
5450
  * (global, porque CDK Overlay monta el panel fuera del shadow del component).
5038
5451
  */
@@ -5049,7 +5462,7 @@ type SuiDropdownMenuPosition = 'auto' | 'below' | 'above';
5049
5462
  * 'listbox' solo es válido cuando los hijos son option, no menuitem.
5050
5463
  */
5051
5464
  type SuiDropdownMenuPopupRole = 'menu' | 'listbox' | 'true';
5052
- declare class SuiDropdownMenu {
5465
+ declare class SuiDropdownMenu implements AfterViewInit, OnChanges {
5053
5466
  /** Si true, el panel matchea el ancho del trigger. Default: auto width. */
5054
5467
  readonly matchWidth: _angular_core.InputSignal<boolean>;
5055
5468
  /** Estrategia ante espacio insuficiente. Default (true): el pane se ENCOGE
@@ -5079,6 +5492,11 @@ declare class SuiDropdownMenu {
5079
5492
  * proyectados llevan role="menuitem"). Los consumers de tipo listbox
5080
5493
  * (sui-select / compact-selects, items con role="option") DEBEN pasar
5081
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"`.
5082
5500
  */
5083
5501
  readonly popupRole: _angular_core.InputSignal<SuiDropdownMenuPopupRole>;
5084
5502
  /**
@@ -5102,6 +5520,16 @@ declare class SuiDropdownMenu {
5102
5520
  private _overlaySubs;
5103
5521
  private _resizeObserver;
5104
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;
5105
5533
  onTriggerClick(event: MouseEvent): void;
5106
5534
  onTriggerKeydown(event: KeyboardEvent): void;
5107
5535
  toggle(): void;
@@ -5155,7 +5583,7 @@ declare class SuiDropdownPanel {
5155
5583
  *
5156
5584
  * Default:
5157
5585
  * search icon 20×20 leading, color text-soft-400
5158
- * placeholder text "Search..." color text-soft-400
5586
+ * placeholder «Buscar…» color text-soft-400 (16 px en ≤767 por el zoom de iOS)
5159
5587
  *
5160
5588
  * Active (con valor escrito):
5161
5589
  * search icon: icon-sub-600 (oscurece vs el soft-400 de Default)
@@ -5168,9 +5596,14 @@ declare class SuiDropdownPanel {
5168
5596
  * <sui-dropdown-search [(value)]="query" placeholder="Buscar país..." (cleared)="onClear()" />
5169
5597
  */
5170
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>;
5171
5601
  readonly value: _angular_core.ModelSignal<string>;
5172
- readonly placeholder: _angular_core.InputSignal<string>;
5602
+ readonly placeholder: _angular_core.InputSignal<string | null>;
5603
+ protected readonly placeholderTexto: _angular_core.Signal<string>;
5173
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>;
5174
5607
  /** Fired cuando el user clickea el icono de clear (X). */
5175
5608
  readonly cleared: _angular_core.OutputEmitterRef<void>;
5176
5609
  /** Fired en cada input change (igual que value() pero con event). */
@@ -5179,7 +5612,7 @@ declare class SuiDropdownSearch {
5179
5612
  onInput(event: Event): void;
5180
5613
  onClear(event: MouseEvent): void;
5181
5614
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiDropdownSearch, never>;
5182
- 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>;
5183
5616
  }
5184
5617
 
5185
5618
  /**
@@ -5251,7 +5684,7 @@ type SuiEmojiName = keyof typeof SUI_EMOJI_MAP;
5251
5684
  type SuiEmojiSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
5252
5685
  declare class SuiEmoji {
5253
5686
  /** Nombre del emoji del catálogo. Si se provee `src`, este se ignora. */
5254
- readonly name: _angular_core.InputSignal<"label" | "warning" | "pensive-face" | "confused-face" | "neutral-face" | "slightly-smiling-face" | "grinning-face-smiling-eyes" | "thinking-face" | "grinning-face" | "smiling-face-hearts" | "face-with-rolling-eyes" | "face-screaming" | "partying-face" | "star-struck" | "sleeping-face" | "package" | "receipt" | "money-bag" | "money-with-wings" | "shopping-cart" | "shopping-bags" | "card-index-dividers" | "bell" | "bell-with-slash" | "pushpin" | "mobile-phone" | "gear" | "locked" | "unlocked" | "wrench" | "hammer" | "magnifying-glass-tilted-left" | "spiral-calendar" | "bar-chart" | "delivery-truck" | "motorcycle" | "rocket" | "house" | "office-building" | "shop" | "dollar-banknote" | "glowing-star" | "kick-scooter" | "check-mark" | "check-mark-button" | "cross-mark" | "no-entry" | "sparkles" | "party-popper" | "waving-hand" | "thumbs-up" | "clapping-hands" | "handshake" | "busts-in-silhouette" | "pizza" | "hamburger" | "taco" | "birthday-cake" | null>;
5687
+ readonly name: _angular_core.InputSignal<"warning" | "label" | "pensive-face" | "confused-face" | "neutral-face" | "slightly-smiling-face" | "grinning-face-smiling-eyes" | "thinking-face" | "grinning-face" | "smiling-face-hearts" | "face-with-rolling-eyes" | "face-screaming" | "partying-face" | "star-struck" | "sleeping-face" | "package" | "receipt" | "money-bag" | "money-with-wings" | "shopping-cart" | "shopping-bags" | "card-index-dividers" | "bell" | "bell-with-slash" | "pushpin" | "mobile-phone" | "gear" | "locked" | "unlocked" | "wrench" | "hammer" | "magnifying-glass-tilted-left" | "spiral-calendar" | "bar-chart" | "delivery-truck" | "motorcycle" | "rocket" | "house" | "office-building" | "shop" | "dollar-banknote" | "glowing-star" | "kick-scooter" | "check-mark" | "check-mark-button" | "cross-mark" | "no-entry" | "sparkles" | "party-popper" | "waving-hand" | "thumbs-up" | "clapping-hands" | "handshake" | "busts-in-silhouette" | "pizza" | "hamburger" | "taco" | "birthday-cake" | null>;
5255
5688
  /** URL directa al emoji (override del catálogo). Útil para usar emojis fuera del map. */
5256
5689
  readonly src: _angular_core.InputSignal<string | null>;
5257
5690
  /** Tamaño del emoji. */
@@ -5486,7 +5919,7 @@ declare class SuiFancyButton {
5486
5919
  readonly href: _angular_core.InputSignal<string | null>;
5487
5920
  readonly target: _angular_core.InputSignal<string | null>;
5488
5921
  readonly rel: _angular_core.InputSignal<string | null>;
5489
- readonly htmlType: _angular_core.InputSignal<"button" | "submit" | "reset">;
5922
+ readonly htmlType: _angular_core.InputSignal<"button" | "reset" | "submit">;
5490
5923
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
5491
5924
  readonly clicked: _angular_core.OutputEmitterRef<MouseEvent>;
5492
5925
  readonly iconSize: _angular_core.Signal<number>;
@@ -5570,6 +6003,9 @@ type SuiFileIconColor = 'red' | 'orange' | 'yellow' | 'green' | 'teal' | 'blue'
5570
6003
  * auto-detect from extension. Defaults to gray for unknown types.
5571
6004
  */
5572
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;
5573
6009
  readonly filename: _angular_core.InputSignal<string>;
5574
6010
  readonly extension: _angular_core.InputSignal<string>;
5575
6011
  readonly size: _angular_core.InputSignal<SuiFileIconSize>;
@@ -5693,6 +6129,8 @@ interface SuiFileUploadCardFile {
5693
6129
  * - retryClicked: click en "Try Again" (solo state==='error')
5694
6130
  */
5695
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>;
5696
6134
  /** Archivo mostrado — string shorthand (= filename) o { filename, extension? }. */
5697
6135
  readonly file: _angular_core.InputSignal<string | SuiFileUploadCardFile>;
5698
6136
  /** Config resuelta del archivo (string → { filename }). */
@@ -5703,10 +6141,14 @@ declare class SuiFileUploadCard {
5703
6141
  readonly statusText: _angular_core.InputSignal<string | null>;
5704
6142
  readonly showStatus: _angular_core.InputSignal<boolean>;
5705
6143
  /** Textos para el lector de pantalla (antes fijos en inglés). */
5706
- readonly cancelLabel: _angular_core.InputSignal<string>;
5707
- readonly removeLabel: _angular_core.InputSignal<string>;
5708
- readonly progressLabel: _angular_core.InputSignal<string>;
5709
- 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>;
5710
6152
  readonly actionClicked: _angular_core.OutputEmitterRef<void>;
5711
6153
  readonly retryClicked: _angular_core.OutputEmitterRef<void>;
5712
6154
  /** Default status text por state — override-able vía input. */
@@ -5794,12 +6236,15 @@ type SuiFileUploadSize = 'small' | 'medium' | 'large' | 'xlarge';
5794
6236
  * - errorEvent: emite string con el motivo del rechazo si falla validación.
5795
6237
  */
5796
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>;
5797
6241
  readonly accept: _angular_core.InputSignal<string>;
5798
6242
  readonly multiple: _angular_core.InputSignal<boolean>;
5799
6243
  readonly maxSize: _angular_core.InputSignal<number>;
5800
6244
  readonly title: _angular_core.InputSignal<string | null>;
5801
6245
  readonly subtitle: _angular_core.InputSignal<string | null>;
5802
- readonly browseLabel: _angular_core.InputSignal<string>;
6246
+ readonly browseLabel: _angular_core.InputSignal<string | null>;
6247
+ protected readonly browseLabelTexto: _angular_core.Signal<string>;
5803
6248
  readonly disabled: _angular_core.InputSignal<boolean>;
5804
6249
  readonly error: _angular_core.InputSignal<boolean>;
5805
6250
  readonly errorMessage: _angular_core.InputSignal<string | null>;
@@ -5815,7 +6260,7 @@ declare class SuiFileUpload {
5815
6260
  protected readonly resolvedErrorMessage: _angular_core.Signal<string | null>;
5816
6261
  /** Icon size px. Figma verified = 24 (medium). small/large/xlarge escalan +4
5817
6262
  * (small 20 → medium 24 → large 28 → xlarge 32) — extensión de proyecto. */
5818
- protected readonly iconSize: _angular_core.Signal<20 | 24 | 32 | 28>;
6263
+ protected readonly iconSize: _angular_core.Signal<24 | 20 | 32 | 28>;
5819
6264
  onClick(): void;
5820
6265
  /** Browse File button — abre el picker. stopPropagation evita doble-open
5821
6266
  * (el host también es clickeable). */
@@ -5948,7 +6393,7 @@ declare class SuiFilterItem {
5948
6393
  readonly state: _angular_core.Signal<SuiFilterItemState>;
5949
6394
  onClick(event: Event): void;
5950
6395
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiFilterItem, never>;
5951
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiFilterItem, "sui-filter-item", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "leftIcon": { "alias": "leftIcon"; "required": false; "isSignal": true; }; "activeIcon": { "alias": "activeIcon"; "required": false; "isSignal": true; }; }, { "selected": "selected"; }, never, ["*"], true, never>;
6396
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiFilterItem, "sui-filter-item", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "leftIcon": { "alias": "leftIcon"; "required": false; "isSignal": true; }; "activeIcon": { "alias": "activeIcon"; "required": false; "isSignal": true; }; }, { "selected": "selected"; }, never, ["*"], true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
5952
6397
  }
5953
6398
 
5954
6399
  /**
@@ -5959,7 +6404,7 @@ declare class SuiFilterItem {
5959
6404
  * leftIcon(on | off) × linkButton(on | off) = 4 combos
5960
6405
  *
5961
6406
  * Header del panel de filtros vertical. Slot izquierdo opcional (icono), label
5962
- * 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.
5963
6408
  *
5964
6409
  * EXACT (pulled from audit reports.json → name="Filters"):
5965
6410
  * Container px-20 py-16, border-bottom stroke/soft-200, w-400px
@@ -5986,10 +6431,12 @@ declare class SuiFilterItem {
5986
6431
  * (clearClick)="onClear()" />
5987
6432
  */
5988
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>;
5989
6436
  readonly label: _angular_core.InputSignal<string>;
5990
6437
  /** Icono opcional a la izquierda del label (20×20). */
5991
6438
  readonly leftIcon: _angular_core.InputSignal<string | null>;
5992
- /** Link de limpieza a la derecha: `true` = label default 'Clear', string =
6439
+ /** Link de limpieza a la derecha: `true` = label default 'Limpiar', string =
5993
6440
  * label custom, `false` (default) = oculto. */
5994
6441
  readonly clear: _angular_core.InputSignal<string | boolean>;
5995
6442
  /** Label resuelto del link (null = oculto). */
@@ -6009,12 +6456,14 @@ declare class SuiFilterPanelHeader {
6009
6456
  * Type(Buttons) = 1 combo
6010
6457
  *
6011
6458
  * Footer del panel de filtros vertical: dos botones full-width lado a lado —
6012
- * "Clear" (stroke, bg/white-0 + border) y "Apply" (filled primary).
6459
+ * «Limpiar» (stroke, bg/white-0 + border) y «Aplicar» (filled primary).
6013
6460
  *
6014
6461
  * EXACT (verificado vía Figma MCP — node 4415:863 / outer 4415:858,
6015
6462
  * Actions wrapper 4415:857):
6016
6463
  * Container px-20 py-16, border-top stroke/soft-200, overflow-clip,
6017
- * 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)
6018
6467
  * Clear button bg-white + border stroke/soft-200, p-8px, radius-8,
6019
6468
  * text/sub-600 → sui-button variant="stroke" color="neutral" size="small"
6020
6469
  * Apply button bg primary-base, text static-white, p-8px, radius-8
@@ -6024,7 +6473,7 @@ declare class SuiFilterPanelHeader {
6024
6473
  * Token map (Figma → sui-tokens.scss):
6025
6474
  * px-20 py-16 → 16px 20px
6026
6475
  * border-top → 1px solid --sui-stroke-soft-200
6027
- * gap (Actions) → 16px
6476
+ * gap (Actions) → 12px (Figma dice 16; manda el canon de sui-modal-footer)
6028
6477
  * primary-base → --sui-primary-base (via sui-button filled primary)
6029
6478
  * button p-8/r-8 → sui-button size="small" (height 36, padding 8, radius 8)
6030
6479
  *
@@ -6038,14 +6487,19 @@ declare class SuiFilterPanelHeader {
6038
6487
  * (apply)="onApply()" />
6039
6488
  */
6040
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>;
6041
6492
  /** Botón "Clear" (stroke neutral) — string shorthand (solo label) o
6042
6493
  * SuiFooterButtonConfig { label, disabled? }. Interfaz compartida con
6043
- * sui-drawer-footer. */
6044
- readonly clearButton: _angular_core.InputSignal<string | SuiFooterButtonConfig>;
6045
- /** Botón "Apply" (filled primary) — string shorthand o SuiFooterButtonConfig. */
6046
- readonly applyButton: _angular_core.InputSignal<string | SuiFooterButtonConfig>;
6047
- /** Tamaño de los botones. Default 'small' (Figma: p-8px/radius-8 = size small). */
6048
- 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" | "large" | "medium">;
6049
6503
  /** Config resuelta del botón Clear (string → { label }). */
6050
6504
  protected readonly clearCfg: _angular_core.Signal<SuiFooterButtonConfig>;
6051
6505
  /** Config resuelta del botón Apply (string → { label }). */
@@ -6288,10 +6742,14 @@ interface SuiImageUploadProfileLabels {
6288
6742
  * el consumer cablea (upload)/(change) a su propio <input type=file> o flujo.
6289
6743
  */
6290
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>;
6291
6747
  readonly imageUrl: _angular_core.InputSignal<string | null>;
6292
6748
  readonly companyLogoSrc: _angular_core.InputSignal<string | null>;
6293
- readonly title: _angular_core.InputSignal<string>;
6294
- 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>;
6295
6753
  readonly alignment: _angular_core.InputSignal<SuiImageUploadProfileAlignment>;
6296
6754
  readonly type: _angular_core.InputSignal<SuiImageUploadProfileType>;
6297
6755
  /** Copy de los botones (i18n) — objeto parcial; lo no seteado cae al default. */
@@ -6428,6 +6886,8 @@ declare function esImagenAceptada(file: Pick<File, 'type' | 'name'>): boolean;
6428
6886
  * - errorEvent: mensaje de error de validación
6429
6887
  */
6430
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>;
6431
6891
  /**
6432
6892
  * Ocupa el ancho del contenedor en vez del cuadrado fijo de `size`.
6433
6893
  *
@@ -6461,9 +6921,9 @@ declare class SuiImageUpload {
6461
6921
  protected readonly sizePx: _angular_core.Signal<number>;
6462
6922
  /** Camera icon px en el empty state. xl escala a 20, resto 16
6463
6923
  * (matchea el escalado del contenedor 32→40 en SCSS). */
6464
- protected readonly iconSize: _angular_core.Signal<20 | 16>;
6924
+ protected readonly iconSize: _angular_core.Signal<16 | 20>;
6465
6925
  /** Ícono del lápiz y el tacho (editable): 20 en botones de 40, 16 en sm (32). */
6466
- protected readonly ctrlIconSize: _angular_core.Signal<20 | 16>;
6926
+ protected readonly ctrlIconSize: _angular_core.Signal<16 | 20>;
6467
6927
  protected readonly hasSrc: _angular_core.Signal<boolean>;
6468
6928
  /** Hay imagen y se muestra el botón «Quitar» debajo (sin `editable`). */
6469
6929
  protected readonly conQuitar: _angular_core.Signal<boolean>;
@@ -6498,7 +6958,7 @@ declare class SuiImageUpload {
6498
6958
  private processFile;
6499
6959
  private formatBytes;
6500
6960
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiImageUpload, never>;
6501
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiImageUpload, "sui-image-upload", never, { "fluid": { "alias": "fluid"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "src": { "alias": "src"; "required": false; "isSignal": true; }; "maxSize": { "alias": "maxSize"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; }, { "src": "srcChange"; "imageSelected": "imageSelected"; "removed": "removed"; "editRequested": "editRequested"; "errorEvent": "errorEvent"; }, never, never, true, never>;
6961
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiImageUpload, "sui-image-upload", never, { "fluid": { "alias": "fluid"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "src": { "alias": "src"; "required": false; "isSignal": true; }; "maxSize": { "alias": "maxSize"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; }, { "src": "srcChange"; "imageSelected": "imageSelected"; "removed": "removed"; "editRequested": "editRequested"; "errorEvent": "errorEvent"; }, never, never, true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
6502
6962
  }
6503
6963
 
6504
6964
  /**
@@ -6574,10 +7034,13 @@ declare class SuiImageUpload {
6574
7034
  * No se modeló como prop; el render lo cubre el value().
6575
7035
  */
6576
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>;
6577
7039
  /** Valor del input (two-way bindable + CVA). */
6578
7040
  readonly value: _angular_core.ModelSignal<string>;
6579
7041
  /** Placeholder mostrado cuando value está vacío. */
6580
- readonly placeholder: _angular_core.InputSignal<string>;
7042
+ readonly placeholder: _angular_core.InputSignal<string | null>;
7043
+ protected readonly placeholderTexto: _angular_core.Signal<string>;
6581
7044
  /**
6582
7045
  * Leading icon (RemixIcon name). `false` lo oculta. Default 'user-3-line'
6583
7046
  * (espeja el símbolo Figma).
@@ -6588,7 +7051,8 @@ declare class SuiInlineInput implements ControlValueAccessor {
6588
7051
  /** Deshabilita la interacción. */
6589
7052
  readonly disabled: _angular_core.InputSignal<boolean>;
6590
7053
  /** Texto del botón "editar" para a11y (aria-label). */
6591
- readonly editLabel: _angular_core.InputSignal<string>;
7054
+ readonly editLabel: _angular_core.InputSignal<string | null>;
7055
+ protected readonly editLabelTexto: _angular_core.Signal<string>;
6592
7056
  /** Emite el valor confirmado (botón check / Enter). */
6593
7057
  readonly confirm: _angular_core.OutputEmitterRef<string>;
6594
7058
  /** Emite cuando se cancela la edición (botón close / Escape). */
@@ -6685,7 +7149,7 @@ declare class SuiInlineSelect<T = string> implements ControlValueAccessor {
6685
7149
  registerOnTouched(fn: () => void): void;
6686
7150
  setDisabledState(isDisabled: boolean): void;
6687
7151
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiInlineSelect<any>, never>;
6688
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiInlineSelect<any>, "sui-inline-select", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "flag": { "alias": "flag"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "selected": "selectedChange"; "clicked": "clicked"; "selectedChange": "selectedChange"; }, never, never, true, never>;
7152
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiInlineSelect<any>, "sui-inline-select", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "flag": { "alias": "flag"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "selected": "selectedChange"; "clicked": "clicked"; "selectedChange": "selectedChange"; }, never, never, true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
6689
7153
  }
6690
7154
 
6691
7155
  /**
@@ -6715,6 +7179,8 @@ type SuiInputMode = 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' |
6715
7179
  */
6716
7180
  type SuiInputEnterKeyHint = 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send';
6717
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>;
6718
7184
  readonly size: _angular_core.InputSignal<SuiInputSize>;
6719
7185
  readonly type: _angular_core.InputSignal<SuiInputType>;
6720
7186
  readonly placeholder: _angular_core.InputSignal<string>;
@@ -6823,7 +7289,7 @@ declare class SuiInput implements ControlValueAccessor {
6823
7289
  readonly showClear: _angular_core.InputSignal<boolean>;
6824
7290
  /** Remix icon name for built-in icon slot */
6825
7291
  readonly icon: _angular_core.InputSignal<string | null>;
6826
- readonly iconPosition: _angular_core.InputSignal<"left" | "right">;
7292
+ readonly iconPosition: _angular_core.InputSignal<"right" | "left">;
6827
7293
  /**
6828
7294
  * Cuando un pointerdown ocurre fuera del host del componente, hace blur en
6829
7295
  * el input — cierra el teclado iOS al tocar zonas no-interactivas. Default
@@ -7092,6 +7558,8 @@ interface SuiIntegrationManageConfig {
7092
7558
  * <sui-integration-switch title="..." [manage]="false" />
7093
7559
  */
7094
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>;
7095
7563
  private static _nextId;
7096
7564
  /** El sui-switch interno toma su nombre del título (aria-labelledby) y su
7097
7565
  * descripción de la descripción: antes el lector decía solo «interruptor»
@@ -7515,6 +7983,10 @@ declare class SuiModalSheet implements OnDestroy {
7515
7983
  excede un threshold y la condición de scroll lo permite. Sirve para no
7516
7984
  robar tap/click a buttons internos. */
7517
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;
7518
7990
  /** Threshold de movimiento (px) para decidir que un pointermove en body es
7519
7991
  drag (no tap). 5px = más sensible que el iOS canon de 8px: el dueño pidió
7520
7992
  "como nativo" y el 8 sentía que tardaba en activar. Trade-off: 5px puede
@@ -7598,6 +8070,11 @@ declare class SuiModalSheet implements OnDestroy {
7598
8070
  /** Heurística: ignorar drag si el target es un input/textarea/select/button
7599
8071
  interactivo. El user está intentando interactuar, no arrastrar. */
7600
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;
7601
8078
  /** Duración del snap en función de la distancia restante y la velocidad del
7602
8079
  dedo (px/ms): un fling rápido cierra la distancia en poco tiempo; un
7603
8080
  release lento o un snap programático usa la duración larga. Acotado a
@@ -7743,6 +8220,8 @@ type SuiModalStatusAlignment = 'horizontal' | 'vertical';
7743
8220
  * [slot="footer"]: action buttons row
7744
8221
  */
7745
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>;
7746
8225
  private readonly doc;
7747
8226
  readonly open: _angular_core.ModelSignal<boolean>;
7748
8227
  readonly size: _angular_core.InputSignal<SuiModalSize>;
@@ -7917,6 +8396,8 @@ type SuiModalHeaderVariant = 'info' | 'success' | 'warning' | 'error';
7917
8396
  * <sui-modal-header size="small" title="Filtros" (closed)="cerrar()" />
7918
8397
  */
7919
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>;
7920
8401
  /** Título del header (Label/Small). */
7921
8402
  readonly title: _angular_core.InputSignal<string>;
7922
8403
  /** Descripción bajo el título (Paragraph/X-Small). */
@@ -8048,10 +8529,12 @@ declare class SuiModalFooter {
8048
8529
  * que existe en RemixIcon; si el panel real usa otro glyph, ajustar el name.
8049
8530
  */
8050
8531
  declare class SuiNotificationFooter {
8051
- /** Label default del link de gestión (Figma "Manage Notification"). */
8052
- private static readonly DEFAULT_MANAGE_LABEL;
8053
- readonly usePrefix: _angular_core.InputSignal<string>;
8054
- 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>;
8055
8538
  /** Link de gestión — true = label default ('Administrar notificaciones'); string =
8056
8539
  * label custom (emite `manageClick`); SuiLinkConfig { label, href?, target?,
8057
8540
  * rel? }: con href renderiza <a> real, rel automático 'noopener noreferrer'
@@ -8161,12 +8644,15 @@ interface SuiNotificationTab<T = string> {
8161
8644
  * trae el fix dentro de <sui-compact-button>.
8162
8645
  */
8163
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>;
8164
8649
  readonly tabs: _angular_core.InputSignal<SuiNotificationTab<T>[]>;
8165
8650
  readonly active: _angular_core.ModelSignal<T | undefined>;
8166
8651
  /** Renderiza el botón de filtro absoluto a la derecha (Figma prop `button`). */
8167
8652
  readonly showFilter: _angular_core.InputSignal<boolean>;
8168
8653
  /** aria-label del botón de filtro. */
8169
- readonly filterLabel: _angular_core.InputSignal<string>;
8654
+ readonly filterLabel: _angular_core.InputSignal<string | null>;
8655
+ protected readonly filterLabelTexto: _angular_core.Signal<string>;
8170
8656
  readonly tabChange: _angular_core.OutputEmitterRef<T>;
8171
8657
  readonly filterClick: _angular_core.OutputEmitterRef<MouseEvent>;
8172
8658
  private readonly tabItems?;
@@ -8248,6 +8734,8 @@ type SuiNotificationStyle = 'filled' | 'light' | 'lighter' | 'stroke';
8248
8734
  * - showIcon/iconName status icons
8249
8735
  */
8250
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>;
8251
8739
  readonly variant: _angular_core.InputSignal<SuiNotificationVariant>;
8252
8740
  readonly variantStyle: _angular_core.InputSignal<SuiNotificationStyle>;
8253
8741
  readonly title: _angular_core.InputSignal<string | null>;
@@ -8264,7 +8752,7 @@ declare class SuiNotification {
8264
8752
  readonly dismissible: _angular_core.InputSignal<boolean>;
8265
8753
  readonly unread: _angular_core.InputSignal<boolean>;
8266
8754
  /** Item body type. 'basic' keeps the legacy/alert layout (no body slot). */
8267
- readonly type: _angular_core.InputSignal<"basic" | "file" | "button" | "message">;
8755
+ readonly type: _angular_core.InputSignal<"file" | "basic" | "button" | "message">;
8268
8756
  /** When true, item paints the Figma hover bg + reveals the more-2-line button. */
8269
8757
  readonly showMore: _angular_core.InputSignal<boolean>;
8270
8758
  /** Forces the hover affordance visible (e.g. keyboard-focused row). */
@@ -8365,13 +8853,17 @@ type SuiOtpInputSize = 'large' | 'medium' | 'small';
8365
8853
  * diseño los pide en una pantalla concreta, se compone con 2 sui-otp-input.
8366
8854
  */
8367
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;
8368
8859
  readonly length: _angular_core.InputSignal<number>;
8369
8860
  /** Tamaño de la celda: large 80×64 (guía, default) · medium 52×56 · small 44×48. */
8370
8861
  readonly size: _angular_core.InputSignal<SuiOtpInputSize>;
8371
8862
  readonly type: _angular_core.InputSignal<SuiOtpInputType>;
8372
8863
  readonly disabled: _angular_core.ModelSignal<boolean>;
8373
8864
  readonly error: _angular_core.InputSignal<boolean>;
8374
- readonly ariaLabel: _angular_core.InputSignal<string>;
8865
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
8866
+ protected readonly ariaLabelTexto: _angular_core.Signal<string>;
8375
8867
  readonly value: _angular_core.ModelSignal<string>;
8376
8868
  readonly completed: _angular_core.OutputEmitterRef<string>;
8377
8869
  /** Array de caracteres, length === this.length(). */
@@ -8490,6 +8982,9 @@ type SuiPaginationInfoFormat = 'items' | 'pages';
8490
8982
  * @output pageSizeChange Emite el nuevo page size cuando el user lo cambia
8491
8983
  */
8492
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;
8493
8988
  readonly total: _angular_core.InputSignal<number>;
8494
8989
  readonly pageSize: _angular_core.ModelSignal<number>;
8495
8990
  readonly siblingCount: _angular_core.InputSignal<number>;
@@ -8617,18 +9112,24 @@ declare const SUI_PASSWORD_STRENGTH_DEFAULT_LEVEL_LABELS: Record<SuiPasswordStre
8617
9112
  * <sui-password-strength strength="moderate" [conditions]="[]" caption="" />
8618
9113
  */
8619
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>;
8620
9117
  /** Contraseña a evaluar — deriva las condiciones cumplidas y el nivel. */
8621
9118
  readonly value: _angular_core.InputSignal<string>;
8622
9119
  /** Override manual del nivel — presente gana sobre el derivado de `value`. */
8623
9120
  readonly strength: _angular_core.InputSignal<SuiPasswordStrengthLevel | null>;
8624
9121
  /** Caption sobre la checklist. '' = oculto. */
8625
- readonly caption: _angular_core.InputSignal<string>;
8626
- /** Checklist de condiciones. [] = sin checklist (solo barra + caption). */
8627
- 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[]>;
8628
9128
  /** Textos del nivel para lectores de pantalla (merge sobre los defaults ES). */
8629
9129
  readonly levelLabels: _angular_core.InputSignal<Partial<Record<SuiPasswordStrengthLevel, string>>>;
8630
9130
  /** Label accesible del progressbar. */
8631
- readonly ariaLabel: _angular_core.InputSignal<string>;
9131
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
9132
+ protected readonly ariaLabelTexto: _angular_core.Signal<string>;
8632
9133
  /** Emite el nivel resuelto cada vez que cambia (no emite el inicial). */
8633
9134
  readonly strengthChange: _angular_core.OutputEmitterRef<SuiPasswordStrengthLevel>;
8634
9135
  /** Condiciones evaluadas: `met` manual gana; sino corre `test` sobre `value`. */
@@ -8736,6 +9237,8 @@ type SuiPopoverFooter = 'none' | 'stretch' | 'text-stepper' | 'stepper';
8736
9237
  teléfono — size nuevo 04-10-2026 (dueño: piso táctil 44). */
8737
9238
  type SuiPopoverSize = 'small' | 'medium' | 'large';
8738
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>;
8739
9242
  /** Placement axis del tail relativo al trigger (12 variantes Figma). */
8740
9243
  readonly position: _angular_core.InputSignal<SuiPopoverPosition>;
8741
9244
  /** Mostrar la cola/flecha (tail SVG). */
@@ -8750,10 +9253,12 @@ declare class SuiPopover {
8750
9253
  readonly dismissIcon: _angular_core.InputSignal<boolean>;
8751
9254
  /** Tipo de footer. `none` oculta el footer y el separador. */
8752
9255
  readonly footer: _angular_core.InputSignal<SuiPopoverFooter>;
8753
- /** Texto del botón secundario (izquierda). */
8754
- readonly backLabel: _angular_core.InputSignal<string>;
8755
- /** Texto del botón primario (derecha). */
8756
- 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>;
8757
9262
  /** Renderear el botón secundario (Back). Si false, solo se muestra el primario. */
8758
9263
  readonly doubleButton: _angular_core.InputSignal<boolean>;
8759
9264
  /** Progreso del stepper — { current (1-based), total }. Usado en text-stepper
@@ -8842,6 +9347,8 @@ type SuiProgressBarSize = 'small' | 'medium' | 'large' | 'xlarge';
8842
9347
  * - ariaLabel: string opcional para `aria-label` del role=progressbar.
8843
9348
  */
8844
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>;
8845
9352
  readonly value: _angular_core.InputSignal<number>;
8846
9353
  readonly color: _angular_core.InputSignal<SuiProgressBarColor>;
8847
9354
  readonly size: _angular_core.InputSignal<SuiProgressBarSize>;
@@ -8970,7 +9477,8 @@ interface SuiRadioGroupItem {
8970
9477
  value(): unknown;
8971
9478
  /** Deshabilitada por input, por form o por el grupo. */
8972
9479
  isDisabled(): boolean;
8973
- /** 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). */
8974
9482
  readonly el: HTMLElement;
8975
9483
  /** Selecciona la opción por su camino normal (emite sus outputs). */
8976
9484
  activateFromGroup(): void;
@@ -9063,7 +9571,7 @@ declare class SuiRadio implements OnInit, SuiRadioGroupItem {
9063
9571
  activateFromGroup(): void;
9064
9572
  onToggle(e: Event): void;
9065
9573
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiRadio, never>;
9066
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiRadio, "sui-radio", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "focusable": { "alias": "focusable"; "required": false; "isSignal": true; }; "standaloneChecked": { "alias": "standaloneChecked"; "required": false; "isSignal": true; }; }, { "standaloneChecked": "standaloneCheckedChange"; }, never, never, true, never>;
9574
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiRadio, "sui-radio", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "focusable": { "alias": "focusable"; "required": false; "isSignal": true; }; "standaloneChecked": { "alias": "standaloneChecked"; "required": false; "isSignal": true; }; }, { "standaloneChecked": "standaloneCheckedChange"; }, never, never, true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
9067
9575
  }
9068
9576
 
9069
9577
  type SuiRadioCardType = 'basic' | 'left-icon' | 'avatar' | 'card-provider' | 'brand' | 'company';
@@ -9168,7 +9676,7 @@ declare class SuiRadioCard implements ControlValueAccessor, OnInit, SuiRadioGrou
9168
9676
  readonly size: _angular_core.InputSignal<SuiRadioSize>;
9169
9677
  /** Lado en px del radio según size: medium 20 · large 24 · xlarge 28. Los
9170
9678
  * insets internos (bg/box) son % → escalan solos. */
9171
- readonly radioPx: _angular_core.Signal<20 | 24 | 28>;
9679
+ readonly radioPx: _angular_core.Signal<24 | 20 | 28>;
9172
9680
  /** Valor del radio (requerido para uso en grupo). */
9173
9681
  readonly value: _angular_core.InputSignal<string>;
9174
9682
  /** Título principal del card (label de la fila Title). */
@@ -9187,7 +9695,7 @@ declare class SuiRadioCard implements ControlValueAccessor, OnInit, SuiRadioGrou
9187
9695
  * Emoji del catálogo SUI_EMOJI_MAP — alternativa a icon para type='left-icon'.
9188
9696
  * Si ambos están, icon tiene precedencia.
9189
9697
  */
9190
- readonly emoji: _angular_core.InputSignal<"label" | "warning" | "pensive-face" | "confused-face" | "neutral-face" | "slightly-smiling-face" | "grinning-face-smiling-eyes" | "thinking-face" | "grinning-face" | "smiling-face-hearts" | "face-with-rolling-eyes" | "face-screaming" | "partying-face" | "star-struck" | "sleeping-face" | "package" | "receipt" | "money-bag" | "money-with-wings" | "shopping-cart" | "shopping-bags" | "card-index-dividers" | "bell" | "bell-with-slash" | "pushpin" | "mobile-phone" | "gear" | "locked" | "unlocked" | "wrench" | "hammer" | "magnifying-glass-tilted-left" | "spiral-calendar" | "bar-chart" | "delivery-truck" | "motorcycle" | "rocket" | "house" | "office-building" | "shop" | "dollar-banknote" | "glowing-star" | "kick-scooter" | "check-mark" | "check-mark-button" | "cross-mark" | "no-entry" | "sparkles" | "party-popper" | "waving-hand" | "thumbs-up" | "clapping-hands" | "handshake" | "busts-in-silhouette" | "pizza" | "hamburger" | "taco" | "birthday-cake" | null>;
9698
+ readonly emoji: _angular_core.InputSignal<"warning" | "label" | "pensive-face" | "confused-face" | "neutral-face" | "slightly-smiling-face" | "grinning-face-smiling-eyes" | "thinking-face" | "grinning-face" | "smiling-face-hearts" | "face-with-rolling-eyes" | "face-screaming" | "partying-face" | "star-struck" | "sleeping-face" | "package" | "receipt" | "money-bag" | "money-with-wings" | "shopping-cart" | "shopping-bags" | "card-index-dividers" | "bell" | "bell-with-slash" | "pushpin" | "mobile-phone" | "gear" | "locked" | "unlocked" | "wrench" | "hammer" | "magnifying-glass-tilted-left" | "spiral-calendar" | "bar-chart" | "delivery-truck" | "motorcycle" | "rocket" | "house" | "office-building" | "shop" | "dollar-banknote" | "glowing-star" | "kick-scooter" | "check-mark" | "check-mark-button" | "cross-mark" | "no-entry" | "sparkles" | "party-popper" | "waving-hand" | "thumbs-up" | "clapping-hands" | "handshake" | "busts-in-silhouette" | "pizza" | "hamburger" | "taco" | "birthday-cake" | null>;
9191
9699
  /**
9192
9700
  * URL directa al emoji para type='left-icon'. Útil cuando el consumer ya tiene
9193
9701
  * la URL (ej. FLUENT_EMOJI map del proyecto) y no quiere registrar el emoji
@@ -9234,7 +9742,7 @@ declare class SuiRadioCard implements ControlValueAccessor, OnInit, SuiRadioGrou
9234
9742
  registerOnTouched(fn: () => void): void;
9235
9743
  setDisabledState(isDisabled: boolean): void;
9236
9744
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiRadioCard, never>;
9237
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiRadioCard, "sui-radio-card", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "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; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "emoji": { "alias": "emoji"; "required": false; "isSignal": true; }; "iconSrc": { "alias": "iconSrc"; "required": false; "isSignal": true; }; "imageUrl": { "alias": "imageUrl"; "required": false; "isSignal": true; }; "brand": { "alias": "brand"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "selected": "selected"; }, never, never, true, never>;
9745
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiRadioCard, "sui-radio-card", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "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; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "emoji": { "alias": "emoji"; "required": false; "isSignal": true; }; "iconSrc": { "alias": "iconSrc"; "required": false; "isSignal": true; }; "imageUrl": { "alias": "imageUrl"; "required": false; "isSignal": true; }; "brand": { "alias": "brand"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "selected": "selected"; }, never, never, true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
9238
9746
  }
9239
9747
 
9240
9748
  /**
@@ -9262,11 +9770,14 @@ type SuiRadioLabelSize = 'medium' | 'large' | 'xlarge' | '2xlarge';
9262
9770
  * (group.value() === value() ⇒ checked; click ⇒ group.select(value)).
9263
9771
  * - Standalone: model two-way `checked` + output `selected`.
9264
9772
  * - El sui-radio interno es SOLO visual (pointer-events none en SCSS):
9265
- * 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
9266
9774
  * selección, sin doble-toggle.
9267
9775
  *
9268
- * A11y: host role="radio" + aria-checked + Space/Enter seleccionan.
9269
- * 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).
9270
9781
  *
9271
9782
  * Usage:
9272
9783
  * <sui-radio-group [(ngModel)]="plan">
@@ -9280,7 +9791,12 @@ declare class SuiRadioLabel implements OnInit, SuiRadioGroupItem {
9280
9791
  private static _nextId;
9281
9792
  private readonly group;
9282
9793
  private readonly destroyRef;
9283
- 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;
9284
9800
  protected readonly labelId: string;
9285
9801
  protected readonly descriptionId: string;
9286
9802
  /** Valor que representa esta opción dentro del grupo. */
@@ -9481,6 +9997,8 @@ interface SuiRatingCellView {
9481
9997
  * disabled deshabilita clicks/hover igual que readonly=true (ver isInteractive).
9482
9998
  */
9483
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>;
9484
10002
  private readonly el;
9485
10003
  readonly appearance: _angular_core.InputSignal<SuiRatingAppearance>;
9486
10004
  readonly type: _angular_core.InputSignal<SuiRatingType>;
@@ -9500,14 +10018,16 @@ declare class SuiRating implements ControlValueAccessor {
9500
10018
  * Si pasas un string que NO está en el map, sui-emoji renderea broken image.
9501
10019
  */
9502
10020
  readonly emojis: _angular_core.InputSignal<string[]>;
9503
- readonly ariaLabel: _angular_core.InputSignal<string>;
10021
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
10022
+ protected readonly ariaLabelTexto: _angular_core.Signal<string>;
9504
10023
  /**
9505
10024
  * appearance='bar-area' — texto del reason (textarea "Tell us why!").
9506
10025
  * model<string> para two-way binding. Ignorado en inline/bar.
9507
10026
  */
9508
10027
  readonly reason: _angular_core.ModelSignal<string>;
9509
10028
  /** Placeholder del textarea en bar-area. Figma: "Tell us why!". */
9510
- readonly reasonPlaceholder: _angular_core.InputSignal<string>;
10029
+ readonly reasonPlaceholder: _angular_core.InputSignal<string | null>;
10030
+ protected readonly reasonPlaceholderTexto: _angular_core.Signal<string>;
9511
10031
  /** Filas del textarea en bar-area. El alto mínimo del área de comentario lo
9512
10032
  * fija el CSS (min-height 72px = Figma) para preservar el envelope del card;
9513
10033
  * `rows` solo importa si se quiere un área inicial MÁS alta que ese piso. */
@@ -9538,7 +10058,7 @@ declare class SuiRating implements ControlValueAccessor {
9538
10058
  * bar/bar-area usan 20px hardcoded en el template (no pasan por aquí). */
9539
10059
  readonly iconPx: _angular_core.Signal<number>;
9540
10060
  /** Rol del host: `img` para la nota de solo lectura (o `group` si trae link), `radiogroup` para pedirla. */
9541
- protected readonly hostRole: _angular_core.Signal<"group" | "img" | "radiogroup">;
10061
+ protected readonly hostRole: _angular_core.Signal<"img" | "group" | "radiogroup">;
9542
10062
  /** Nombre accesible: interactivo = `ariaLabel`; readonly = «Calificación: 4,5 de 5, 120 calificaciones». */
9543
10063
  protected readonly hostAriaLabel: _angular_core.Signal<string>;
9544
10064
  /** Índice (1..max) de la celda con tabindex 0: la elegida, o la primera. */
@@ -9639,7 +10159,7 @@ declare class SuiRichEditorItem {
9639
10159
  readonly hasIcon: _angular_core.Signal<boolean>;
9640
10160
  protected onClick(): void;
9641
10161
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiRichEditorItem, never>;
9642
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiRichEditorItem, "sui-rich-editor-item", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "colorHex": { "alias": "colorHex"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
10162
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiRichEditorItem, "sui-rich-editor-item", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "colorHex": { "alias": "colorHex"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
9643
10163
  }
9644
10164
 
9645
10165
  /**
@@ -9667,6 +10187,8 @@ interface SuiRichEditorAction {
9667
10187
  active: boolean;
9668
10188
  }
9669
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>;
9670
10192
  /** Layout del toolbar (4 variantes Figma). Default `full`. */
9671
10193
  readonly layout: _angular_core.InputSignal<SuiRichEditorLayout>;
9672
10194
  /** Muestra el divider + botón `more-2-line` (overflow) al final. Default true. */
@@ -9679,11 +10201,13 @@ declare class SuiRichEditor {
9679
10201
  */
9680
10202
  readonly editable: _angular_core.InputSignal<boolean>;
9681
10203
  /** Placeholder del área editable. */
9682
- readonly placeholder: _angular_core.InputSignal<string>;
10204
+ readonly placeholder: _angular_core.InputSignal<string | null>;
10205
+ protected readonly placeholderTexto: _angular_core.Signal<string>;
9683
10206
  /** Contenido HTML del editable. Two-way `[(value)]`. */
9684
10207
  readonly value: _angular_core.ModelSignal<string>;
9685
10208
  /** Label de heading mostrado en el item tipo text (layout full/compact). */
9686
- readonly headingLabel: _angular_core.InputSignal<string>;
10209
+ readonly headingLabel: _angular_core.InputSignal<string | null>;
10210
+ protected readonly headingLabelTexto: _angular_core.Signal<string>;
9687
10211
  /** Label de tamaño de fuente mostrado en el item tipo text. */
9688
10212
  readonly fontSizeLabel: _angular_core.InputSignal<string>;
9689
10213
  /** Emitido cada vez que se acciona un comando del toolbar. */
@@ -9810,11 +10334,14 @@ interface SuiSelectOption<T = any> {
9810
10334
  * naranja, DECISIONES.md §1) replican pixel-exacto el chip del Figma.
9811
10335
  */
9812
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>;
9813
10339
  readonly size: _angular_core.InputSignal<SuiSelectSize>;
9814
10340
  /** El rótulo no crece con el control: su escala llega a `medium`. Ver la nota
9815
10341
  * en `sui-input`, que hace exactamente lo mismo. */
9816
10342
  protected readonly labelSize: _angular_core.Signal<SuiFormLabelSize>;
9817
- readonly placeholder: _angular_core.InputSignal<string>;
10343
+ readonly placeholder: _angular_core.InputSignal<string | null>;
10344
+ protected readonly placeholderTexto: _angular_core.Signal<string>;
9818
10345
  readonly options: _angular_core.InputSignal<SuiSelectOption<T>[]>;
9819
10346
  readonly disabled: _angular_core.InputSignal<boolean>;
9820
10347
  readonly error: _angular_core.InputSignal<boolean>;
@@ -9955,8 +10482,10 @@ interface SuiSidebarBrandConfig {
9955
10482
  }
9956
10483
  /** Config del search slot (Figma prop search=true). Patrón objeto, como `profile`. */
9957
10484
  interface SuiSidebarSearchConfig {
9958
- /** Placeholder del input. Default 'Search...'. */
10485
+ /** Placeholder del input. Default 'Buscar…'. */
9959
10486
  placeholder?: string;
10487
+ /** Nombre accesible del campo. Omitir → el lector anuncia el placeholder. */
10488
+ ariaLabel?: string;
9960
10489
  /** Shortcut pill dentro del search (ej. '⌘1'). Omitir → sin pill. */
9961
10490
  shortcut?: string;
9962
10491
  }
@@ -9976,6 +10505,8 @@ interface SuiSidebarProfile {
9976
10505
  /** Color del indicator bar / icon activo. */
9977
10506
  type SuiSidebarIndicatorColor = 'information' | 'brand';
9978
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>;
9979
10510
  /**
9980
10511
  * Estado colapsado (icon-only, 80px). Oculta labels/subtítulos/shortcuts/
9981
10512
  * badges y centra los iconos. Figma variant Collapsed=On. Default false.
@@ -10007,7 +10538,7 @@ declare class SuiSidebar {
10007
10538
  /**
10008
10539
  * Search encima de las secciones:
10009
10540
  * - `false` / `null` (default): sin search
10010
- * - `true`: search con defaults (placeholder 'Search...', sin shortcut)
10541
+ * - `true`: search con defaults (placeholder 'Buscar…', sin shortcut)
10011
10542
  * - objeto `{ placeholder?, shortcut? }`: search configurado
10012
10543
  */
10013
10544
  readonly search: _angular_core.InputSignal<boolean | SuiSidebarSearchConfig | null>;
@@ -10089,10 +10620,11 @@ declare class SuiSidebar {
10089
10620
  protected readonly brandCfg: _angular_core.Signal<SuiSidebarBrandConfig>;
10090
10621
  /**
10091
10622
  * Search normalizado: null → sin search; objeto con defaults aplicados
10092
- * (placeholder 'Search...') cuando search=true o config parcial.
10623
+ * (placeholder 'Buscar…') cuando search=true o config parcial.
10093
10624
  */
10094
10625
  protected readonly searchCfg: _angular_core.Signal<{
10095
10626
  placeholder: string;
10627
+ ariaLabel: string;
10096
10628
  shortcut: string | null;
10097
10629
  } | null>;
10098
10630
  /**
@@ -10182,6 +10714,8 @@ type SuiSliderType = 'single' | 'range';
10182
10714
  */
10183
10715
  type SuiSliderSize = 'medium' | 'large';
10184
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>;
10185
10719
  private readonly hostRef;
10186
10720
  readonly type: _angular_core.InputSignal<SuiSliderType>;
10187
10721
  /** `medium` (default, Figma) o `large` (mobile, extensión SUI). */
@@ -10221,9 +10755,9 @@ declare class SuiSlider implements ControlValueAccessor {
10221
10755
  private readonly _cvaValue;
10222
10756
  private readonly _useCvaValue;
10223
10757
  /** Handle siendo arrastrado: null | 'single' | 'min' | 'max'. */
10224
- readonly dragging: _angular_core.WritableSignal<"min" | "max" | "single" | null>;
10758
+ readonly dragging: _angular_core.WritableSignal<"max" | "single" | "min" | null>;
10225
10759
  /** Handle bajo hover (para tooltip): igual dominio que dragging. */
10226
- readonly hovering: _angular_core.WritableSignal<"min" | "max" | "single" | null>;
10760
+ readonly hovering: _angular_core.WritableSignal<"max" | "single" | "min" | null>;
10227
10761
  private clamp;
10228
10762
  readonly effectiveValue: _angular_core.Signal<number>;
10229
10763
  readonly effectiveMin: _angular_core.Signal<number>;
@@ -10245,7 +10779,7 @@ declare class SuiSlider implements ControlValueAccessor {
10245
10779
  /** Single: el texto de `amount` (lo que se ve) o el valor con la unidad. */
10246
10780
  readonly singleValueText: _angular_core.Signal<string | null>;
10247
10781
  /** Range: cada manija dice cuál es («Precio, mínimo» / «Precio, máximo»). */
10248
- thumbLabel(extremo: 'mínimo' | 'máximo'): string;
10782
+ thumbLabel(cual: 'min' | 'max'): string;
10249
10783
  private showTooltipFor;
10250
10784
  readonly showSingleTooltip: _angular_core.Signal<boolean>;
10251
10785
  readonly showMinTooltip: _angular_core.Signal<boolean>;
@@ -10343,6 +10877,8 @@ type SuiSocialButtonSize = 'medium' | 'large';
10343
10877
  * target="_blank" />
10344
10878
  */
10345
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>;
10346
10882
  readonly brand: _angular_core.InputSignal<SuiSocialButtonBrand>;
10347
10883
  readonly variantStyle: _angular_core.InputSignal<SuiSocialButtonStyle>;
10348
10884
  readonly onlyIcon: _angular_core.InputSignal<boolean>;
@@ -10356,7 +10892,7 @@ declare class SuiSocialButton {
10356
10892
  readonly href: _angular_core.InputSignal<string | null>;
10357
10893
  readonly target: _angular_core.InputSignal<string | null>;
10358
10894
  readonly rel: _angular_core.InputSignal<string | null>;
10359
- readonly type: _angular_core.InputSignal<"button" | "submit" | "reset">;
10895
+ readonly type: _angular_core.InputSignal<"button" | "reset" | "submit">;
10360
10896
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
10361
10897
  readonly clicked: _angular_core.OutputEmitterRef<MouseEvent>;
10362
10898
  /** Disabled efectivo: el input disabled O el estado loading. */
@@ -10375,7 +10911,7 @@ declare class SuiSocialButton {
10375
10911
  /** Logo style derivado del button style + tema. filled → siempre blanco; stroke →
10376
10912
  * `original`, salvo dark + marca monocromática oscura, donde usa `white` para no
10377
10913
  * perder el logo sobre la superficie oscura (ver MONO_DARK_BRANDS). */
10378
- readonly logoStyle: _angular_core.Signal<"white" | "original">;
10914
+ readonly logoStyle: _angular_core.Signal<"original" | "white">;
10379
10915
  /** Color de fondo brand-specific (solo aplica si style=filled). */
10380
10916
  readonly filledBg: _angular_core.Signal<string | null>;
10381
10917
  /** Label final: input.label > default por brand. */
@@ -10588,6 +11124,8 @@ interface SuiStepperItemView {
10588
11124
  * proyecto, NO existen en los nodos Figma auditados — preservados intactos.
10589
11125
  */
10590
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>;
10591
11129
  readonly variant: _angular_core.InputSignal<SuiStepperVariant>;
10592
11130
  readonly steps: _angular_core.InputSignal<SuiStepperItem[]>;
10593
11131
  readonly count: _angular_core.InputSignal<number>;
@@ -10598,7 +11136,8 @@ declare class SuiStepper {
10598
11136
  readonly errorStep: _angular_core.InputSignal<number | null>;
10599
11137
  readonly size: _angular_core.InputSignal<SuiStepperSize>;
10600
11138
  readonly interactive: _angular_core.InputSignal<boolean>;
10601
- readonly ariaLabel: _angular_core.InputSignal<string>;
11139
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
11140
+ protected readonly ariaLabelTexto: _angular_core.Signal<string>;
10602
11141
  readonly stepClick: _angular_core.OutputEmitterRef<number>;
10603
11142
  /** Ícono del indicador (completed / error): 24 en medium, 20 en los de Figma.
10604
11143
  * Es el indicador mismo, por eso crece; separador y chevron se quedan en 20. */
@@ -10891,7 +11430,7 @@ declare class SuiProductCard {
10891
11430
  /** Glyph del «+» / lápiz: 18 en small, 20 en medium y large. */
10892
11431
  readonly iconSize: _angular_core.Signal<20 | 18>;
10893
11432
  /** Glyph del stepper: 16 en small, 20 en medium y large. */
10894
- readonly stepIconSize: _angular_core.Signal<20 | 16>;
11433
+ readonly stepIconSize: _angular_core.Signal<16 | 20>;
10895
11434
  readonly showStepper: _angular_core.Signal<boolean>;
10896
11435
  /** Config resuelta de la imagen (string → { url }; `position` default 50).
10897
11436
  * null = sin imagen → fallback. */
@@ -10972,7 +11511,7 @@ declare class SuiSwitch implements ControlValueAccessor {
10972
11511
  registerOnTouched(fn: any): void;
10973
11512
  setDisabledState(isDisabled: boolean): void;
10974
11513
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiSwitch, never>;
10975
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiSwitch, "sui-switch", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "focusable": { "alias": "focusable"; "required": false; "isSignal": true; }; }, { "checkedChange": "checkedChange"; }, never, never, true, never>;
11514
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiSwitch, "sui-switch", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "focusable": { "alias": "focusable"; "required": false; "isSignal": true; }; }, { "checkedChange": "checkedChange"; }, never, never, true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
10976
11515
  }
10977
11516
 
10978
11517
  type SuiSwitchCardType = 'basic' | 'left-icon' | 'avatar' | 'card-provider' | 'brand' | 'company';
@@ -11059,7 +11598,7 @@ declare class SuiSwitchCard implements ControlValueAccessor {
11059
11598
  * `<sui-icon>` proyectado vía `[sui-switch-card-leading]` y se renderiza
11060
11599
  * con las MISMAS dimensiones (20×20 dentro del círculo de 40px).
11061
11600
  */
11062
- readonly emoji: _angular_core.InputSignal<"label" | "warning" | "pensive-face" | "confused-face" | "neutral-face" | "slightly-smiling-face" | "grinning-face-smiling-eyes" | "thinking-face" | "grinning-face" | "smiling-face-hearts" | "face-with-rolling-eyes" | "face-screaming" | "partying-face" | "star-struck" | "sleeping-face" | "package" | "receipt" | "money-bag" | "money-with-wings" | "shopping-cart" | "shopping-bags" | "card-index-dividers" | "bell" | "bell-with-slash" | "pushpin" | "mobile-phone" | "gear" | "locked" | "unlocked" | "wrench" | "hammer" | "magnifying-glass-tilted-left" | "spiral-calendar" | "bar-chart" | "delivery-truck" | "motorcycle" | "rocket" | "house" | "office-building" | "shop" | "dollar-banknote" | "glowing-star" | "kick-scooter" | "check-mark" | "check-mark-button" | "cross-mark" | "no-entry" | "sparkles" | "party-popper" | "waving-hand" | "thumbs-up" | "clapping-hands" | "handshake" | "busts-in-silhouette" | "pizza" | "hamburger" | "taco" | "birthday-cake" | null>;
11601
+ readonly emoji: _angular_core.InputSignal<"warning" | "label" | "pensive-face" | "confused-face" | "neutral-face" | "slightly-smiling-face" | "grinning-face-smiling-eyes" | "thinking-face" | "grinning-face" | "smiling-face-hearts" | "face-with-rolling-eyes" | "face-screaming" | "partying-face" | "star-struck" | "sleeping-face" | "package" | "receipt" | "money-bag" | "money-with-wings" | "shopping-cart" | "shopping-bags" | "card-index-dividers" | "bell" | "bell-with-slash" | "pushpin" | "mobile-phone" | "gear" | "locked" | "unlocked" | "wrench" | "hammer" | "magnifying-glass-tilted-left" | "spiral-calendar" | "bar-chart" | "delivery-truck" | "motorcycle" | "rocket" | "house" | "office-building" | "shop" | "dollar-banknote" | "glowing-star" | "kick-scooter" | "check-mark" | "check-mark-button" | "cross-mark" | "no-entry" | "sparkles" | "party-popper" | "waving-hand" | "thumbs-up" | "clapping-hands" | "handshake" | "busts-in-silhouette" | "pizza" | "hamburger" | "taco" | "birthday-cake" | null>;
11063
11602
  /**
11064
11603
  * URL de imagen para type='avatar' — se renderiza con sui-avatar size=lg
11065
11604
  * (40×40 redonda). Si la imagen falla, fallback automático a iniciales del
@@ -11101,7 +11640,7 @@ declare class SuiSwitchCard implements ControlValueAccessor {
11101
11640
  registerOnTouched(fn: () => void): void;
11102
11641
  setDisabledState(isDisabled: boolean): void;
11103
11642
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiSwitchCard, never>;
11104
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiSwitchCard, "sui-switch-card", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "sublabel": { "alias": "sublabel"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "emoji": { "alias": "emoji"; "required": false; "isSignal": true; }; "imageUrl": { "alias": "imageUrl"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "checkedChange": "checkedChange"; }, never, ["[sui-switch-card-leading]"], true, never>;
11643
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiSwitchCard, "sui-switch-card", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "sublabel": { "alias": "sublabel"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "emoji": { "alias": "emoji"; "required": false; "isSignal": true; }; "imageUrl": { "alias": "imageUrl"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "checkedChange": "checkedChange"; }, never, ["[sui-switch-card-leading]"], true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
11105
11644
  }
11106
11645
 
11107
11646
  /** Sizes de la fila: los del switch + `2xlarge` (fila de 44, dueño 04-10-2026). */
@@ -11518,11 +12057,14 @@ type SuiTableSize = 'small' | 'medium' | 'large' | 'xlarge';
11518
12057
  * Si no hay template para una columna, renderiza row[column.key] directo.
11519
12058
  */
11520
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>;
11521
12062
  readonly columns: _angular_core.InputSignal<SuiTableColumn<T>[]>;
11522
12063
  readonly rows: _angular_core.InputSignal<T[]>;
11523
12064
  readonly size: _angular_core.InputSignal<SuiTableSize>;
11524
12065
  readonly loading: _angular_core.InputSignal<boolean>;
11525
- readonly emptyMessage: _angular_core.InputSignal<string>;
12066
+ readonly emptyMessage: _angular_core.InputSignal<string | null>;
12067
+ protected readonly emptyMessageTexto: _angular_core.Signal<string>;
11526
12068
  readonly striped: _angular_core.InputSignal<boolean>;
11527
12069
  readonly selectable: _angular_core.InputSignal<boolean>;
11528
12070
  readonly rowKey: _angular_core.InputSignal<keyof T | ((row: T) => any) | undefined>;
@@ -11664,7 +12206,7 @@ declare class SuiTabMenuHorizontal<T = string> {
11664
12206
  xlarge 56. large y xlarge llevan el texto a 16 (mobile). */
11665
12207
  readonly size: _angular_core.InputSignal<SuiTabMenuHorizontalSize>;
11666
12208
  /** Glyph del ícono de la pestaña: 24 en xlarge, 20 en el resto. */
11667
- readonly iconSize: _angular_core.Signal<20 | 24>;
12209
+ readonly iconSize: _angular_core.Signal<24 | 20>;
11668
12210
  readonly tabChange: _angular_core.OutputEmitterRef<T>;
11669
12211
  private readonly tabItems?;
11670
12212
  /** Índice del único tab con tabindex 0: el activo, o el primero habilitado. */
@@ -11906,6 +12448,8 @@ type SuiTagSize = 'medium' | 'large' | 'xlarge';
11906
12448
  * reporte de auditoría estaba vacío.
11907
12449
  */
11908
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>;
11909
12453
  /** Visual style. `stroke` = white bg + soft border; `gray` = weak-50 bg, no border. Default stroke. */
11910
12454
  readonly tagStyle: _angular_core.InputSignal<SuiTagStyle>;
11911
12455
  /** Tamaño: medium 24 (default, Figma) · large 32 · xlarge 40 (mobile). */
@@ -11930,7 +12474,8 @@ declare class SuiTag {
11930
12474
  /** Estado deshabilitado: override de tokens a disabled-300, pointer-events none. */
11931
12475
  readonly disabled: _angular_core.InputSignal<boolean>;
11932
12476
  /** aria-label opcional para el botón de cierre. Default 'Quitar'. */
11933
- readonly dismissLabel: _angular_core.InputSignal<string>;
12477
+ readonly dismissLabel: _angular_core.InputSignal<string | null>;
12478
+ protected readonly dismissLabelTexto: _angular_core.Signal<string>;
11934
12479
  /** Emitido al clickear el botón de cierre (solo si dismissible y no disabled). */
11935
12480
  readonly dismiss: _angular_core.OutputEmitterRef<void>;
11936
12481
  /** True cuando hay sublabel no vacío para renderizar el span secundario. */
@@ -12037,8 +12582,12 @@ type SuiTagInputSize = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';
12037
12582
  * - allowDuplicates / maxTags / addOnBlur.
12038
12583
  */
12039
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;
12040
12588
  readonly size: _angular_core.InputSignal<SuiTagInputSize>;
12041
- readonly placeholder: _angular_core.InputSignal<string>;
12589
+ readonly placeholder: _angular_core.InputSignal<string | null>;
12590
+ protected readonly placeholderTexto: _angular_core.Signal<string>;
12042
12591
  readonly disabled: _angular_core.InputSignal<boolean>;
12043
12592
  readonly error: _angular_core.InputSignal<boolean>;
12044
12593
  readonly errorMessage: _angular_core.InputSignal<string | null>;
@@ -12315,7 +12864,7 @@ declare class SuiTimePickerDuration {
12315
12864
  readonly clicked: _angular_core.OutputEmitterRef<Event>;
12316
12865
  onClick(event: Event): void;
12317
12866
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiTimePickerDuration, never>;
12318
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiTimePickerDuration, "sui-time-picker-duration", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
12867
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiTimePickerDuration, "sui-time-picker-duration", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
12319
12868
  }
12320
12869
 
12321
12870
  type SuiTimePickerItemDirection = 'right' | 'center';
@@ -12379,7 +12928,7 @@ declare class SuiTimePickerItem {
12379
12928
  readonly hasRight: _angular_core.Signal<boolean>;
12380
12929
  onClick(event: Event): void;
12381
12930
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiTimePickerItem, never>;
12382
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiTimePickerItem, "sui-time-picker-item", never, { "time": { "alias": "time"; "required": true; "isSignal": true; }; "meridiem": { "alias": "meridiem"; "required": false; "isSignal": true; }; "rightTime": { "alias": "rightTime"; "required": false; "isSignal": true; }; "rightMeridiem": { "alias": "rightMeridiem"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "highlighted": { "alias": "highlighted"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
12931
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiTimePickerItem, "sui-time-picker-item", never, { "time": { "alias": "time"; "required": true; "isSignal": true; }; "meridiem": { "alias": "meridiem"; "required": false; "isSignal": true; }; "rightTime": { "alias": "rightTime"; "required": false; "isSignal": true; }; "rightMeridiem": { "alias": "rightMeridiem"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "highlighted": { "alias": "highlighted"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
12383
12932
  }
12384
12933
 
12385
12934
  type SuiTimePickerStatusType = 'available' | 'busy' | 'in-meeting' | 'offline';
@@ -12436,6 +12985,8 @@ type SuiTimePickerStatusType = 'available' | 'busy' | 'in-meeting' | 'offline';
12436
12985
  * @input disabled
12437
12986
  */
12438
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>;
12439
12990
  readonly type: _angular_core.InputSignal<SuiTimePickerStatusType>;
12440
12991
  readonly label: _angular_core.InputSignal<string | null>;
12441
12992
  readonly selected: _angular_core.InputSignal<boolean>;
@@ -12445,7 +12996,7 @@ declare class SuiTimePickerStatus {
12445
12996
  readonly displayLabel: _angular_core.Signal<string>;
12446
12997
  onClick(event: Event): void;
12447
12998
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiTimePickerStatus, never>;
12448
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiTimePickerStatus, "sui-time-picker-status", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
12999
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiTimePickerStatus, "sui-time-picker-status", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, [{ directive: typeof SuiToque; inputs: {}; outputs: {}; }]>;
12449
13000
  }
12450
13001
 
12451
13002
  type SuiTimeFormat = '12h' | '24h';
@@ -12571,6 +13122,8 @@ interface ColumnItem {
12571
13122
  * filas de 44 con texto 16 y Cancelar/Aplicar en large. */
12572
13123
  type SuiTimePickerSize = 'small' | 'medium' | 'large' | 'xlarge';
12573
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>;
12574
13127
  readonly label: _angular_core.InputSignal<string | null>;
12575
13128
  readonly sublabel: _angular_core.InputSignal<string | null>;
12576
13129
  readonly required: _angular_core.InputSignal<boolean>;
@@ -12579,7 +13132,8 @@ declare class SuiTimePicker implements ControlValueAccessor {
12579
13132
  readonly errorMessage: _angular_core.InputSignal<string | null>;
12580
13133
  readonly error: _angular_core.InputSignal<boolean>;
12581
13134
  /** Texto del campo sin hora. Imperativo con tuteo (dueño, 05-10-2026, P4 a). */
12582
- readonly placeholder: _angular_core.InputSignal<string>;
13135
+ readonly placeholder: _angular_core.InputSignal<string | null>;
13136
+ protected readonly placeholderTexto: _angular_core.Signal<string>;
12583
13137
  readonly disabled: _angular_core.InputSignal<boolean>;
12584
13138
  /**
12585
13139
  * Alto del campo: small 36 · medium 40 (default) · large 48 (extensión SUI,
@@ -12786,6 +13340,8 @@ declare class SuiToastService {
12786
13340
  * <sui-toast-outlet />
12787
13341
  */
12788
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>;
12789
13345
  private readonly svc;
12790
13346
  private readonly tabBar;
12791
13347
  readonly toastsByPosition: _angular_core.Signal<Record<SuiToastPosition, SuiToastItem[]>>;
@@ -13006,6 +13562,8 @@ declare class SuiTopbarButton {
13006
13562
  * <sui-topbar-user name="Arthur" avatar="https://..." [verified]="true" [open]="menuOpen()" />
13007
13563
  */
13008
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>;
13009
13567
  /** Nombre visible (Figma editName). Vacío → chip solo-avatar (Figma name=false). */
13010
13568
  readonly name: _angular_core.InputSignal<string>;
13011
13569
  /**
@@ -13056,8 +13614,10 @@ interface SuiTopbarAction {
13056
13614
  }
13057
13615
  /** Config del search slot. Patrón objeto + boolean shorthand (como sui-sidebar). */
13058
13616
  interface SuiTopbarSearchConfig {
13059
- /** Placeholder del input expandido. Default 'Buscar...'. */
13617
+ /** Placeholder del input expandido. Default 'Buscar…'. */
13060
13618
  placeholder?: string;
13619
+ /** Nombre accesible del campo. Omitir → el lector anuncia el placeholder. */
13620
+ ariaLabel?: string;
13061
13621
  /** Shortcut pill dentro del input (ej. '⌘1') — renderiza <sui-kbd>. */
13062
13622
  shortcut?: string;
13063
13623
  /**
@@ -13119,7 +13679,7 @@ interface SuiTopbarUserConfig {
13119
13679
  * Usage:
13120
13680
  * <sui-topbar
13121
13681
  * [items]="items" activeValue="dashboard"
13122
- * [search]="{ placeholder: 'Buscar...', shortcut: '⌘1' }"
13682
+ * [search]="{ placeholder: 'Buscar…', shortcut: '⌘1' }"
13123
13683
  * [actions]="[{ value: 'quick', icon: 'flashlight-line' },
13124
13684
  * { value: 'notifications', icon: 'notification-3-line', dot: true }]"
13125
13685
  * [user]="{ name: 'Sophia', avatar: { initials: 'S', color: 'yellow' } }"
@@ -13128,6 +13688,8 @@ interface SuiTopbarUserConfig {
13128
13688
  * </sui-topbar>
13129
13689
  */
13130
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>;
13131
13693
  readonly items: _angular_core.InputSignal<SuiTopbarEntry[]>;
13132
13694
  /** value del item activo (bg weak-50 + label strong-950 + icon accent). */
13133
13695
  readonly activeValue: _angular_core.InputSignal<string | null>;
@@ -13158,6 +13720,7 @@ declare class SuiTopbar {
13158
13720
  /** Search normalizado: null → sin search. */
13159
13721
  protected readonly searchCfg: _angular_core.Signal<{
13160
13722
  placeholder: string;
13723
+ ariaLabel: string;
13161
13724
  shortcut: string | null;
13162
13725
  compact: boolean;
13163
13726
  } | null>;
@@ -13292,6 +13855,8 @@ declare class SuiTooltip {
13292
13855
  * envuelve dentro de `max-width` (200px small / 280px medium).
13293
13856
  */
13294
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>;
13295
13860
  /** Text-only (size small/medium). En size=large se ignora — usar title/description. */
13296
13861
  readonly text: _angular_core.InputSignal<string>;
13297
13862
  readonly position: _angular_core.InputSignal<SuiTooltipPosition>;
@@ -13312,5 +13877,5 @@ declare class SuiTooltipPanel {
13312
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>;
13313
13878
  }
13314
13879
 
13315
- 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, buildCalendarGrid, buildHourList, buildMinuteList, esImagenAceptada, formatDateInput, formatDateLong, formatDateShort, formatMonthYear, formatTime, isSameTime, normalizeHex, pad2, parseTime, to12h, to24h };
13316
- 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 };