@ajuarezso/sui-design-system 0.2.7 → 0.4.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.7",
3
+ "version": "0.4.0",
4
4
  "description": "SUI Design System — librería de componentes Angular (SUI 2.0).",
5
5
  "license": "UNLICENSED",
6
6
  "publishConfig": {
@@ -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>
@@ -8884,6 +8884,51 @@ declare class SuiStoreCard {
8884
8884
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiStoreCard, "sui-store-card", never, { "store": { "alias": "store"; "required": true; "isSignal": true; }; "isFavorite": { "alias": "isFavorite"; "required": false; "isSignal": true; }; "disableLink": { "alias": "disableLink"; "required": false; "isSignal": true; }; }, { "toggleFavorite": "toggleFavorite"; "ratingClicked": "ratingClicked"; }, never, never, true, never>;
8885
8885
  }
8886
8886
 
8887
+ declare class SuiProductCard {
8888
+ /** Nombre del producto (título de la card + fuente del color del fallback). */
8889
+ readonly name: _angular_core.InputSignal<string>;
8890
+ /** Descripción corta (1 línea, opcional). */
8891
+ readonly description: _angular_core.InputSignal<string>;
8892
+ /** Precio numérico; se formatea a 2 decimales. */
8893
+ readonly price: _angular_core.InputSignal<number>;
8894
+ /** URL de la imagen. Ausente → se usa `fallbackVariant`. */
8895
+ readonly imageUrl: _angular_core.InputSignal<string | null>;
8896
+ /** Encuadre vertical de la imagen (CSS object-position Y, 0–100). */
8897
+ readonly imagePosition: _angular_core.InputSignal<number>;
8898
+ /** false → card atenuada + tag "Agotado", sin botón de agregar. */
8899
+ readonly available: _angular_core.InputSignal<boolean>;
8900
+ /** Cantidad en el carrito. > 0 → muestra el stepper en vez del botón "+". */
8901
+ readonly quantity: _angular_core.InputSignal<number>;
8902
+ /** Local cerrado → deshabilita agregar / incrementar. */
8903
+ readonly closed: _angular_core.InputSignal<boolean>;
8904
+ /** Prefijo de moneda. */
8905
+ readonly currencySymbol: _angular_core.InputSignal<string>;
8906
+ /** Fallback sin imagen: `'name'` = banda de color + nombre; `'icon'` = ícono. */
8907
+ readonly fallbackVariant: _angular_core.InputSignal<"name" | "icon">;
8908
+ /** Texto del tag cuando no está disponible. */
8909
+ readonly unavailableLabel: _angular_core.InputSignal<string>;
8910
+ /** Tap en la card (abrir detalle del producto). */
8911
+ readonly openDetail: _angular_core.OutputEmitterRef<void>;
8912
+ /** Tap en el botón "+" (agregar al carrito). */
8913
+ readonly add: _angular_core.OutputEmitterRef<void>;
8914
+ /** Tap en "+" del stepper (incrementar cantidad). */
8915
+ readonly increment: _angular_core.OutputEmitterRef<void>;
8916
+ /** Tap en "−" / basurero del stepper (decrementar / quitar). */
8917
+ readonly decrement: _angular_core.OutputEmitterRef<void>;
8918
+ readonly formattedPrice: _angular_core.Signal<string>;
8919
+ readonly showStepper: _angular_core.Signal<boolean>;
8920
+ readonly showNamedFallback: _angular_core.Signal<boolean>;
8921
+ readonly showIconFallback: _angular_core.Signal<boolean>;
8922
+ /** Color estable derivado del nombre (hash → índice de paleta). */
8923
+ readonly fallbackColor: _angular_core.Signal<string>;
8924
+ onCard(): void;
8925
+ onAdd(event: Event): void;
8926
+ onInc(event: Event): void;
8927
+ onDec(event: Event): void;
8928
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiProductCard, never>;
8929
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiProductCard, "sui-product-card", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "price": { "alias": "price"; "required": true; "isSignal": true; }; "imageUrl": { "alias": "imageUrl"; "required": false; "isSignal": true; }; "imagePosition": { "alias": "imagePosition"; "required": false; "isSignal": true; }; "available": { "alias": "available"; "required": false; "isSignal": true; }; "quantity": { "alias": "quantity"; "required": false; "isSignal": true; }; "closed": { "alias": "closed"; "required": false; "isSignal": true; }; "currencySymbol": { "alias": "currencySymbol"; "required": false; "isSignal": true; }; "fallbackVariant": { "alias": "fallbackVariant"; "required": false; "isSignal": true; }; "unavailableLabel": { "alias": "unavailableLabel"; "required": false; "isSignal": true; }; }, { "openDetail": "openDetail"; "add": "add"; "increment": "increment"; "decrement": "decrement"; }, never, never, true, never>;
8930
+ }
8931
+
8887
8932
  /**
8888
8933
  * SUI Switch — SUI Design System 2.0
8889
8934
  *
@@ -9494,125 +9539,206 @@ declare class SuiTable<T = any> {
9494
9539
  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
9540
  }
9496
9541
 
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> {
9542
+ type SuiTabMenuHorizontalSize = 'small' | 'medium' | 'large' | 'xlarge';
9543
+ interface SuiTabMenuHorizontalItem<T = string> {
9502
9544
  value: T;
9503
9545
  label: string;
9504
9546
  icon?: string;
9505
- disabled?: boolean;
9506
9547
  /**
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'.
9548
+ * Muestra el chevron de navegación (pill `arrow-right-s-line` 18px) a la
9549
+ * derecha del ítem — prop `rightIcon` del Tab Menu de Figma. El pill es
9550
+ * bg-white-0 p-px radius-full overflow-clip SIN shadow (Figma 3511:9882,
9551
+ * a diferencia del pill del Tab Menu Vertical, que sí lleva shadow-x-small).
9511
9552
  */
