@ajuarezso/sui-design-system 0.7.18 → 0.7.20

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.18",
3
+ "version": "0.7.20",
4
4
  "description": "SUI Design System — librería de componentes Angular (SUI 2.0).",
5
5
  "license": "UNLICENSED",
6
6
  "publishConfig": {
@@ -1587,7 +1587,7 @@ declare class SuiButtonGroupItem {
1587
1587
  /** aria-label para icon-only buttons */
1588
1588
  readonly ariaLabel: _angular_core.InputSignal<string>;
1589
1589
  /** Estado del data-attribute para CSS scoping */
1590
- readonly state: _angular_core.Signal<"default" | "active" | "disabled">;
1590
+ readonly state: _angular_core.Signal<"disabled" | "default" | "active">;
1591
1591
  /** True cuando solo tiene icon (left o right) sin label */
1592
1592
  readonly onlyIcon: _angular_core.Signal<boolean>;
1593
1593
  /**
@@ -2411,7 +2411,7 @@ declare class SuiColorDot {
2411
2411
  * - `selected` → dot 12×12 + ring 2px.
2412
2412
  * - `disabled` → dot gris pálido, sin pointer events.
2413
2413
  */
2414
- readonly state: _angular_core.InputSignal<"default" | "disabled" | "hover" | "selected">;
2414
+ readonly state: _angular_core.InputSignal<"disabled" | "default" | "hover" | "selected">;
2415
2415
  /** aria-label override. */
2416
2416
  readonly ariaLabel: _angular_core.InputSignal<string>;
2417
2417
  readonly clicked: _angular_core.OutputEmitterRef<void>;
@@ -3510,7 +3510,93 @@ declare class SuiContentDivider {
3510
3510
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiContentDivider, "sui-content-divider", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; }, { "buttonClick": "buttonClick"; "itemClick": "itemClick"; }, never, never, true, never>;
3511
3511
  }
3512
3512
 
3513
- type SuiCounterInputSize = 'xsmall' | 'small' | 'medium';
3513
+ type SuiFormLabelSize = 'xsmall' | 'small' | 'medium';
3514
+ /**
3515
+ * SUI Form Label — SUI DS 2.0
3516
+ *
3517
+ * Figma file: 8p1k72aKKvzJV4XcvPS4VO
3518
+ * Figma group: "Key Components" → Label [1.1]
3519
+ * (nodos auditados: 263:1850 / 266:2814 — frame Label)
3520
+ *
3521
+ * Matriz Figma decodificada (audit reports.json "Key Components"):
3522
+ * Label(Normal/Disabled) × Required × Sublabel × Info × Button (~16 combinaciones)
3523
+ * - Normal/Disabled → input `disabled`
3524
+ * - Required → input `required` (asterisco)
3525
+ * - Sublabel → input `sublabel` (texto secundario)
3526
+ * - Info → input `tooltip` (icono ℹ + tooltip)
3527
+ * - Button → input `link` + output `linkClick` (link tipo "Help?" a la derecha)
3528
+ *
3529
+ * @input label: string (required) — Texto principal del label
3530
+ * @input sublabel: string | null — Texto secundario pequeño (ej. "Optional", "Required")
3531
+ * @input required: boolean — Muestra asterisco al final del label principal
3532
+ * @input tooltip: string | null — Tooltip sobre icono info (ℹ) al final del label
3533
+ * @input link: SuiLinkConfig | string | null — Link de acción a la derecha (variante
3534
+ * "Button" de Figma, ej. "Help?"). String shorthand = solo label (emite `linkClick`);
3535
+ * SuiLinkConfig { label, href?, target?, rel? } = <a> real con rel automático
3536
+ * 'noopener noreferrer' si target='_blank' (patrón canon sui-checkbox-label).
3537
+ * Si null, no se renderiza el link.
3538
+ * @input size: 'xsmall' | 'small' | 'medium' — Tamaño visual, default 'medium'
3539
+ * @input disabled: boolean — Atenúa todo el label (text/sublabel/asterisco/icono/link)
3540
+ * @input for: string | null — Attr `for` del <label> para accesibilidad
3541
+ * @output linkClick: MouseEvent — Emite cuando se clickea el link de acción ("Button" variant)
3542
+ *
3543
+ * Variantes (todas verificadas contra el variantMatrix de la auditoría;
3544
+ * los valores cromáticos exactos quedan PENDING VERIFY hasta re-correr MCP Figma):
3545
+ * - required: asterisco (*) en --sui-state-error-base.
3546
+ * NOTA token: SUI 2.0 base pinta el asterisco con --primary-base (#335cff azul).
3547
+ * En ESTE proyecto --primary-base fue rebrandeado a naranja (#fa7319), y el asterisco
3548
+ * de "requerido" es semánticamente un error/alerta → se usa --sui-state-error-base
3549
+ * (#fb3748). Decisión consciente, NO copia ciega del token azul de SUI.
3550
+ * - sublabel: texto en --sui-text-sub-600, weight 400 (override del 500 del label).
3551
+ * - tooltip: botón info, icono custom `info-custom-fill` (node 125:279) vía sui-icon
3552
+ * (registrado en SUI_CUSTOM_ICONS) — círculo relleno con "i" serif, NO el
3553
+ * ri-information-fill de RemixIcon (i recta). Color --sui-icon-disabled-300 (#d1d1d1)
3554
+ * via currentColor; el vector queda ~12.5px centrado en slot 20px (padding 18.75%).
3555
+ * - link: sui-link-button variant="gray" size="small" alineado a la derecha
3556
+ * (margin-left: auto). En Figma el nodo del link ES una instancia de
3557
+ * "Link Buttons [1.1]" (266:2814) → se renderiza con el COMPONENTE real,
3558
+ * no un <button> maqueta (canon: ningún button custom donde un SUI sirve).
3559
+ * Variant gray = 12/16/500 text/sub-600 base + disabled-300, idéntico al
3560
+ * spec verificado del label.
3561
+ * - disabled: --sui-text-disabled-300 / --sui-icon-disabled-300 en todo, sin cursor pointer.
3562
+ * - sizes: xsmall/small/medium — tipografía escala con el field que acompaña.
3563
+ *
3564
+ * extraFeatures preservadas (audit): variante `size` (xsmall/small/medium) derivada del
3565
+ * contexto de sui-input/sui-select — NO está en los nodos Figma auditados pero se mantiene.
3566
+ */
3567
+ declare class SuiFormLabel {
3568
+ /** Texto principal del label (imperativo) */
3569
+ readonly label: _angular_core.InputSignal<string>;
3570
+ /** Sublabel opcional (texto secundario pequeño después del label principal) */
3571
+ readonly sublabel: _angular_core.InputSignal<string | null>;
3572
+ /** Marca como requerido — muestra asterisco al final del label principal */
3573
+ readonly required: _angular_core.InputSignal<boolean>;
3574
+ /** Tooltip opcional sobre un icono info (ℹ) al final del label */
3575
+ readonly tooltip: _angular_core.InputSignal<string | null>;
3576
+ /** Link de acción a la derecha (variante "Button" de Figma, ej. "Help?") —
3577
+ * string shorthand (solo label, emite `linkClick`) o SuiLinkConfig
3578
+ * { label, href?, target?, rel? }: con href renderiza <a> real; rel
3579
+ * automático 'noopener noreferrer' para _blank. Si null/vacío, no se
3580
+ * renderiza el link. (Patrón canon `link` de sui-checkbox-label.) */
3581
+ readonly link: _angular_core.InputSignal<string | SuiLinkConfig | null>;
3582
+ /** Config resuelta del link (string → { label }, rel automático). */
3583
+ protected readonly linkCfg: _angular_core.Signal<SuiLinkConfig | null>;
3584
+ /** Tamaño visual — matchea al field que acompaña */
3585
+ readonly size: _angular_core.InputSignal<SuiFormLabelSize>;
3586
+ /** Atenúa todo el label (estado Disabled de Figma) */
3587
+ readonly disabled: _angular_core.InputSignal<boolean>;
3588
+ /** ID del field controlado (para accesibilidad `for` attribute) */
3589
+ readonly for: _angular_core.InputSignal<string | null>;
3590
+ /** Emite cuando se clickea el link de acción (variante "Button" de Figma) */
3591
+ readonly linkClick: _angular_core.OutputEmitterRef<MouseEvent>;
3592
+ /** Click del link: stop-propagation para no disparar la activación del <label>
3593
+ * contenedor. sui-link-button ya bloquea el click cuando está disabled. */
3594
+ onLinkClick(event: MouseEvent): void;
3595
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiFormLabel, never>;
3596
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiFormLabel, "sui-form-label", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "sublabel": { "alias": "sublabel"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "link": { "alias": "link"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "for": { "alias": "for"; "required": false; "isSignal": true; }; }, { "linkClick": "linkClick"; }, never, never, true, never>;
3597
+ }
3598
+
3599
+ type SuiCounterInputSize = '2xsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';
3514
3600
  /**
3515
3601
  * SUI Counter Input — SUI Design System 2.0
3516
3602
  *
@@ -3570,6 +3656,8 @@ type SuiCounterInputSize = 'xsmall' | 'small' | 'medium';
3570
3656
  */
3571
3657
  declare class SuiCounterInput implements ControlValueAccessor {
3572
3658
  readonly size: _angular_core.InputSignal<SuiCounterInputSize>;
3659
+ /** El form-label no tiene 'large' — se capea a medium (el label no escala). */
3660
+ protected readonly labelSize: _angular_core.Signal<SuiFormLabelSize>;
3573
3661
  readonly label: _angular_core.InputSignal<string | null>;
3574
3662
  readonly sublabel: _angular_core.InputSignal<string | null>;
3575
3663
  readonly required: _angular_core.InputSignal<boolean>;
@@ -5193,7 +5281,7 @@ declare class SuiFileUpload {
5193
5281
  protected readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
5194
5282
  protected readonly dragging: _angular_core.WritableSignal<boolean>;
5195
5283
  protected readonly internalError: _angular_core.WritableSignal<string | null>;
5196
- protected readonly state: _angular_core.Signal<"error" | "default" | "disabled" | "dragover">;
5284
+ protected readonly state: _angular_core.Signal<"error" | "disabled" | "default" | "dragover">;
5197
5285
  protected readonly resolvedTitle: _angular_core.Signal<string>;
5198
5286
  protected readonly resolvedSubtitle: _angular_core.Signal<string>;
5199
5287
  protected readonly resolvedErrorMessage: _angular_core.Signal<string | null>;
@@ -5501,92 +5589,6 @@ declare class SuiFormHint {
5501
5589
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiFormHint, "sui-form-hint", never, { "message": { "alias": "message"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5502
5590
  }
5503
5591
 
5504
- type SuiFormLabelSize = 'xsmall' | 'small' | 'medium';
5505
- /**
5506
- * SUI Form Label — SUI DS 2.0
5507
- *
5508
- * Figma file: 8p1k72aKKvzJV4XcvPS4VO
5509
- * Figma group: "Key Components" → Label [1.1]
5510
- * (nodos auditados: 263:1850 / 266:2814 — frame Label)
5511
- *
5512
- * Matriz Figma decodificada (audit reports.json "Key Components"):
5513
- * Label(Normal/Disabled) × Required × Sublabel × Info × Button (~16 combinaciones)
5514
- * - Normal/Disabled → input `disabled`
5515
- * - Required → input `required` (asterisco)
5516
- * - Sublabel → input `sublabel` (texto secundario)
5517
- * - Info → input `tooltip` (icono ℹ + tooltip)
5518
- * - Button → input `link` + output `linkClick` (link tipo "Help?" a la derecha)
5519
- *
5520
- * @input label: string (required) — Texto principal del label
5521
- * @input sublabel: string | null — Texto secundario pequeño (ej. "Optional", "Required")
5522
- * @input required: boolean — Muestra asterisco al final del label principal
5523
- * @input tooltip: string | null — Tooltip sobre icono info (ℹ) al final del label
5524
- * @input link: SuiLinkConfig | string | null — Link de acción a la derecha (variante
5525
- * "Button" de Figma, ej. "Help?"). String shorthand = solo label (emite `linkClick`);
5526
- * SuiLinkConfig { label, href?, target?, rel? } = <a> real con rel automático
5527
- * 'noopener noreferrer' si target='_blank' (patrón canon sui-checkbox-label).
5528
- * Si null, no se renderiza el link.
5529
- * @input size: 'xsmall' | 'small' | 'medium' — Tamaño visual, default 'medium'
5530
- * @input disabled: boolean — Atenúa todo el label (text/sublabel/asterisco/icono/link)
5531
- * @input for: string | null — Attr `for` del <label> para accesibilidad
5532
- * @output linkClick: MouseEvent — Emite cuando se clickea el link de acción ("Button" variant)
5533
- *
5534
- * Variantes (todas verificadas contra el variantMatrix de la auditoría;
5535
- * los valores cromáticos exactos quedan PENDING VERIFY hasta re-correr MCP Figma):
5536
- * - required: asterisco (*) en --sui-state-error-base.
5537
- * NOTA token: SUI 2.0 base pinta el asterisco con --primary-base (#335cff azul).
5538
- * En ESTE proyecto --primary-base fue rebrandeado a naranja (#fa7319), y el asterisco
5539
- * de "requerido" es semánticamente un error/alerta → se usa --sui-state-error-base
5540
- * (#fb3748). Decisión consciente, NO copia ciega del token azul de SUI.
5541
- * - sublabel: texto en --sui-text-sub-600, weight 400 (override del 500 del label).
5542
- * - tooltip: botón info, icono custom `info-custom-fill` (node 125:279) vía sui-icon
5543
- * (registrado en SUI_CUSTOM_ICONS) — círculo relleno con "i" serif, NO el
5544
- * ri-information-fill de RemixIcon (i recta). Color --sui-icon-disabled-300 (#d1d1d1)
5545
- * via currentColor; el vector queda ~12.5px centrado en slot 20px (padding 18.75%).
5546
- * - link: sui-link-button variant="gray" size="small" alineado a la derecha
5547
- * (margin-left: auto). En Figma el nodo del link ES una instancia de
5548
- * "Link Buttons [1.1]" (266:2814) → se renderiza con el COMPONENTE real,
5549
- * no un <button> maqueta (canon: ningún button custom donde un SUI sirve).
5550
- * Variant gray = 12/16/500 text/sub-600 base + disabled-300, idéntico al
5551
- * spec verificado del label.
5552
- * - disabled: --sui-text-disabled-300 / --sui-icon-disabled-300 en todo, sin cursor pointer.
5553
- * - sizes: xsmall/small/medium — tipografía escala con el field que acompaña.
5554
- *
5555
- * extraFeatures preservadas (audit): variante `size` (xsmall/small/medium) derivada del
5556
- * contexto de sui-input/sui-select — NO está en los nodos Figma auditados pero se mantiene.
5557
- */
5558
- declare class SuiFormLabel {
5559
- /** Texto principal del label (imperativo) */
5560
- readonly label: _angular_core.InputSignal<string>;
5561
- /** Sublabel opcional (texto secundario pequeño después del label principal) */
5562
- readonly sublabel: _angular_core.InputSignal<string | null>;
5563
- /** Marca como requerido — muestra asterisco al final del label principal */
5564
- readonly required: _angular_core.InputSignal<boolean>;
5565
- /** Tooltip opcional sobre un icono info (ℹ) al final del label */
5566
- readonly tooltip: _angular_core.InputSignal<string | null>;
5567
- /** Link de acción a la derecha (variante "Button" de Figma, ej. "Help?") —
5568
- * string shorthand (solo label, emite `linkClick`) o SuiLinkConfig
5569
- * { label, href?, target?, rel? }: con href renderiza <a> real; rel
5570
- * automático 'noopener noreferrer' para _blank. Si null/vacío, no se
5571
- * renderiza el link. (Patrón canon `link` de sui-checkbox-label.) */
5572
- readonly link: _angular_core.InputSignal<string | SuiLinkConfig | null>;
5573
- /** Config resuelta del link (string → { label }, rel automático). */
5574
- protected readonly linkCfg: _angular_core.Signal<SuiLinkConfig | null>;
5575
- /** Tamaño visual — matchea al field que acompaña */
5576
- readonly size: _angular_core.InputSignal<SuiFormLabelSize>;
5577
- /** Atenúa todo el label (estado Disabled de Figma) */
5578
- readonly disabled: _angular_core.InputSignal<boolean>;
5579
- /** ID del field controlado (para accesibilidad `for` attribute) */
5580
- readonly for: _angular_core.InputSignal<string | null>;
5581
- /** Emite cuando se clickea el link de acción (variante "Button" de Figma) */
5582
- readonly linkClick: _angular_core.OutputEmitterRef<MouseEvent>;
5583
- /** Click del link: stop-propagation para no disparar la activación del <label>
5584
- * contenedor. sui-link-button ya bloquea el click cuando está disabled. */
5585
- onLinkClick(event: MouseEvent): void;
5586
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiFormLabel, never>;
5587
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiFormLabel, "sui-form-label", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "sublabel": { "alias": "sublabel"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "link": { "alias": "link"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "for": { "alias": "for"; "required": false; "isSignal": true; }; }, { "linkClick": "linkClick"; }, never, never, true, never>;
5588
- }
5589
-
5590
5592
  /**
5591
5593
  * Iconos CUSTOM de SUI que NO existen en RemixIcon (forma propia del DS).
5592
5594
  * Cuando `name` matchea una key de acá, sui-icon renderiza el SVG inline; para
@@ -5888,7 +5890,7 @@ declare class SuiImageUpload {
5888
5890
  * (matchea el escalado del contenedor 32→40 en SCSS). */
5889
5891
  protected readonly iconSize: _angular_core.Signal<20 | 16>;
5890
5892
  protected readonly hasSrc: _angular_core.Signal<boolean>;
5891
- protected readonly state: _angular_core.Signal<"filled" | "disabled" | "dragover" | "empty">;
5893
+ protected readonly state: _angular_core.Signal<"disabled" | "filled" | "dragover" | "empty">;
5892
5894
  protected readonly resolvedTitle: _angular_core.Signal<string>;
5893
5895
  protected readonly resolvedSubtitle: _angular_core.Signal<string>;
5894
5896
  onHostClick(): void;