@ajuarezso/sui-design-system 0.7.22 → 0.7.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ajuarezso/sui-design-system",
3
- "version": "0.7.22",
3
+ "version": "0.7.24",
4
4
  "description": "SUI Design System — librería de componentes Angular (SUI 2.0).",
5
5
  "license": "UNLICENSED",
6
6
  "publishConfig": {
@@ -977,12 +977,12 @@ interface SuiAlertAction {
977
977
  * error → error-warning-fill
978
978
  * feature → sparkling-fill
979
979
  *
980
- * ⚠️ PENDING VERIFY — Feature status color:
981
- * Figma "🚀 Feature" status uses state/faded (gray #7b7b7b) + `magic-fill`
982
- * icon (nodes 170:1544 / 170:2996). The SUI project established `feature`
983
- * = state/feature (purple #7d52f4) + `sparkling-fill` across sui-banner +
984
- * master-preview. Kept purple here to preserve cross-component consistency;
985
- * flagged for Anthony in newQuestions. If SUI canon must win, remap
980
+ * VERIFIED 2026-07-23 (screenshot set 169:2399) — Feature status color:
981
+ * Figma "🚀 Feature" confirmed = state/faded (gray) + `magic-fill` icon en
982
+ * las 4 columnas del set (filled/light/lighter/stroke); no existe morado en
983
+ * el set. The SUI project established `feature` = state/feature (purple
984
+ * #7d52f4) + `sparkling-fill` across sui-banner + master-preview. Kept
985
+ * purple here as deliberate brand deviation. If SUI canon must win, remap
986
986
  * feature → --sui-state-faded-* + magic-fill in BOTH alert and banner.
987
987
  *
988
988
  * Sizes (Figma component set 169:2399):
@@ -1921,6 +1921,9 @@ type SuiCheckboxCardType = 'basic' | 'left-icon' | 'avatar' | 'card-provider' |
1921
1921
  * badge→bordeado con texto disabled-300. CONFIRMADO (262:254/258/259).
1922
1922
  * - Badge "NEW": variant Light color Information (state/information/light +
1923
1923
  * dark), NO primary-base. CONFIRMADO (261:3928). Corregido del naranja previo.
1924
+ * Renderiza un `<sui-badge>` real (homologación familia radio/checkbox card):
1925
+ * defaults color 'blue' (→ state information, fiel Figma) + variant 'light' +
1926
+ * size 'small'; la SuiBadgeConfig del consumer puede overridear los tres.
1924
1927
  * - 6 types completos (basic/left-icon/avatar + card-provider/brand/company via
1925
1928
  * slot proyectado). CONFIRMADO contra los 24 variants.
1926
1929
  *
@@ -1978,7 +1981,9 @@ declare class SuiCheckboxCard implements ControlValueAccessor {
1978
1981
  /** URL de imagen para type='avatar'. Si falla, fallback a iniciales del label. */
1979
1982
  readonly imageUrl: _angular_core.InputSignal<string | null>;
1980
1983
  /** Badge junto al label — string shorthand ('NEW') o SuiBadgeConfig
1981
- (label + color/variant/size, tipado como sui-badge). null = sin badge. */
1984
+ (label + color/variant/size, tipado como sui-badge). Renderiza un
1985
+ `<sui-badge>` real; defaults blue/light/small (information azul, fiel
1986
+ Figma 261:3928). null = sin badge. */
1982
1987
  readonly badge: _angular_core.InputSignal<string | SuiBadgeConfig | null>;
1983
1988
  protected readonly badgeCfg: _angular_core.Signal<SuiBadgeConfig | null>;
1984
1989
  /** Indeterminate state (tri-state checkbox). */
@@ -3044,7 +3049,7 @@ declare class SuiFlag {
3044
3049
  * - SIN border (el input padre tiene su propio border)
3045
3050
  * - SIN focus ring (el input padre maneja el focus state)
3046
3051
  * - SIN error state (heredado del input padre)
3047
- * - X-Small usa flag 16×16 (vs 24×24 del compact-select normal)
3052
+ * - X-Small usa flag 16×16, medium/small 20×20 (mismo patrón que el compact-select normal)
3048
3053
  * - Menu matchea trigger width con minWidth=200
3049
3054
  *
3050
3055
  * `ControlValueAccessor` implementado — funciona con `formControlName`.
@@ -3137,7 +3142,7 @@ declare class SuiCompactSelectForInput<T = string> implements ControlValueAccess
3137
3142
  * Specs Figma (sin cambios vs versión anterior):
3138
3143
  * Sizes: medium 40 (p=10 r=10) / small 36 (p=8 r=8) / xsmall 32 (p=6 r=8)
3139
3144
  * States: placeholder / filled / hover / focused / disabled / error
3140
- * Types: basic / icon (RemixIcon 20×20) / country (sui-flag 24×24)
3145
+ * Types: basic / icon (RemixIcon 20×20) / country (sui-flag 20×20; 16×16 en xsmall)
3141
3146
  *
3142
3147
  * Eventos:
3143
3148
  * - `(clicked)`: Event — siempre emite cuando el host se clickea (mode 1 + 2)
@@ -6141,6 +6146,9 @@ type SuiInputType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | '
6141
6146
  * @input required: boolean — Muestra asterisco rojo en el label
6142
6147
  * @input tooltip: string | null — Tooltip en ícono info del label
6143
6148
  * @input hint: string | null — Mensaje de ayuda debajo del field
6149
+ * @input hintIcon: string | null — Icono Remix del hint neutral (ej. 'information-fill',
6150
+ * como en el set de Figma 266:5251). null (default) = sin icono. No afecta el
6151
+ * estado error (sui-form-hint conserva su icono default por variant).
6144
6152
  * @input error: boolean — Activa borde rojo + muestra errorMessage
6145
6153
  * @input errorMessage: string | null — Mensaje de error
6146
6154
  *
@@ -6196,6 +6204,15 @@ declare class SuiInput implements ControlValueAccessor {
6196
6204
  readonly errorMessage: _angular_core.InputSignal<string | null>;
6197
6205
  readonly label: _angular_core.InputSignal<string | null>;
6198
6206
  readonly hint: _angular_core.InputSignal<string | null>;
6207
+ /**
6208
+ * Icono Remix del hint neutral (ej. 'information-fill' ⓘ como en el set de
6209
+ * Figma). null (default) = sin icono — comportamiento previo. Aditivo: en
6210
+ * estado error NO aplica (el hint de error mantiene su icono default).
6211
+ */
6212
+ readonly hintIcon: _angular_core.InputSignal<string | null>;
6213
+ /** Icon efectivo para sui-form-hint: solo aplica al hint neutral. En error se
6214
+ pasa undefined → sui-form-hint usa su default por variant (information-fill). */
6215
+ protected readonly _resolvedHintIcon: _angular_core.Signal<string | undefined>;
6199
6216
  readonly autocomplete: _angular_core.InputSignal<string | null>;
6200
6217
  /** Texto secundario del label (ej. "Optional", "Required") */
6201
6218
  readonly sublabel: _angular_core.InputSignal<string | null>;
@@ -6346,7 +6363,7 @@ declare class SuiInput implements ControlValueAccessor {
6346
6363
  registerOnTouched(fn: () => void): void;
6347
6364
  setDisabledState(isDisabled: boolean): void;
6348
6365
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiInput, never>;
6349
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiInput, "sui-input", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "sublabel": { "alias": "sublabel"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "paste": { "alias": "paste"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconPosition": { "alias": "iconPosition"; "required": false; "isSignal": true; }; "closeOnOutsideClick": { "alias": "closeOnOutsideClick"; "required": false; "isSignal": true; }; "leadingDivider": { "alias": "leadingDivider"; "required": false; "isSignal": true; }; "trailingDivider": { "alias": "trailingDivider"; "required": false; "isSignal": true; }; "leadingControl": { "alias": "leadingControl"; "required": false; "isSignal": true; }; "trailingControl": { "alias": "trailingControl"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["[data-slot=start]", "[data-slot=end]"], true, never>;
6366
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiInput, "sui-input", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "hintIcon": { "alias": "hintIcon"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "sublabel": { "alias": "sublabel"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "paste": { "alias": "paste"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconPosition": { "alias": "iconPosition"; "required": false; "isSignal": true; }; "closeOnOutsideClick": { "alias": "closeOnOutsideClick"; "required": false; "isSignal": true; }; "leadingDivider": { "alias": "leadingDivider"; "required": false; "isSignal": true; }; "trailingDivider": { "alias": "trailingDivider"; "required": false; "isSignal": true; }; "leadingControl": { "alias": "leadingControl"; "required": false; "isSignal": true; }; "trailingControl": { "alias": "trailingControl"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["[data-slot=start]", "[data-slot=end]"], true, never>;
6350
6367
  }
6351
6368
 
6352
6369
  type SuiIntegrationSwitchType = 'horizontal' | 'vertical';
@@ -6512,10 +6529,10 @@ declare class SuiIntegrationSwitch implements ControlValueAccessor {
6512
6529
  * padding: 2px 6px
6513
6530
  * Icon content (16×16):
6514
6531
  * padding: 2px (all sides)
6515
- * color: inherit (consumer del sui-icon decide)
6532
+ * color: var(--text/sub-600) #5c5c5c (forzado por el scss sobre el sui-icon proyectado)
6516
6533
  *
6517
- * Auto-detección: si el contenido proyectado contiene `<sui-icon>` se asume
6518
- * variant `subtle` por default; consumer puede override con `[variant]="default"`.
6534
+ * El variant NO se auto-detecta: default es `default`; para el caso icono el
6535
+ * consumer debe pasar `variant="subtle"` explícito.
6519
6536
  *
6520
6537
  * Uso:
6521
6538
  * <sui-kbd>⌘K</sui-kbd> <!-- text default -->
@@ -7301,9 +7318,13 @@ type SuiNotificationStyle = 'filled' | 'light' | 'lighter' | 'stroke';
7301
7318
  * derecha (input `showMore` → output `moreClicked`).
7302
7319
  * ────────────────────────────────────────────────────────────────────────────
7303
7320
  *
7304
- * PENDING VERIFY (MCP Figma caído en la homologación 2026-05-29; specs tomados
7305
- * de .claude/sui-audit/reports.json que SÍ tuvo acceso a Figma):
7306
- * - File card: bg-white, border stroke/soft-200, radius-8, shadow xs.
7321
+ * VERIFIED 2026-07-23 (screenshot MCP del set 4308:731 — sella el PENDING
7322
+ * VERIFY heredado de la homologación 2026-05-29):
7323
+ * - Items de panel = filas PLANAS: sin border/shadow propios (el radius-12
7324
+ * solo se manifiesta en el fill bg-weak-50 del hover, redondeado en Figma).
7325
+ * - File card: hug-content con icono attachment-line 16 + "(4mb)" muted
7326
+ * (soft-400); bg-white, border stroke/soft-200, radius-8, shadow xs.
7327
+ * - Message bubble: hug-content (radius asimétrico tl4 tr8 br10 bl8 OK).
7307
7328
  * - Button-type: Deny stroke + Approve filled, px-10 py-6 radius-8.
7308
7329
  * - Company logo: 16×16 circle, antes del texto de descripción.
7309
7330
  * - Hover: bg --sui-bg-weak-50 (#f7f7f7) + more-2-line 20px compact radius-6.
@@ -7486,13 +7507,15 @@ declare class SuiOtpInput implements ControlValueAccessor {
7486
7507
  * SUI Page Header — header reutilizable para cada page del empresa.
7487
7508
  *
7488
7509
  * Reemplaza al topbar contextual en mobile. Cada page lo coloca arriba del
7489
- * todo (antes de cualquier contenido). Absorbe el safe-area-inset-top y
7490
- * deja un espacio visual coherente entre pages.
7510
+ * todo (antes de cualquier contenido) y deja un espacio visual coherente
7511
+ * entre pages. El safe-area-inset-top lo maneja el layout/container de la
7512
+ * página, NO este componente (padding vertical fijo, sin env()).
7491
7513
  *
7492
7514
  * Slots:
7493
- * - default → contenido principal (cards, listas, etc.)
7494
7515
  * - [slot=actions] → botones a la derecha (siempre visibles, no scrollean
7495
7516
  * con la página). Útil para "Guardar", "Agregar", filtros.
7517
+ * No hay slot default: el contenido de la página va DESPUÉS del header,
7518
+ * no dentro — cualquier contenido proyectado sin slot="actions" se descarta.
7496
7519
  *
7497
7520
  * Inputs:
7498
7521
  * - title: string visible (h1)
@@ -7994,13 +8017,13 @@ type SuiRadioCardType = 'basic' | 'left-icon' | 'avatar' | 'card-provider' | 'br
7994
8017
  * (el component_set no publica variant Focus distinto del Hover/Active). Es
7995
8018
  * extensión de a11y del proyecto, no rompe fidelidad visual con Figma.
7996
8019
  *
7997
- * NOT IMPLEMENTED (Figma types sin uso real en el proyecto — over-engineering NOW):
7998
- * - type='card-provider' (515:4374): slot 32×24 radius-4 para logo de tarjeta.
7999
- * - type='brand' (515:4383): slot 40×40 logo externo sin frame.
8000
- * - type='company' (515:4392): slot 40×40 circle con bg color del consumer.
8001
- * Cero consumers en el repo (los type=brand/company existentes son de
8002
- * sui-command-menu-item, no de este card). Agregarlos implica content
8003
- * projection + assets de marca. Diferido — agregar cuando surja el caso.
8020
+ * IMPLEMENTED 2026-07-21 (types completos del set Figma):
8021
+ * - type='card-provider' (515:4374): slot 32×24 radius-4 para logo de tarjeta
8022
+ * (imageUrl).
8023
+ * - type='brand' (515:4383): slot 40×40 logo externo sin frame
8024
+ * (sui-brand-logo via [brand], o imageUrl circular de fallback).
8025
+ * - type='company' (515:4392): slot 40×40 circle radius-full
8026
+ * (imageUrl, fallback sui-avatar con iniciales del label).
8004
8027
  *
8005
8028
  * Form integration:
8006
8029
  * - Implementa ControlValueAccessor: usable con [(ngModel)] / [formControl].
@@ -8223,6 +8246,8 @@ interface SuiRatingCellView {
8223
8246
  * + border stroke/soft-200 + regular-shadow x-small (0 1px 2px rgba(10,13,20,.03));
8224
8247
  * hover → bg weak-50 sin border ni shadow. Es la versión "tarjeta" del input de
8225
8248
  * estrellas/corazones (distinta del bare 'inline' y del segmented 'bar').
8249
+ * Estado EMPTY: glyph RELLENO gris sólido ("Empty Filled" star-fill/heart-3-fill
8250
+ * en stroke/sub-300), NO el outline del inline — ver cellIconName().
8226
8251
  * - 'bar' → 5 cells horizontales con border + padding (matches Rating Bar).
8227
8252
  * Usado para input formulario (modal review en order-tracking, rate-order
8228
8253
  * CSAT survey). Permite type='emoji'|'number' además de star/heart.
@@ -8241,9 +8266,10 @@ interface SuiRatingCellView {
8241
8266
  * selected agrega bg weak-50. emoji: solo selected sale de grayscale.
8242
8267
  *
8243
8268
  * PENDING VERIFY (revisar en device / master-preview tras deploy):
8244
- * - 'cell' appearance: confirmar visual contra Figma 532:4160 con MCP sano
8245
- * (padding 12 / radius 10 / icon 32 / shadow x-small). Pendiente: el screenshot
8246
- * no se pudo verificar al implementar (Figma MCP caído por timeout).
8269
+ * - 'cell' appearance: screenshot MCP de 532:4160 verificado 2026-07-23 —
8270
+ * confirmó que el empty es glyph RELLENO gris (fix aplicado en cellIconName).
8271
+ * Queda pendiente medir chrome fino en device (padding 12 / radius 10 /
8272
+ * icon 32 / shadow x-small).
8247
8273
  * - 'bar-area' homologado a Figma 535:5057: card 132px = bar 36px + input 96px;
8248
8274
  * textarea resize:none, min-height 72px, top-aligned (text node y=12 en Figma)
8249
8275
  * - hover 'Empty Filled' star/heart: glyph relleno sólido en stroke/sub-300
@@ -8373,6 +8399,15 @@ declare class SuiRating implements ControlValueAccessor {
8373
8399
  setDisabledState(isDisabled: boolean): void;
8374
8400
  /** Map del fill al icon name de Remix. */
8375
8401
  iconName(type: SuiRatingType, fill: 'empty' | 'half' | 'full'): string;
8402
+ /**
8403
+ * Icon name para el template iconCell (appearances 'inline' y 'cell').
8404
+ * En appearance='cell' el estado EMPTY renderiza el glyph RELLENO gris
8405
+ * (star-fill / heart-3-fill en stroke/sub-300) — Figma Rating Cell 532:4160
8406
+ * usa el atom "Empty Filled" (relleno sólido neutro), NO el outline
8407
+ * "Empty Line" del inline. Verificado contra screenshot MCP 2026-07-23.
8408
+ * inline mantiene el outline (Rating Items 532:4137 / Rating Review 532:4340).
8409
+ */
8410
+ cellIconName(fill: 'empty' | 'half' | 'full'): string;
8376
8411
  /**
8377
8412
  * Icon name para una celda de bar/bar-area según su estado visual (Figma 535:4535).
8378
8413
  * El glyph de HOVER ("Empty Filled") y SELECTED ("Full") es el mismo relleno sólido
@@ -8613,7 +8648,8 @@ declare class SuiSelect<T = any> implements ControlValueAccessor {
8613
8648
  RemixIcon custom, false = sin icono (default: opt-in). Consolida el par
8614
8649
  leftIcon (boolean) + leadingIcon (string) previo. */
8615
8650
  readonly leadingIcon: _angular_core.InputSignal<string | boolean>;
8616
- /** sui-flag name para `type="country"` (override; sino el option selected puede traerla). */
8651
+ /** sui-flag name para `type="country"` — se muestra SOLO con selección hecha;
8652
+ en estado vacío el left slot renderea el globo (global-line), fiel a Figma. */
8617
8653
  readonly flag: _angular_core.InputSignal<"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>;
8618
8654
  /** Imagen del left slot cuando hay value (avatar/brand/provider/company logo). */
8619
8655
  readonly imageUrl: _angular_core.InputSignal<string | null>;
@@ -9559,10 +9595,12 @@ type SuiSwitchCardType = 'basic' | 'left-icon' | 'avatar' | 'card-provider' | 'b
9559
9595
  * - Sublabel: 12/16 regular sub-600
9560
9596
  * - Description: 12/16 regular sub-600
9561
9597
  * - Title row gap: 4px, Body gap: 4px
9562
- * - Built-in NEW badge: padding 2/8, radius 999, bg state/information/light, text
9563
- * state/information/dark, 11/12 500 0.22px uppercase. Color INFORMATION azul,
9564
- * fiel a Figma (DECISIONES.md §1: para este badge "se cambió a azul (fiel Figma)";
9565
- * el naranja de marca aplica solo al active border / focus ring).
9598
+ * - Badge junto al label: <sui-badge> real honrando SuiBadgeConfig
9599
+ * (color/variant/size). Defaults blue/light/small = bg state/information/light,
9600
+ * text state/information/dark, 11/12 500 0.22px uppercase, padding 2/8,
9601
+ * radius 999 — color INFORMATION azul, fiel a Figma (DECISIONES.md §1: para
9602
+ * este badge "se cambió a azul (fiel Figma)"; el naranja de marca aplica solo
9603
+ * al active border / focus ring).
9566
9604
  *
9567
9605
  * LEADING SLOTS (verified vs Figma 2026-05-29, pull per-type design-context):
9568
9606
  * - basic → sin leading.
@@ -9595,8 +9633,8 @@ type SuiSwitchCardType = 'basic' | 'left-icon' | 'avatar' | 'card-provider' | 'b
9595
9633
  * - Switch internal margin-top 2px para baseline align: convención visual.
9596
9634
  *
9597
9635
  * COLOR MAPPING:
9598
- * #c0d5ff → --sui-state-information-light (NEW badge bg, fiel Figma)
9599
- * #122368 → --sui-state-information-dark (NEW badge text, fiel Figma)
9636
+ * #c0d5ff → --sui-state-information-light (badge default bg, via sui-badge blue/light)
9637
+ * #122368 → --sui-state-information-dark (badge default text, via sui-badge blue/light)
9600
9638
  * No hex hardcoded fuera de los fallbacks de los tokens.
9601
9639
  *
9602
9640
  * Form integration:
@@ -10167,6 +10205,8 @@ interface SuiTabMenuHorizontalItem<T = string> {
10167
10205
  declare class SuiTabMenuHorizontal<T = string> {
10168
10206
  readonly tabs: _angular_core.InputSignal<SuiTabMenuHorizontalItem<T>[]>;
10169
10207
  readonly active: _angular_core.ModelSignal<T | undefined>;
10208
+ /** PENDING spec: hoy solo emite data-sui-size (sin reglas scss) y el set de
10209
+ Figma no tiene eje size. Se conserva por compat de consumers. */
10170
10210
  readonly size: _angular_core.InputSignal<SuiTabMenuHorizontalSize>;
10171
10211
  readonly tabChange: _angular_core.OutputEmitterRef<T>;
10172
10212
  isActive(tab: SuiTabMenuHorizontalItem<T>): boolean;
@@ -11045,6 +11085,11 @@ declare class SuiTimePicker implements ControlValueAccessor {
11045
11085
  protected readonly triggerEl: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
11046
11086
  /** Ref al sui-dropdown-menu interno — para invocar open/close (modo popover). */
11047
11087
  private readonly _menu;
11088
+ /** Columnas scrollables del panel (hora / minuto / periodo) — la query
11089
+ alcanza también la embedded view proyectada al CDK Overlay porque el
11090
+ ng-template se declara en este componente. */
11091
+ private readonly _columnEls;
11092
+ private readonly _injector;
11048
11093
  private _onChange;
11049
11094
  private _onTouched;
11050
11095
  constructor();
@@ -11063,6 +11108,14 @@ declare class SuiTimePicker implements ControlValueAccessor {
11063
11108
  hourLabelOf(item: ColumnItem): string;
11064
11109
  toggle(): void;
11065
11110
  openPopover(): void;
11111
+ /**
11112
+ * Scrollea cada columna (hora / minuto / periodo) para que su opción activa
11113
+ * quede centrada en el viewport de la columna (equivalente a block: 'center').
11114
+ * Instantáneo (sin behavior smooth): al abrir, el panel aparece ya
11115
+ * posicionado. Con step que no contiene el minuto exacto (-1) la columna se
11116
+ * deja en su scroll actual.
11117
+ */
11118
+ private _scrollColumnsToSelection;
11066
11119
  cancel(): void;
11067
11120
  apply(): void;
11068
11121
  /**