9512
- iconOnly?: boolean;
9553
+ rightIcon?: boolean;
9513
9554
  /**
9514
9555
  * 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`.
9556
+ * Mapea al prop `number` del Tab Menu Horizontal Items de Figma.
9557
+ * Si es `0`/`undefined` no se renderiza.
9517
9558
  */
9518
- badge?: number;
9559
+ number?: number;
9560
+ disabled?: boolean;
9561
+ }
9562
+ /**
9563
+ * SUI Tab Menu Horizontal — SUI Design System 2.0
9564
+ *
9565
+ * Figma file: 8p1k72aKKvzJV4XcvPS4VO
9566
+ * Componente Figma: "Tab Menu Horizontal [1.1]"
9567
+ * 3511:9958 — container (border-t/b, py-14px, gap-24px)
9568
+ * 3511:9832 — Tab Menu Horizontal Items [1.1] (State × Active; leftIcon/rightIcon/number)
9569
+ * 3511:9897 — Item Active/On (label strong-950 + línea primary)
9570
+ * 3511:9877 — Item Hover/Off (text strong-950, icon sub-600)
9571
+ *
9572
+ * Pestañas horizontales con subrayado (underline 2px primary en el ítem activo,
9573
+ * al ras del border-bottom del container).
9574
+ *
9575
+ * EXACT specs (Figma):
9576
+ * Container (3511:9958): border-top + border-bottom 1px stroke-soft-200,
9577
+ * padding 14px 0, gap 24px entre items, align-items flex-start, bg-white-0
9578
+ * Item (3511:9830/9897): gap icon↔label 6px, gap label↔number 4px
9579
+ * Default/Off: text/icon sub-600
9580
+ * Hover/Off: text strong-950, icon sub-600
9581
+ * Active/On: text strong-950 + underline primary-base 2px (bottom -14px);
9582
+ * leftIcon strong-950 (verificado 2026-06-21: difiere del
9583
+ * vertical, cuyo icono activo es primary-base — a propósito)
9584
+ * number: badge state/error/base, p-2px, radius-full, text static-white,
9585
+ * Subheading/2XSmall (11px/12px line, +2% / 0.22px, uppercase)
9586
+ * rightIcon (chevron): pill 'Arrow' (3511:9882/9902/9844): bg-white-0, p-px,
9587
+ * radius-full, overflow-clip, icon arrow-right-s-line 18px, SIN shadow
9588
+ *
9589
+ * PENDING VERIFY:
9590
+ * - `size`: el Tab Menu Horizontal de Figma no expone eje size. El input se
9591
+ * mantiene como extensión SUI (espeja el data-attr del host como hook de
9592
+ * SCSS), pero hoy solo medium está 1:1 y no altera estilos.
9593
+ * - `disabled` por ítem es extensión SUI (Figma no muestra estado Disabled).
9594
+ *
9595
+ * Historia: hasta la v0.2.x este componente vivía como `<sui-tabs variant="line">`;
9596
+ * en la v0.3.0 se separó en componente propio (junto a `sui-segmented-control`
9597
+ * y `sui-tab-menu-vertical`) espejando los tres sets independientes de Figma.
9598
+ * Renombres vs la interface SuiTab vieja: `badge` → `number` y `chevron` →
9599
+ * `rightIcon` (nombres de los props del Figma).
9600
+ */
9601
+ declare class SuiTabMenuHorizontal<T = string> {
9602
+ readonly tabs: _angular_core.InputSignal<SuiTabMenuHorizontalItem<T>[]>;
9603
+ readonly active: _angular_core.ModelSignal<T | undefined>;
9604
+ readonly size: _angular_core.InputSignal<SuiTabMenuHorizontalSize>;
9605
+ readonly tabChange: _angular_core.OutputEmitterRef<T>;
9606
+ isActive(tab: SuiTabMenuHorizontalItem<T>): boolean;
9607
+ select(tab: SuiTabMenuHorizontalItem<T>): void;
9608
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiTabMenuHorizontal<any>, never>;
9609
+ 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>;
9610
+ }
9611
+
9612
+ /** Estilo del contenedor del Tab Menu Vertical (prop Style=Card|List de Figma). */
9613
+ type SuiTabMenuVerticalStyle = 'card' | 'list';
9614
+ interface SuiTabMenuVerticalItem<T = string> {
9615
+ value: T;
9616
+ label: string;
9617
+ icon?: string;
9519
9618
  /**
9520
9619
  * 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).
9620
+ * derecha del ítem — prop `rightIcon` del Tab Menu de Figma. El pill vertical
9621
+ * es bg-white-0 p-1px radius-full CON shadow-x-small (Figma 3515:10332, a
9622
+ * diferencia del pill del Tab Menu Horizontal, que NO lleva shadow).
9525
9623
  */
9526
- chevron?: boolean;
9624
+ rightIcon?: boolean;
9625
+ /**
9626
+ * Badge numérico rojo (state/error/base) renderizado a la derecha del label.
9627
+ * Mapea al prop `number` del Tab Menu Vertical Items de Figma.
9628
+ * Si es `0`/`undefined` no se renderiza.
9629
+ */
9630
+ number?: number;
9631
+ disabled?: boolean;
9527
9632
  }
