@ajuarezso/sui-design-system 0.15.0 → 0.15.2

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.15.0",
3
+ "version": "0.15.2",
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
  /**
@@ -1598,7 +1598,7 @@ declare class SuiButtonGroupItem {
1598
1598
  * - 'both' → ambos iconos: padding cuadrado (p)
1599
1599
  * - 'only' → icon-only: padding cuadrado (p) → square box
1600
1600
  */
1601
- readonly iconLayout: _angular_core.Signal<"none" | "left" | "right" | "both" | "only">;
1601
+ readonly iconLayout: _angular_core.Signal<"left" | "right" | "none" | "both" | "only">;
1602
1602
  /** Tamaño del icono en px según size del item (small/xsmall=20, 2xsmall=16) */
1603
1603
  readonly iconSize: _angular_core.Signal<number>;
1604
1604
  readonly clicked: _angular_core.OutputEmitterRef<void>;
@@ -1759,7 +1759,7 @@ declare class SuiButton {
1759
1759
  readonly disabled: _angular_core.InputSignal<boolean>;
1760
1760
  readonly leftIcon: _angular_core.InputSignal<string | null>;
1761
1761
  readonly rightIcon: _angular_core.InputSignal<string | null>;
1762
- readonly type: _angular_core.InputSignal<"button" | "reset" | "submit">;
1762
+ readonly type: _angular_core.InputSignal<"button" | "submit" | "reset">;
1763
1763
  /** Intercept click/Enter/Space — cuando type=submit, busca el form padre y
1764
1764
  dispara requestSubmit(). Reset hace lo mismo con form.reset(). Disabled
1765
1765
  bloquea todo. */
@@ -2143,7 +2143,7 @@ declare class SuiCheckboxCard implements ControlValueAccessor {
2143
2143
  /** RemixIcon name (sin prefijo "ri-") para type='left-icon'. */
2144
2144
  readonly icon: _angular_core.InputSignal<string | null>;
2145
2145
  /** Emoji del catálogo SUI_EMOJI_MAP — alternativa a icon para type='left-icon'. */
2146
- readonly emoji: _angular_core.InputSignal<"warning" | "label" | "thinking-face" | "grinning-face" | "smiling-face-hearts" | "face-with-rolling-eyes" | "face-screaming" | "partying-face" | "star-struck" | "sleeping-face" | "pensive-face" | "confused-face" | "neutral-face" | "slightly-smiling-face" | "grinning-face-smiling-eyes" | "package" | "receipt" | "money-bag" | "money-with-wings" | "shopping-cart" | "shopping-bags" | "card-index-dividers" | "bell" | "bell-with-slash" | "pushpin" | "mobile-phone" | "gear" | "locked" | "unlocked" | "wrench" | "hammer" | "magnifying-glass-tilted-left" | "spiral-calendar" | "bar-chart" | "delivery-truck" | "motorcycle" | "rocket" | "house" | "office-building" | "shop" | "dollar-banknote" | "glowing-star" | "kick-scooter" | "check-mark" | "check-mark-button" | "cross-mark" | "no-entry" | "sparkles" | "party-popper" | "waving-hand" | "thumbs-up" | "clapping-hands" | "handshake" | "busts-in-silhouette" | "pizza" | "hamburger" | "taco" | "birthday-cake" | null>;
2146
+ readonly emoji: _angular_core.InputSignal<"label" | "warning" | "thinking-face" | "grinning-face" | "smiling-face-hearts" | "face-with-rolling-eyes" | "face-screaming" | "partying-face" | "star-struck" | "sleeping-face" | "pensive-face" | "confused-face" | "neutral-face" | "slightly-smiling-face" | "grinning-face-smiling-eyes" | "package" | "receipt" | "money-bag" | "money-with-wings" | "shopping-cart" | "shopping-bags" | "card-index-dividers" | "bell" | "bell-with-slash" | "pushpin" | "mobile-phone" | "gear" | "locked" | "unlocked" | "wrench" | "hammer" | "magnifying-glass-tilted-left" | "spiral-calendar" | "bar-chart" | "delivery-truck" | "motorcycle" | "rocket" | "house" | "office-building" | "shop" | "dollar-banknote" | "glowing-star" | "kick-scooter" | "check-mark" | "check-mark-button" | "cross-mark" | "no-entry" | "sparkles" | "party-popper" | "waving-hand" | "thumbs-up" | "clapping-hands" | "handshake" | "busts-in-silhouette" | "pizza" | "hamburger" | "taco" | "birthday-cake" | null>;
2147
2147
  /** URL directa al emoji para type='left-icon'. Precedencia: icon > emoji > iconSrc. */
2148
2148
  readonly iconSrc: _angular_core.InputSignal<string | null>;
2149
2149
  /** URL de imagen para type='avatar'. Si falla, fallback a iniciales del label. */
@@ -2265,7 +2265,7 @@ declare class SuiLinkButton {
2265
2265
  readonly href: _angular_core.InputSignal<string | null>;
2266
2266
  readonly target: _angular_core.InputSignal<string | null>;
2267
2267
  readonly rel: _angular_core.InputSignal<string | null>;
2268
- readonly type: _angular_core.InputSignal<"button" | "reset" | "submit">;
2268
+ readonly type: _angular_core.InputSignal<"button" | "submit" | "reset">;
2269
2269
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
2270
2270
  readonly clicked: _angular_core.OutputEmitterRef<MouseEvent>;
2271
2271
  readonly iconSize: _angular_core.Signal<number>;
@@ -2584,7 +2584,7 @@ declare class SuiColorDot {
2584
2584
  * - `selected` → dot 12×12 + ring 2px.
2585
2585
  * - `disabled` → dot gris pálido, sin pointer events.
2586
2586
  */
2587
- readonly state: _angular_core.InputSignal<"default" | "disabled" | "hover" | "selected">;
2587
+ readonly state: _angular_core.InputSignal<"disabled" | "default" | "hover" | "selected">;
2588
2588
  /** aria-label override. */
2589
2589
  readonly ariaLabel: _angular_core.InputSignal<string>;
2590
2590
  readonly clicked: _angular_core.OutputEmitterRef<void>;
@@ -3171,7 +3171,7 @@ declare class SuiCompactButton {
3171
3171
  readonly href: _angular_core.InputSignal<string | null>;
3172
3172
  readonly target: _angular_core.InputSignal<string | null>;
3173
3173
  readonly rel: _angular_core.InputSignal<string | null>;
3174
- readonly type: _angular_core.InputSignal<"button" | "reset" | "submit">;
3174
+ readonly type: _angular_core.InputSignal<"button" | "submit" | "reset">;
3175
3175
  readonly ariaLabel: _angular_core.InputSignal<string>;
3176
3176
  readonly clicked: _angular_core.OutputEmitterRef<MouseEvent>;
3177
3177
  readonly iconSize: _angular_core.Signal<number>;
@@ -4310,7 +4310,7 @@ declare class SuiDayCell {
4310
4310
  /** Type=Basic (default) o Range (entre extremos / extremo del range). */
4311
4311
  readonly type: _angular_core.InputSignal<SuiDayCellType>;
4312
4312
  /** Position dentro del range — solo aplica si type=range. */
4313
- readonly rangePosition: _angular_core.InputSignal<"end" | "start" | "in" | null>;
4313
+ readonly rangePosition: _angular_core.InputSignal<"start" | "end" | "in" | null>;
4314
4314
  /** Selected (mode date) o range extremo (start/end con bg primary). */
4315
4315
  readonly selected: _angular_core.InputSignal<boolean>;
4316
4316
  /** Marker dot (evento / pedido / disponibilidad). */
@@ -5037,7 +5037,7 @@ type SuiEmojiName = keyof typeof SUI_EMOJI_MAP;
5037
5037
  type SuiEmojiSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
5038
5038
  declare class SuiEmoji {
5039
5039
  /** Nombre del emoji del catálogo. Si se proveé `src`, este se ignora. */
5040
- readonly name: _angular_core.InputSignal<"warning" | "label" | "thinking-face" | "grinning-face" | "smiling-face-hearts" | "face-with-rolling-eyes" | "face-screaming" | "partying-face" | "star-struck" | "sleeping-face" | "pensive-face" | "confused-face" | "neutral-face" | "slightly-smiling-face" | "grinning-face-smiling-eyes" | "package" | "receipt" | "money-bag" | "money-with-wings" | "shopping-cart" | "shopping-bags" | "card-index-dividers" | "bell" | "bell-with-slash" | "pushpin" | "mobile-phone" | "gear" | "locked" | "unlocked" | "wrench" | "hammer" | "magnifying-glass-tilted-left" | "spiral-calendar" | "bar-chart" | "delivery-truck" | "motorcycle" | "rocket" | "house" | "office-building" | "shop" | "dollar-banknote" | "glowing-star" | "kick-scooter" | "check-mark" | "check-mark-button" | "cross-mark" | "no-entry" | "sparkles" | "party-popper" | "waving-hand" | "thumbs-up" | "clapping-hands" | "handshake" | "busts-in-silhouette" | "pizza" | "hamburger" | "taco" | "birthday-cake" | null>;
5040
+ readonly name: _angular_core.InputSignal<"label" | "warning" | "thinking-face" | "grinning-face" | "smiling-face-hearts" | "face-with-rolling-eyes" | "face-screaming" | "partying-face" | "star-struck" | "sleeping-face" | "pensive-face" | "confused-face" | "neutral-face" | "slightly-smiling-face" | "grinning-face-smiling-eyes" | "package" | "receipt" | "money-bag" | "money-with-wings" | "shopping-cart" | "shopping-bags" | "card-index-dividers" | "bell" | "bell-with-slash" | "pushpin" | "mobile-phone" | "gear" | "locked" | "unlocked" | "wrench" | "hammer" | "magnifying-glass-tilted-left" | "spiral-calendar" | "bar-chart" | "delivery-truck" | "motorcycle" | "rocket" | "house" | "office-building" | "shop" | "dollar-banknote" | "glowing-star" | "kick-scooter" | "check-mark" | "check-mark-button" | "cross-mark" | "no-entry" | "sparkles" | "party-popper" | "waving-hand" | "thumbs-up" | "clapping-hands" | "handshake" | "busts-in-silhouette" | "pizza" | "hamburger" | "taco" | "birthday-cake" | null>;
5041
5041
  /** URL directa al emoji (override del catálogo). Útil para usar emojis fuera del map. */
5042
5042
  readonly src: _angular_core.InputSignal<string | null>;
5043
5043
  /** Tamaño del emoji. */
@@ -5226,7 +5226,7 @@ declare class SuiFancyButton {
5226
5226
  readonly href: _angular_core.InputSignal<string | null>;
5227
5227
  readonly target: _angular_core.InputSignal<string | null>;
5228
5228
  readonly rel: _angular_core.InputSignal<string | null>;
5229
- readonly htmlType: _angular_core.InputSignal<"button" | "reset" | "submit">;
5229
+ readonly htmlType: _angular_core.InputSignal<"button" | "submit" | "reset">;
5230
5230
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
5231
5231
  readonly clicked: _angular_core.OutputEmitterRef<MouseEvent>;
5232
5232
  readonly iconSize: _angular_core.Signal<number>;
@@ -5448,7 +5448,7 @@ declare class SuiFileUploadCard {
5448
5448
  /** Default status text por state — override-able vía input. */
5449
5449
  protected readonly resolvedStatusText: _angular_core.Signal<string>;
5450
5450
  /** Status icon name por state (Remix Icons). */
5451
- protected readonly statusIconName: _angular_core.Signal<"error-warning-fill" | "checkbox-circle-fill" | "loader-2-fill">;
5451
+ protected readonly statusIconName: _angular_core.Signal<"checkbox-circle-fill" | "error-warning-fill" | "loader-2-fill">;
5452
5452
  /** Compact button (right-side) icon name por state. */
5453
5453
  protected readonly actionIconName: _angular_core.Signal<"close-line" | "delete-bin-line">;
5454
5454
  /** Progress 0–100 clamped. */
@@ -5543,13 +5543,13 @@ declare class SuiFileUpload {
5543
5543
  protected readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
5544
5544
  protected readonly dragging: _angular_core.WritableSignal<boolean>;
5545
5545
  protected readonly internalError: _angular_core.WritableSignal<string | null>;
5546
- protected readonly state: _angular_core.Signal<"error" | "default" | "dragover" | "disabled">;
5546
+ protected readonly state: _angular_core.Signal<"error" | "disabled" | "default" | "dragover">;
5547
5547
  protected readonly resolvedTitle: _angular_core.Signal<string>;
5548
5548
  protected readonly resolvedSubtitle: _angular_core.Signal<string>;
5549
5549
  protected readonly resolvedErrorMessage: _angular_core.Signal<string | null>;
5550
5550
  /** Icon size px. Figma verified = 24 (medium). small/large/xlarge escalan +4
5551
5551
  * (small 20 → medium 24 → large 28 → xlarge 32) — extensión de proyecto. */
5552
- protected readonly iconSize: _angular_core.Signal<32 | 20 | 24 | 28>;
5552
+ protected readonly iconSize: _angular_core.Signal<20 | 24 | 32 | 28>;
5553
5553
  onClick(): void;
5554
5554
  /** Browse File button — abre el picker. stopPropagation evita doble-open
5555
5555
  * (el host también es clickeable). */
@@ -6193,7 +6193,7 @@ declare class SuiImageUpload {
6193
6193
  * (matchea el escalado del contenedor 32→40 en SCSS). */
6194
6194
  protected readonly iconSize: _angular_core.Signal<16 | 20>;
6195
6195
  protected readonly hasSrc: _angular_core.Signal<boolean>;
6196
- protected readonly state: _angular_core.Signal<"dragover" | "filled" | "disabled" | "empty">;
6196
+ protected readonly state: _angular_core.Signal<"disabled" | "filled" | "dragover" | "empty">;
6197
6197
  protected readonly resolvedTitle: _angular_core.Signal<string>;
6198
6198
  protected readonly resolvedSubtitle: _angular_core.Signal<string>;
6199
6199
  onHostClick(): void;
@@ -6418,90 +6418,6 @@ type SuiInputType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | '
6418
6418
  * el layout flush del slot; la acción la maneja el consumer.
6419
6419
  */
6420
6420
  | 'button';
6421
- /**
6422
- * SUI Input — SUI Design System 2.0
6423
- *
6424
- * Figma file: 8p1k72aKKvzJV4XcvPS4VO
6425
- * Component set: "Input Field" (componentKey c28150b04d333d34ed9d2b77abd9f2f54e1a878a)
6426
- *
6427
- * EXACT specs — VERIFIED from Figma nodeIds (266:5245, 417:6793, 417:9933, 267:1063, 267:1279, 267:1235):
6428
- *
6429
- * Sizes (Figma naming):
6430
- * - xsmall (X-Small 32): py=6px, pl=8px, pr=6px, gap=6px, radius=8px
6431
- * - small (Small 36): py=8px, pl=10px, pr=8px, gap=8px, radius=8px
6432
- * - medium (Medium 40): py=10px, pl=12px, pr=10px, gap=8px, radius=10px
6433
- *
6434
- * NOTE: padding produces the height via line-height(20) + 2×py. No explicit height needed.
6435
- *
6436
- * - Border default: 1px solid stroke-soft-200 (#ebebeb) + drop-shadow regular-x-small
6437
- * - Border hover: 1px solid stroke-sub-300 (#d1d1d1)
6438
- * - Border focus: 1px solid stroke-strong-950 (#171717)
6439
- * + box-shadow: 0 0 0 2px white, 0 0 0 4px slate-alpha-16
6440
- * - Border error: 1px solid state-error-base (#fb3748)
6441
- * focus-within: + box-shadow 0 0 0 3px red-alpha-10
6442
- * - Disabled: bg-weak-50, NO border, text-disabled-300, cursor: not-allowed
6443
- * - Readonly: bg-weak-50, border stroke-soft-200, text-sub-600
6444
- * - Placeholder: text-soft-400 (#a3a3a3)
6445
- * - Icon slots: 20px (--sui-icon-size-md), color text-sub-600
6446
- * - Label: delegated to sui-form-label (Label/Small 14px/500/20px/-0.006em)
6447
- * - Hint/Error msg: delegated to sui-form-hint (Paragraph/X-Small 12px/400/16px/0)
6448
- * - Label-to-field gap: 6px (margin-bottom on sui-form-label host)
6449
- * - Field-to-hint gap: 6px (margin-top on sui-form-hint host)
6450
- * - Transition: border-color + box-shadow 100ms ease-out
6451
- *
6452
- * @input label: string | null — Texto del label
6453
- * @input sublabel: string | null — Texto secundario del label (ej. "Optional")
6454
- * @input required: boolean — Muestra asterisco rojo en el label
6455
- * @input tooltip: string | null — Tooltip en ícono info del label
6456
- * @input hint: string | null — Mensaje de ayuda debajo del field
6457
- * @input hintIcon: string | null — Icono Remix del hint neutral (ej. 'information-fill',
6458
- * como en el set de Figma 266:5251). null (default) = sin icono. No afecta el
6459
- * estado error (sui-form-hint conserva su icono default por variant).
6460
- * @input error: boolean — Activa borde rojo + muestra errorMessage
6461
- * @input errorMessage: string | null — Mensaje de error
6462
- *
6463
- * ── Homologación 2026-05-29 (auditoría "Text Input") ─────────────────────────
6464
- * Closed gap: type='card' — máscara de tarjeta de crédito (grupos de 4 dígitos
6465
- * separados por espacio, maxlength efectivo 19 → "1234 5678 9012 3456").
6466
- * Mismo patrón que type='amount': display formateado en el DOM, value model
6467
- * emite los dígitos crudos (sin espacios). inputmode='numeric'.
6468
- *
6469
- * ── Homologación 2026-05-29 (2da pasada — gaps low/medium) ───────────────────
6470
- * Closed (low): font-feature-settings 'ss11' 1, 'calt' 0, 'liga' 0 en
6471
- * .sui-input__control y .sui-input__prefix — Figma setea estos OpenType
6472
- * features en cada text node del field. Valor canon SUI 2.0 (mismo que el
6473
- * resto de los SUI).
6474
- * Closed (medium): type='button' — split-field con divisor vertical (Figma node
6475
- * 332:1667). La zona de input lleva el padding del size + un border-right
6476
- * (divisor stroke-soft-200); el `[data-slot=end]` queda flush a la derecha
6477
- * como zona de acción cuadrada con padding del size (10/8/6 por tamaño) y
6478
- * pointer-events activos. El consumer proyecta el botón de acción (ej. copiar
6479
- * link con file-copy-line) vía `[data-slot=end]`. nativeType='text'.
6480
- *
6481
- * PENDING VERIFY (Figma MCP no disponible en esta sesión — bloqueado por health
6482
- * check hasta 2026-05-29T08:57Z; valores tomados del header existente ya
6483
- * verificado contra nodeIds + del reporte de auditoría .claude/sui-audit):
6484
- * - card: ancho de grupo (4) y maxlength (19) confirmados por reporte; falta
6485
- * confirmar si Figma muestra leading-icon de marca (visa/mastercard) en
6486
- * Type=Card node 316:11323. No implementado (sería affordance decorativa que
6487
- * el consumer compone vía [data-slot=start]).
6488
- *
6489
- * GAPS NO CERRADOS aquí (requieren componente nuevo o son composición de otros
6490
- * SUI — fuera de scope de este barrido low/medium):
6491
- * - Tag Input (sui-tag-input), Digit/OTP Input (sui-otp-input), Inline Input:
6492
- * componentes nuevos separados (severity HIGH).
6493
- * - Type=Dropdown (node 352:3122): el trailing affordance de Figma es un
6494
- * `sui-inline-select` funcional embebido (ícono + label + chevron), NO un
6495
- * chevron estático. Se compone proyectando `<sui-inline-select>` en
6496
- * `[data-slot=end]` — no se fabricó un type='dropdown' pseudo-visual porque
6497
- * sería un fake no-funcional que no espeja el Figma.
6498
- * - Type=Emoji (node 352:3416): en placeholder es solo un field con leading
6499
- * `emotion-line` — ya se logra con [icon]="'emotion-line'". El picker es
6500
- * overlay externo (componente nuevo), fuera de scope.
6501
- * - Type=Phone country-picker (node 313:10101): el prefix interactivo con
6502
- * selector de país es una feature nueva (selector de país); SUI tiene
6503
- * [prefix] como string estático.
6504
- */
6505
6421
  declare class SuiInput implements ControlValueAccessor {
6506
6422
  readonly size: _angular_core.InputSignal<SuiInputSize>;
6507
6423
  readonly type: _angular_core.InputSignal<SuiInputType>;
@@ -6574,15 +6490,22 @@ declare class SuiInput implements ControlValueAccessor {
6574
6490
  * hay teclado abierto, por eso escuchamos también `touchstart` (nativo iOS)
6575
6491
  * y `mousedown` (web fallback). Cualquiera de los tres dispara el blur.
6576
6492
  *
6577
- * Solo hace blur cuando el elemento enfocado vive DENTRO de este host: si el
6578
- * foco está en otro lado (otro input, un textarea, nada), acá no hay teclado
6579
- * que cerrar y tocarlo es un bug. El listener es a nivel `document`, así que
6580
- * cada instancia de la página recibe todos los taps: con un blur incondicional
6581
- * de `inputEl`, tocar el texto de un input cerraba el teclado porque los OTROS
6582
- * sui-input de la pantalla hacían blur de los suyos —y en iOS un blur con el
6583
- * teclado abierto lo cierra aunque el elemento no tenga el foco. Se veía en
6584
- * cualquier formulario con más de un campo y no en el buscador del home, que
6585
- * tiene uno solo.
6493
+ * Dos condiciones lo apagan, y cada una salió de un bug real en iOS:
6494
+ *
6495
+ * 1. El foco tiene que vivir DENTRO de este host. El listener es a nivel
6496
+ * `document`, así que cada instancia de la página recibe todos los taps:
6497
+ * con un blur incondicional, tocar el texto de un input cerraba el teclado
6498
+ * porque los OTROS sui-input hacían blur de los suyos —y en iOS un blur con
6499
+ * el teclado abierto lo cierra aunque el elemento no tenga el foco.
6500
+ *
6501
+ * 2. El tap NO puede ir a otro campo de texto. Ahí el navegador mueve el foco
6502
+ * solo, y adelantarle un blur en `pointerdown` cierra el teclado un
6503
+ * instante antes de que el campo nuevo lo vuelva a abrir. Ese parpadeo se
6504
+ * come el segundo toque de un doble tap: estando en un campo, no se podía
6505
+ * seleccionar una palabra de otro.
6506
+ *
6507
+ * Lo que queda es lo único que este listener tenía que hacer: tocar espacio
6508
+ * muerto de la pantalla baja el teclado.
6586
6509
  */
6587
6510
  onDocumentTap(event: Event): void;
6588
6511
  private readonly _disabledByForm;
@@ -7252,6 +7175,14 @@ declare class SuiModal implements AfterViewInit, OnDestroy {
7252
7175
  * clase la pone el host al arrancar, y es el mismo marcador que este SCSS ya
7253
7176
  * usa para el safe-area de Android. */
7254
7177
  private static enApp;
7178
+ /** Se lee al construir CADA modal y no dentro del computed: `enApp()` mira el
7179
+ * DOM y no es una señal, así que un `computed` la evaluaría una sola vez y se
7180
+ * quedaría con esa respuesta para siempre. Si el host marca la plataforma
7181
+ * después de ese primer render —o si el DS se evalúa antes que el arranque de
7182
+ * la app—, el modal quedaría centrado dentro de la app y nadie se enteraría.
7183
+ * Leerlo por instancia da la respuesta vigente cuando el modal nace, que es
7184
+ * cuando importa. */
7185
+ private readonly enAppAlNacer;
7255
7186
  /** `fullscreen` ya resuelto: es lo que miran la plantilla y el host. */
7256
7187
  protected readonly esFullscreen: _angular_core.Signal<boolean>;
7257
7188
  /** Quita el padding del body para contenido full-bleed (mapas, imágenes
@@ -8545,7 +8476,7 @@ declare class SuiRadioCard implements ControlValueAccessor {
8545
8476
  * Emoji del catálogo SUI_EMOJI_MAP — alternativa a icon para type='left-icon'.
8546
8477
  * Si ambos están, icon tiene precedencia.
8547
8478
  */
8548
- readonly emoji: _angular_core.InputSignal<"warning" | "label" | "thinking-face" | "grinning-face" | "smiling-face-hearts" | "face-with-rolling-eyes" | "face-screaming" | "partying-face" | "star-struck" | "sleeping-face" | "pensive-face" | "confused-face" | "neutral-face" | "slightly-smiling-face" | "grinning-face-smiling-eyes" | "package" | "receipt" | "money-bag" | "money-with-wings" | "shopping-cart" | "shopping-bags" | "card-index-dividers" | "bell" | "bell-with-slash" | "pushpin" | "mobile-phone" | "gear" | "locked" | "unlocked" | "wrench" | "hammer" | "magnifying-glass-tilted-left" | "spiral-calendar" | "bar-chart" | "delivery-truck" | "motorcycle" | "rocket" | "house" | "office-building" | "shop" | "dollar-banknote" | "glowing-star" | "kick-scooter" | "check-mark" | "check-mark-button" | "cross-mark" | "no-entry" | "sparkles" | "party-popper" | "waving-hand" | "thumbs-up" | "clapping-hands" | "handshake" | "busts-in-silhouette" | "pizza" | "hamburger" | "taco" | "birthday-cake" | null>;
8479
+ readonly emoji: _angular_core.InputSignal<"label" | "warning" | "thinking-face" | "grinning-face" | "smiling-face-hearts" | "face-with-rolling-eyes" | "face-screaming" | "partying-face" | "star-struck" | "sleeping-face" | "pensive-face" | "confused-face" | "neutral-face" | "slightly-smiling-face" | "grinning-face-smiling-eyes" | "package" | "receipt" | "money-bag" | "money-with-wings" | "shopping-cart" | "shopping-bags" | "card-index-dividers" | "bell" | "bell-with-slash" | "pushpin" | "mobile-phone" | "gear" | "locked" | "unlocked" | "wrench" | "hammer" | "magnifying-glass-tilted-left" | "spiral-calendar" | "bar-chart" | "delivery-truck" | "motorcycle" | "rocket" | "house" | "office-building" | "shop" | "dollar-banknote" | "glowing-star" | "kick-scooter" | "check-mark" | "check-mark-button" | "cross-mark" | "no-entry" | "sparkles" | "party-popper" | "waving-hand" | "thumbs-up" | "clapping-hands" | "handshake" | "busts-in-silhouette" | "pizza" | "hamburger" | "taco" | "birthday-cake" | null>;
8549
8480
  /**
8550
8481
  * URL directa al emoji para type='left-icon'. Útil cuando el consumer ya tiene
8551
8482
  * la URL (ej. FLUENT_EMOJI map del proyecto) y no quiere registrar el emoji
@@ -9627,7 +9558,7 @@ declare class SuiSocialButton {
9627
9558
  readonly href: _angular_core.InputSignal<string | null>;
9628
9559
  readonly target: _angular_core.InputSignal<string | null>;
9629
9560
  readonly rel: _angular_core.InputSignal<string | null>;
9630
- readonly type: _angular_core.InputSignal<"button" | "reset" | "submit">;
9561
+ readonly type: _angular_core.InputSignal<"button" | "submit" | "reset">;
9631
9562
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
9632
9563
  readonly clicked: _angular_core.OutputEmitterRef<MouseEvent>;
9633
9564
  /** Disabled efectivo: el input disabled O el estado loading. */
@@ -9739,7 +9670,7 @@ declare class SuiStatusBadge {
9739
9670
  */
9740
9671
  readonly withDot: _angular_core.InputSignal<boolean>;
9741
9672
  /** Icono Remix mapeado al status. Solo se usa cuando withDot=false. */
9742
- readonly iconName: _angular_core.Signal<"error-warning-fill" | "alert-fill" | "checkbox-circle-fill" | "information-fill" | "forbid-fill">;
9673
+ readonly iconName: _angular_core.Signal<"checkbox-circle-fill" | "alert-fill" | "error-warning-fill" | "information-fill" | "forbid-fill">;
9743
9674
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SuiStatusBadge, never>;
9744
9675
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SuiStatusBadge, "sui-status-badge", never, { "status": { "alias": "status"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "withDot": { "alias": "withDot"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
9745
9676
  }
@@ -10186,7 +10117,7 @@ declare class SuiSwitchCard implements ControlValueAccessor {
10186
10117
  * `<sui-icon>` proyectado vía `[sui-switch-card-leading]` y se renderiza
10187
10118
  * con las MISMAS dimensiones (20×20 dentro del círculo de 40px).
10188
10119
  */
10189
- readonly emoji: _angular_core.InputSignal<"warning" | "label" | "thinking-face" | "grinning-face" | "smiling-face-hearts" | "face-with-rolling-eyes" | "face-screaming" | "partying-face" | "star-struck" | "sleeping-face" | "pensive-face" | "confused-face" | "neutral-face" | "slightly-smiling-face" | "grinning-face-smiling-eyes" | "package" | "receipt" | "money-bag" | "money-with-wings" | "shopping-cart" | "shopping-bags" | "card-index-dividers" | "bell" | "bell-with-slash" | "pushpin" | "mobile-phone" | "gear" | "locked" | "unlocked" | "wrench" | "hammer" | "magnifying-glass-tilted-left" | "spiral-calendar" | "bar-chart" | "delivery-truck" | "motorcycle" | "rocket" | "house" | "office-building" | "shop" | "dollar-banknote" | "glowing-star" | "kick-scooter" | "check-mark" | "check-mark-button" | "cross-mark" | "no-entry" | "sparkles" | "party-popper" | "waving-hand" | "thumbs-up" | "clapping-hands" | "handshake" | "busts-in-silhouette" | "pizza" | "hamburger" | "taco" | "birthday-cake" | null>;
10120
+ readonly emoji: _angular_core.InputSignal<"label" | "warning" | "thinking-face" | "grinning-face" | "smiling-face-hearts" | "face-with-rolling-eyes" | "face-screaming" | "partying-face" | "star-struck" | "sleeping-face" | "pensive-face" | "confused-face" | "neutral-face" | "slightly-smiling-face" | "grinning-face-smiling-eyes" | "package" | "receipt" | "money-bag" | "money-with-wings" | "shopping-cart" | "shopping-bags" | "card-index-dividers" | "bell" | "bell-with-slash" | "pushpin" | "mobile-phone" | "gear" | "locked" | "unlocked" | "wrench" | "hammer" | "magnifying-glass-tilted-left" | "spiral-calendar" | "bar-chart" | "delivery-truck" | "motorcycle" | "rocket" | "house" | "office-building" | "shop" | "dollar-banknote" | "glowing-star" | "kick-scooter" | "check-mark" | "check-mark-button" | "cross-mark" | "no-entry" | "sparkles" | "party-popper" | "waving-hand" | "thumbs-up" | "clapping-hands" | "handshake" | "busts-in-silhouette" | "pizza" | "hamburger" | "taco" | "birthday-cake" | null>;
10190
10121
  /**
10191
10122
  * URL de imagen para type='avatar' — se renderiza con sui-avatar size=lg
10192
10123
  * (40×40 redonda). Si la imagen falla, fallback automático a iniciales del