@ajuarezso/sui-design-system 0.2.6 → 0.3.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ajuarezso/sui-design-system",
3
- "version": "0.2.6",
3
+ "version": "0.3.0",
4
4
  "description": "SUI Design System — librería de componentes Angular (SUI 2.0).",
5
5
  "license": "UNLICENSED",
6
6
  "publishConfig": {
@@ -904,7 +904,7 @@ declare class SuiAlert {
904
904
  * `small` (12/16) en los compactos (small/xsmall). Mapea el tipo del action al
905
905
  * tamaño del alert.
906
906
  */
907
- readonly actionLinkSize: _angular_core.Signal<"medium" | "small">;
907
+ readonly actionLinkSize: _angular_core.Signal<"small" | "medium">;
908
908
  /**
909
909
  * Tamaño del `sui-compact-button` del cierre, mapeado del size del alert para
910
910
  * conservar el footprint del icono: xsmall (icon 16) → compact `medium`;
@@ -4976,7 +4976,7 @@ declare class SuiFileUpload {
4976
4976
  *
4977
4977
  * Toolbar horizontal de filtros con layout Left/Right split. Es un CONTENEDOR
4978
4978
  * de composición: el consumer proyecta los controles ya homologados —
4979
- * Segmented Control (`<sui-tabs variant="segment">`), Text Input
4979
+ * Segmented Control (`<sui-segmented-control>`), Text Input
4980
4980
  * (`<sui-input type="search">` con kbd badge), Select (`<sui-select>`),
4981
4981
  * Button Group (`<sui-button-group>`) y Buttons (`<sui-button>`)— en dos slots
4982
4982
  * nombrados.
@@ -5012,7 +5012,7 @@ declare class SuiFileUpload {
5012
5012
  *
5013
5013
  * Usage (Table variant):
5014
5014
  * <sui-filter-bar>
5015
- * <sui-tabs slot="start" variant="segment" [tabs]="views" [(active)]="view" />
5015
+ * <sui-segmented-control slot="start" [tabs]="views" [(active)]="view" />
5016
5016
  * <div slot="end" class="row">
5017
5017
  * <sui-input type="search" placeholder="Search…" [(value)]="q">
5018
5018
  * <sui-kbd input-suffix>⌘1</sui-kbd>
@@ -5023,7 +5023,7 @@ declare class SuiFileUpload {
5023
5023
  */
5024
5024
  declare class SuiFilterBar {
5025
5025
  /** Variante de la toolbar. Solo afecta hints de layout/responsive, no el wiring. */
5026
- readonly variant: _angular_core.InputSignal<"table" | "calendar">;
5026
+ readonly variant: _angular_core.InputSignal<"calendar" | "table">;
5027
5027
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiFilterBar, never>;
5028
5028
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiFilterBar, "sui-filter-bar", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, ["[slot=start]", "[slot=end]", "*"], true, never>;
5029
5029
  }
@@ -5173,7 +5173,7 @@ declare class SuiFilterPanelFooter {
5173
5173
  readonly clearDisabled: _angular_core.InputSignal<boolean>;
5174
5174
  readonly applyDisabled: _angular_core.InputSignal<boolean>;
5175
5175
  /** Tamaño de los botones. Default 'small' (Figma: p-8px/radius-8 = size small). */
5176
- readonly size: _angular_core.InputSignal<"medium" | "small">;
5176
+ readonly size: _angular_core.InputSignal<"small" | "medium">;
5177
5177
  readonly clear: _angular_core.OutputEmitterRef<void>;
5178
5178
  readonly apply: _angular_core.OutputEmitterRef<void>;
5179
5179
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiFilterPanelFooter, never>;
@@ -9494,125 +9494,206 @@ declare class SuiTable<T = any> {
9494
9494
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiTable<any>, "sui-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rows": { "alias": "rows"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "striped": { "alias": "striped"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "rowKey": { "alias": "rowKey"; "required": false; "isSignal": true; }; "selectedRows": { "alias": "selectedRows"; "required": false; "isSignal": true; }; "sortKey": { "alias": "sortKey"; "required": false; "isSignal": true; }; "sortDir": { "alias": "sortDir"; "required": false; "isSignal": true; }; }, { "selectedRows": "selectedRowsChange"; "sortKey": "sortKeyChange"; "sortDir": "sortDirChange"; "rowClicked": "rowClicked"; "sortChanged": "sortChanged"; }, ["cellTemplates"], never, true, never>;
9495
9495
  }
9496
9496
 
9497
- type SuiTabsVariant = 'line' | 'segment' | 'vertical';
9498
- type SuiTabsSize = 'small' | 'medium' | 'large' | 'xlarge';
9499
- /** Estilo del contenedor del variant `vertical` (Tab Menu Vertical de Figma). */
9500
- type SuiTabsVerticalStyle = 'card' | 'list';
9501
- interface SuiTab<T = string> {
9497
+ type SuiTabMenuHorizontalSize = 'small' | 'medium' | 'large' | 'xlarge';
9498
+ interface SuiTabMenuHorizontalItem<T = string> {
9502
9499
  value: T;
9503
9500
  label: string;
9504
9501
  icon?: string;
9505
- disabled?: boolean;
9506
9502
  /**
9507
- * Renderiza el ítem solo con icono (sin label visible) — mapea al
9508
- * Type=Only Icon del Figma Segmented Control. Requiere que `icon` esté
9509
- * presente. El `label` se usa entonces como `aria-label` para accesibilidad.
9510
- * Solo aplica al variant='segment'.
9503
+ * Muestra el chevron de navegación (pill `arrow-right-s-line` 18px) a la
9504
+ * derecha del ítem — prop `rightIcon` del Tab Menu de Figma. El pill es
9505
+ * bg-white-0 p-px radius-full overflow-clip SIN shadow (Figma 3511:9882,
9506
+ * a diferencia del pill del Tab Menu Vertical, que sí lleva shadow-x-small).
9511
9507
  */
9512
- iconOnly?: boolean;
9508
+ rightIcon?: boolean;
9513
9509
  /**
9514
9510
  * Badge numérico rojo (state/error/base) renderizado a la derecha del label.
9515
- * Mapea al prop `number` del Tab Menu de Figma (Horizontal/Vertical Items).
9516
- * Si es `0`/`undefined` no se renderiza. Solo aplica a variants `line`/`vertical`.
9511
+ * Mapea al prop `number` del Tab Menu Horizontal Items de Figma.
9512
+ * Si es `0`/`undefined` no se renderiza.
9517
9513
  */
9518
- badge?: number;
9514
+ number?: number;
9515
+ disabled?: boolean;
9516
+ }
9517
+ /**
9518
+ * SUI Tab Menu Horizontal — SUI Design System 2.0
9519
+ *
9520
+ * Figma file: 8p1k72aKKvzJV4XcvPS4VO
9521
+ * Componente Figma: "Tab Menu Horizontal [1.1]"
9522
+ * 3511:9958 — container (border-t/b, py-14px, gap-24px)
9523
+ * 3511:9832 — Tab Menu Horizontal Items [1.1] (State × Active; leftIcon/rightIcon/number)
9524
+ * 3511:9897 — Item Active/On (label strong-950 + línea primary)
9525
+ * 3511:9877 — Item Hover/Off (text strong-950, icon sub-600)
9526
+ *
9527
+ * Pestañas horizontales con subrayado (underline 2px primary en el ítem activo,
9528
+ * al ras del border-bottom del container).
9529
+ *
9530
+ * EXACT specs (Figma):
9531
+ * Container (3511:9958): border-top + border-bottom 1px stroke-soft-200,
9532
+ * padding 14px 0, gap 24px entre items, align-items flex-start, bg-white-0
9533
+ * Item (3511:9830/9897): gap icon↔label 6px, gap label↔number 4px
9534
+ * Default/Off: text/icon sub-600
9535
+ * Hover/Off: text strong-950, icon sub-600
9536
+ * Active/On: text strong-950 + underline primary-base 2px (bottom -14px);
9537
+ * leftIcon strong-950 (verificado 2026-06-21: difiere del
9538
+ * vertical, cuyo icono activo es primary-base — a propósito)
9539
+ * number: badge state/error/base, p-2px, radius-full, text static-white,
9540
+ * Subheading/2XSmall (11px/12px line, +2% / 0.22px, uppercase)
9541
+ * rightIcon (chevron): pill 'Arrow' (3511:9882/9902/9844): bg-white-0, p-px,
9542
+ * radius-full, overflow-clip, icon arrow-right-s-line 18px, SIN shadow
9543
+ *
9544
+ * PENDING VERIFY:
9545
+ * - `size`: el Tab Menu Horizontal de Figma no expone eje size. El input se
9546
+ * mantiene como extensión SUI (espeja el data-attr del host como hook de
9547
+ * SCSS), pero hoy solo medium está 1:1 y no altera estilos.
9548
+ * - `disabled` por ítem es extensión SUI (Figma no muestra estado Disabled).
9549
+ *
9550
+ * Historia: hasta la v0.2.x este componente vivía como `<sui-tabs variant="line">`;
9551
+ * en la v0.3.0 se separó en componente propio (junto a `sui-segmented-control`
9552
+ * y `sui-tab-menu-vertical`) espejando los tres sets independientes de Figma.
9553
+ * Renombres vs la interface SuiTab vieja: `badge` → `number` y `chevron` →
9554
+ * `rightIcon` (nombres de los props del Figma).
9555
+ */
9556
+ declare class SuiTabMenuHorizontal<T = string> {
9557
+ readonly tabs: _angular_core.InputSignal<SuiTabMenuHorizontalItem<T>[]>;
9558
+ readonly active: _angular_core.ModelSignal<T | undefined>;
9559
+ readonly size: _angular_core.InputSignal<SuiTabMenuHorizontalSize>;
9560
+ readonly tabChange: _angular_core.OutputEmitterRef<T>;
9561
+ isActive(tab: SuiTabMenuHorizontalItem<T>): boolean;
9562
+ select(tab: SuiTabMenuHorizontalItem<T>): void;
9563
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiTabMenuHorizontal<any>, never>;
9564
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiTabMenuHorizontal<any>, "sui-tab-menu-horizontal", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; "tabChange": "tabChange"; }, never, never, true, never>;
9565
+ }
9566
+
9567
+ /** Estilo del contenedor del Tab Menu Vertical (prop Style=Card|List de Figma). */
9568
+ type SuiTabMenuVerticalStyle = 'card' | 'list';
9569
+ interface SuiTabMenuVerticalItem<T = string> {
9570
+ value: T;
9571
+ label: string;
9572
+ icon?: string;
9519
9573
  /**
9520
9574
  * Muestra el chevron de navegación (pill `arrow-right-s-line` 18px) a la
9521
- * derecha del ítem — prop `rightIcon` del Tab Menu de Figma. Aplica a
9522
- * `vertical` y `line`. En ambos el chevron va dentro de un pill bg-white-0
9523
- * p-px radius-full overflow-clip; el pill vertical lleva shadow-x-small y el
9524
- * horizontal NO (Figma 3515:10332 vs 3511:9882).
9575
+ * derecha del ítem — prop `rightIcon` del Tab Menu de Figma. El pill vertical
9576
+ * es bg-white-0 p-1px radius-full CON shadow-x-small (Figma 3515:10332, a
9577
+ * diferencia del pill del Tab Menu Horizontal, que NO lleva shadow).
9578
+ */
9579
+ rightIcon?: boolean;
9580
+ /**
9581
+ * Badge numérico rojo (state/error/base) renderizado a la derecha del label.
9582
+ * Mapea al prop `number` del Tab Menu Vertical Items de Figma.
9583
+ * Si es `0`/`undefined` no se renderiza.
9525
9584
  */
9526
- chevron?: boolean;
9585
+ number?: number;
9586
+ disabled?: boolean;
9527
9587
  }
9528
9588
  /**
9529
- * SUI Tabs — SUI Design System 2.0
9589
+ * SUI Tab Menu Vertical — SUI Design System 2.0
9530
9590
  *
9531
9591
  * Figma file: 8p1k72aKKvzJV4XcvPS4VO
9532
- *
9533
- * Cubre tres componentes de Figma bajo un solo `sui-tabs`:
9534
- * - variant='segment' → "Segmented Control [1.1]" (pill iOS, indicador animado)
9535
- * - variant='line' → "Tab Menu Horizontal [1.1]" (underline tabs)
9536
- * - variant='vertical' → "Tab Menu Vertical [1.1]" (sidebar nav, Card|List)
9537
- *
9538
- * Nodos homologados (2026-05-29 · Tab Menu pass):
9539
- * 3511:9958 — Tab Menu Horizontal [1.1] (container: border-t/b, py-14px, gap-24px)
9540
- * 3511:9832 — Tab Menu Horizontal Items [1.1] (State × Active; leftIcon/rightIcon/number)
9541
- * 3511:9897 — Horizontal Item Active/On (label strong-950 + línea primary)
9542
- * 3511:9877 — Horizontal Item Hover/Off (text strong-950, icon sub-600)
9543
- * 3516:10411 — Tab Menu Vertical [1.1] (Style=Card|List × Quantity 02–08 × divider)
9544
- * 3516:10412 — Vertical Card Quantity=03 con divider 'SELECT MENU'
9592
+ * Componente Figma: "Tab Menu Vertical [1.1]"
9593
+ * 3516:10411 — set (Style=Card|List × Quantity 02–08 × divider)
9594
+ * 3516:10412 — Card Quantity=03 con divider 'SELECT MENU'
9545
9595
  * 3515:10326 — Tab Menu Vertical Items [1.1] (State × Active; leftIcon/rightIcon/number)
9546
- * 3515:10341 — Vertical Item Active/On (bg-weak-50)
9547
- *
9548
- * EXACT specs (Tab Menu pass):
9549
- * Horizontal container (3511:9958):
9550
- * border-top + border-bottom: 1px solid stroke-soft-200
9551
- * padding: 14px 0 (py-14px) · gap entre items: 24px
9552
- * align-items: flex-start (items-start) · background: bg-white-0
9553
- * Horizontal item (3511:9830/9897):
9554
- * gap icon↔label: 6px · gap label↔badge: 4px
9555
- * Default/Off: text/icon sub-600 (#5c5c5c)
9556
- * Hover/Off: text strong-950 (#171717), icon sub-600 (#5c5c5c)
9557
- * Active/On: text strong-950 + indicator line primary-base 2px (bottom -14px,
9558
- * al ras del border-bottom del container)
9559
- * leftIcon: 20px · rightIcon: chevron arrow-right-s-line 18px en pill 'Arrow'
9560
- * (3511:9882/9902/9844): bg-white-0, p-px, radius-full, overflow-clip,
9561
- * SIN shadow (el vertical sí lleva shadow-x-small)
9562
- * number: badge state/error/base, p-2px, radius-full, text static-white
9563
- * Subheading/2XSmall (11px/12px line, +2% / 0.22px, uppercase)
9564
- * Vertical item (3515:10327/10341/10334):
9565
- * gap: 6px · padding: 8px · radius: radius-8 · w-full · label flex-1 text-left
9566
- * overflow-clip en el item (y en el container Card 3516:10412)
9567
- * Active/On: bg-weak-50 + text strong-950 / icon strong-950
9596
+ * 3515:10341 — Item Active/On (bg-weak-50)
9597
+ *
9598
+ * Navegación lateral (sidebar nav) con dos estilos de contenedor: Card (con
9599
+ * borde/fondo/sombra) o List (plano).
9600
+ *
9601
+ * EXACT specs (Figma):
9602
+ * Item (3515:10327/10341): gap 6px, padding 8px, radius-8, w-full, label flex-1
9603
+ * text-left, overflow-clip
9604
+ * Active/On: bg-weak-50 + text strong-950; leftIcon PRIMARY-BASE (verificado
9605
+ * 2026-06-21 vía variable_defs + screenshot de 3515:10341 — difiere
9606
+ * del horizontal, cuyo icono activo es strong-950, a propósito)
9568
9607
  * Hover/Off: bg-weak-50 (igual fill que el active) + text strong-950 (3515:10334)
9569
- * Default/Off (Card): bg-white-0 + text/icon sub-600
9570
- * Default/Off (List): transparent + text/icon sub-600
9571
- * number: mismo badge que horizontal
9572
- * rightIcon (chevron): pill bg-white-0, p-1px, radius-full, shadow-x-small,
9573
- * arrow-right-s-line 18px
9574
- * Vertical container Card (3516:10412):
9575
- * bg-white-0, border 1px stroke-soft-200, p-10px, radius-16, shadow-x-small,
9576
- * flex-col gap-8px
9577
- * Vertical container List: flat (sin border/bg/shadow/padding), gap-8px
9578
- * Divider label (Content Divider [1.1], reusado): px-8px py-4px, text-soft-400,
9579
- * Subheading/XSmall (12px/16px line, +4% / 0.48px, uppercase)
9580
- *
9581
- * VERIFICADO (2026-06-21, re-verificación visual pixel-perfect):
9582
- * - Horizontal Active leftIcon = STRONG-950 (oscuro). Confirmado: variable_defs
9583
- * de 3511:9897 expone primary-base SOLO para la línea underline (NO para el
9584
- * icono); icon/sub-600 es el chevron; el screenshot del item activo muestra el
9585
- * leftIcon oscuro. → icono activo horizontal = strong-950 (queda como estaba).
9586
- * - Vertical Active leftIcon = PRIMARY-BASE (azul en Figma → naranja brand acá).
9587
- * Confirmado: variable_defs de 3515:10341 expone primary-base (texto=strong-950,
9588
- * bg=weak-50) → ese primary es el icono; screenshot del item activo lo muestra
9589
- * AZUL. El componente lo tenía en strong-950 → FIX aplicado (.sui-tabs__vertical-
9590
- * item--active .sui-tabs__vertical-leading { color: var(--sui-primary-base) }).
9591
- * OJO: horizontal y vertical DIFIEREN en el color del icono activo (a propósito).
9608
+ * Default/Off (Card): bg-white-0 + text/icon sub-600
9609
+ * Default/Off (List): transparent + text/icon sub-600
9610
+ * Container Card (3516:10412): bg-white-0, border 1px stroke-soft-200, p-10px,
9611
+ * radius-16, shadow-x-small, flex-col gap-8px, overflow-clip
9612
+ * Container List: flat (sin border/bg/shadow/padding), gap-8px
9613
+ * Divider label (Content Divider [1.1] reusado): px-8px py-4px, text-soft-400,
9614
+ * Subheading/XSmall (12px/16px line, +4% / 0.48px), uppercase
9615
+ * number: badge state/error/base, p-2px, radius-full, text static-white
9616
+ * rightIcon (chevron): pill bg-white-0, p-1px, radius-full, shadow-x-small,
9617
+ * arrow-right-s-line 18px
9592
9618
  *
9593
9619
  * PENDING VERIFY:
9594
- * - line/segment size (small/medium/large): el Tab Menu Horizontal de Figma no
9595
- * expone eje `size`. Los 3 sizes son extensión SUI; solo medium está 1:1.
9596
- * - Vertical no expone eje `size`; usa un único tamaño (item p-8px / icon 20px).
9597
- *
9598
- * EXTRA FEATURES preservadas (no están en el Figma 'Tab Menu', se mantienen):
9599
- * - variant='segment' completo (indicador animado ResizeObserver + translateX).
9600
- * - prop `size` (small/medium/large) del line/segment.
9601
- * - prop `disabled` por ítem (Figma no muestra estado Disabled del Tab Menu).
9602
- */
9603
- declare class SuiTabs<T = string> implements AfterViewInit {
9604
- readonly tabs: _angular_core.InputSignal<SuiTab<T>[]>;
9620
+ * - El set de Figma no expone eje `size`; usa un único tamaño (item p-8px /
9621
+ * icon 20px), por eso este componente NO tiene input `size`.
9622
+ * - `disabled` por ítem es extensión SUI (Figma no muestra estado Disabled).
9623
+ *
9624
+ * Historia: hasta la v0.2.x este componente vivía como
9625
+ * `<sui-tabs variant="vertical">`; en la v0.3.0 se separó en componente propio
9626
+ * (junto a `sui-segmented-control` y `sui-tab-menu-horizontal`) espejando los
9627
+ * tres sets independientes de Figma. Renombres vs la API vieja:
9628
+ * - input `verticalStyle` → `menuStyle` (el prefijo "vertical" quedó
9629
+ * redundante con el nombre del componente; no se usa `style` a secas para
9630
+ * no chocar con el atributo HTML global `style`).
9631
+ * - item `badge` → `number` y `chevron` → `rightIcon` (props del Figma).
9632
+ */
9633
+ declare class SuiTabMenuVertical<T = string> {
9634
+ readonly tabs: _angular_core.InputSignal<SuiTabMenuVerticalItem<T>[]>;
9605
9635
  readonly active: _angular_core.ModelSignal<T | undefined>;
9606
- readonly variant: _angular_core.InputSignal<SuiTabsVariant>;
9607
- readonly size: _angular_core.InputSignal<SuiTabsSize>;
9608
- /** Estilo del contenedor cuando variant='vertical' (Card|List). */
9609
- readonly verticalStyle: _angular_core.InputSignal<SuiTabsVerticalStyle>;
9636
+ /** Estilo del contenedor: Card (borde/fondo/sombra) o List (plano). */
9637
+ readonly menuStyle: _angular_core.InputSignal<SuiTabMenuVerticalStyle>;
9610
9638
  /**
9611
- * Label de sección renderizado sobre el menú vertical (prop `divider` del
9612
- * Figma — ej. 'SELECT MENU'). Vacío = sin divider. Solo variant='vertical'.
9639
+ * Label de sección renderizado sobre el menú (prop `divider` del Figma —
9640
+ * ej. 'SELECT MENU'). Vacío = sin divider.
9613
9641
  */
9614
9642
  readonly dividerLabel: _angular_core.InputSignal<string>;
9615
9643
  readonly tabChange: _angular_core.OutputEmitterRef<T>;
9644
+ isActive(tab: SuiTabMenuVerticalItem<T>): boolean;
9645
+ select(tab: SuiTabMenuVerticalItem<T>): void;
9646
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiTabMenuVertical<any>, never>;
9647
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiTabMenuVertical<any>, "sui-tab-menu-vertical", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "menuStyle": { "alias": "menuStyle"; "required": false; "isSignal": true; }; "dividerLabel": { "alias": "dividerLabel"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; "tabChange": "tabChange"; }, never, never, true, never>;
9648
+ }
9649
+
9650
+ type SuiSegmentedControlSize = 'small' | 'medium' | 'large' | 'xlarge';
9651
+ interface SuiSegmentedControlItem<T = string> {
9652
+ value: T;
9653
+ label: string;
9654
+ icon?: string;
9655
+ /**
9656
+ * Renderiza el ítem solo con icono (sin label visible) — mapea al
9657
+ * Type=Only Icon del Figma Segmented Control. Requiere que `icon` esté
9658
+ * presente. El `label` se usa entonces como `aria-label` para accesibilidad.
9659
+ */
9660
+ iconOnly?: boolean;
9661
+ disabled?: boolean;
9662
+ }
9663
+ /**
9664
+ * SUI Segmented Control — SUI Design System 2.0
9665
+ *
9666
+ * Figma file: 8p1k72aKKvzJV4XcvPS4VO
9667
+ * Componente Figma: "Segmented Control [1.1]"
9668
+ * 2604:114 — set del Segmented Control
9669
+ * 2604:150 — variantes de ítem (Text · Left Icon · Only Icon)
9670
+ * 2603:2062 — estados (default · hover · active · disabled)
9671
+ * 2604:152 — container (bg-weak-50, padding 4px, gap 4px, radius 10px)
9672
+ *
9673
+ * Píldora estilo iOS: opciones mutuamente excluyentes con un indicador de
9674
+ * fondo blanco que se anima (translateX + width) hacia la opción activa.
9675
+ * El indicador se reposiciona con ResizeObserver cuando el track cambia de
9676
+ * tamaño (responsive) y con un effect cuando cambia `active` o `tabs`.
9677
+ *
9678
+ * EXACT specs (Figma):
9679
+ * Container (2604:152): bg #f7f7f7 (bg-weak-50), padding 4px, gap 4px, radius 10px
9680
+ * Item: padding 4px, gap 6px, radius 6px, icon 20px
9681
+ * Estados: default text/icon-soft-400 · hover sub-600 · active strong-950 + indicator
9682
+ * Disabled: color discreto text-disabled-300 (NO opacity)
9683
+ *
9684
+ * EXTRA FEATURES (extensión SUI, el set de Figma no expone eje `size`):
9685
+ * - prop `size` (small/medium/large/xlarge); solo medium está 1:1 con Figma.
9686
+ * - prop `disabled` por ítem.
9687
+ *
9688
+ * Historia: hasta la v0.2.x este componente vivía como `<sui-tabs variant="segment">`;
9689
+ * en la v0.3.0 se separó en componente propio (junto a `sui-tab-menu-horizontal`
9690
+ * y `sui-tab-menu-vertical`) espejando los tres sets independientes de Figma.
9691
+ */
9692
+ declare class SuiSegmentedControl<T = string> implements AfterViewInit {
9693
+ readonly tabs: _angular_core.InputSignal<SuiSegmentedControlItem<T>[]>;
9694
+ readonly active: _angular_core.ModelSignal<T | undefined>;
9695
+ readonly size: _angular_core.InputSignal<SuiSegmentedControlSize>;
9696
+ readonly tabChange: _angular_core.OutputEmitterRef<T>;
9616
9697
  segmentItems?: QueryList<ElementRef<HTMLElement>>;
9617
9698
  segmentTrack?: ElementRef<HTMLElement>;
9618
9699
  readonly indicatorStyle: _angular_core.WritableSignal<{
@@ -9623,10 +9704,10 @@ declare class SuiTabs<T = string> implements AfterViewInit {
9623
9704
  constructor();
9624
9705
  ngAfterViewInit(): void;
9625
9706
  private updateIndicator;
9626
- isActive(tab: SuiTab<T>): boolean;
9627
- select(tab: SuiTab<T>): void;
9628
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiTabs<any>, never>;
9629
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiTabs<any>, "sui-tabs", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "verticalStyle": { "alias": "verticalStyle"; "required": false; "isSignal": true; }; "dividerLabel": { "alias": "dividerLabel"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; "tabChange": "tabChange"; }, never, never, true, never>;
9707
+ isActive(tab: SuiSegmentedControlItem<T>): boolean;
9708
+ select(tab: SuiSegmentedControlItem<T>): void;
9709
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiSegmentedControl<any>, never>;
9710
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiSegmentedControl<any>, "sui-segmented-control", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; "tabChange": "tabChange"; }, never, never, true, never>;
9630
9711
  }
9631
9712
 
9632
9713
  type SuiTagInputSize = 'xsmall' | 'small' | 'medium';
@@ -10328,7 +10409,7 @@ declare class SuiTimePicker implements ControlValueAccessor {
10328
10409
  readonly error: _angular_core.InputSignal<boolean>;
10329
10410
  readonly placeholder: _angular_core.InputSignal<string>;
10330
10411
  readonly disabled: _angular_core.InputSignal<boolean>;
10331
- readonly size: _angular_core.InputSignal<"medium" | "small">;
10412
+ readonly size: _angular_core.InputSignal<"small" | "medium">;
10332
10413
  /** Formato de display: '12h' (AM/PM) o '24h'. */
10333
10414
  readonly format: _angular_core.InputSignal<SuiTimeFormat>;
10334
10415
  /** Incremento de minutos de la lista (1, 5, 15, ...). Default 5. */
@@ -10699,5 +10780,5 @@ declare class SuiTooltipPanel {
10699
10780
  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>;
10700
10781
  }
10701
10782
 
10702
- export { DAY_LABELS_ES, DEFAULT_DURATION_PRESETS, DEFAULT_PRESETS, EMPTY_STATE_FOX_EMOJI, SUI_BRAND_LOGO_COMPANIES, SUI_COLOR_DOT_COLORS, SUI_COLOR_DOT_HEX, SUI_CUSTOM_ICONS, SUI_EMOJI_MAP, SUI_FLAG_NAMES, SUI_HEX_TO_COLOR, SUI_KEY_ICON_COLORS, SUI_KEY_ICON_SIZES, SUI_NAVBAR_VISIBILITY, SUI_TAB_BAR, SuiAccordion, SuiActivityFeed, SuiActivityFilter, SuiAlert, SuiAppStoreBadge, SuiAvatar, SuiAvatarGroup, SuiBadge, SuiBanner, SuiBrandLogo, SuiBreadcrumbItem, SuiBreadcrumbs, SuiButton, SuiButtonGroup, SuiButtonGroupItem, SuiCard, SuiCheckbox, SuiCheckboxCard, SuiCheckboxLabel, SuiCircularProgressBar, SuiColorDot, SuiColorPicker, SuiCommandMenuFooter, SuiCommandMenuItem, SuiCommandMenuSearch, SuiCompactAvatarGroup, SuiCompactButton, SuiCompactSelect, SuiCompactSelectForInput, SuiContentCard, SuiContentDivider, 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, SuiIcon, SuiImageUpload, SuiImageUploadProfile, SuiInlineInput, SuiInlineSelect, SuiInput, SuiIntegrationSwitch, SuiKbd, SuiKeyIcon, SuiLinkButton, SuiModal, SuiModalSheet, SuiNotification, SuiNotificationFooter, SuiNotificationTabMenu, SuiOtpInput, SuiPageHeader, SuiPagination, SuiPeriodRange, SuiPopover, SuiProgressBar, SuiProgressBarLabel, SuiRadio, SuiRadioCard, SuiRadioGroup, SuiRating, SuiRichEditor, SuiRichEditorItem, SuiSelect, SuiSidebar, SuiSlider, SuiSocialButton, SuiStatusBadge, SuiStepper, SuiStoreCard, SuiSwitch, SuiSwitchCard, SuiSwitchLabel, SuiTabChips, SuiTable, SuiTableCellDirective, SuiTabs, SuiTag, SuiTagInput, SuiTextarea, SuiTimePicker, SuiTimePickerDuration, SuiTimePickerItem, SuiTimePickerStatus, SuiToastOutlet, SuiToastService, SuiTooltip, SuiTooltipPanel, buildCalendarGrid, buildHourList, buildMinuteList, formatDateInput, formatDateShort, formatMonthYear, formatTime, isSameTime, normalizeHex, pad2, parseTime, to12h, to24h };
10703
- export type { CalendarCell, CalendarRow, DatepickerPreset, DatepickerPresetId, SuiAccordionFlipIcon, SuiActivityAvatarRef, SuiActivityFeedItem, SuiActivityFile, SuiActivityFilterState, SuiActivityTask, SuiActivityTaskState, SuiAlertAction, SuiAlertSize, SuiAlertStyle, SuiAlertVariant, SuiAppStoreBadgeAppearance, SuiAppStoreBadgeCompany, SuiAvatarColor, SuiAvatarGroupItem, SuiAvatarSize, SuiAvatarStatus, SuiAvatarTopBadge, SuiBadgeColor, SuiBadgeConfig, SuiBadgeSize, SuiBadgeType, SuiBadgeVariant, SuiBannerStyle, SuiBannerVariant, SuiBrandLogoCompany, SuiBrandLogoSize, SuiBrandLogoStyle, SuiBreadcrumbDivider, SuiBreadcrumbEntry, SuiButtonColor, SuiButtonGroupEntry, SuiButtonGroupItemSize, SuiButtonSize, SuiButtonVariant, SuiCardSize, SuiCardVariant, SuiCheckboxCardType, SuiCheckboxSize, SuiCircularProgressBarColor, SuiCircularProgressBarSize, SuiColorDotColor, SuiCommandMenuItemSize, SuiCommandMenuItemType, SuiCompactAvatarGroupAppearance, SuiCompactAvatarGroupSize, SuiCompactButtonSize, SuiCompactButtonStyle, SuiCompactSelectForInputItem, SuiCompactSelectForInputSize, SuiCompactSelectItem, SuiCompactSelectSize, SuiCompactSelectType, SuiContentCardType, SuiContentDividerItem, SuiContentDividerType, SuiCounterInputSize, SuiDateRange, SuiDatepickerCalendars, SuiDatepickerMode, SuiDayCellType, SuiDividerOrientation, SuiDrawerFooterType, SuiDrawerHeaderSize, SuiDrawerHeaderType, SuiDropdownItemMode, SuiDropdownItemSize, SuiDropdownMenuPopupRole, SuiDropdownMenuPosition, SuiEmojiName, SuiEmojiSize, SuiFancyButtonSize, SuiFancyButtonType, SuiFileIconColor, SuiFileIconSize, SuiFileUploadCardState, SuiFileUploadSize, SuiFilterItemState, SuiFlagName, SuiFlagSize, SuiFormHintSize, SuiFormHintVariant, SuiFormLabelSize, SuiImageUploadProfileAlignment, SuiImageUploadProfileType, SuiImageUploadShape, SuiImageUploadSize, SuiInlineSelectItem, SuiInlineSelectType, SuiInputSize, SuiInputType, SuiIntegrationSwitchAppearance, SuiIntegrationSwitchType, SuiKbdVariant, SuiKeyIconColor, SuiKeyIconSize, SuiKeyIconStyle, SuiLinkButtonSize, SuiLinkButtonVariant, SuiModalIconVariant, SuiModalSize, SuiModalStatusAlignment, SuiNavbarVisibility, SuiNotificationStyle, SuiNotificationTab, SuiNotificationVariant, SuiOtpInputType, SuiPaginationInfoFormat, SuiPaginationSize, SuiPaginationType, SuiPopoverFooter, SuiPopoverPosition, SuiProgressBarColor, SuiProgressBarLabelType, SuiProgressBarSize, SuiRadioCardType, SuiRadioSize, SuiRadioValue, SuiRatingAlignment, SuiRatingAppearance, SuiRatingReviewLink, SuiRatingSize, SuiRatingType, SuiRichEditorAction, SuiRichEditorCommand, SuiRichEditorItemState, SuiRichEditorItemType, SuiRichEditorLayout, SuiSelectOption, SuiSelectSize, SuiSelectType, SuiSidebarIndicatorColor, SuiSidebarItem, SuiSidebarMobileMode, SuiSidebarProfile, SuiSliderType, SuiSocialButtonBrand, SuiSocialButtonStyle, SuiStatusBadgeAppearance, SuiStatusBadgeStatus, SuiStepperItem, SuiStepperSize, SuiStepperState, SuiStepperVariant, SuiStoreCardData, SuiSwitchCardType, SuiSwitchSize, SuiTab, SuiTabBar, SuiTabChipItem, SuiTableCellMisc, SuiTableCellPriority, SuiTableColumn, SuiTableSize, SuiTabsSize, SuiTabsVariant, SuiTabsVerticalStyle, SuiTagInputSize, SuiTagStyle, SuiTimeDurationPreset, SuiTimeFormat, SuiTimePeriod, SuiTimePickerItemDirection, SuiTimePickerStatusType, SuiTimeValue, SuiToastAction, SuiToastData, SuiToastItem, SuiToastPosition, SuiToastStyle, SuiToastVariant, SuiTooltipLargeData, SuiTooltipPosition, SuiTooltipSize, SuiTooltipTheme };
10783
+ export { DAY_LABELS_ES, DEFAULT_DURATION_PRESETS, DEFAULT_PRESETS, EMPTY_STATE_FOX_EMOJI, SUI_BRAND_LOGO_COMPANIES, SUI_COLOR_DOT_COLORS, SUI_COLOR_DOT_HEX, SUI_CUSTOM_ICONS, SUI_EMOJI_MAP, SUI_FLAG_NAMES, SUI_HEX_TO_COLOR, SUI_KEY_ICON_COLORS, SUI_KEY_ICON_SIZES, SUI_NAVBAR_VISIBILITY, SUI_TAB_BAR, SuiAccordion, SuiActivityFeed, SuiActivityFilter, SuiAlert, SuiAppStoreBadge, SuiAvatar, SuiAvatarGroup, SuiBadge, SuiBanner, SuiBrandLogo, SuiBreadcrumbItem, SuiBreadcrumbs, SuiButton, SuiButtonGroup, SuiButtonGroupItem, SuiCard, SuiCheckbox, SuiCheckboxCard, SuiCheckboxLabel, SuiCircularProgressBar, SuiColorDot, SuiColorPicker, SuiCommandMenuFooter, SuiCommandMenuItem, SuiCommandMenuSearch, SuiCompactAvatarGroup, SuiCompactButton, SuiCompactSelect, SuiCompactSelectForInput, SuiContentCard, SuiContentDivider, 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, SuiIcon, SuiImageUpload, SuiImageUploadProfile, SuiInlineInput, SuiInlineSelect, SuiInput, SuiIntegrationSwitch, SuiKbd, SuiKeyIcon, SuiLinkButton, SuiModal, SuiModalSheet, SuiNotification, SuiNotificationFooter, SuiNotificationTabMenu, SuiOtpInput, SuiPageHeader, SuiPagination, SuiPeriodRange, SuiPopover, SuiProgressBar, SuiProgressBarLabel, SuiRadio, SuiRadioCard, SuiRadioGroup, 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, buildCalendarGrid, buildHourList, buildMinuteList, formatDateInput, formatDateShort, formatMonthYear, formatTime, isSameTime, normalizeHex, pad2, parseTime, to12h, to24h };
10784
+ export type { CalendarCell, CalendarRow, DatepickerPreset, DatepickerPresetId, SuiAccordionFlipIcon, SuiActivityAvatarRef, SuiActivityFeedItem, SuiActivityFile, SuiActivityFilterState, SuiActivityTask, SuiActivityTaskState, SuiAlertAction, SuiAlertSize, SuiAlertStyle, SuiAlertVariant, SuiAppStoreBadgeAppearance, SuiAppStoreBadgeCompany, SuiAvatarColor, SuiAvatarGroupItem, SuiAvatarSize, SuiAvatarStatus, SuiAvatarTopBadge, SuiBadgeColor, SuiBadgeConfig, SuiBadgeSize, SuiBadgeType, SuiBadgeVariant, SuiBannerStyle, SuiBannerVariant, SuiBrandLogoCompany, SuiBrandLogoSize, SuiBrandLogoStyle, SuiBreadcrumbDivider, SuiBreadcrumbEntry, SuiButtonColor, SuiButtonGroupEntry, SuiButtonGroupItemSize, SuiButtonSize, SuiButtonVariant, SuiCardSize, SuiCardVariant, SuiCheckboxCardType, SuiCheckboxSize, SuiCircularProgressBarColor, SuiCircularProgressBarSize, SuiColorDotColor, SuiCommandMenuItemSize, SuiCommandMenuItemType, SuiCompactAvatarGroupAppearance, SuiCompactAvatarGroupSize, SuiCompactButtonSize, SuiCompactButtonStyle, SuiCompactSelectForInputItem, SuiCompactSelectForInputSize, SuiCompactSelectItem, SuiCompactSelectSize, SuiCompactSelectType, SuiContentCardType, SuiContentDividerItem, SuiContentDividerType, SuiCounterInputSize, SuiDateRange, SuiDatepickerCalendars, SuiDatepickerMode, SuiDayCellType, SuiDividerOrientation, SuiDrawerFooterType, SuiDrawerHeaderSize, SuiDrawerHeaderType, SuiDropdownItemMode, SuiDropdownItemSize, SuiDropdownMenuPopupRole, SuiDropdownMenuPosition, SuiEmojiName, SuiEmojiSize, SuiFancyButtonSize, SuiFancyButtonType, SuiFileIconColor, SuiFileIconSize, SuiFileUploadCardState, SuiFileUploadSize, SuiFilterItemState, SuiFlagName, SuiFlagSize, SuiFormHintSize, SuiFormHintVariant, SuiFormLabelSize, SuiImageUploadProfileAlignment, SuiImageUploadProfileType, SuiImageUploadShape, SuiImageUploadSize, SuiInlineSelectItem, SuiInlineSelectType, SuiInputSize, SuiInputType, SuiIntegrationSwitchAppearance, SuiIntegrationSwitchType, SuiKbdVariant, SuiKeyIconColor, SuiKeyIconSize, SuiKeyIconStyle, SuiLinkButtonSize, SuiLinkButtonVariant, SuiModalIconVariant, SuiModalSize, SuiModalStatusAlignment, SuiNavbarVisibility, SuiNotificationStyle, SuiNotificationTab, SuiNotificationVariant, SuiOtpInputType, SuiPaginationInfoFormat, SuiPaginationSize, SuiPaginationType, SuiPopoverFooter, SuiPopoverPosition, SuiProgressBarColor, SuiProgressBarLabelType, SuiProgressBarSize, SuiRadioCardType, SuiRadioSize, SuiRadioValue, SuiRatingAlignment, SuiRatingAppearance, SuiRatingReviewLink, SuiRatingSize, SuiRatingType, SuiRichEditorAction, SuiRichEditorCommand, SuiRichEditorItemState, SuiRichEditorItemType, SuiRichEditorLayout, SuiSegmentedControlItem, SuiSegmentedControlSize, SuiSelectOption, SuiSelectSize, SuiSelectType, SuiSidebarIndicatorColor, SuiSidebarItem, SuiSidebarMobileMode, SuiSidebarProfile, SuiSliderType, SuiSocialButtonBrand, SuiSocialButtonStyle, SuiStatusBadgeAppearance, SuiStatusBadgeStatus, SuiStepperItem, SuiStepperSize, SuiStepperState, SuiStepperVariant, SuiStoreCardData, SuiSwitchCardType, SuiSwitchSize, SuiTabBar, SuiTabChipItem, SuiTabMenuHorizontalItem, SuiTabMenuHorizontalSize, SuiTabMenuVerticalItem, SuiTabMenuVerticalStyle, SuiTableCellMisc, SuiTableCellPriority, SuiTableColumn, SuiTableSize, SuiTagInputSize, SuiTagStyle, SuiTimeDurationPreset, SuiTimeFormat, SuiTimePeriod, SuiTimePickerItemDirection, SuiTimePickerStatusType, SuiTimeValue, SuiToastAction, SuiToastData, SuiToastItem, SuiToastPosition, SuiToastStyle, SuiToastVariant, SuiTooltipLargeData, SuiTooltipPosition, SuiTooltipSize, SuiTooltipTheme };