9528
9633
  /**
9529
- * SUI Tabs — SUI Design System 2.0
9634
+ * SUI Tab Menu Vertical — SUI Design System 2.0
9530
9635
  *
9531
9636
  * 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'
9637
+ * Componente Figma: "Tab Menu Vertical [1.1]"
9638
+ * 3516:10411 — set (Style=Card|List × Quantity 02–08 × divider)
9639
+ * 3516:10412 — Card Quantity=03 con divider 'SELECT MENU'
9545
9640
  * 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
9641
+ * 3515:10341 — Item Active/On (bg-weak-50)
9642
+ *
9643
+ * Navegación lateral (sidebar nav) con dos estilos de contenedor: Card (con
9644
+ * borde/fondo/sombra) o List (plano).
9645
+ *
9646
+ * EXACT specs (Figma):
9647
+ * Item (3515:10327/10341): gap 6px, padding 8px, radius-8, w-full, label flex-1
9648
+ * text-left, overflow-clip
9649
+ * Active/On: bg-weak-50 + text strong-950; leftIcon PRIMARY-BASE (verificado
9650
+ * 2026-06-21 vía variable_defs + screenshot de 3515:10341 — difiere
9651
+ * del horizontal, cuyo icono activo es strong-950, a propósito)
9568
9652
  * 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).
9653
+ * Default/Off (Card): bg-white-0 + text/icon sub-600
9654
+ * Default/Off (List): transparent + text/icon sub-600
9655
+ * Container Card (3516:10412): bg-white-0, border 1px stroke-soft-200, p-10px,
9656
+ * radius-16, shadow-x-small, flex-col gap-8px, overflow-clip
9657
+ * Container List: flat (sin border/bg/shadow/padding), gap-8px
9658
+ * Divider label (Content Divider [1.1] reusado): px-8px py-4px, text-soft-400,
9659
+ * Subheading/XSmall (12px/16px line, +4% / 0.48px), uppercase
9660
+ * number: badge state/error/base, p-2px, radius-full, text static-white
9661
+ * rightIcon (chevron): pill bg-white-0, p-1px, radius-full, shadow-x-small,
9662
+ * arrow-right-s-line 18px
9592
9663
  *
9593
9664
  * 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>[]>;
9665
+ * - El set de Figma no expone eje `size`; usa un único tamaño (item p-8px /
9666
+ * icon 20px), por eso este componente NO tiene input `size`.
9667
+ * - `disabled` por ítem es extensión SUI (Figma no muestra estado Disabled).
9668
+ *
9669
+ * Historia: hasta la v0.2.x este componente vivía como
9670
+ * `<sui-tabs variant="vertical">`; en la v0.3.0 se separó en componente propio
9671
+ * (junto a `sui-segmented-control` y `sui-tab-menu-horizontal`) espejando los
9672
+ * tres sets independientes de Figma. Renombres vs la API vieja:
9673
+ * - input `verticalStyle` → `menuStyle` (el prefijo "vertical" quedó
9674
+ * redundante con el nombre del componente; no se usa `style` a secas para
9675
+ * no chocar con el atributo HTML global `style`).
9676
+ * - item `badge` → `number` y `chevron` → `rightIcon` (props del Figma).
9677
+ */
9678
+ declare class SuiTabMenuVertical<T = string> {
9679
+ readonly tabs: _angular_core.InputSignal<SuiTabMenuVerticalItem<T>[]>;
9605
9680
  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>;
9681
+ /** Estilo del contenedor: Card (borde/fondo/sombra) o List (plano). */
9682
+ readonly menuStyle: _angular_core.InputSignal<SuiTabMenuVerticalStyle>;
9610
9683
  /**
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'.
9684
+ * Label de sección renderizado sobre el menú (prop `divider` del Figma —
9685
+ * ej. 'SELECT MENU'). Vacío = sin divider.
9613
9686
  */
9614
9687
  readonly dividerLabel: _angular_core.InputSignal<string>;
9615
9688
  readonly tabChange: _angular_core.OutputEmitterRef<T>;
9689
+ isActive(tab: SuiTabMenuVerticalItem<T>): boolean;
9690
+ select(tab: SuiTabMenuVerticalItem<T>): void;
9691
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiTabMenuVertical<any>, never>;
9692
+ 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>;
9693
+ }
9694
+
9695
+ type SuiSegmentedControlSize = 'small' | 'medium' | 'large' | 'xlarge';
9696
+ interface SuiSegmentedControlItem<T = string> {
9697
+ value: T;
9698
+ label: string;
9699
+ icon?: string;
9700
+ /**
9701
+ * Renderiza el ítem solo con icono (sin label visible) — mapea al
9702
+ * Type=Only Icon del Figma Segmented Control. Requiere que `icon` esté
9703
+ * presente. El `label` se usa entonces como `aria-label` para accesibilidad.
9704
+ */
9705
+ iconOnly?: boolean;
9706
+ disabled?: boolean;
9707
+ }
9708
+ /**
9709
+ * SUI Segmented Control — SUI Design System 2.0
9710
+ *
9711
+ * Figma file: 8p1k72aKKvzJV4XcvPS4VO
9712
+ * Componente Figma: "Segmented Control [1.1]"
9713
+ * 2604:114 — set del Segmented Control
9714
+ * 2604:150 — variantes de ítem (Text · Left Icon · Only Icon)
9715
+ * 2603:2062 — estados (default · hover · active · disabled)
9716
+ * 2604:152 — container (bg-weak-50, padding 4px, gap 4px, radius 10px)
9717
+ *
9718
+ * Píldora estilo iOS: opciones mutuamente excluyentes con un indicador de
9719
+ * fondo blanco que se anima (translateX + width) hacia la opción activa.
9720
+ * El indicador se reposiciona con ResizeObserver cuando el track cambia de
9721
+ * tamaño (responsive) y con un effect cuando cambia `active` o `tabs`.
9722
+ *
9723
+ * EXACT specs (Figma):
9724
+ * Container (2604:152): bg #f7f7f7 (bg-weak-50), padding 4px, gap 4px, radius 10px
9725
+ * Item: padding 4px, gap 6px, radius 6px, icon 20px
9726
+ * Estados: default text/icon-soft-400 · hover sub-600 · active strong-950 + indicator
9727
+ * Disabled: color discreto text-disabled-300 (NO opacity)
9728
+ *
9729
+ * EXTRA FEATURES (extensión SUI, el set de Figma no expone eje `size`):
9730
+ * - prop `size` (small/medium/large/xlarge); solo medium está 1:1 con Figma.
9731
+ * - prop `disabled` por ítem.
9732
+ *
9733
+ * Historia: hasta la v0.2.x este componente vivía como `<sui-tabs variant="segment">`;
9734
+ * en la v0.3.0 se separó en componente propio (junto a `sui-tab-menu-horizontal`
9735
+ * y `sui-tab-menu-vertical`) espejando los tres sets independientes de Figma.
9736
+ */
9737
+ declare class SuiSegmentedControl<T = string> implements AfterViewInit {
9738
+ readonly tabs: _angular_core.InputSignal<SuiSegmentedControlItem<T>[]>;
9739
+ readonly active: _angular_core.ModelSignal<T | undefined>;
9740
+ readonly size: _angular_core.InputSignal<SuiSegmentedControlSize>;
9741
+ readonly tabChange: _angular_core.OutputEmitterRef<T>;
9616
9742
  segmentItems?: QueryList<ElementRef<HTMLElement>>;
9617
9743
  segmentTrack?: ElementRef<HTMLElement>;
9618
9744
  readonly indicatorStyle: _angular_core.WritableSignal<{
@@ -9623,10 +9749,10 @@ declare class SuiTabs<T = string> implements AfterViewInit {
9623
9749
  constructor();
9624
9750
  ngAfterViewInit(): void;
9625
9751
  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>;
9752
+ isActive(tab: SuiSegmentedControlItem<T>): boolean;
9753
+ select(tab: SuiSegmentedControlItem<T>): void;
9754
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiSegmentedControl<any>, never>;
9755
+ 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
9756
  }
9631
9757
 
9632
9758
  type SuiTagInputSize = 'xsmall' | 'small' | 'medium';
@@ -10699,5 +10825,5 @@ declare class SuiTooltipPanel {
10699
10825
  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
10826
  }
10701
10827
 
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 };
10828
+ 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, SuiProductCard, 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 };
10829
+ 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 };