@litigiovirtual/ius-design-components 2.2.11 → 2.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.
@@ -13,6 +13,17 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
13
13
  import { debounce, switchMap, map, catchError } from 'rxjs/operators';
14
14
  import { CdkDrag, CdkDragHandle, CdkDropList, CDK_DRAG_PARENT, moveItemInArray, CdkDragPlaceholder, CdkDropListGroup } from '@angular/cdk/drag-drop';
15
15
 
16
+ /**
17
+ * Tiempos de la máquina `dynamic` del Button (Button.ng-spec §6). Viven aparte
18
+ * (fuera del public-api) para que `ius-wizard-nav` siga al botón final con los
19
+ * mismos valores: en el golden, Wizard.jsx los repite a mano y el DS avisa que
20
+ * si cambian en uno hay que cambiarlos en el otro.
21
+ */
22
+ /** Loading que se sostiene tras resolver la acción (evita el parpadeo). */
23
+ const BUTTON_LOADING_MIN_MS = 400;
24
+ /** Duración del resultado (success/error) antes de volver a idle. */
25
+ const BUTTON_RESULT_MS = 800;
26
+
16
27
  /**
17
28
  * Presets §5 (espejo de SIZE_PRESETS de Button.jsx). Con `size` explícito se
18
29
  * inyectan inline (`--_btn-*`), igual que el golden; sin él actúan las reglas
@@ -57,6 +68,11 @@ const SIZE_PRESETS$4 = {
57
68
  * idle. Una excepción de `action` cae a `error`; resolver sin valor es
58
69
  * `success`. `dynamic` ignora los inputs manuales `loading`/`status`.
59
70
  *
71
+ * En loading/success/error el contenido (prefixIcon + label + sufixIcon) sigue
72
+ * en el flujo con `visibility:hidden` para conservar el ancho natural, y el
73
+ * spinner o el ícono `check_circle`/`error` se superpone centrado en
74
+ * `.ius-btn__overlay` (§4/§7).
75
+ *
60
76
  * Nota: el `state` de la spec ("solo demos") se omite de la API pública —
61
77
  * mismo criterio que TextField. El playground congela hover/pressed con el
62
78
  * atributo `data-force` en el host (solo CSS); loading/success/error/disabled
@@ -132,19 +148,19 @@ class ButtonComponent {
132
148
  }
133
149
  // Mínimo 400 ms de loading aunque la promesa resuelva antes (§6).
134
150
  await new Promise((resolve) => {
135
- this.timer = setTimeout(resolve, 400);
151
+ this.timer = setTimeout(resolve, BUTTON_LOADING_MIN_MS);
136
152
  });
137
153
  if (this.destroyed)
138
154
  return;
139
155
  this.dynPhase.set(result === 'success' || result === 'error' ? result : 'success');
140
- this.timer = setTimeout(() => this.dynPhase.set('idle'), 800);
156
+ this.timer = setTimeout(() => this.dynPhase.set('idle'), BUTTON_RESULT_MS);
141
157
  }
142
158
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
143
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: ButtonComponent, isStandalone: true, selector: "ius-button", inputs: { variant: "variant", label: "label", prefixIcon: "prefixIcon", sufixIcon: "sufixIcon", dynamic: ["dynamic", "dynamic", booleanAttribute], loading: ["loading", "loading", booleanAttribute], status: "status", disabled: ["disabled", "disabled", booleanAttribute], pressed: ["pressed", "pressed", booleanAttribute], fullWidth: ["fullWidth", "fullWidth", booleanAttribute], type: "type", ariaLabel: "ariaLabel", ariaCurrent: "ariaCurrent", action: "action", size: "size" }, outputs: { clicked: "clicked" }, ngImport: i0, template: "<button\r\n class=\"ius-btn\"\r\n [attr.type]=\"type\"\r\n [attr.data-variant]=\"variant\"\r\n [attr.data-size]=\"size ?? null\"\r\n [style.--_btn-px]=\"preset?.px ?? null\"\r\n [style.--_btn-py]=\"preset?.py ?? null\"\r\n [style.--_btn-fs]=\"preset?.fs ?? null\"\r\n [style.--_btn-lh]=\"preset?.lh ?? null\"\r\n [style.--_btn-icon]=\"preset?.icon ?? null\"\r\n [style.--_btn-gap]=\"preset?.gap ?? null\"\r\n [attr.data-loading]=\"isLoading ? 'true' : null\"\r\n [attr.data-status]=\"statusValue\"\r\n [attr.data-pressed]=\"pressed ? 'true' : null\"\r\n [attr.data-full-width]=\"fullWidth ? 'true' : null\"\r\n [attr.aria-label]=\"ariaLabel ?? null\"\r\n [attr.aria-current]=\"ariaCurrent ?? null\"\r\n [attr.aria-disabled]=\"isDisabled ? 'true' : null\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"handleClick($event)\"\r\n>\r\n @if (isLoading) {\r\n <span class=\"ius-btn__spin\" aria-hidden=\"true\"></span>\r\n }\r\n @if (statusValue === 'success') {\r\n <span translate=\"no\" class=\"ius-icon ius-btn__icon-left\" aria-hidden=\"true\">check_circle</span>\r\n } @else if (statusValue === 'error') {\r\n <span translate=\"no\" class=\"ius-icon ius-btn__icon-left\" aria-hidden=\"true\">error</span>\r\n } @else if (prefixIcon) {\r\n <span translate=\"no\" class=\"ius-icon ius-btn__icon-left\" aria-hidden=\"true\">{{ prefixIcon }}</span>\r\n }\r\n @if (!isLoading) {\r\n <span class=\"ius-btn__label\">\r\n @if (label != null) {\r\n {{ label }}\r\n } @else {\r\n <ng-content />\r\n }\r\n </span>\r\n }\r\n @if (!statusValue && !isLoading && sufixIcon) {\r\n <span translate=\"no\" class=\"ius-icon ius-btn__icon-right\" aria-hidden=\"true\">{{ sufixIcon }}</span>\r\n }\r\n</button>\r\n", styles: ["@charset \"UTF-8\";:host{display:contents}.ius-btn{-webkit-user-select:none;user-select:none;--_btn-bg: var(--ius-primary-900);--_btn-bg-hover: var(--ius-primary-500);--_btn-bg-pressed: var(--ius-primary-600);--_btn-bg-disabled: var(--ius-neutral-2);--_btn-fg: var(--ius-neutral-white);--_btn-fg-hover: var(--ius-neutral-white);--_btn-fg-pressed: var(--ius-neutral-white);--_btn-fg-disabled: var(--ius-text-disabled);--_btn-border: transparent;--_btn-border-hover: transparent;--_btn-border-pressed: transparent;--_btn-border-disabled: transparent;display:inline-flex;align-items:center;justify-content:center;gap:var(--_btn-gap, var(--ius-space-xxs));padding:var(--_btn-py, var(--ius-space-sm)) var(--_btn-px, var(--ius-space-lg));border-radius:var(--ius-radius-lg);border:1.5px solid var(--_btn-border);background:var(--_btn-bg);color:var(--_btn-fg);font-family:var(--ius-font-body);font-weight:var(--ius-fw-medium);font-size:var(--_btn-fs, 14px);line-height:var(--_btn-lh, 20px);letter-spacing:.01em;cursor:pointer;white-space:nowrap;text-decoration:none;outline:none;transition:background-color var(--ius-duration-fast) var(--ius-ease-standard),border-color var(--ius-duration-fast) var(--ius-ease-standard),color var(--ius-duration-fast) var(--ius-ease-standard),box-shadow var(--ius-duration-fast) var(--ius-ease-standard);-webkit-tap-highlight-color:transparent}.ius-btn[data-full-width=true]{width:100%}.ius-btn:hover:not(:disabled):not([data-status]):not([data-loading=true]),:host([data-force=hover]) .ius-btn:not(:disabled):not([data-status]):not([data-loading=true]){background:var(--_btn-bg-hover);color:var(--_btn-fg-hover);border-color:var(--_btn-border-hover)}.ius-btn:active:not(:disabled):not([data-status]):not([data-loading=true]),.ius-btn[data-pressed=true]:not(:disabled):not([data-status]):not([data-loading=true]),:host([data-force=pressed]) .ius-btn:not(:disabled):not([data-status]):not([data-loading=true]){background:var(--_btn-bg-pressed);color:var(--_btn-fg-pressed);border-color:var(--_btn-border-pressed)}.ius-btn:focus-visible{box-shadow:var(--ius-focus-ring)}.ius-btn:disabled,.ius-btn[aria-disabled=true]{background:var(--_btn-bg-disabled);color:var(--_btn-fg-disabled);border-color:var(--_btn-border-disabled);cursor:not-allowed}.ius-btn:not([data-size]){--_btn-px: 24px;--_btn-py: 8px;--_btn-fs: var(--ius-fs-base);--_btn-lh: var(--ius-lh-base);--_btn-icon: var(--ius-icon-md);--_btn-gap: var(--ius-space-xxs)}@container style(--ius-control-size: small){.ius-btn:not([data-size]){--_btn-px: 8px;--_btn-py: 6px;--_btn-fs: var(--ius-fs-sm);--_btn-lh: var(--ius-lh-sm);--_btn-icon: var(--ius-icon-sm);--_btn-gap: var(--ius-space-xxs)}}@container style(--ius-control-size: large){.ius-btn:not([data-size]){--_btn-px: 24px;--_btn-py: 10px;--_btn-fs: var(--ius-fs-lg);--_btn-lh: var(--ius-lh-lg);--_btn-icon: var(--ius-icon-md);--_btn-gap: var(--ius-space-xxs)}}.ius-btn[data-variant=primary]{--_btn-bg: var(--ius-primary-900);--_btn-bg-hover: var(--ius-primary-500);--_btn-bg-pressed: var(--ius-primary-600)}.ius-btn[data-variant=outline]{--_btn-bg: var(--ius-neutral-white);--_btn-bg-hover: var(--ius-success-100);--_btn-bg-pressed: var(--ius-success-600);--_btn-bg-disabled: var(--ius-neutral-1);--_btn-fg: var(--ius-success-600);--_btn-fg-hover: var(--ius-success-600);--_btn-fg-pressed: var(--ius-neutral-white);--_btn-fg-disabled: var(--ius-text-disabled);--_btn-border: var(--ius-success-500);--_btn-border-hover: var(--ius-success-500);--_btn-border-pressed: var(--ius-success-600);--_btn-border-disabled: var(--ius-neutral-4)}.ius-btn[data-variant=secondary]{--_btn-bg: var(--ius-neutral-3);--_btn-bg-hover: var(--ius-neutral-6);--_btn-bg-pressed: var(--ius-primary-600);--_btn-bg-disabled: var(--ius-neutral-2);--_btn-fg: var(--ius-text-primary);--_btn-fg-hover: var(--ius-neutral-white);--_btn-fg-pressed: var(--ius-neutral-white);--_btn-fg-disabled: var(--ius-text-disabled)}.ius-btn[data-variant=tertiary]{--_btn-bg: transparent;--_btn-bg-hover: var(--ius-neutral-4);--_btn-bg-pressed: var(--ius-primary-900);--_btn-bg-disabled: transparent;--_btn-fg: var(--ius-text-primary);--_btn-fg-hover: var(--ius-text-primary);--_btn-fg-pressed: var(--ius-neutral-white);--_btn-fg-disabled: var(--ius-text-disabled)}.ius-btn[data-variant=danger]{--_btn-bg: var(--ius-danger-600);--_btn-bg-hover: var(--ius-danger-500);--_btn-bg-pressed: var(--ius-danger-700);--_btn-bg-disabled: var(--ius-neutral-2);--_btn-fg: var(--ius-neutral-white);--_btn-fg-hover: var(--ius-neutral-white);--_btn-fg-pressed: var(--ius-neutral-white)}.ius-btn[data-loading=true]{background:var(--ius-primary-600);color:var(--ius-neutral-white);border-color:transparent;cursor:progress}.ius-btn[data-status=success]{background:var(--ius-success-600);color:var(--ius-neutral-white);border-color:transparent;cursor:default}.ius-btn[data-status=error]{background:var(--ius-danger-600);color:var(--ius-neutral-white);border-color:transparent;cursor:default}.ius-btn__spin{display:inline-block;width:1em;height:1em;border-radius:50%;border:2px solid currentColor;border-top-color:transparent;animation:ius-btn-spin .72s linear infinite}@keyframes ius-btn-spin{to{transform:rotate(360deg)}}.ius-btn[data-status] .ius-btn__icon-left,.ius-btn[data-status] .ius-btn__icon-right,.ius-btn[data-loading=true] .ius-btn__icon-left,.ius-btn[data-loading=true] .ius-btn__icon-right{display:none}.ius-btn .ius-btn__icon-left,.ius-btn .ius-btn__icon-right{font-size:var(--_btn-icon, 20px);line-height:1}.ius-btn__label{line-height:inherit}.ius-btn__label:empty{display:none}.ius-btn[data-loading=true] .ius-btn__label{display:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
159
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: ButtonComponent, isStandalone: true, selector: "ius-button", inputs: { variant: "variant", label: "label", prefixIcon: "prefixIcon", sufixIcon: "sufixIcon", dynamic: ["dynamic", "dynamic", booleanAttribute], loading: ["loading", "loading", booleanAttribute], status: "status", disabled: ["disabled", "disabled", booleanAttribute], pressed: ["pressed", "pressed", booleanAttribute], fullWidth: ["fullWidth", "fullWidth", booleanAttribute], type: "type", ariaLabel: "ariaLabel", ariaCurrent: "ariaCurrent", action: "action", size: "size" }, outputs: { clicked: "clicked" }, ngImport: i0, template: "<button\r\n class=\"ius-btn\"\r\n [attr.type]=\"type\"\r\n [attr.data-variant]=\"variant\"\r\n [attr.data-size]=\"size ?? null\"\r\n [style.--_btn-px]=\"preset?.px ?? null\"\r\n [style.--_btn-py]=\"preset?.py ?? null\"\r\n [style.--_btn-fs]=\"preset?.fs ?? null\"\r\n [style.--_btn-lh]=\"preset?.lh ?? null\"\r\n [style.--_btn-icon]=\"preset?.icon ?? null\"\r\n [style.--_btn-gap]=\"preset?.gap ?? null\"\r\n [attr.data-loading]=\"isLoading ? 'true' : null\"\r\n [attr.data-status]=\"statusValue\"\r\n [attr.data-pressed]=\"pressed ? 'true' : null\"\r\n [attr.data-full-width]=\"fullWidth ? 'true' : null\"\r\n [attr.aria-label]=\"ariaLabel ?? null\"\r\n [attr.aria-current]=\"ariaCurrent ?? null\"\r\n [attr.aria-disabled]=\"isDisabled ? 'true' : null\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"handleClick($event)\"\r\n>\r\n <!-- El contenido se renderiza en todos los estados: en loading/success/error\r\n queda con visibility:hidden reservando el ancho y el overlay lo tapa (\u00A77). -->\r\n @if (prefixIcon) {\r\n <span translate=\"no\" class=\"ius-icon ius-btn__icon-left\" aria-hidden=\"true\">{{ prefixIcon }}</span>\r\n }\r\n <span class=\"ius-btn__label\">\r\n @if (label != null) {\r\n {{ label }}\r\n } @else {\r\n <ng-content />\r\n }\r\n </span>\r\n @if (sufixIcon) {\r\n <span translate=\"no\" class=\"ius-icon ius-btn__icon-right\" aria-hidden=\"true\">{{ sufixIcon }}</span>\r\n }\r\n @if (isLoading) {\r\n <span class=\"ius-btn__overlay\" aria-hidden=\"true\"><span class=\"ius-btn__spin\"></span></span>\r\n } @else if (statusValue) {\r\n <span class=\"ius-btn__overlay\" aria-hidden=\"true\">\r\n <span translate=\"no\" class=\"ius-icon\">{{ statusValue === 'success' ? 'check_circle' : 'error' }}</span>\r\n </span>\r\n }\r\n</button>\r\n", styles: ["@charset \"UTF-8\";:host{display:contents}.ius-btn{-webkit-user-select:none;user-select:none;--_btn-bg: var(--ius-primary-900);--_btn-bg-hover: var(--ius-primary-500);--_btn-bg-pressed: var(--ius-primary-600);--_btn-bg-disabled: var(--ius-neutral-2);--_btn-fg: var(--ius-neutral-white);--_btn-fg-hover: var(--ius-neutral-white);--_btn-fg-pressed: var(--ius-neutral-white);--_btn-fg-disabled: var(--ius-text-disabled);--_btn-border: transparent;--_btn-border-hover: transparent;--_btn-border-pressed: transparent;--_btn-border-disabled: transparent;display:inline-flex;align-items:center;justify-content:center;gap:var(--_btn-gap, var(--ius-space-xxs));padding:var(--_btn-py, var(--ius-space-sm)) var(--_btn-px, var(--ius-space-lg));border-radius:var(--ius-radius-lg);border:1.5px solid var(--_btn-border);background:var(--_btn-bg);color:var(--_btn-fg);font-family:var(--ius-font-body);font-weight:var(--ius-fw-medium);font-size:var(--_btn-fs, 14px);line-height:var(--_btn-lh, 20px);letter-spacing:.01em;cursor:pointer;white-space:nowrap;text-decoration:none;outline:none;transition:background-color var(--ius-duration-fast) var(--ius-ease-standard),border-color var(--ius-duration-fast) var(--ius-ease-standard),color var(--ius-duration-fast) var(--ius-ease-standard),box-shadow var(--ius-duration-fast) var(--ius-ease-standard);-webkit-tap-highlight-color:transparent}.ius-btn[data-full-width=true]{width:100%}.ius-btn:hover:not(:disabled):not([data-status]):not([data-loading=true]),:host([data-force=hover]) .ius-btn:not(:disabled):not([data-status]):not([data-loading=true]){background:var(--_btn-bg-hover);color:var(--_btn-fg-hover);border-color:var(--_btn-border-hover)}.ius-btn:active:not(:disabled):not([data-status]):not([data-loading=true]),.ius-btn[data-pressed=true]:not(:disabled):not([data-status]):not([data-loading=true]),:host([data-force=pressed]) .ius-btn:not(:disabled):not([data-status]):not([data-loading=true]){background:var(--_btn-bg-pressed);color:var(--_btn-fg-pressed);border-color:var(--_btn-border-pressed)}.ius-btn:focus-visible{box-shadow:var(--ius-focus-ring)}.ius-btn:disabled,.ius-btn[aria-disabled=true]{background:var(--_btn-bg-disabled);color:var(--_btn-fg-disabled);border-color:var(--_btn-border-disabled);cursor:not-allowed}.ius-btn:not([data-size]){--_btn-px: 24px;--_btn-py: 8px;--_btn-fs: var(--ius-fs-base);--_btn-lh: var(--ius-lh-base);--_btn-icon: var(--ius-icon-md);--_btn-gap: var(--ius-space-xxs)}@container style(--ius-control-size: small){.ius-btn:not([data-size]){--_btn-px: 8px;--_btn-py: 6px;--_btn-fs: var(--ius-fs-sm);--_btn-lh: var(--ius-lh-sm);--_btn-icon: var(--ius-icon-sm);--_btn-gap: var(--ius-space-xxs)}}@container style(--ius-control-size: large){.ius-btn:not([data-size]){--_btn-px: 24px;--_btn-py: 10px;--_btn-fs: var(--ius-fs-lg);--_btn-lh: var(--ius-lh-lg);--_btn-icon: var(--ius-icon-md);--_btn-gap: var(--ius-space-xxs)}}.ius-btn[data-variant=primary]{--_btn-bg: var(--ius-primary-900);--_btn-bg-hover: var(--ius-primary-500);--_btn-bg-pressed: var(--ius-primary-600)}.ius-btn[data-variant=outline]{--_btn-bg: var(--ius-neutral-white);--_btn-bg-hover: var(--ius-success-100);--_btn-bg-pressed: var(--ius-success-600);--_btn-bg-disabled: var(--ius-neutral-1);--_btn-fg: var(--ius-success-600);--_btn-fg-hover: var(--ius-success-600);--_btn-fg-pressed: var(--ius-neutral-white);--_btn-fg-disabled: var(--ius-text-disabled);--_btn-border: var(--ius-success-500);--_btn-border-hover: var(--ius-success-500);--_btn-border-pressed: var(--ius-success-600);--_btn-border-disabled: var(--ius-neutral-4)}.ius-btn[data-variant=secondary]{--_btn-bg: var(--ius-neutral-3);--_btn-bg-hover: var(--ius-neutral-6);--_btn-bg-pressed: var(--ius-primary-600);--_btn-bg-disabled: var(--ius-neutral-2);--_btn-fg: var(--ius-text-primary);--_btn-fg-hover: var(--ius-neutral-white);--_btn-fg-pressed: var(--ius-neutral-white);--_btn-fg-disabled: var(--ius-text-disabled)}.ius-btn[data-variant=tertiary]{--_btn-bg: transparent;--_btn-bg-hover: var(--ius-neutral-4);--_btn-bg-pressed: var(--ius-primary-900);--_btn-bg-disabled: transparent;--_btn-fg: var(--ius-text-primary);--_btn-fg-hover: var(--ius-text-primary);--_btn-fg-pressed: var(--ius-neutral-white);--_btn-fg-disabled: var(--ius-text-disabled)}.ius-btn[data-variant=danger]{--_btn-bg: var(--ius-danger-600);--_btn-bg-hover: var(--ius-danger-500);--_btn-bg-pressed: var(--ius-danger-700);--_btn-bg-disabled: var(--ius-neutral-2);--_btn-fg: var(--ius-neutral-white);--_btn-fg-hover: var(--ius-neutral-white);--_btn-fg-pressed: var(--ius-neutral-white)}.ius-btn[data-loading=true]{background:var(--ius-primary-600);color:var(--ius-neutral-white);border-color:transparent;cursor:progress}.ius-btn[data-status=success]{background:var(--ius-success-600);color:var(--ius-neutral-white);border-color:transparent;cursor:default}.ius-btn[data-status=error]{background:var(--ius-danger-600);color:var(--ius-neutral-white);border-color:transparent;cursor:default}.ius-btn__spin{display:inline-block;width:1em;height:1em;border-radius:50%;border:2px solid currentColor;border-top-color:transparent;animation:ius-btn-spin .72s linear infinite}@keyframes ius-btn-spin{to{transform:rotate(360deg)}}.ius-btn[data-loading=true],.ius-btn[data-status]{position:relative}.ius-btn[data-loading=true] .ius-btn__icon-left,.ius-btn[data-loading=true] .ius-btn__icon-right,.ius-btn[data-loading=true] .ius-btn__label,.ius-btn[data-status] .ius-btn__icon-left,.ius-btn[data-status] .ius-btn__icon-right,.ius-btn[data-status] .ius-btn__label{visibility:hidden}.ius-btn .ius-btn__icon-left,.ius-btn .ius-btn__icon-right{font-size:var(--_btn-icon, 20px);line-height:1}.ius-btn__label{line-height:inherit}.ius-btn__label:empty{display:none}.ius-btn__overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.ius-btn__overlay .ius-icon{font-size:var(--_btn-icon, 20px);line-height:1}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
144
160
  }
145
161
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ButtonComponent, decorators: [{
146
162
  type: Component,
147
- args: [{ selector: 'ius-button', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\r\n class=\"ius-btn\"\r\n [attr.type]=\"type\"\r\n [attr.data-variant]=\"variant\"\r\n [attr.data-size]=\"size ?? null\"\r\n [style.--_btn-px]=\"preset?.px ?? null\"\r\n [style.--_btn-py]=\"preset?.py ?? null\"\r\n [style.--_btn-fs]=\"preset?.fs ?? null\"\r\n [style.--_btn-lh]=\"preset?.lh ?? null\"\r\n [style.--_btn-icon]=\"preset?.icon ?? null\"\r\n [style.--_btn-gap]=\"preset?.gap ?? null\"\r\n [attr.data-loading]=\"isLoading ? 'true' : null\"\r\n [attr.data-status]=\"statusValue\"\r\n [attr.data-pressed]=\"pressed ? 'true' : null\"\r\n [attr.data-full-width]=\"fullWidth ? 'true' : null\"\r\n [attr.aria-label]=\"ariaLabel ?? null\"\r\n [attr.aria-current]=\"ariaCurrent ?? null\"\r\n [attr.aria-disabled]=\"isDisabled ? 'true' : null\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"handleClick($event)\"\r\n>\r\n @if (isLoading) {\r\n <span class=\"ius-btn__spin\" aria-hidden=\"true\"></span>\r\n }\r\n @if (statusValue === 'success') {\r\n <span translate=\"no\" class=\"ius-icon ius-btn__icon-left\" aria-hidden=\"true\">check_circle</span>\r\n } @else if (statusValue === 'error') {\r\n <span translate=\"no\" class=\"ius-icon ius-btn__icon-left\" aria-hidden=\"true\">error</span>\r\n } @else if (prefixIcon) {\r\n <span translate=\"no\" class=\"ius-icon ius-btn__icon-left\" aria-hidden=\"true\">{{ prefixIcon }}</span>\r\n }\r\n @if (!isLoading) {\r\n <span class=\"ius-btn__label\">\r\n @if (label != null) {\r\n {{ label }}\r\n } @else {\r\n <ng-content />\r\n }\r\n </span>\r\n }\r\n @if (!statusValue && !isLoading && sufixIcon) {\r\n <span translate=\"no\" class=\"ius-icon ius-btn__icon-right\" aria-hidden=\"true\">{{ sufixIcon }}</span>\r\n }\r\n</button>\r\n", styles: ["@charset \"UTF-8\";:host{display:contents}.ius-btn{-webkit-user-select:none;user-select:none;--_btn-bg: var(--ius-primary-900);--_btn-bg-hover: var(--ius-primary-500);--_btn-bg-pressed: var(--ius-primary-600);--_btn-bg-disabled: var(--ius-neutral-2);--_btn-fg: var(--ius-neutral-white);--_btn-fg-hover: var(--ius-neutral-white);--_btn-fg-pressed: var(--ius-neutral-white);--_btn-fg-disabled: var(--ius-text-disabled);--_btn-border: transparent;--_btn-border-hover: transparent;--_btn-border-pressed: transparent;--_btn-border-disabled: transparent;display:inline-flex;align-items:center;justify-content:center;gap:var(--_btn-gap, var(--ius-space-xxs));padding:var(--_btn-py, var(--ius-space-sm)) var(--_btn-px, var(--ius-space-lg));border-radius:var(--ius-radius-lg);border:1.5px solid var(--_btn-border);background:var(--_btn-bg);color:var(--_btn-fg);font-family:var(--ius-font-body);font-weight:var(--ius-fw-medium);font-size:var(--_btn-fs, 14px);line-height:var(--_btn-lh, 20px);letter-spacing:.01em;cursor:pointer;white-space:nowrap;text-decoration:none;outline:none;transition:background-color var(--ius-duration-fast) var(--ius-ease-standard),border-color var(--ius-duration-fast) var(--ius-ease-standard),color var(--ius-duration-fast) var(--ius-ease-standard),box-shadow var(--ius-duration-fast) var(--ius-ease-standard);-webkit-tap-highlight-color:transparent}.ius-btn[data-full-width=true]{width:100%}.ius-btn:hover:not(:disabled):not([data-status]):not([data-loading=true]),:host([data-force=hover]) .ius-btn:not(:disabled):not([data-status]):not([data-loading=true]){background:var(--_btn-bg-hover);color:var(--_btn-fg-hover);border-color:var(--_btn-border-hover)}.ius-btn:active:not(:disabled):not([data-status]):not([data-loading=true]),.ius-btn[data-pressed=true]:not(:disabled):not([data-status]):not([data-loading=true]),:host([data-force=pressed]) .ius-btn:not(:disabled):not([data-status]):not([data-loading=true]){background:var(--_btn-bg-pressed);color:var(--_btn-fg-pressed);border-color:var(--_btn-border-pressed)}.ius-btn:focus-visible{box-shadow:var(--ius-focus-ring)}.ius-btn:disabled,.ius-btn[aria-disabled=true]{background:var(--_btn-bg-disabled);color:var(--_btn-fg-disabled);border-color:var(--_btn-border-disabled);cursor:not-allowed}.ius-btn:not([data-size]){--_btn-px: 24px;--_btn-py: 8px;--_btn-fs: var(--ius-fs-base);--_btn-lh: var(--ius-lh-base);--_btn-icon: var(--ius-icon-md);--_btn-gap: var(--ius-space-xxs)}@container style(--ius-control-size: small){.ius-btn:not([data-size]){--_btn-px: 8px;--_btn-py: 6px;--_btn-fs: var(--ius-fs-sm);--_btn-lh: var(--ius-lh-sm);--_btn-icon: var(--ius-icon-sm);--_btn-gap: var(--ius-space-xxs)}}@container style(--ius-control-size: large){.ius-btn:not([data-size]){--_btn-px: 24px;--_btn-py: 10px;--_btn-fs: var(--ius-fs-lg);--_btn-lh: var(--ius-lh-lg);--_btn-icon: var(--ius-icon-md);--_btn-gap: var(--ius-space-xxs)}}.ius-btn[data-variant=primary]{--_btn-bg: var(--ius-primary-900);--_btn-bg-hover: var(--ius-primary-500);--_btn-bg-pressed: var(--ius-primary-600)}.ius-btn[data-variant=outline]{--_btn-bg: var(--ius-neutral-white);--_btn-bg-hover: var(--ius-success-100);--_btn-bg-pressed: var(--ius-success-600);--_btn-bg-disabled: var(--ius-neutral-1);--_btn-fg: var(--ius-success-600);--_btn-fg-hover: var(--ius-success-600);--_btn-fg-pressed: var(--ius-neutral-white);--_btn-fg-disabled: var(--ius-text-disabled);--_btn-border: var(--ius-success-500);--_btn-border-hover: var(--ius-success-500);--_btn-border-pressed: var(--ius-success-600);--_btn-border-disabled: var(--ius-neutral-4)}.ius-btn[data-variant=secondary]{--_btn-bg: var(--ius-neutral-3);--_btn-bg-hover: var(--ius-neutral-6);--_btn-bg-pressed: var(--ius-primary-600);--_btn-bg-disabled: var(--ius-neutral-2);--_btn-fg: var(--ius-text-primary);--_btn-fg-hover: var(--ius-neutral-white);--_btn-fg-pressed: var(--ius-neutral-white);--_btn-fg-disabled: var(--ius-text-disabled)}.ius-btn[data-variant=tertiary]{--_btn-bg: transparent;--_btn-bg-hover: var(--ius-neutral-4);--_btn-bg-pressed: var(--ius-primary-900);--_btn-bg-disabled: transparent;--_btn-fg: var(--ius-text-primary);--_btn-fg-hover: var(--ius-text-primary);--_btn-fg-pressed: var(--ius-neutral-white);--_btn-fg-disabled: var(--ius-text-disabled)}.ius-btn[data-variant=danger]{--_btn-bg: var(--ius-danger-600);--_btn-bg-hover: var(--ius-danger-500);--_btn-bg-pressed: var(--ius-danger-700);--_btn-bg-disabled: var(--ius-neutral-2);--_btn-fg: var(--ius-neutral-white);--_btn-fg-hover: var(--ius-neutral-white);--_btn-fg-pressed: var(--ius-neutral-white)}.ius-btn[data-loading=true]{background:var(--ius-primary-600);color:var(--ius-neutral-white);border-color:transparent;cursor:progress}.ius-btn[data-status=success]{background:var(--ius-success-600);color:var(--ius-neutral-white);border-color:transparent;cursor:default}.ius-btn[data-status=error]{background:var(--ius-danger-600);color:var(--ius-neutral-white);border-color:transparent;cursor:default}.ius-btn__spin{display:inline-block;width:1em;height:1em;border-radius:50%;border:2px solid currentColor;border-top-color:transparent;animation:ius-btn-spin .72s linear infinite}@keyframes ius-btn-spin{to{transform:rotate(360deg)}}.ius-btn[data-status] .ius-btn__icon-left,.ius-btn[data-status] .ius-btn__icon-right,.ius-btn[data-loading=true] .ius-btn__icon-left,.ius-btn[data-loading=true] .ius-btn__icon-right{display:none}.ius-btn .ius-btn__icon-left,.ius-btn .ius-btn__icon-right{font-size:var(--_btn-icon, 20px);line-height:1}.ius-btn__label{line-height:inherit}.ius-btn__label:empty{display:none}.ius-btn[data-loading=true] .ius-btn__label{display:none}\n"] }]
163
+ args: [{ selector: 'ius-button', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\r\n class=\"ius-btn\"\r\n [attr.type]=\"type\"\r\n [attr.data-variant]=\"variant\"\r\n [attr.data-size]=\"size ?? null\"\r\n [style.--_btn-px]=\"preset?.px ?? null\"\r\n [style.--_btn-py]=\"preset?.py ?? null\"\r\n [style.--_btn-fs]=\"preset?.fs ?? null\"\r\n [style.--_btn-lh]=\"preset?.lh ?? null\"\r\n [style.--_btn-icon]=\"preset?.icon ?? null\"\r\n [style.--_btn-gap]=\"preset?.gap ?? null\"\r\n [attr.data-loading]=\"isLoading ? 'true' : null\"\r\n [attr.data-status]=\"statusValue\"\r\n [attr.data-pressed]=\"pressed ? 'true' : null\"\r\n [attr.data-full-width]=\"fullWidth ? 'true' : null\"\r\n [attr.aria-label]=\"ariaLabel ?? null\"\r\n [attr.aria-current]=\"ariaCurrent ?? null\"\r\n [attr.aria-disabled]=\"isDisabled ? 'true' : null\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"handleClick($event)\"\r\n>\r\n <!-- El contenido se renderiza en todos los estados: en loading/success/error\r\n queda con visibility:hidden reservando el ancho y el overlay lo tapa (\u00A77). -->\r\n @if (prefixIcon) {\r\n <span translate=\"no\" class=\"ius-icon ius-btn__icon-left\" aria-hidden=\"true\">{{ prefixIcon }}</span>\r\n }\r\n <span class=\"ius-btn__label\">\r\n @if (label != null) {\r\n {{ label }}\r\n } @else {\r\n <ng-content />\r\n }\r\n </span>\r\n @if (sufixIcon) {\r\n <span translate=\"no\" class=\"ius-icon ius-btn__icon-right\" aria-hidden=\"true\">{{ sufixIcon }}</span>\r\n }\r\n @if (isLoading) {\r\n <span class=\"ius-btn__overlay\" aria-hidden=\"true\"><span class=\"ius-btn__spin\"></span></span>\r\n } @else if (statusValue) {\r\n <span class=\"ius-btn__overlay\" aria-hidden=\"true\">\r\n <span translate=\"no\" class=\"ius-icon\">{{ statusValue === 'success' ? 'check_circle' : 'error' }}</span>\r\n </span>\r\n }\r\n</button>\r\n", styles: ["@charset \"UTF-8\";:host{display:contents}.ius-btn{-webkit-user-select:none;user-select:none;--_btn-bg: var(--ius-primary-900);--_btn-bg-hover: var(--ius-primary-500);--_btn-bg-pressed: var(--ius-primary-600);--_btn-bg-disabled: var(--ius-neutral-2);--_btn-fg: var(--ius-neutral-white);--_btn-fg-hover: var(--ius-neutral-white);--_btn-fg-pressed: var(--ius-neutral-white);--_btn-fg-disabled: var(--ius-text-disabled);--_btn-border: transparent;--_btn-border-hover: transparent;--_btn-border-pressed: transparent;--_btn-border-disabled: transparent;display:inline-flex;align-items:center;justify-content:center;gap:var(--_btn-gap, var(--ius-space-xxs));padding:var(--_btn-py, var(--ius-space-sm)) var(--_btn-px, var(--ius-space-lg));border-radius:var(--ius-radius-lg);border:1.5px solid var(--_btn-border);background:var(--_btn-bg);color:var(--_btn-fg);font-family:var(--ius-font-body);font-weight:var(--ius-fw-medium);font-size:var(--_btn-fs, 14px);line-height:var(--_btn-lh, 20px);letter-spacing:.01em;cursor:pointer;white-space:nowrap;text-decoration:none;outline:none;transition:background-color var(--ius-duration-fast) var(--ius-ease-standard),border-color var(--ius-duration-fast) var(--ius-ease-standard),color var(--ius-duration-fast) var(--ius-ease-standard),box-shadow var(--ius-duration-fast) var(--ius-ease-standard);-webkit-tap-highlight-color:transparent}.ius-btn[data-full-width=true]{width:100%}.ius-btn:hover:not(:disabled):not([data-status]):not([data-loading=true]),:host([data-force=hover]) .ius-btn:not(:disabled):not([data-status]):not([data-loading=true]){background:var(--_btn-bg-hover);color:var(--_btn-fg-hover);border-color:var(--_btn-border-hover)}.ius-btn:active:not(:disabled):not([data-status]):not([data-loading=true]),.ius-btn[data-pressed=true]:not(:disabled):not([data-status]):not([data-loading=true]),:host([data-force=pressed]) .ius-btn:not(:disabled):not([data-status]):not([data-loading=true]){background:var(--_btn-bg-pressed);color:var(--_btn-fg-pressed);border-color:var(--_btn-border-pressed)}.ius-btn:focus-visible{box-shadow:var(--ius-focus-ring)}.ius-btn:disabled,.ius-btn[aria-disabled=true]{background:var(--_btn-bg-disabled);color:var(--_btn-fg-disabled);border-color:var(--_btn-border-disabled);cursor:not-allowed}.ius-btn:not([data-size]){--_btn-px: 24px;--_btn-py: 8px;--_btn-fs: var(--ius-fs-base);--_btn-lh: var(--ius-lh-base);--_btn-icon: var(--ius-icon-md);--_btn-gap: var(--ius-space-xxs)}@container style(--ius-control-size: small){.ius-btn:not([data-size]){--_btn-px: 8px;--_btn-py: 6px;--_btn-fs: var(--ius-fs-sm);--_btn-lh: var(--ius-lh-sm);--_btn-icon: var(--ius-icon-sm);--_btn-gap: var(--ius-space-xxs)}}@container style(--ius-control-size: large){.ius-btn:not([data-size]){--_btn-px: 24px;--_btn-py: 10px;--_btn-fs: var(--ius-fs-lg);--_btn-lh: var(--ius-lh-lg);--_btn-icon: var(--ius-icon-md);--_btn-gap: var(--ius-space-xxs)}}.ius-btn[data-variant=primary]{--_btn-bg: var(--ius-primary-900);--_btn-bg-hover: var(--ius-primary-500);--_btn-bg-pressed: var(--ius-primary-600)}.ius-btn[data-variant=outline]{--_btn-bg: var(--ius-neutral-white);--_btn-bg-hover: var(--ius-success-100);--_btn-bg-pressed: var(--ius-success-600);--_btn-bg-disabled: var(--ius-neutral-1);--_btn-fg: var(--ius-success-600);--_btn-fg-hover: var(--ius-success-600);--_btn-fg-pressed: var(--ius-neutral-white);--_btn-fg-disabled: var(--ius-text-disabled);--_btn-border: var(--ius-success-500);--_btn-border-hover: var(--ius-success-500);--_btn-border-pressed: var(--ius-success-600);--_btn-border-disabled: var(--ius-neutral-4)}.ius-btn[data-variant=secondary]{--_btn-bg: var(--ius-neutral-3);--_btn-bg-hover: var(--ius-neutral-6);--_btn-bg-pressed: var(--ius-primary-600);--_btn-bg-disabled: var(--ius-neutral-2);--_btn-fg: var(--ius-text-primary);--_btn-fg-hover: var(--ius-neutral-white);--_btn-fg-pressed: var(--ius-neutral-white);--_btn-fg-disabled: var(--ius-text-disabled)}.ius-btn[data-variant=tertiary]{--_btn-bg: transparent;--_btn-bg-hover: var(--ius-neutral-4);--_btn-bg-pressed: var(--ius-primary-900);--_btn-bg-disabled: transparent;--_btn-fg: var(--ius-text-primary);--_btn-fg-hover: var(--ius-text-primary);--_btn-fg-pressed: var(--ius-neutral-white);--_btn-fg-disabled: var(--ius-text-disabled)}.ius-btn[data-variant=danger]{--_btn-bg: var(--ius-danger-600);--_btn-bg-hover: var(--ius-danger-500);--_btn-bg-pressed: var(--ius-danger-700);--_btn-bg-disabled: var(--ius-neutral-2);--_btn-fg: var(--ius-neutral-white);--_btn-fg-hover: var(--ius-neutral-white);--_btn-fg-pressed: var(--ius-neutral-white)}.ius-btn[data-loading=true]{background:var(--ius-primary-600);color:var(--ius-neutral-white);border-color:transparent;cursor:progress}.ius-btn[data-status=success]{background:var(--ius-success-600);color:var(--ius-neutral-white);border-color:transparent;cursor:default}.ius-btn[data-status=error]{background:var(--ius-danger-600);color:var(--ius-neutral-white);border-color:transparent;cursor:default}.ius-btn__spin{display:inline-block;width:1em;height:1em;border-radius:50%;border:2px solid currentColor;border-top-color:transparent;animation:ius-btn-spin .72s linear infinite}@keyframes ius-btn-spin{to{transform:rotate(360deg)}}.ius-btn[data-loading=true],.ius-btn[data-status]{position:relative}.ius-btn[data-loading=true] .ius-btn__icon-left,.ius-btn[data-loading=true] .ius-btn__icon-right,.ius-btn[data-loading=true] .ius-btn__label,.ius-btn[data-status] .ius-btn__icon-left,.ius-btn[data-status] .ius-btn__icon-right,.ius-btn[data-status] .ius-btn__label{visibility:hidden}.ius-btn .ius-btn__icon-left,.ius-btn .ius-btn__icon-right{font-size:var(--_btn-icon, 20px);line-height:1}.ius-btn__label{line-height:inherit}.ius-btn__label:empty{display:none}.ius-btn__overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.ius-btn__overlay .ius-icon{font-size:var(--_btn-icon, 20px);line-height:1}\n"] }]
148
164
  }], propDecorators: { variant: [{
149
165
  type: Input
150
166
  }], label: [{
@@ -11851,6 +11867,9 @@ function clamp$1(n, lo, hi) {
11851
11867
  */
11852
11868
  class WizardController {
11853
11869
  constructor(options) {
11870
+ /** Espera del botón final; la escribe `ius-wizard-nav` (golden `_setFinishing`). */
11871
+ this.finishingSource = signal(false, /* @ts-ignore */
11872
+ ...(ngDevMode ? [{ debugName: "finishingSource" }] : /* istanbul ignore next */ []));
11854
11873
  this.goTo = (next) => {
11855
11874
  const raw = typeof next === 'function' ? next(this.step) : next;
11856
11875
  const clamped = clamp$1(raw, 1, Math.max(1, this.total));
@@ -11906,6 +11925,16 @@ class WizardController {
11906
11925
  get isLast() {
11907
11926
  return this.step >= this.total;
11908
11927
  }
11928
+ get finishing() {
11929
+ return this.finishingSource();
11930
+ }
11931
+ /**
11932
+ * Lo llama `ius-wizard-nav` al entrar en la espera del botón final y al
11933
+ * volver a reposo. No es para el consumidor: este lee `finishing`.
11934
+ */
11935
+ setFinishing(finishing) {
11936
+ this.finishingSource.set(finishing);
11937
+ }
11909
11938
  }
11910
11939
  /**
11911
11940
  * `createWizard(options)` — fábrica del estado del asistente (equivalente a
@@ -11976,6 +12005,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
11976
12005
  * El handler final se pasa como `finishAction` (con `finishDynamic` debe
11977
12006
  * devolver una `Promise` para integrarse con el modo dynamic del Button);
11978
12007
  * además se emite el output `finish` (ng-spec §4).
12008
+ *
12009
+ * Espera del botón final (`finishDynamic`): mientras está en loading · success ·
12010
+ * error, «Atrás» queda deshabilitado, `api.finishing` es `true` (api de
12011
+ * `createWizard`) y `finishingChange` avisa `true` al entrar y `false` al volver
12012
+ * a reposo. El nav espeja la fase del Button con sus mismos tiempos, como el
12013
+ * golden. Si el nav se destruye en plena espera limpia sus timers sin avisar
12014
+ * (igual que el golden) y libera `api.finishing`, para que una api que
12015
+ * sobrevive no quede bloqueada.
12016
+ *
12017
+ * `finishDisabled` deshabilita el botón final (p. ej. el último paso no es
12018
+ * válido); no afecta a «Siguiente» ni a la espera que ya esté en curso.
11979
12019
  */
11980
12020
  class WizardNavComponent {
11981
12021
  constructor() {
@@ -11987,31 +12027,88 @@ class WizardNavComponent {
11987
12027
  this.finishLabel = 'Guardar';
11988
12028
  /** Ícono al final del botón siguiente. */
11989
12029
  this.nextIcon = 'arrow_forward';
11990
- /** El botón final usa el modo `dynamic` del Button (loading → success). */
12030
+ /**
12031
+ * El botón final usa el modo `dynamic` del Button (loading → success/error).
12032
+ * Mientras no está en reposo, «Atrás» se deshabilita solo.
12033
+ */
11991
12034
  this.finishDynamic = false;
11992
12035
  /** Deshabilita "siguiente" (p. ej. validación del paso pendiente). */
11993
12036
  this.nextDisabled = false;
11994
12037
  /** Oculta el botón atrás en el primer paso (en vez de deshabilitarlo). */
11995
12038
  this.hideBackOnFirst = false;
12039
+ /** Deshabilita «Atrás» a mano (con `finishDynamic` ya lo hace solo durante la espera). */
12040
+ this.backDisabled = false;
12041
+ /**
12042
+ * Deshabilita el botón final del último paso (disabled nativo del Button): no
12043
+ * emite `finish` ni llama a `finishAction`. `nextDisabled` sigue aplicando solo
12044
+ * a «Siguiente». Si se activa mientras `finishDynamic` espera, la espera
12045
+ * termina igual.
12046
+ */
12047
+ this.finishDisabled = false;
11996
12048
  /** Se dispara al pulsar el botón final (original `onFinish`). */
11997
12049
  this.finish = new EventEmitter();
12050
+ /**
12051
+ * Espera del botón final (`finishDynamic`, original `onFinishingChange`):
12052
+ * `true` al entrar en loading y `false` al volver a reposo tras success/error.
12053
+ * Mismo dato que `api.finishing`, para quien arma la api a mano.
12054
+ */
12055
+ this.finishingChange = new EventEmitter();
12056
+ /** Espejo de la fase del Button dinámico: `true` desde loading hasta volver a idle. */
12057
+ this.busy = signal(false, /* @ts-ignore */
12058
+ ...(ngDevMode ? [{ debugName: "busy" }] : /* istanbul ignore next */ []));
12059
+ this.timers = [];
12060
+ this.destroyed = false;
11998
12061
  /** `action` para el modo dynamic del Button: emite `finish` y espera el handler. */
11999
12062
  this.runFinish = async () => {
12063
+ if (this.busy() || this.finishDisabled)
12064
+ return undefined;
12065
+ this.setBusy(true);
12000
12066
  this.finish.emit();
12001
- return this.finishAction ? await this.finishAction() : undefined;
12067
+ let result;
12068
+ try {
12069
+ result = this.finishAction ? await this.finishAction() : undefined;
12070
+ }
12071
+ catch {
12072
+ result = 'error';
12073
+ }
12074
+ if (this.destroyed)
12075
+ return result;
12076
+ // Mismos tiempos que el Button: loading 400 ms tras resolver + resultado 800 ms.
12077
+ this.later(() => this.later(() => this.setBusy(false), BUTTON_RESULT_MS), BUTTON_LOADING_MIN_MS);
12078
+ return result;
12002
12079
  };
12003
12080
  }
12081
+ ngOnDestroy() {
12082
+ this.destroyed = true;
12083
+ this.timers.forEach(clearTimeout);
12084
+ if (this.busy() && this.api instanceof WizardController)
12085
+ this.api.setFinishing(false);
12086
+ }
12004
12087
  /** Click del botón final en modo NO dynamic. */
12005
12088
  onFinishClick() {
12089
+ if (this.finishDisabled)
12090
+ return;
12006
12091
  this.finish.emit();
12007
12092
  this.finishAction?.();
12008
12093
  }
12094
+ /** Solo en los cambios reposo ↔ espera: nunca en cada fase intermedia. */
12095
+ setBusy(busy) {
12096
+ if (this.busy() === busy)
12097
+ return;
12098
+ this.busy.set(busy);
12099
+ if (this.api instanceof WizardController)
12100
+ this.api.setFinishing(busy);
12101
+ this.finishingChange.emit(busy);
12102
+ }
12103
+ later(fn, ms) {
12104
+ this.timers.push(setTimeout(fn, ms));
12105
+ }
12009
12106
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: WizardNavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12010
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: WizardNavComponent, isStandalone: true, selector: "ius-wizard-nav", inputs: { api: "api", backLabel: "backLabel", nextLabel: "nextLabel", finishLabel: "finishLabel", nextIcon: "nextIcon", finishDynamic: ["finishDynamic", "finishDynamic", booleanAttribute], nextDisabled: ["nextDisabled", "nextDisabled", booleanAttribute], hideBackOnFirst: ["hideBackOnFirst", "hideBackOnFirst", booleanAttribute], finishAction: "finishAction" }, outputs: { finish: "finish" }, host: { classAttribute: "ius-wizard-nav" }, ngImport: i0, template: "@if (api) {\n @if (!(hideBackOnFirst && api.isFirst)) {\n <ius-button\n variant=\"secondary\"\n fullWidth\n [label]=\"backLabel\"\n [disabled]=\"api.isFirst\"\n (clicked)=\"api.back()\"\n />\n }\n\n @if (api.isLast) {\n @if (finishDynamic) {\n <ius-button\n variant=\"primary\"\n fullWidth\n dynamic\n [label]=\"finishLabel\"\n [action]=\"runFinish\"\n />\n } @else {\n <ius-button\n variant=\"primary\"\n fullWidth\n [label]=\"finishLabel\"\n (clicked)=\"onFinishClick()\"\n />\n }\n } @else {\n <ius-button\n variant=\"primary\"\n fullWidth\n [label]=\"nextLabel\"\n [sufixIcon]=\"nextIcon\"\n [disabled]=\"nextDisabled\"\n (clicked)=\"api.next()\"\n />\n }\n}\n", styles: ["@charset \"UTF-8\";:host{display:flex;gap:var(--ius-space-sm)}:host>*{flex:1 1 0;min-width:0}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "ius-button", inputs: ["variant", "label", "prefixIcon", "sufixIcon", "dynamic", "loading", "status", "disabled", "pressed", "fullWidth", "type", "ariaLabel", "ariaCurrent", "action", "size"], outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12107
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: WizardNavComponent, isStandalone: true, selector: "ius-wizard-nav", inputs: { api: "api", backLabel: "backLabel", nextLabel: "nextLabel", finishLabel: "finishLabel", nextIcon: "nextIcon", finishDynamic: ["finishDynamic", "finishDynamic", booleanAttribute], nextDisabled: ["nextDisabled", "nextDisabled", booleanAttribute], hideBackOnFirst: ["hideBackOnFirst", "hideBackOnFirst", booleanAttribute], backDisabled: ["backDisabled", "backDisabled", booleanAttribute], finishDisabled: ["finishDisabled", "finishDisabled", booleanAttribute], finishAction: "finishAction" }, outputs: { finish: "finish", finishingChange: "finishingChange" }, host: { classAttribute: "ius-wizard-nav" }, ngImport: i0, template: "@if (api) {\r\n @if (!(hideBackOnFirst && api.isFirst)) {\r\n <ius-button\r\n variant=\"secondary\"\r\n fullWidth\r\n [label]=\"backLabel\"\r\n [disabled]=\"api.isFirst || backDisabled || busy()\"\r\n (clicked)=\"api.back()\"\r\n />\r\n }\r\n\r\n @if (api.isLast) {\r\n @if (finishDynamic) {\r\n <ius-button\r\n variant=\"primary\"\r\n fullWidth\r\n dynamic\r\n [label]=\"finishLabel\"\r\n [disabled]=\"finishDisabled\"\r\n [action]=\"runFinish\"\r\n />\r\n } @else {\r\n <ius-button\r\n variant=\"primary\"\r\n fullWidth\r\n [label]=\"finishLabel\"\r\n [disabled]=\"finishDisabled\"\r\n (clicked)=\"onFinishClick()\"\r\n />\r\n }\r\n } @else {\r\n <ius-button\r\n variant=\"primary\"\r\n fullWidth\r\n [label]=\"nextLabel\"\r\n [sufixIcon]=\"nextIcon\"\r\n [disabled]=\"nextDisabled\"\r\n (clicked)=\"api.next()\"\r\n />\r\n }\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:flex;gap:var(--ius-space-sm)}:host>*{flex:1 1 0;min-width:0}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "ius-button", inputs: ["variant", "label", "prefixIcon", "sufixIcon", "dynamic", "loading", "status", "disabled", "pressed", "fullWidth", "type", "ariaLabel", "ariaCurrent", "action", "size"], outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12011
12108
  }
12012
12109
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: WizardNavComponent, decorators: [{
12013
12110
  type: Component,
12014
- args: [{ selector: 'ius-wizard-nav', standalone: true, imports: [ButtonComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'ius-wizard-nav' }, template: "@if (api) {\n @if (!(hideBackOnFirst && api.isFirst)) {\n <ius-button\n variant=\"secondary\"\n fullWidth\n [label]=\"backLabel\"\n [disabled]=\"api.isFirst\"\n (clicked)=\"api.back()\"\n />\n }\n\n @if (api.isLast) {\n @if (finishDynamic) {\n <ius-button\n variant=\"primary\"\n fullWidth\n dynamic\n [label]=\"finishLabel\"\n [action]=\"runFinish\"\n />\n } @else {\n <ius-button\n variant=\"primary\"\n fullWidth\n [label]=\"finishLabel\"\n (clicked)=\"onFinishClick()\"\n />\n }\n } @else {\n <ius-button\n variant=\"primary\"\n fullWidth\n [label]=\"nextLabel\"\n [sufixIcon]=\"nextIcon\"\n [disabled]=\"nextDisabled\"\n (clicked)=\"api.next()\"\n />\n }\n}\n", styles: ["@charset \"UTF-8\";:host{display:flex;gap:var(--ius-space-sm)}:host>*{flex:1 1 0;min-width:0}\n"] }]
12111
+ args: [{ selector: 'ius-wizard-nav', standalone: true, imports: [ButtonComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'ius-wizard-nav' }, template: "@if (api) {\r\n @if (!(hideBackOnFirst && api.isFirst)) {\r\n <ius-button\r\n variant=\"secondary\"\r\n fullWidth\r\n [label]=\"backLabel\"\r\n [disabled]=\"api.isFirst || backDisabled || busy()\"\r\n (clicked)=\"api.back()\"\r\n />\r\n }\r\n\r\n @if (api.isLast) {\r\n @if (finishDynamic) {\r\n <ius-button\r\n variant=\"primary\"\r\n fullWidth\r\n dynamic\r\n [label]=\"finishLabel\"\r\n [disabled]=\"finishDisabled\"\r\n [action]=\"runFinish\"\r\n />\r\n } @else {\r\n <ius-button\r\n variant=\"primary\"\r\n fullWidth\r\n [label]=\"finishLabel\"\r\n [disabled]=\"finishDisabled\"\r\n (clicked)=\"onFinishClick()\"\r\n />\r\n }\r\n } @else {\r\n <ius-button\r\n variant=\"primary\"\r\n fullWidth\r\n [label]=\"nextLabel\"\r\n [sufixIcon]=\"nextIcon\"\r\n [disabled]=\"nextDisabled\"\r\n (clicked)=\"api.next()\"\r\n />\r\n }\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:flex;gap:var(--ius-space-sm)}:host>*{flex:1 1 0;min-width:0}\n"] }]
12015
12112
  }], propDecorators: { api: [{
12016
12113
  type: Input,
12017
12114
  args: [{ required: true }]
@@ -12032,10 +12129,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
12032
12129
  }], hideBackOnFirst: [{
12033
12130
  type: Input,
12034
12131
  args: [{ transform: booleanAttribute }]
12132
+ }], backDisabled: [{
12133
+ type: Input,
12134
+ args: [{ transform: booleanAttribute }]
12135
+ }], finishDisabled: [{
12136
+ type: Input,
12137
+ args: [{ transform: booleanAttribute }]
12035
12138
  }], finishAction: [{
12036
12139
  type: Input
12037
12140
  }], finish: [{
12038
12141
  type: Output
12142
+ }], finishingChange: [{
12143
+ type: Output
12039
12144
  }] } });
12040
12145
 
12041
12146
  /** Píxeles de desvanecido en cada borde con `fade` (espejo del golden). */
@@ -14180,7 +14285,7 @@ class NavRailComponent {
14180
14285
  this.visibleCount.set(count);
14181
14286
  }
14182
14287
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: NavRailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14183
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: NavRailComponent, isStandalone: true, selector: "ius-nav-rail", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, footerItems: { classPropertyName: "footerItems", publicName: "footerItems", isSignal: true, isRequired: false, transformFunction: null }, brand: { classPropertyName: "brand", publicName: "brand", isSignal: true, isRequired: false, transformFunction: null }, brandIcon: { classPropertyName: "brandIcon", publicName: "brandIcon", isSignal: true, isRequired: false, transformFunction: null }, brandSrc: { classPropertyName: "brandSrc", publicName: "brandSrc", isSignal: true, isRequired: false, transformFunction: null }, accent: { classPropertyName: "accent", publicName: "accent", isSignal: true, isRequired: false, transformFunction: null }, hasBadges: { classPropertyName: "hasBadges", publicName: "hasBadges", isSignal: true, isRequired: false, transformFunction: null }, overflowLabel: { classPropertyName: "overflowLabel", publicName: "overflowLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", brandClick: "brandClick" }, host: { attributes: { "role": "navigation" }, properties: { "attr.aria-label": "ariaLabel()", "style.--_nr-a5": "accentA5()", "style.--_nr-a6": "accentA6()", "style.--_nr-tint": "accentTint()" }, classAttribute: "ius-navrail" }, queries: [{ propertyName: "brandRef", first: true, predicate: IusNavRailBrandDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "wrapRef", first: true, predicate: ["wrap"], descendants: true, isSignal: true }, { propertyName: "measRef", first: true, predicate: ["meas"], descendants: true, isSignal: true }, { propertyName: "footRef", first: true, predicate: ["foot"], descendants: true, isSignal: true }], ngImport: i0, template: "<!--\n NavRail \u2014 el HOST es el `<nav>` (ver `host:` del .ts), as\u00ED que aqu\u00ED arranca\n directamente el contenido: marca \u00B7 lista de \u00EDtems (con \u00ABM\u00E1s\u00BB) \u00B7 pie.\n-->\n\n<!--\n Marca. El slot `[iusNavRailBrand]` reemplaza el cuadro por defecto; el\n `ng-content` va en un \u00FAnico `@if` (con `@if` anidados la proyecci\u00F3n falla en\n silencio).\n-->\n@if (brand()) {\n <div class=\"ius-navrail__brand\">\n <ng-content select=\"[iusNavRailBrand]\" />\n @if (!brandRef()) {\n @if (brandInteractive) {\n <button\n type=\"button\"\n class=\"ius-navrail__brand-mark\"\n [attr.data-img]=\"brandSrc() ? 'true' : null\"\n aria-label=\"Inicio\"\n (click)=\"onBrand($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"marca\" />\n </button>\n } @else {\n <span class=\"ius-navrail__brand-mark\" [attr.data-img]=\"brandSrc() ? 'true' : null\" aria-hidden=\"true\">\n <ng-container [ngTemplateOutlet]=\"marca\" />\n </span>\n }\n }\n </div>\n}\n\n<!-- Lista: NO scrollea; lo que no cabe en alto pasa a \u00ABM\u00E1s\u00BB (priority+). -->\n<div class=\"ius-navrail__items\" #wrap>\n @for (it of visibleItems(); track keyOf(it, $index)) {\n <ng-container [ngTemplateOutlet]=\"fila\" [ngTemplateOutletContext]=\"{ it: it }\" />\n }\n\n @if (hasOverflow()) {\n <ius-popover\n [open]=\"moreOpen()\"\n trigger=\"click\"\n placement=\"right-start\"\n [showArrow]=\"false\"\n [offset]=\"8\"\n [dismissable]=\"true\"\n (openChange)=\"moreOpen.set($event)\"\n >\n <button\n type=\"button\"\n class=\"ius-navrail__item\"\n [attr.data-selected]=\"anyHiddenSelected() ? 'true' : null\"\n [attr.aria-label]=\"overflowLabel() + ' secciones'\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"moreOpen() ? 'true' : 'false'\"\n >\n <span class=\"ius-navrail__ic\">\n <span translate=\"no\" class=\"ius-icon\">more_horiz</span>\n @if (hasBadges() && anyHiddenSelected()) {\n <span class=\"ius-navrail__badge\" aria-hidden=\"true\"></span>\n }\n </span>\n <span class=\"ius-navrail__label\">{{ overflowLabel() }}</span>\n </button>\n\n <!--\n Panel del desborde. Se estampa en el overlay del CDK (FUERA del host), as\u00ED\n que las variables del acento NO se heredan: se repiten aqu\u00ED, como el golden\n repite `accentVars(accent)` en este nodo.\n -->\n <div\n iusPopoverContent\n class=\"ius-navrail__pop\"\n role=\"menu\"\n [style.--_nr-a6]=\"accentA6()\"\n [style.--_nr-tint]=\"accentTint()\"\n >\n @for (it of hiddenItems(); track keyOf(it, $index)) {\n @if (it.href) {\n <a\n class=\"ius-navrail__pop-item\"\n role=\"menuitem\"\n [href]=\"it.href\"\n [attr.data-selected]=\"it.selected ? 'true' : null\"\n [attr.data-disabled]=\"it.disabled ? 'true' : null\"\n [attr.aria-current]=\"it.selected ? 'page' : null\"\n [attr.aria-label]=\"popAria(it)\"\n (click)=\"handleFromOverflow(it, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"filaPop\" [ngTemplateOutletContext]=\"{ it: it }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"ius-navrail__pop-item\"\n role=\"menuitem\"\n [disabled]=\"!!it.disabled\"\n [attr.data-selected]=\"it.selected ? 'true' : null\"\n [attr.data-disabled]=\"it.disabled ? 'true' : null\"\n [attr.aria-current]=\"it.selected ? 'page' : null\"\n [attr.aria-label]=\"popAria(it)\"\n (click)=\"handleFromOverflow(it, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"filaPop\" [ngTemplateOutletContext]=\"{ it: it }\" />\n </button>\n }\n }\n </div>\n </ius-popover>\n }\n\n <!--\n Contenedor de MEDICI\u00D3N (priority+): clona TODOS los \u00EDtems fuera de vista\n (`position: absolute` + `visibility: hidden`: no aporta alto ni entra en el\n orden de tabulaci\u00F3n) y de ah\u00ED se leen los `offsetHeight`.\n -->\n <div class=\"ius-navrail__measure\" #meas aria-hidden=\"true\">\n @for (it of items(); track keyOf(it, $index)) {\n <ng-container [ngTemplateOutlet]=\"fila\" [ngTemplateOutletContext]=\"{ it: it }\" />\n }\n </div>\n</div>\n\n@if (footerItems().length) {\n <div class=\"ius-navrail__sep\"></div>\n <div class=\"ius-navrail__footer\" #foot>\n @for (it of footerItems(); track keyOf(it, $index)) {\n <ng-container [ngTemplateOutlet]=\"fila\" [ngTemplateOutletContext]=\"{ it: it }\" />\n }\n </div>\n}\n\n<!-- Cuadro de marca por defecto: isotipo \u203A \u00EDcono. -->\n<ng-template #marca>\n @if (brandSrc()) {\n <img class=\"ius-navrail__brand-img\" [src]=\"brandSrc()\" alt=\"\" />\n } @else {\n <span translate=\"no\" class=\"ius-icon\">{{ brandIcon() }}</span>\n }\n</ng-template>\n\n<!-- UNA sola plantilla de \u00EDtem (riel, pie y medici\u00F3n), como `renderItems` del golden. -->\n<ng-template #fila let-raw=\"it\">\n @let it = asItem(raw);\n @if (it.href) {\n <a\n class=\"ius-navrail__item\"\n [href]=\"it.href\"\n [attr.data-selected]=\"it.selected ? 'true' : null\"\n [attr.data-disabled]=\"it.disabled ? 'true' : null\"\n [attr.aria-current]=\"it.selected ? 'page' : null\"\n [attr.aria-label]=\"itemAria(it)\"\n (click)=\"handle(it, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"cuerpo\" [ngTemplateOutletContext]=\"{ it: it }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"ius-navrail__item\"\n [disabled]=\"!!it.disabled\"\n [attr.data-selected]=\"it.selected ? 'true' : null\"\n [attr.data-disabled]=\"it.disabled ? 'true' : null\"\n [attr.aria-current]=\"it.selected ? 'page' : null\"\n [attr.aria-label]=\"itemAria(it)\"\n (click)=\"handle(it, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"cuerpo\" [ngTemplateOutletContext]=\"{ it: it }\" />\n </button>\n }\n</ng-template>\n\n<!-- \u00CDcono (con su badge anclado a la esquina) sobre la etiqueta. -->\n<ng-template #cuerpo let-raw=\"it\">\n @let it = asItem(raw);\n <span class=\"ius-navrail__ic\">\n <span translate=\"no\" class=\"ius-icon\">{{ it.icon }}</span>\n @switch (badgeKind(it)) {\n @case ('count') {\n <span class=\"ius-navrail__count\" aria-hidden=\"true\">\n <ius-insignia variant=\"count\" tone=\"info\" size=\"small\" [count]=\"countOf(it)\" [max]=\"maxCount\" />\n </span>\n }\n @case ('dot') {\n <span class=\"ius-navrail__badge\" aria-hidden=\"true\"></span>\n }\n }\n </span>\n <span class=\"ius-navrail__label\">{{ it.label }}</span>\n</ng-template>\n\n<!-- Fila del men\u00FA \u00ABM\u00E1s\u00BB: \u00EDcono \u00B7 etiqueta \u00B7 badge al final. -->\n<ng-template #filaPop let-raw=\"it\">\n @let it = asItem(raw);\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ it.icon }}</span>\n <span class=\"ius-navrail__pop-label\">{{ it.label }}</span>\n @switch (badgeKind(it)) {\n @case ('count') {\n <span class=\"ius-navrail__pop-count\" aria-hidden=\"true\">\n <ius-insignia variant=\"count\" tone=\"info\" size=\"small\" [count]=\"countOf(it)\" [max]=\"maxCount\" />\n </span>\n }\n @case ('dot') {\n <span class=\"ius-navrail__pop-badge\" aria-hidden=\"true\"></span>\n }\n }\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host{box-sizing:border-box;-webkit-user-select:none;user-select:none;display:flex;flex-direction:column;width:100px;height:100%;background:var(--ius-surface-card);border-right:1px solid var(--ius-stroke);padding:var(--ius-space-sm) var(--ius-space-xs);gap:var(--ius-space-xxs);font-family:var(--ius-font-body)}.ius-navrail__brand{display:flex;justify-content:center;padding:var(--ius-space-xxs) 0 var(--ius-space-md);flex:0 0 auto}.ius-navrail__brand-mark{width:40px;height:40px;border-radius:var(--ius-radius-md);background:var(--_nr-a5, var(--ius-success-500));display:inline-flex;align-items:center;justify-content:center;color:var(--ius-neutral-white);overflow:hidden}button.ius-navrail__brand-mark{appearance:none;border:0;padding:0;cursor:pointer}button.ius-navrail__brand-mark:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-navrail__brand-mark[data-img=true]{background:var(--ius-neutral-1);border:1px solid var(--ius-stroke)}.ius-navrail__brand-mark .ius-icon{font-size:var(--ius-icon-lg)}.ius-navrail__brand-img{width:100%;height:100%;object-fit:contain;display:block}.ius-navrail__items{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:var(--ius-space-xxs);overflow:hidden;position:relative}.ius-navrail__measure{position:absolute;top:0;left:0;right:0;visibility:hidden;pointer-events:none;display:flex;flex-direction:column;gap:var(--ius-space-xxs)}.ius-navrail__footer{flex:0 0 auto;display:flex;flex-direction:column;gap:var(--ius-space-xxs)}.ius-navrail__sep{height:1px;background:var(--ius-stroke);margin:var(--ius-space-xs) var(--ius-space-xs);flex:0 0 auto}.ius-navrail__item{appearance:none;border:0;background:transparent;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:var(--ius-space-xxs);padding:var(--ius-space-xs) var(--ius-space-xxs);border-radius:var(--ius-radius-md);font-family:var(--ius-font-body);color:var(--ius-text-secondary)}.ius-navrail__item:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-navrail__item[data-disabled=true]{cursor:default;opacity:.5;pointer-events:none}.ius-navrail__ic{position:relative;width:56px;height:34px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--ius-radius-md);color:var(--ius-neutral-8);transition:background var(--ius-duration-fast) var(--ius-ease-standard),color var(--ius-duration-fast) var(--ius-ease-standard)}.ius-navrail__ic .ius-icon{font-size:var(--ius-fs-h3);line-height:1}.ius-navrail__label{font-size:var(--ius-fs-sm);line-height:1.15;text-align:center;color:var(--ius-text-secondary);max-width:100%;width:100%;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:break-word;hyphens:none}.ius-navrail__item:hover .ius-navrail__ic{background:var(--ius-neutral-2)}.ius-navrail__item:active .ius-navrail__ic{background:var(--ius-neutral-3)}.ius-navrail__item[data-selected=true] .ius-navrail__ic{background:var(--_nr-tint, color-mix(in srgb, var(--ius-success-500) 16%, white));color:var(--_nr-a6, var(--ius-success-600))}.ius-navrail__item[data-selected=true] .ius-navrail__label{color:var(--_nr-a6, var(--ius-success-600));font-weight:var(--ius-fw-medium, 500)}.ius-navrail__badge{position:absolute;top:3px;right:10px;width:8px;height:8px;border-radius:var(--ius-radius-pill);background:var(--ius-danger-500);box-shadow:0 0 0 2px var(--ius-surface-card)}.ius-navrail__count{position:absolute;top:0;left:50%;margin-left:var(--ius-space-xxs);display:inline-flex;pointer-events:none;border-radius:var(--ius-radius-pill);box-shadow:0 0 0 2px var(--ius-surface-card)}.ius-navrail__pop{display:flex;flex-direction:column;gap:var(--ius-space-xxs);min-width:208px;padding:var(--ius-space-xxs)}.ius-navrail__pop-item{appearance:none;border:0;background:transparent;cursor:pointer;display:flex;align-items:center;gap:var(--ius-space-sm);width:100%;text-align:left;padding:var(--ius-space-xs) var(--ius-space-sm);border-radius:var(--ius-radius-md);font-family:var(--ius-font-body);font-size:var(--ius-fs-base);line-height:1.2;color:var(--ius-text-secondary);text-decoration:none}.ius-navrail__pop-item:hover{background:var(--ius-neutral-2)}.ius-navrail__pop-item:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-navrail__pop-item[data-disabled=true]{cursor:default;opacity:.5;pointer-events:none}.ius-navrail__pop-item[data-selected=true]{background:var(--_nr-tint, color-mix(in srgb, var(--ius-success-500) 16%, white));color:var(--_nr-a6, var(--ius-success-600));font-weight:var(--ius-fw-medium, 500)}.ius-navrail__pop-item .ius-icon{font-size:var(--ius-icon-md);line-height:1;flex:0 0 auto}.ius-navrail__pop-label{flex:1 1 auto;min-width:0}.ius-navrail__pop-badge{flex:0 0 auto;width:8px;height:8px;border-radius:var(--ius-radius-pill);background:var(--ius-danger-500)}.ius-navrail__pop-count{flex:0 0 auto;display:inline-flex}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: InsigniaComponent, selector: "ius-insignia", inputs: ["variant", "tone", "size", "label", "count", "max", "ring", "ariaLabel"] }, { kind: "component", type: PopoverComponent, selector: "ius-popover", inputs: ["title", "content", "placement", "trigger", "offset", "open", "defaultOpen", "showArrow", "disabled", "anchorRect", "padding", "dismissable", "panelClass"], outputs: ["openChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
14288
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: NavRailComponent, isStandalone: true, selector: "ius-nav-rail", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, footerItems: { classPropertyName: "footerItems", publicName: "footerItems", isSignal: true, isRequired: false, transformFunction: null }, brand: { classPropertyName: "brand", publicName: "brand", isSignal: true, isRequired: false, transformFunction: null }, brandIcon: { classPropertyName: "brandIcon", publicName: "brandIcon", isSignal: true, isRequired: false, transformFunction: null }, brandSrc: { classPropertyName: "brandSrc", publicName: "brandSrc", isSignal: true, isRequired: false, transformFunction: null }, accent: { classPropertyName: "accent", publicName: "accent", isSignal: true, isRequired: false, transformFunction: null }, hasBadges: { classPropertyName: "hasBadges", publicName: "hasBadges", isSignal: true, isRequired: false, transformFunction: null }, overflowLabel: { classPropertyName: "overflowLabel", publicName: "overflowLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", brandClick: "brandClick" }, host: { attributes: { "role": "navigation" }, properties: { "attr.aria-label": "ariaLabel()", "style.--_nr-a5": "accentA5()", "style.--_nr-a6": "accentA6()", "style.--_nr-tint": "accentTint()" }, classAttribute: "ius-navrail" }, queries: [{ propertyName: "brandRef", first: true, predicate: IusNavRailBrandDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "wrapRef", first: true, predicate: ["wrap"], descendants: true, isSignal: true }, { propertyName: "measRef", first: true, predicate: ["meas"], descendants: true, isSignal: true }, { propertyName: "footRef", first: true, predicate: ["foot"], descendants: true, isSignal: true }], ngImport: i0, template: "<!--\r\n NavRail \u2014 el HOST es el `<nav>` (ver `host:` del .ts), as\u00ED que aqu\u00ED arranca\r\n directamente el contenido: marca \u00B7 lista de \u00EDtems (con \u00ABM\u00E1s\u00BB) \u00B7 pie.\r\n-->\r\n\r\n<!--\r\n Marca. El slot `[iusNavRailBrand]` reemplaza el cuadro por defecto; el\r\n `ng-content` va en un \u00FAnico `@if` (con `@if` anidados la proyecci\u00F3n falla en\r\n silencio).\r\n-->\r\n@if (brand()) {\r\n <div class=\"ius-navrail__brand\">\r\n <ng-content select=\"[iusNavRailBrand]\" />\r\n @if (!brandRef()) {\r\n @if (brandInteractive) {\r\n <button\r\n type=\"button\"\r\n class=\"ius-navrail__brand-mark\"\r\n [attr.data-img]=\"brandSrc() ? 'true' : null\"\r\n aria-label=\"Inicio\"\r\n (click)=\"onBrand($event)\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"marca\" />\r\n </button>\r\n } @else {\r\n <span class=\"ius-navrail__brand-mark\" [attr.data-img]=\"brandSrc() ? 'true' : null\" aria-hidden=\"true\">\r\n <ng-container [ngTemplateOutlet]=\"marca\" />\r\n </span>\r\n }\r\n }\r\n </div>\r\n}\r\n\r\n<!-- Lista: NO scrollea; lo que no cabe en alto pasa a \u00ABM\u00E1s\u00BB (priority+). -->\r\n<div class=\"ius-navrail__items\" #wrap>\r\n @for (it of visibleItems(); track keyOf(it, $index)) {\r\n <ng-container [ngTemplateOutlet]=\"fila\" [ngTemplateOutletContext]=\"{ it: it }\" />\r\n }\r\n\r\n @if (hasOverflow()) {\r\n <ius-popover\r\n [open]=\"moreOpen()\"\r\n trigger=\"click\"\r\n placement=\"right-start\"\r\n [showArrow]=\"false\"\r\n [offset]=\"8\"\r\n [dismissable]=\"true\"\r\n (openChange)=\"moreOpen.set($event)\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"ius-navrail__item\"\r\n [attr.data-selected]=\"anyHiddenSelected() ? 'true' : null\"\r\n [attr.aria-label]=\"overflowLabel() + ' secciones'\"\r\n aria-haspopup=\"menu\"\r\n [attr.aria-expanded]=\"moreOpen() ? 'true' : 'false'\"\r\n >\r\n <span class=\"ius-navrail__ic\">\r\n <span translate=\"no\" class=\"ius-icon\">more_horiz</span>\r\n @if (hasBadges() && anyHiddenSelected()) {\r\n <span class=\"ius-navrail__badge\" aria-hidden=\"true\"></span>\r\n }\r\n </span>\r\n <span class=\"ius-navrail__label\">{{ overflowLabel() }}</span>\r\n </button>\r\n\r\n <!--\r\n Panel del desborde. Se estampa en el overlay del CDK (FUERA del host), as\u00ED\r\n que las variables del acento NO se heredan: se repiten aqu\u00ED, como el golden\r\n repite `accentVars(accent)` en este nodo.\r\n -->\r\n <div\r\n iusPopoverContent\r\n class=\"ius-navrail__pop\"\r\n role=\"menu\"\r\n [style.--_nr-a6]=\"accentA6()\"\r\n [style.--_nr-tint]=\"accentTint()\"\r\n >\r\n @for (it of hiddenItems(); track keyOf(it, $index)) {\r\n @if (it.href) {\r\n <a\r\n class=\"ius-navrail__pop-item\"\r\n role=\"menuitem\"\r\n [href]=\"it.href\"\r\n [attr.data-selected]=\"it.selected ? 'true' : null\"\r\n [attr.data-disabled]=\"it.disabled ? 'true' : null\"\r\n [attr.aria-current]=\"it.selected ? 'page' : null\"\r\n [attr.aria-label]=\"popAria(it)\"\r\n (click)=\"handleFromOverflow(it, $event)\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"filaPop\" [ngTemplateOutletContext]=\"{ it: it }\" />\r\n </a>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"ius-navrail__pop-item\"\r\n role=\"menuitem\"\r\n [disabled]=\"!!it.disabled\"\r\n [attr.data-selected]=\"it.selected ? 'true' : null\"\r\n [attr.data-disabled]=\"it.disabled ? 'true' : null\"\r\n [attr.aria-current]=\"it.selected ? 'page' : null\"\r\n [attr.aria-label]=\"popAria(it)\"\r\n (click)=\"handleFromOverflow(it, $event)\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"filaPop\" [ngTemplateOutletContext]=\"{ it: it }\" />\r\n </button>\r\n }\r\n }\r\n </div>\r\n </ius-popover>\r\n }\r\n\r\n <!--\r\n Contenedor de MEDICI\u00D3N (priority+): clona TODOS los \u00EDtems fuera de vista\r\n (`position: absolute` + `visibility: hidden`: no aporta alto ni entra en el\r\n orden de tabulaci\u00F3n) y de ah\u00ED se leen los `offsetHeight`.\r\n -->\r\n <div class=\"ius-navrail__measure\" #meas aria-hidden=\"true\">\r\n @for (it of items(); track keyOf(it, $index)) {\r\n <ng-container [ngTemplateOutlet]=\"fila\" [ngTemplateOutletContext]=\"{ it: it }\" />\r\n }\r\n </div>\r\n</div>\r\n\r\n@if (footerItems().length) {\r\n <div class=\"ius-navrail__sep\"></div>\r\n <div class=\"ius-navrail__footer\" #foot>\r\n @for (it of footerItems(); track keyOf(it, $index)) {\r\n <ng-container [ngTemplateOutlet]=\"fila\" [ngTemplateOutletContext]=\"{ it: it }\" />\r\n }\r\n </div>\r\n}\r\n\r\n<!-- Cuadro de marca por defecto: isotipo \u203A \u00EDcono. -->\r\n<ng-template #marca>\r\n @if (brandSrc()) {\r\n <img class=\"ius-navrail__brand-img\" [src]=\"brandSrc()\" alt=\"\" />\r\n } @else {\r\n <span translate=\"no\" class=\"ius-icon\">{{ brandIcon() }}</span>\r\n }\r\n</ng-template>\r\n\r\n<!-- UNA sola plantilla de \u00EDtem (riel, pie y medici\u00F3n), como `renderItems` del golden. -->\r\n<ng-template #fila let-raw=\"it\">\r\n @let it = asItem(raw);\r\n @if (it.href) {\r\n <a\r\n class=\"ius-navrail__item\"\r\n [href]=\"it.href\"\r\n [attr.data-selected]=\"it.selected ? 'true' : null\"\r\n [attr.data-disabled]=\"it.disabled ? 'true' : null\"\r\n [attr.aria-current]=\"it.selected ? 'page' : null\"\r\n [attr.aria-label]=\"itemAria(it)\"\r\n (click)=\"handle(it, $event)\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"cuerpo\" [ngTemplateOutletContext]=\"{ it: it }\" />\r\n </a>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"ius-navrail__item\"\r\n [disabled]=\"!!it.disabled\"\r\n [attr.data-selected]=\"it.selected ? 'true' : null\"\r\n [attr.data-disabled]=\"it.disabled ? 'true' : null\"\r\n [attr.aria-current]=\"it.selected ? 'page' : null\"\r\n [attr.aria-label]=\"itemAria(it)\"\r\n (click)=\"handle(it, $event)\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"cuerpo\" [ngTemplateOutletContext]=\"{ it: it }\" />\r\n </button>\r\n }\r\n</ng-template>\r\n\r\n<!-- \u00CDcono (con su badge anclado a la esquina) sobre la etiqueta. -->\r\n<ng-template #cuerpo let-raw=\"it\">\r\n @let it = asItem(raw);\r\n <span class=\"ius-navrail__ic\">\r\n <span translate=\"no\" class=\"ius-icon\">{{ it.icon }}</span>\r\n @switch (badgeKind(it)) {\r\n @case ('count') {\r\n <span class=\"ius-navrail__count\" aria-hidden=\"true\">\r\n <ius-insignia variant=\"count\" tone=\"info\" size=\"small\" [count]=\"countOf(it)\" [max]=\"maxCount\" />\r\n </span>\r\n }\r\n @case ('dot') {\r\n <span class=\"ius-navrail__badge\" aria-hidden=\"true\"></span>\r\n }\r\n }\r\n </span>\r\n <span class=\"ius-navrail__label\">{{ it.label }}</span>\r\n</ng-template>\r\n\r\n<!-- Fila del men\u00FA \u00ABM\u00E1s\u00BB: \u00EDcono \u00B7 etiqueta \u00B7 badge al final. -->\r\n<ng-template #filaPop let-raw=\"it\">\r\n @let it = asItem(raw);\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ it.icon }}</span>\r\n <span class=\"ius-navrail__pop-label\">{{ it.label }}</span>\r\n @switch (badgeKind(it)) {\r\n @case ('count') {\r\n <span class=\"ius-navrail__pop-count\" aria-hidden=\"true\">\r\n <ius-insignia variant=\"count\" tone=\"info\" size=\"small\" [count]=\"countOf(it)\" [max]=\"maxCount\" />\r\n </span>\r\n }\r\n @case ('dot') {\r\n <span class=\"ius-navrail__pop-badge\" aria-hidden=\"true\"></span>\r\n }\r\n }\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";:host{box-sizing:border-box;-webkit-user-select:none;user-select:none;display:flex;flex-direction:column;width:100px;height:100%;background:var(--ius-surface-card);border-right:1px solid var(--ius-stroke);padding:var(--ius-space-sm) var(--ius-space-xs);gap:var(--ius-space-xxs);font-family:var(--ius-font-body)}.ius-navrail__brand{display:flex;justify-content:center;padding:var(--ius-space-xxs) 0 var(--ius-space-md);flex:0 0 auto}.ius-navrail__brand-mark{width:40px;height:40px;border-radius:var(--ius-radius-md);background:var(--_nr-a5, var(--ius-success-500));display:inline-flex;align-items:center;justify-content:center;color:var(--ius-neutral-white);overflow:hidden}button.ius-navrail__brand-mark{appearance:none;border:0;padding:0;cursor:pointer}button.ius-navrail__brand-mark:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-navrail__brand-mark[data-img=true]{background:var(--ius-neutral-1);border:1px solid var(--ius-stroke)}.ius-navrail__brand-mark .ius-icon{font-size:var(--ius-icon-lg)}.ius-navrail__brand-img{width:100%;height:100%;object-fit:contain;display:block}.ius-navrail__items{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:var(--ius-space-xxs);overflow:hidden;position:relative}.ius-navrail__measure{position:absolute;top:0;left:0;right:0;visibility:hidden;pointer-events:none;display:flex;flex-direction:column;gap:var(--ius-space-xxs)}.ius-navrail__footer{flex:0 0 auto;display:flex;flex-direction:column;gap:var(--ius-space-xxs)}.ius-navrail__sep{height:1px;background:var(--ius-stroke);margin:var(--ius-space-xs) var(--ius-space-xs);flex:0 0 auto}.ius-navrail__item{appearance:none;border:0;background:transparent;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:var(--ius-space-xxs);padding:var(--ius-space-xs) var(--ius-space-xxs);border-radius:var(--ius-radius-md);font-family:var(--ius-font-body);color:var(--ius-text-secondary)}.ius-navrail__item:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-navrail__item[data-disabled=true]{cursor:default;opacity:.5;pointer-events:none}.ius-navrail__ic{position:relative;width:56px;height:34px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--ius-radius-md);color:var(--ius-neutral-8);transition:background var(--ius-duration-fast) var(--ius-ease-standard),color var(--ius-duration-fast) var(--ius-ease-standard)}.ius-navrail__ic .ius-icon{font-size:var(--ius-fs-h3);line-height:1}.ius-navrail__label{font-size:var(--ius-fs-sm);line-height:1.15;text-align:center;color:var(--ius-text-secondary);max-width:100%;width:100%;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:break-word;hyphens:none}.ius-navrail__item:hover .ius-navrail__ic{background:var(--ius-neutral-2)}.ius-navrail__item:active .ius-navrail__ic{background:var(--ius-neutral-3)}.ius-navrail__item[data-selected=true] .ius-navrail__ic{background:var(--_nr-tint, color-mix(in srgb, var(--ius-success-500) 16%, white));color:var(--_nr-a6, var(--ius-success-600))}.ius-navrail__item[data-selected=true] .ius-navrail__label{color:var(--_nr-a6, var(--ius-success-600));font-weight:var(--ius-fw-medium, 500)}.ius-navrail__badge{position:absolute;top:3px;right:10px;width:8px;height:8px;border-radius:var(--ius-radius-pill);background:var(--ius-danger-500);box-shadow:0 0 0 2px var(--ius-surface-card)}.ius-navrail__count{position:absolute;top:0;left:50%;margin-left:var(--ius-space-xxs);display:inline-flex;pointer-events:none;border-radius:var(--ius-radius-pill);box-shadow:0 0 0 2px var(--ius-surface-card)}.ius-navrail__pop{display:flex;flex-direction:column;gap:var(--ius-space-xxs);min-width:208px;padding:var(--ius-space-xxs)}.ius-navrail__pop-item{appearance:none;border:0;background:transparent;cursor:pointer;display:flex;align-items:center;gap:var(--ius-space-sm);width:100%;text-align:left;padding:var(--ius-space-xs) var(--ius-space-sm);border-radius:var(--ius-radius-md);font-family:var(--ius-font-body);font-size:var(--ius-fs-base);line-height:1.2;color:var(--ius-text-secondary);text-decoration:none}.ius-navrail__pop-item:hover{background:var(--ius-neutral-2)}.ius-navrail__pop-item:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-navrail__pop-item[data-disabled=true]{cursor:default;opacity:.5;pointer-events:none}.ius-navrail__pop-item[data-selected=true]{background:var(--_nr-tint, color-mix(in srgb, var(--ius-success-500) 16%, white));color:var(--_nr-a6, var(--ius-success-600));font-weight:var(--ius-fw-medium, 500)}.ius-navrail__pop-item .ius-icon{font-size:var(--ius-icon-md);line-height:1;flex:0 0 auto}.ius-navrail__pop-label{flex:1 1 auto;min-width:0}.ius-navrail__pop-badge{flex:0 0 auto;width:8px;height:8px;border-radius:var(--ius-radius-pill);background:var(--ius-danger-500)}.ius-navrail__pop-count{flex:0 0 auto;display:inline-flex}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: InsigniaComponent, selector: "ius-insignia", inputs: ["variant", "tone", "size", "label", "count", "max", "ring", "ariaLabel"] }, { kind: "component", type: PopoverComponent, selector: "ius-popover", inputs: ["title", "content", "placement", "trigger", "offset", "open", "defaultOpen", "showArrow", "disabled", "anchorRect", "padding", "dismissable", "panelClass"], outputs: ["openChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
14184
14289
  }
14185
14290
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: NavRailComponent, decorators: [{
14186
14291
  type: Component,
@@ -14191,7 +14296,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
14191
14296
  '[style.--_nr-a5]': 'accentA5()',
14192
14297
  '[style.--_nr-a6]': 'accentA6()',
14193
14298
  '[style.--_nr-tint]': 'accentTint()',
14194
- }, template: "<!--\n NavRail \u2014 el HOST es el `<nav>` (ver `host:` del .ts), as\u00ED que aqu\u00ED arranca\n directamente el contenido: marca \u00B7 lista de \u00EDtems (con \u00ABM\u00E1s\u00BB) \u00B7 pie.\n-->\n\n<!--\n Marca. El slot `[iusNavRailBrand]` reemplaza el cuadro por defecto; el\n `ng-content` va en un \u00FAnico `@if` (con `@if` anidados la proyecci\u00F3n falla en\n silencio).\n-->\n@if (brand()) {\n <div class=\"ius-navrail__brand\">\n <ng-content select=\"[iusNavRailBrand]\" />\n @if (!brandRef()) {\n @if (brandInteractive) {\n <button\n type=\"button\"\n class=\"ius-navrail__brand-mark\"\n [attr.data-img]=\"brandSrc() ? 'true' : null\"\n aria-label=\"Inicio\"\n (click)=\"onBrand($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"marca\" />\n </button>\n } @else {\n <span class=\"ius-navrail__brand-mark\" [attr.data-img]=\"brandSrc() ? 'true' : null\" aria-hidden=\"true\">\n <ng-container [ngTemplateOutlet]=\"marca\" />\n </span>\n }\n }\n </div>\n}\n\n<!-- Lista: NO scrollea; lo que no cabe en alto pasa a \u00ABM\u00E1s\u00BB (priority+). -->\n<div class=\"ius-navrail__items\" #wrap>\n @for (it of visibleItems(); track keyOf(it, $index)) {\n <ng-container [ngTemplateOutlet]=\"fila\" [ngTemplateOutletContext]=\"{ it: it }\" />\n }\n\n @if (hasOverflow()) {\n <ius-popover\n [open]=\"moreOpen()\"\n trigger=\"click\"\n placement=\"right-start\"\n [showArrow]=\"false\"\n [offset]=\"8\"\n [dismissable]=\"true\"\n (openChange)=\"moreOpen.set($event)\"\n >\n <button\n type=\"button\"\n class=\"ius-navrail__item\"\n [attr.data-selected]=\"anyHiddenSelected() ? 'true' : null\"\n [attr.aria-label]=\"overflowLabel() + ' secciones'\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"moreOpen() ? 'true' : 'false'\"\n >\n <span class=\"ius-navrail__ic\">\n <span translate=\"no\" class=\"ius-icon\">more_horiz</span>\n @if (hasBadges() && anyHiddenSelected()) {\n <span class=\"ius-navrail__badge\" aria-hidden=\"true\"></span>\n }\n </span>\n <span class=\"ius-navrail__label\">{{ overflowLabel() }}</span>\n </button>\n\n <!--\n Panel del desborde. Se estampa en el overlay del CDK (FUERA del host), as\u00ED\n que las variables del acento NO se heredan: se repiten aqu\u00ED, como el golden\n repite `accentVars(accent)` en este nodo.\n -->\n <div\n iusPopoverContent\n class=\"ius-navrail__pop\"\n role=\"menu\"\n [style.--_nr-a6]=\"accentA6()\"\n [style.--_nr-tint]=\"accentTint()\"\n >\n @for (it of hiddenItems(); track keyOf(it, $index)) {\n @if (it.href) {\n <a\n class=\"ius-navrail__pop-item\"\n role=\"menuitem\"\n [href]=\"it.href\"\n [attr.data-selected]=\"it.selected ? 'true' : null\"\n [attr.data-disabled]=\"it.disabled ? 'true' : null\"\n [attr.aria-current]=\"it.selected ? 'page' : null\"\n [attr.aria-label]=\"popAria(it)\"\n (click)=\"handleFromOverflow(it, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"filaPop\" [ngTemplateOutletContext]=\"{ it: it }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"ius-navrail__pop-item\"\n role=\"menuitem\"\n [disabled]=\"!!it.disabled\"\n [attr.data-selected]=\"it.selected ? 'true' : null\"\n [attr.data-disabled]=\"it.disabled ? 'true' : null\"\n [attr.aria-current]=\"it.selected ? 'page' : null\"\n [attr.aria-label]=\"popAria(it)\"\n (click)=\"handleFromOverflow(it, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"filaPop\" [ngTemplateOutletContext]=\"{ it: it }\" />\n </button>\n }\n }\n </div>\n </ius-popover>\n }\n\n <!--\n Contenedor de MEDICI\u00D3N (priority+): clona TODOS los \u00EDtems fuera de vista\n (`position: absolute` + `visibility: hidden`: no aporta alto ni entra en el\n orden de tabulaci\u00F3n) y de ah\u00ED se leen los `offsetHeight`.\n -->\n <div class=\"ius-navrail__measure\" #meas aria-hidden=\"true\">\n @for (it of items(); track keyOf(it, $index)) {\n <ng-container [ngTemplateOutlet]=\"fila\" [ngTemplateOutletContext]=\"{ it: it }\" />\n }\n </div>\n</div>\n\n@if (footerItems().length) {\n <div class=\"ius-navrail__sep\"></div>\n <div class=\"ius-navrail__footer\" #foot>\n @for (it of footerItems(); track keyOf(it, $index)) {\n <ng-container [ngTemplateOutlet]=\"fila\" [ngTemplateOutletContext]=\"{ it: it }\" />\n }\n </div>\n}\n\n<!-- Cuadro de marca por defecto: isotipo \u203A \u00EDcono. -->\n<ng-template #marca>\n @if (brandSrc()) {\n <img class=\"ius-navrail__brand-img\" [src]=\"brandSrc()\" alt=\"\" />\n } @else {\n <span translate=\"no\" class=\"ius-icon\">{{ brandIcon() }}</span>\n }\n</ng-template>\n\n<!-- UNA sola plantilla de \u00EDtem (riel, pie y medici\u00F3n), como `renderItems` del golden. -->\n<ng-template #fila let-raw=\"it\">\n @let it = asItem(raw);\n @if (it.href) {\n <a\n class=\"ius-navrail__item\"\n [href]=\"it.href\"\n [attr.data-selected]=\"it.selected ? 'true' : null\"\n [attr.data-disabled]=\"it.disabled ? 'true' : null\"\n [attr.aria-current]=\"it.selected ? 'page' : null\"\n [attr.aria-label]=\"itemAria(it)\"\n (click)=\"handle(it, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"cuerpo\" [ngTemplateOutletContext]=\"{ it: it }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"ius-navrail__item\"\n [disabled]=\"!!it.disabled\"\n [attr.data-selected]=\"it.selected ? 'true' : null\"\n [attr.data-disabled]=\"it.disabled ? 'true' : null\"\n [attr.aria-current]=\"it.selected ? 'page' : null\"\n [attr.aria-label]=\"itemAria(it)\"\n (click)=\"handle(it, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"cuerpo\" [ngTemplateOutletContext]=\"{ it: it }\" />\n </button>\n }\n</ng-template>\n\n<!-- \u00CDcono (con su badge anclado a la esquina) sobre la etiqueta. -->\n<ng-template #cuerpo let-raw=\"it\">\n @let it = asItem(raw);\n <span class=\"ius-navrail__ic\">\n <span translate=\"no\" class=\"ius-icon\">{{ it.icon }}</span>\n @switch (badgeKind(it)) {\n @case ('count') {\n <span class=\"ius-navrail__count\" aria-hidden=\"true\">\n <ius-insignia variant=\"count\" tone=\"info\" size=\"small\" [count]=\"countOf(it)\" [max]=\"maxCount\" />\n </span>\n }\n @case ('dot') {\n <span class=\"ius-navrail__badge\" aria-hidden=\"true\"></span>\n }\n }\n </span>\n <span class=\"ius-navrail__label\">{{ it.label }}</span>\n</ng-template>\n\n<!-- Fila del men\u00FA \u00ABM\u00E1s\u00BB: \u00EDcono \u00B7 etiqueta \u00B7 badge al final. -->\n<ng-template #filaPop let-raw=\"it\">\n @let it = asItem(raw);\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ it.icon }}</span>\n <span class=\"ius-navrail__pop-label\">{{ it.label }}</span>\n @switch (badgeKind(it)) {\n @case ('count') {\n <span class=\"ius-navrail__pop-count\" aria-hidden=\"true\">\n <ius-insignia variant=\"count\" tone=\"info\" size=\"small\" [count]=\"countOf(it)\" [max]=\"maxCount\" />\n </span>\n }\n @case ('dot') {\n <span class=\"ius-navrail__pop-badge\" aria-hidden=\"true\"></span>\n }\n }\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host{box-sizing:border-box;-webkit-user-select:none;user-select:none;display:flex;flex-direction:column;width:100px;height:100%;background:var(--ius-surface-card);border-right:1px solid var(--ius-stroke);padding:var(--ius-space-sm) var(--ius-space-xs);gap:var(--ius-space-xxs);font-family:var(--ius-font-body)}.ius-navrail__brand{display:flex;justify-content:center;padding:var(--ius-space-xxs) 0 var(--ius-space-md);flex:0 0 auto}.ius-navrail__brand-mark{width:40px;height:40px;border-radius:var(--ius-radius-md);background:var(--_nr-a5, var(--ius-success-500));display:inline-flex;align-items:center;justify-content:center;color:var(--ius-neutral-white);overflow:hidden}button.ius-navrail__brand-mark{appearance:none;border:0;padding:0;cursor:pointer}button.ius-navrail__brand-mark:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-navrail__brand-mark[data-img=true]{background:var(--ius-neutral-1);border:1px solid var(--ius-stroke)}.ius-navrail__brand-mark .ius-icon{font-size:var(--ius-icon-lg)}.ius-navrail__brand-img{width:100%;height:100%;object-fit:contain;display:block}.ius-navrail__items{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:var(--ius-space-xxs);overflow:hidden;position:relative}.ius-navrail__measure{position:absolute;top:0;left:0;right:0;visibility:hidden;pointer-events:none;display:flex;flex-direction:column;gap:var(--ius-space-xxs)}.ius-navrail__footer{flex:0 0 auto;display:flex;flex-direction:column;gap:var(--ius-space-xxs)}.ius-navrail__sep{height:1px;background:var(--ius-stroke);margin:var(--ius-space-xs) var(--ius-space-xs);flex:0 0 auto}.ius-navrail__item{appearance:none;border:0;background:transparent;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:var(--ius-space-xxs);padding:var(--ius-space-xs) var(--ius-space-xxs);border-radius:var(--ius-radius-md);font-family:var(--ius-font-body);color:var(--ius-text-secondary)}.ius-navrail__item:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-navrail__item[data-disabled=true]{cursor:default;opacity:.5;pointer-events:none}.ius-navrail__ic{position:relative;width:56px;height:34px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--ius-radius-md);color:var(--ius-neutral-8);transition:background var(--ius-duration-fast) var(--ius-ease-standard),color var(--ius-duration-fast) var(--ius-ease-standard)}.ius-navrail__ic .ius-icon{font-size:var(--ius-fs-h3);line-height:1}.ius-navrail__label{font-size:var(--ius-fs-sm);line-height:1.15;text-align:center;color:var(--ius-text-secondary);max-width:100%;width:100%;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:break-word;hyphens:none}.ius-navrail__item:hover .ius-navrail__ic{background:var(--ius-neutral-2)}.ius-navrail__item:active .ius-navrail__ic{background:var(--ius-neutral-3)}.ius-navrail__item[data-selected=true] .ius-navrail__ic{background:var(--_nr-tint, color-mix(in srgb, var(--ius-success-500) 16%, white));color:var(--_nr-a6, var(--ius-success-600))}.ius-navrail__item[data-selected=true] .ius-navrail__label{color:var(--_nr-a6, var(--ius-success-600));font-weight:var(--ius-fw-medium, 500)}.ius-navrail__badge{position:absolute;top:3px;right:10px;width:8px;height:8px;border-radius:var(--ius-radius-pill);background:var(--ius-danger-500);box-shadow:0 0 0 2px var(--ius-surface-card)}.ius-navrail__count{position:absolute;top:0;left:50%;margin-left:var(--ius-space-xxs);display:inline-flex;pointer-events:none;border-radius:var(--ius-radius-pill);box-shadow:0 0 0 2px var(--ius-surface-card)}.ius-navrail__pop{display:flex;flex-direction:column;gap:var(--ius-space-xxs);min-width:208px;padding:var(--ius-space-xxs)}.ius-navrail__pop-item{appearance:none;border:0;background:transparent;cursor:pointer;display:flex;align-items:center;gap:var(--ius-space-sm);width:100%;text-align:left;padding:var(--ius-space-xs) var(--ius-space-sm);border-radius:var(--ius-radius-md);font-family:var(--ius-font-body);font-size:var(--ius-fs-base);line-height:1.2;color:var(--ius-text-secondary);text-decoration:none}.ius-navrail__pop-item:hover{background:var(--ius-neutral-2)}.ius-navrail__pop-item:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-navrail__pop-item[data-disabled=true]{cursor:default;opacity:.5;pointer-events:none}.ius-navrail__pop-item[data-selected=true]{background:var(--_nr-tint, color-mix(in srgb, var(--ius-success-500) 16%, white));color:var(--_nr-a6, var(--ius-success-600));font-weight:var(--ius-fw-medium, 500)}.ius-navrail__pop-item .ius-icon{font-size:var(--ius-icon-md);line-height:1;flex:0 0 auto}.ius-navrail__pop-label{flex:1 1 auto;min-width:0}.ius-navrail__pop-badge{flex:0 0 auto;width:8px;height:8px;border-radius:var(--ius-radius-pill);background:var(--ius-danger-500)}.ius-navrail__pop-count{flex:0 0 auto;display:inline-flex}\n"] }]
14299
+ }, template: "<!--\r\n NavRail \u2014 el HOST es el `<nav>` (ver `host:` del .ts), as\u00ED que aqu\u00ED arranca\r\n directamente el contenido: marca \u00B7 lista de \u00EDtems (con \u00ABM\u00E1s\u00BB) \u00B7 pie.\r\n-->\r\n\r\n<!--\r\n Marca. El slot `[iusNavRailBrand]` reemplaza el cuadro por defecto; el\r\n `ng-content` va en un \u00FAnico `@if` (con `@if` anidados la proyecci\u00F3n falla en\r\n silencio).\r\n-->\r\n@if (brand()) {\r\n <div class=\"ius-navrail__brand\">\r\n <ng-content select=\"[iusNavRailBrand]\" />\r\n @if (!brandRef()) {\r\n @if (brandInteractive) {\r\n <button\r\n type=\"button\"\r\n class=\"ius-navrail__brand-mark\"\r\n [attr.data-img]=\"brandSrc() ? 'true' : null\"\r\n aria-label=\"Inicio\"\r\n (click)=\"onBrand($event)\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"marca\" />\r\n </button>\r\n } @else {\r\n <span class=\"ius-navrail__brand-mark\" [attr.data-img]=\"brandSrc() ? 'true' : null\" aria-hidden=\"true\">\r\n <ng-container [ngTemplateOutlet]=\"marca\" />\r\n </span>\r\n }\r\n }\r\n </div>\r\n}\r\n\r\n<!-- Lista: NO scrollea; lo que no cabe en alto pasa a \u00ABM\u00E1s\u00BB (priority+). -->\r\n<div class=\"ius-navrail__items\" #wrap>\r\n @for (it of visibleItems(); track keyOf(it, $index)) {\r\n <ng-container [ngTemplateOutlet]=\"fila\" [ngTemplateOutletContext]=\"{ it: it }\" />\r\n }\r\n\r\n @if (hasOverflow()) {\r\n <ius-popover\r\n [open]=\"moreOpen()\"\r\n trigger=\"click\"\r\n placement=\"right-start\"\r\n [showArrow]=\"false\"\r\n [offset]=\"8\"\r\n [dismissable]=\"true\"\r\n (openChange)=\"moreOpen.set($event)\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"ius-navrail__item\"\r\n [attr.data-selected]=\"anyHiddenSelected() ? 'true' : null\"\r\n [attr.aria-label]=\"overflowLabel() + ' secciones'\"\r\n aria-haspopup=\"menu\"\r\n [attr.aria-expanded]=\"moreOpen() ? 'true' : 'false'\"\r\n >\r\n <span class=\"ius-navrail__ic\">\r\n <span translate=\"no\" class=\"ius-icon\">more_horiz</span>\r\n @if (hasBadges() && anyHiddenSelected()) {\r\n <span class=\"ius-navrail__badge\" aria-hidden=\"true\"></span>\r\n }\r\n </span>\r\n <span class=\"ius-navrail__label\">{{ overflowLabel() }}</span>\r\n </button>\r\n\r\n <!--\r\n Panel del desborde. Se estampa en el overlay del CDK (FUERA del host), as\u00ED\r\n que las variables del acento NO se heredan: se repiten aqu\u00ED, como el golden\r\n repite `accentVars(accent)` en este nodo.\r\n -->\r\n <div\r\n iusPopoverContent\r\n class=\"ius-navrail__pop\"\r\n role=\"menu\"\r\n [style.--_nr-a6]=\"accentA6()\"\r\n [style.--_nr-tint]=\"accentTint()\"\r\n >\r\n @for (it of hiddenItems(); track keyOf(it, $index)) {\r\n @if (it.href) {\r\n <a\r\n class=\"ius-navrail__pop-item\"\r\n role=\"menuitem\"\r\n [href]=\"it.href\"\r\n [attr.data-selected]=\"it.selected ? 'true' : null\"\r\n [attr.data-disabled]=\"it.disabled ? 'true' : null\"\r\n [attr.aria-current]=\"it.selected ? 'page' : null\"\r\n [attr.aria-label]=\"popAria(it)\"\r\n (click)=\"handleFromOverflow(it, $event)\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"filaPop\" [ngTemplateOutletContext]=\"{ it: it }\" />\r\n </a>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"ius-navrail__pop-item\"\r\n role=\"menuitem\"\r\n [disabled]=\"!!it.disabled\"\r\n [attr.data-selected]=\"it.selected ? 'true' : null\"\r\n [attr.data-disabled]=\"it.disabled ? 'true' : null\"\r\n [attr.aria-current]=\"it.selected ? 'page' : null\"\r\n [attr.aria-label]=\"popAria(it)\"\r\n (click)=\"handleFromOverflow(it, $event)\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"filaPop\" [ngTemplateOutletContext]=\"{ it: it }\" />\r\n </button>\r\n }\r\n }\r\n </div>\r\n </ius-popover>\r\n }\r\n\r\n <!--\r\n Contenedor de MEDICI\u00D3N (priority+): clona TODOS los \u00EDtems fuera de vista\r\n (`position: absolute` + `visibility: hidden`: no aporta alto ni entra en el\r\n orden de tabulaci\u00F3n) y de ah\u00ED se leen los `offsetHeight`.\r\n -->\r\n <div class=\"ius-navrail__measure\" #meas aria-hidden=\"true\">\r\n @for (it of items(); track keyOf(it, $index)) {\r\n <ng-container [ngTemplateOutlet]=\"fila\" [ngTemplateOutletContext]=\"{ it: it }\" />\r\n }\r\n </div>\r\n</div>\r\n\r\n@if (footerItems().length) {\r\n <div class=\"ius-navrail__sep\"></div>\r\n <div class=\"ius-navrail__footer\" #foot>\r\n @for (it of footerItems(); track keyOf(it, $index)) {\r\n <ng-container [ngTemplateOutlet]=\"fila\" [ngTemplateOutletContext]=\"{ it: it }\" />\r\n }\r\n </div>\r\n}\r\n\r\n<!-- Cuadro de marca por defecto: isotipo \u203A \u00EDcono. -->\r\n<ng-template #marca>\r\n @if (brandSrc()) {\r\n <img class=\"ius-navrail__brand-img\" [src]=\"brandSrc()\" alt=\"\" />\r\n } @else {\r\n <span translate=\"no\" class=\"ius-icon\">{{ brandIcon() }}</span>\r\n }\r\n</ng-template>\r\n\r\n<!-- UNA sola plantilla de \u00EDtem (riel, pie y medici\u00F3n), como `renderItems` del golden. -->\r\n<ng-template #fila let-raw=\"it\">\r\n @let it = asItem(raw);\r\n @if (it.href) {\r\n <a\r\n class=\"ius-navrail__item\"\r\n [href]=\"it.href\"\r\n [attr.data-selected]=\"it.selected ? 'true' : null\"\r\n [attr.data-disabled]=\"it.disabled ? 'true' : null\"\r\n [attr.aria-current]=\"it.selected ? 'page' : null\"\r\n [attr.aria-label]=\"itemAria(it)\"\r\n (click)=\"handle(it, $event)\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"cuerpo\" [ngTemplateOutletContext]=\"{ it: it }\" />\r\n </a>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"ius-navrail__item\"\r\n [disabled]=\"!!it.disabled\"\r\n [attr.data-selected]=\"it.selected ? 'true' : null\"\r\n [attr.data-disabled]=\"it.disabled ? 'true' : null\"\r\n [attr.aria-current]=\"it.selected ? 'page' : null\"\r\n [attr.aria-label]=\"itemAria(it)\"\r\n (click)=\"handle(it, $event)\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"cuerpo\" [ngTemplateOutletContext]=\"{ it: it }\" />\r\n </button>\r\n }\r\n</ng-template>\r\n\r\n<!-- \u00CDcono (con su badge anclado a la esquina) sobre la etiqueta. -->\r\n<ng-template #cuerpo let-raw=\"it\">\r\n @let it = asItem(raw);\r\n <span class=\"ius-navrail__ic\">\r\n <span translate=\"no\" class=\"ius-icon\">{{ it.icon }}</span>\r\n @switch (badgeKind(it)) {\r\n @case ('count') {\r\n <span class=\"ius-navrail__count\" aria-hidden=\"true\">\r\n <ius-insignia variant=\"count\" tone=\"info\" size=\"small\" [count]=\"countOf(it)\" [max]=\"maxCount\" />\r\n </span>\r\n }\r\n @case ('dot') {\r\n <span class=\"ius-navrail__badge\" aria-hidden=\"true\"></span>\r\n }\r\n }\r\n </span>\r\n <span class=\"ius-navrail__label\">{{ it.label }}</span>\r\n</ng-template>\r\n\r\n<!-- Fila del men\u00FA \u00ABM\u00E1s\u00BB: \u00EDcono \u00B7 etiqueta \u00B7 badge al final. -->\r\n<ng-template #filaPop let-raw=\"it\">\r\n @let it = asItem(raw);\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ it.icon }}</span>\r\n <span class=\"ius-navrail__pop-label\">{{ it.label }}</span>\r\n @switch (badgeKind(it)) {\r\n @case ('count') {\r\n <span class=\"ius-navrail__pop-count\" aria-hidden=\"true\">\r\n <ius-insignia variant=\"count\" tone=\"info\" size=\"small\" [count]=\"countOf(it)\" [max]=\"maxCount\" />\r\n </span>\r\n }\r\n @case ('dot') {\r\n <span class=\"ius-navrail__pop-badge\" aria-hidden=\"true\"></span>\r\n }\r\n }\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";:host{box-sizing:border-box;-webkit-user-select:none;user-select:none;display:flex;flex-direction:column;width:100px;height:100%;background:var(--ius-surface-card);border-right:1px solid var(--ius-stroke);padding:var(--ius-space-sm) var(--ius-space-xs);gap:var(--ius-space-xxs);font-family:var(--ius-font-body)}.ius-navrail__brand{display:flex;justify-content:center;padding:var(--ius-space-xxs) 0 var(--ius-space-md);flex:0 0 auto}.ius-navrail__brand-mark{width:40px;height:40px;border-radius:var(--ius-radius-md);background:var(--_nr-a5, var(--ius-success-500));display:inline-flex;align-items:center;justify-content:center;color:var(--ius-neutral-white);overflow:hidden}button.ius-navrail__brand-mark{appearance:none;border:0;padding:0;cursor:pointer}button.ius-navrail__brand-mark:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-navrail__brand-mark[data-img=true]{background:var(--ius-neutral-1);border:1px solid var(--ius-stroke)}.ius-navrail__brand-mark .ius-icon{font-size:var(--ius-icon-lg)}.ius-navrail__brand-img{width:100%;height:100%;object-fit:contain;display:block}.ius-navrail__items{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:var(--ius-space-xxs);overflow:hidden;position:relative}.ius-navrail__measure{position:absolute;top:0;left:0;right:0;visibility:hidden;pointer-events:none;display:flex;flex-direction:column;gap:var(--ius-space-xxs)}.ius-navrail__footer{flex:0 0 auto;display:flex;flex-direction:column;gap:var(--ius-space-xxs)}.ius-navrail__sep{height:1px;background:var(--ius-stroke);margin:var(--ius-space-xs) var(--ius-space-xs);flex:0 0 auto}.ius-navrail__item{appearance:none;border:0;background:transparent;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:var(--ius-space-xxs);padding:var(--ius-space-xs) var(--ius-space-xxs);border-radius:var(--ius-radius-md);font-family:var(--ius-font-body);color:var(--ius-text-secondary)}.ius-navrail__item:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-navrail__item[data-disabled=true]{cursor:default;opacity:.5;pointer-events:none}.ius-navrail__ic{position:relative;width:56px;height:34px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--ius-radius-md);color:var(--ius-neutral-8);transition:background var(--ius-duration-fast) var(--ius-ease-standard),color var(--ius-duration-fast) var(--ius-ease-standard)}.ius-navrail__ic .ius-icon{font-size:var(--ius-fs-h3);line-height:1}.ius-navrail__label{font-size:var(--ius-fs-sm);line-height:1.15;text-align:center;color:var(--ius-text-secondary);max-width:100%;width:100%;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:break-word;hyphens:none}.ius-navrail__item:hover .ius-navrail__ic{background:var(--ius-neutral-2)}.ius-navrail__item:active .ius-navrail__ic{background:var(--ius-neutral-3)}.ius-navrail__item[data-selected=true] .ius-navrail__ic{background:var(--_nr-tint, color-mix(in srgb, var(--ius-success-500) 16%, white));color:var(--_nr-a6, var(--ius-success-600))}.ius-navrail__item[data-selected=true] .ius-navrail__label{color:var(--_nr-a6, var(--ius-success-600));font-weight:var(--ius-fw-medium, 500)}.ius-navrail__badge{position:absolute;top:3px;right:10px;width:8px;height:8px;border-radius:var(--ius-radius-pill);background:var(--ius-danger-500);box-shadow:0 0 0 2px var(--ius-surface-card)}.ius-navrail__count{position:absolute;top:0;left:50%;margin-left:var(--ius-space-xxs);display:inline-flex;pointer-events:none;border-radius:var(--ius-radius-pill);box-shadow:0 0 0 2px var(--ius-surface-card)}.ius-navrail__pop{display:flex;flex-direction:column;gap:var(--ius-space-xxs);min-width:208px;padding:var(--ius-space-xxs)}.ius-navrail__pop-item{appearance:none;border:0;background:transparent;cursor:pointer;display:flex;align-items:center;gap:var(--ius-space-sm);width:100%;text-align:left;padding:var(--ius-space-xs) var(--ius-space-sm);border-radius:var(--ius-radius-md);font-family:var(--ius-font-body);font-size:var(--ius-fs-base);line-height:1.2;color:var(--ius-text-secondary);text-decoration:none}.ius-navrail__pop-item:hover{background:var(--ius-neutral-2)}.ius-navrail__pop-item:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-navrail__pop-item[data-disabled=true]{cursor:default;opacity:.5;pointer-events:none}.ius-navrail__pop-item[data-selected=true]{background:var(--_nr-tint, color-mix(in srgb, var(--ius-success-500) 16%, white));color:var(--_nr-a6, var(--ius-success-600));font-weight:var(--ius-fw-medium, 500)}.ius-navrail__pop-item .ius-icon{font-size:var(--ius-icon-md);line-height:1;flex:0 0 auto}.ius-navrail__pop-label{flex:1 1 auto;min-width:0}.ius-navrail__pop-badge{flex:0 0 auto;width:8px;height:8px;border-radius:var(--ius-radius-pill);background:var(--ius-danger-500)}.ius-navrail__pop-count{flex:0 0 auto;display:inline-flex}\n"] }]
14195
14300
  }], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], footerItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerItems", required: false }] }], brand: [{ type: i0.Input, args: [{ isSignal: true, alias: "brand", required: false }] }], brandIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "brandIcon", required: false }] }], brandSrc: [{ type: i0.Input, args: [{ isSignal: true, alias: "brandSrc", required: false }] }], accent: [{ type: i0.Input, args: [{ isSignal: true, alias: "accent", required: false }] }], hasBadges: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasBadges", required: false }] }], overflowLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "overflowLabel", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], brandClick: [{
14196
14301
  type: Output
14197
14302
  }], brandRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => IusNavRailBrandDirective), { isSignal: true }] }], wrapRef: [{ type: i0.ViewChild, args: ['wrap', { isSignal: true }] }], measRef: [{ type: i0.ViewChild, args: ['meas', { isSignal: true }] }], footRef: [{ type: i0.ViewChild, args: ['foot', { isSignal: true }] }] } });
@@ -16399,6 +16504,12 @@ class PageHeaderComponent {
16399
16504
  /** Texto accesible de la flecha de volver. */
16400
16505
  this.backLabel = input('Volver', /* @ts-ignore */
16401
16506
  ...(ngDevMode ? [{ debugName: "backLabel" }] : /* istanbul ignore next */ []));
16507
+ /**
16508
+ * Flecha de volver desactivada en su sitio (`ius-icon-button` disabled): no se
16509
+ * mueve ni desaparece y no emite `back`. Caso: asistente cuyo botón final
16510
+ * espera (`api.finishing` / `finishingChange` de `ius-wizard-nav`).
16511
+ */
16512
+ this.backDisabled = input(false, { ...(ngDevMode ? { debugName: "backDisabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
16402
16513
  /** Separador inferior. */
16403
16514
  this.divider = input(false, { ...(ngDevMode ? { debugName: "divider" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
16404
16515
  /** Fondo blanco + borde + radio. */
@@ -16437,7 +16548,7 @@ class PageHeaderComponent {
16437
16548
  ...(ngDevMode ? [{ debugName: "backInBreadcrumb" }] : /* istanbul ignore next */ []));
16438
16549
  }
16439
16550
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: PageHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
16440
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: PageHeaderComponent, isStandalone: true, selector: "ius-page-header", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, overline: { classPropertyName: "overline", publicName: "overline", isSignal: true, isRequired: false, transformFunction: null }, titleLevel: { classPropertyName: "titleLevel", publicName: "titleLevel", isSignal: true, isRequired: false, transformFunction: null }, density: { classPropertyName: "density", publicName: "density", isSignal: true, isRequired: false, transformFunction: null }, showBack: { classPropertyName: "showBack", publicName: "showBack", isSignal: true, isRequired: false, transformFunction: null }, backLabel: { classPropertyName: "backLabel", publicName: "backLabel", isSignal: true, isRequired: false, transformFunction: null }, divider: { classPropertyName: "divider", publicName: "divider", isSignal: true, isRequired: false, transformFunction: null }, surface: { classPropertyName: "surface", publicName: "surface", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { back: "back" }, host: { properties: { "attr.data-divider": "divider() ? 'true' : null", "attr.data-surface": "surface() ? 'true' : null", "attr.data-density": "density() === 'compact' ? 'compact' : null" }, classAttribute: "ius-pageheader" }, queries: [{ propertyName: "breadcrumbRef", first: true, predicate: IusPageHeaderBreadcrumbDirective, descendants: true, isSignal: true }, { propertyName: "actionsRef", first: true, predicate: IusPageHeaderActionsDirective, descendants: true, isSignal: true }, { propertyName: "toolbarRef", first: true, predicate: IusPageHeaderToolbarDirective, descendants: true, isSignal: true }, { propertyName: "overlineRef", first: true, predicate: IusPageHeaderOverlineDirective, descendants: true, isSignal: true }, { propertyName: "titleRef", first: true, predicate: IusPageHeaderTitleDirective, descendants: true, isSignal: true }, { propertyName: "subtitleRef", first: true, predicate: IusPageHeaderSubtitleDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Fila de breadcrumb (solo detalle); volver la encabeza si existe -->\r\n@if (hasBreadcrumb()) {\r\n <div class=\"ius-pageheader__bc\">\r\n @if (backInBreadcrumb()) {\r\n <span class=\"ius-pageheader__back\">\r\n <ius-icon-button\r\n icon=\"arrow_back\"\r\n variant=\"tertiary\"\r\n size=\"small\"\r\n [ariaLabel]=\"backLabel()\"\r\n (clicked)=\"back.emit($event)\"\r\n />\r\n </span>\r\n }\r\n <ng-content select=\"[iusPageHeaderBreadcrumb]\" />\r\n </div>\r\n}\r\n\r\n<div class=\"ius-pageheader__top\">\r\n <div class=\"ius-pageheader__lead\">\r\n @if (showBack() && !backInBreadcrumb()) {\r\n <span class=\"ius-pageheader__back\">\r\n <ius-icon-button\r\n icon=\"arrow_back\"\r\n variant=\"tertiary\"\r\n size=\"small\"\r\n [ariaLabel]=\"backLabel()\"\r\n (clicked)=\"back.emit($event)\"\r\n />\r\n </span>\r\n }\r\n <div class=\"ius-pageheader__titles\">\r\n <!-- Cada pieza: input de texto \u203A contenido proyectado con su directiva -->\r\n @if (overline() != null || hasOverlineSlot()) {\r\n <span class=\"ius-pageheader__overline\">\r\n @if (overline() != null) {\r\n {{ overline() }}\r\n } @else {\r\n <ng-content select=\"[iusPageHeaderOverline]\" />\r\n }\r\n </span>\r\n }\r\n @if (title() != null || hasTitleSlot()) {\r\n <h1 class=\"ius-pageheader__title\" [class]=\"'ius-' + titleLevelEfectivo()\">\r\n @if (title() != null) {\r\n {{ title() }}\r\n } @else {\r\n <ng-content select=\"[iusPageHeaderTitle]\" />\r\n }\r\n </h1>\r\n }\r\n @if (subtitle() != null || hasSubtitleSlot()) {\r\n <p class=\"ius-pageheader__subtitle\">\r\n @if (subtitle() != null) {\r\n {{ subtitle() }}\r\n } @else {\r\n <ng-content select=\"[iusPageHeaderSubtitle]\" />\r\n }\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n @if (hasActions()) {\r\n <div class=\"ius-pageheader__actions\"><ng-content select=\"[iusPageHeaderActions]\" /></div>\r\n }\r\n</div>\r\n\r\n@if (hasToolbar()) {\r\n <div class=\"ius-pageheader__toolbar\"><ng-content select=\"[iusPageHeaderToolbar]\" /></div>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:flex;flex-direction:column;gap:var(--ius-space-xs)}:host([data-surface=true]){background:var(--ius-surface-card);border:1px solid var(--ius-stroke);border-radius:var(--ius-radius-lg);padding:var(--ius-space-md) var(--ius-space-lg)}:host([data-divider=true]){border-bottom:1px solid var(--ius-stroke);padding-bottom:var(--ius-space-sm)}.ius-pageheader__bc{min-width:0;display:flex;align-items:center;gap:var(--ius-space-xs)}.ius-pageheader__bc .ius-pageheader__back{margin-top:0}.ius-pageheader__top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--ius-space-lg)}.ius-pageheader__lead{display:flex;align-items:flex-start;gap:var(--ius-space-sm);min-width:0}.ius-pageheader__back{flex:0 0 auto}.ius-pageheader__titles{min-width:0;display:flex;flex-direction:column;gap:var(--ius-space-xxs)}.ius-pageheader__overline{font-family:var(--ius-font-display);font-size:var(--ius-fs-sm);font-weight:var(--ius-fw-medium);line-height:var(--ius-lh-sm);letter-spacing:var(--ius-ls-emphasis);text-transform:uppercase;color:var(--ius-text-tertiary)}.ius-pageheader__title{margin:0}.ius-pageheader__subtitle{margin:0;font-family:var(--ius-font-body);font-size:var(--ius-fs-base);line-height:var(--ius-lh-base);color:var(--ius-text-secondary)}.ius-pageheader__actions{flex:0 0 auto;display:inline-flex;align-items:center;gap:var(--ius-space-sm)}.ius-pageheader__toolbar{display:flex;align-items:center;gap:var(--ius-space-sm);flex-wrap:wrap}:host([data-density=compact]){--ius-control-size: small;gap:0}:host([data-density=compact]) .ius-pageheader__bc{line-height:var(--ius-lh-sm)}:host([data-density=compact]) .ius-pageheader__top{align-items:center;gap:var(--ius-space-sm)}:host([data-density=compact]) .ius-pageheader__lead{align-items:center;gap:var(--ius-space-xs)}:host([data-density=compact]) .ius-pageheader__titles{gap:0}:host([data-density=compact]) .ius-pageheader__overline{font-size:var(--ius-fs-sm);line-height:var(--ius-lh-sm)}:host([data-density=compact]) .ius-pageheader__subtitle{font-size:var(--ius-fs-sm);line-height:var(--ius-lh-sm);color:var(--ius-text-tertiary)}:host([data-density=compact][data-surface=true]){padding:var(--ius-space-xs) var(--ius-space-md)}:host([data-density=compact][data-divider=true]){padding-bottom:var(--ius-space-xs)}\n"], dependencies: [{ kind: "component", type: IconButtonComponent, selector: "ius-icon-button", inputs: ["icon", "variant", "size", "shape", "disabled", "type", "ariaLabel", "tooltip", "ariaPressed", "ariaExpanded", "ariaControls", "tooltipPlacement"], outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
16551
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: PageHeaderComponent, isStandalone: true, selector: "ius-page-header", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, overline: { classPropertyName: "overline", publicName: "overline", isSignal: true, isRequired: false, transformFunction: null }, titleLevel: { classPropertyName: "titleLevel", publicName: "titleLevel", isSignal: true, isRequired: false, transformFunction: null }, density: { classPropertyName: "density", publicName: "density", isSignal: true, isRequired: false, transformFunction: null }, showBack: { classPropertyName: "showBack", publicName: "showBack", isSignal: true, isRequired: false, transformFunction: null }, backLabel: { classPropertyName: "backLabel", publicName: "backLabel", isSignal: true, isRequired: false, transformFunction: null }, backDisabled: { classPropertyName: "backDisabled", publicName: "backDisabled", isSignal: true, isRequired: false, transformFunction: null }, divider: { classPropertyName: "divider", publicName: "divider", isSignal: true, isRequired: false, transformFunction: null }, surface: { classPropertyName: "surface", publicName: "surface", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { back: "back" }, host: { properties: { "attr.data-divider": "divider() ? 'true' : null", "attr.data-surface": "surface() ? 'true' : null", "attr.data-density": "density() === 'compact' ? 'compact' : null" }, classAttribute: "ius-pageheader" }, queries: [{ propertyName: "breadcrumbRef", first: true, predicate: IusPageHeaderBreadcrumbDirective, descendants: true, isSignal: true }, { propertyName: "actionsRef", first: true, predicate: IusPageHeaderActionsDirective, descendants: true, isSignal: true }, { propertyName: "toolbarRef", first: true, predicate: IusPageHeaderToolbarDirective, descendants: true, isSignal: true }, { propertyName: "overlineRef", first: true, predicate: IusPageHeaderOverlineDirective, descendants: true, isSignal: true }, { propertyName: "titleRef", first: true, predicate: IusPageHeaderTitleDirective, descendants: true, isSignal: true }, { propertyName: "subtitleRef", first: true, predicate: IusPageHeaderSubtitleDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Fila de breadcrumb (solo detalle); volver la encabeza si existe -->\r\n@if (hasBreadcrumb()) {\r\n <div class=\"ius-pageheader__bc\">\r\n @if (backInBreadcrumb()) {\r\n <span class=\"ius-pageheader__back\">\r\n <ius-icon-button\r\n icon=\"arrow_back\"\r\n variant=\"tertiary\"\r\n size=\"small\"\r\n [ariaLabel]=\"backLabel()\"\r\n [disabled]=\"backDisabled()\"\r\n (clicked)=\"back.emit($event)\"\r\n />\r\n </span>\r\n }\r\n <ng-content select=\"[iusPageHeaderBreadcrumb]\" />\r\n </div>\r\n}\r\n\r\n<div class=\"ius-pageheader__top\">\r\n <div class=\"ius-pageheader__lead\">\r\n @if (showBack() && !backInBreadcrumb()) {\r\n <span class=\"ius-pageheader__back\">\r\n <ius-icon-button\r\n icon=\"arrow_back\"\r\n variant=\"tertiary\"\r\n size=\"small\"\r\n [ariaLabel]=\"backLabel()\"\r\n [disabled]=\"backDisabled()\"\r\n (clicked)=\"back.emit($event)\"\r\n />\r\n </span>\r\n }\r\n <div class=\"ius-pageheader__titles\">\r\n <!-- Cada pieza: input de texto \u203A contenido proyectado con su directiva -->\r\n @if (overline() != null || hasOverlineSlot()) {\r\n <span class=\"ius-pageheader__overline\">\r\n @if (overline() != null) {\r\n {{ overline() }}\r\n } @else {\r\n <ng-content select=\"[iusPageHeaderOverline]\" />\r\n }\r\n </span>\r\n }\r\n @if (title() != null || hasTitleSlot()) {\r\n <h1 class=\"ius-pageheader__title\" [class]=\"'ius-' + titleLevelEfectivo()\">\r\n @if (title() != null) {\r\n {{ title() }}\r\n } @else {\r\n <ng-content select=\"[iusPageHeaderTitle]\" />\r\n }\r\n </h1>\r\n }\r\n @if (subtitle() != null || hasSubtitleSlot()) {\r\n <p class=\"ius-pageheader__subtitle\">\r\n @if (subtitle() != null) {\r\n {{ subtitle() }}\r\n } @else {\r\n <ng-content select=\"[iusPageHeaderSubtitle]\" />\r\n }\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n @if (hasActions()) {\r\n <div class=\"ius-pageheader__actions\"><ng-content select=\"[iusPageHeaderActions]\" /></div>\r\n }\r\n</div>\r\n\r\n@if (hasToolbar()) {\r\n <div class=\"ius-pageheader__toolbar\"><ng-content select=\"[iusPageHeaderToolbar]\" /></div>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:flex;flex-direction:column;gap:var(--ius-space-xs)}:host([data-surface=true]){background:var(--ius-surface-card);border:1px solid var(--ius-stroke);border-radius:var(--ius-radius-lg);padding:var(--ius-space-md) var(--ius-space-lg)}:host([data-divider=true]){border-bottom:1px solid var(--ius-stroke);padding-bottom:var(--ius-space-sm)}.ius-pageheader__bc{min-width:0;display:flex;align-items:center;gap:var(--ius-space-xs)}.ius-pageheader__bc .ius-pageheader__back{margin-top:0}.ius-pageheader__top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--ius-space-lg)}.ius-pageheader__lead{display:flex;align-items:flex-start;gap:var(--ius-space-sm);min-width:0}.ius-pageheader__back{flex:0 0 auto}.ius-pageheader__titles{min-width:0;display:flex;flex-direction:column;gap:var(--ius-space-xxs)}.ius-pageheader__overline{font-family:var(--ius-font-display);font-size:var(--ius-fs-sm);font-weight:var(--ius-fw-medium);line-height:var(--ius-lh-sm);letter-spacing:var(--ius-ls-emphasis);text-transform:uppercase;color:var(--ius-text-tertiary)}.ius-pageheader__title{margin:0}.ius-pageheader__subtitle{margin:0;font-family:var(--ius-font-body);font-size:var(--ius-fs-base);line-height:var(--ius-lh-base);color:var(--ius-text-secondary)}.ius-pageheader__actions{flex:0 0 auto;display:inline-flex;align-items:center;gap:var(--ius-space-sm)}.ius-pageheader__toolbar{display:flex;align-items:center;gap:var(--ius-space-sm);flex-wrap:wrap}:host([data-density=compact]){--ius-control-size: small;gap:0}:host([data-density=compact]) .ius-pageheader__bc{line-height:var(--ius-lh-sm)}:host([data-density=compact]) .ius-pageheader__top{align-items:center;gap:var(--ius-space-sm)}:host([data-density=compact]) .ius-pageheader__lead{align-items:center;gap:var(--ius-space-xs)}:host([data-density=compact]) .ius-pageheader__titles{gap:0}:host([data-density=compact]) .ius-pageheader__overline{font-size:var(--ius-fs-sm);line-height:var(--ius-lh-sm)}:host([data-density=compact]) .ius-pageheader__subtitle{font-size:var(--ius-fs-sm);line-height:var(--ius-lh-sm);color:var(--ius-text-tertiary)}:host([data-density=compact][data-surface=true]){padding:var(--ius-space-xs) var(--ius-space-md)}:host([data-density=compact][data-divider=true]){padding-bottom:var(--ius-space-xs)}\n"], dependencies: [{ kind: "component", type: IconButtonComponent, selector: "ius-icon-button", inputs: ["icon", "variant", "size", "shape", "disabled", "type", "ariaLabel", "tooltip", "ariaPressed", "ariaExpanded", "ariaControls", "tooltipPlacement"], outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
16441
16552
  }
16442
16553
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: PageHeaderComponent, decorators: [{
16443
16554
  type: Component,
@@ -16446,8 +16557,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
16446
16557
  '[attr.data-divider]': "divider() ? 'true' : null",
16447
16558
  '[attr.data-surface]': "surface() ? 'true' : null",
16448
16559
  '[attr.data-density]': "density() === 'compact' ? 'compact' : null",
16449
- }, template: "<!-- Fila de breadcrumb (solo detalle); volver la encabeza si existe -->\r\n@if (hasBreadcrumb()) {\r\n <div class=\"ius-pageheader__bc\">\r\n @if (backInBreadcrumb()) {\r\n <span class=\"ius-pageheader__back\">\r\n <ius-icon-button\r\n icon=\"arrow_back\"\r\n variant=\"tertiary\"\r\n size=\"small\"\r\n [ariaLabel]=\"backLabel()\"\r\n (clicked)=\"back.emit($event)\"\r\n />\r\n </span>\r\n }\r\n <ng-content select=\"[iusPageHeaderBreadcrumb]\" />\r\n </div>\r\n}\r\n\r\n<div class=\"ius-pageheader__top\">\r\n <div class=\"ius-pageheader__lead\">\r\n @if (showBack() && !backInBreadcrumb()) {\r\n <span class=\"ius-pageheader__back\">\r\n <ius-icon-button\r\n icon=\"arrow_back\"\r\n variant=\"tertiary\"\r\n size=\"small\"\r\n [ariaLabel]=\"backLabel()\"\r\n (clicked)=\"back.emit($event)\"\r\n />\r\n </span>\r\n }\r\n <div class=\"ius-pageheader__titles\">\r\n <!-- Cada pieza: input de texto \u203A contenido proyectado con su directiva -->\r\n @if (overline() != null || hasOverlineSlot()) {\r\n <span class=\"ius-pageheader__overline\">\r\n @if (overline() != null) {\r\n {{ overline() }}\r\n } @else {\r\n <ng-content select=\"[iusPageHeaderOverline]\" />\r\n }\r\n </span>\r\n }\r\n @if (title() != null || hasTitleSlot()) {\r\n <h1 class=\"ius-pageheader__title\" [class]=\"'ius-' + titleLevelEfectivo()\">\r\n @if (title() != null) {\r\n {{ title() }}\r\n } @else {\r\n <ng-content select=\"[iusPageHeaderTitle]\" />\r\n }\r\n </h1>\r\n }\r\n @if (subtitle() != null || hasSubtitleSlot()) {\r\n <p class=\"ius-pageheader__subtitle\">\r\n @if (subtitle() != null) {\r\n {{ subtitle() }}\r\n } @else {\r\n <ng-content select=\"[iusPageHeaderSubtitle]\" />\r\n }\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n @if (hasActions()) {\r\n <div class=\"ius-pageheader__actions\"><ng-content select=\"[iusPageHeaderActions]\" /></div>\r\n }\r\n</div>\r\n\r\n@if (hasToolbar()) {\r\n <div class=\"ius-pageheader__toolbar\"><ng-content select=\"[iusPageHeaderToolbar]\" /></div>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:flex;flex-direction:column;gap:var(--ius-space-xs)}:host([data-surface=true]){background:var(--ius-surface-card);border:1px solid var(--ius-stroke);border-radius:var(--ius-radius-lg);padding:var(--ius-space-md) var(--ius-space-lg)}:host([data-divider=true]){border-bottom:1px solid var(--ius-stroke);padding-bottom:var(--ius-space-sm)}.ius-pageheader__bc{min-width:0;display:flex;align-items:center;gap:var(--ius-space-xs)}.ius-pageheader__bc .ius-pageheader__back{margin-top:0}.ius-pageheader__top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--ius-space-lg)}.ius-pageheader__lead{display:flex;align-items:flex-start;gap:var(--ius-space-sm);min-width:0}.ius-pageheader__back{flex:0 0 auto}.ius-pageheader__titles{min-width:0;display:flex;flex-direction:column;gap:var(--ius-space-xxs)}.ius-pageheader__overline{font-family:var(--ius-font-display);font-size:var(--ius-fs-sm);font-weight:var(--ius-fw-medium);line-height:var(--ius-lh-sm);letter-spacing:var(--ius-ls-emphasis);text-transform:uppercase;color:var(--ius-text-tertiary)}.ius-pageheader__title{margin:0}.ius-pageheader__subtitle{margin:0;font-family:var(--ius-font-body);font-size:var(--ius-fs-base);line-height:var(--ius-lh-base);color:var(--ius-text-secondary)}.ius-pageheader__actions{flex:0 0 auto;display:inline-flex;align-items:center;gap:var(--ius-space-sm)}.ius-pageheader__toolbar{display:flex;align-items:center;gap:var(--ius-space-sm);flex-wrap:wrap}:host([data-density=compact]){--ius-control-size: small;gap:0}:host([data-density=compact]) .ius-pageheader__bc{line-height:var(--ius-lh-sm)}:host([data-density=compact]) .ius-pageheader__top{align-items:center;gap:var(--ius-space-sm)}:host([data-density=compact]) .ius-pageheader__lead{align-items:center;gap:var(--ius-space-xs)}:host([data-density=compact]) .ius-pageheader__titles{gap:0}:host([data-density=compact]) .ius-pageheader__overline{font-size:var(--ius-fs-sm);line-height:var(--ius-lh-sm)}:host([data-density=compact]) .ius-pageheader__subtitle{font-size:var(--ius-fs-sm);line-height:var(--ius-lh-sm);color:var(--ius-text-tertiary)}:host([data-density=compact][data-surface=true]){padding:var(--ius-space-xs) var(--ius-space-md)}:host([data-density=compact][data-divider=true]){padding-bottom:var(--ius-space-xs)}\n"] }]
16450
- }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], overline: [{ type: i0.Input, args: [{ isSignal: true, alias: "overline", required: false }] }], titleLevel: [{ type: i0.Input, args: [{ isSignal: true, alias: "titleLevel", required: false }] }], density: [{ type: i0.Input, args: [{ isSignal: true, alias: "density", required: false }] }], showBack: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBack", required: false }] }], backLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "backLabel", required: false }] }], divider: [{ type: i0.Input, args: [{ isSignal: true, alias: "divider", required: false }] }], surface: [{ type: i0.Input, args: [{ isSignal: true, alias: "surface", required: false }] }], back: [{ type: i0.Output, args: ["back"] }], breadcrumbRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => IusPageHeaderBreadcrumbDirective), { isSignal: true }] }], actionsRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => IusPageHeaderActionsDirective), { isSignal: true }] }], toolbarRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => IusPageHeaderToolbarDirective), { isSignal: true }] }], overlineRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => IusPageHeaderOverlineDirective), { isSignal: true }] }], titleRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => IusPageHeaderTitleDirective), { isSignal: true }] }], subtitleRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => IusPageHeaderSubtitleDirective), { isSignal: true }] }] } });
16560
+ }, template: "<!-- Fila de breadcrumb (solo detalle); volver la encabeza si existe -->\r\n@if (hasBreadcrumb()) {\r\n <div class=\"ius-pageheader__bc\">\r\n @if (backInBreadcrumb()) {\r\n <span class=\"ius-pageheader__back\">\r\n <ius-icon-button\r\n icon=\"arrow_back\"\r\n variant=\"tertiary\"\r\n size=\"small\"\r\n [ariaLabel]=\"backLabel()\"\r\n [disabled]=\"backDisabled()\"\r\n (clicked)=\"back.emit($event)\"\r\n />\r\n </span>\r\n }\r\n <ng-content select=\"[iusPageHeaderBreadcrumb]\" />\r\n </div>\r\n}\r\n\r\n<div class=\"ius-pageheader__top\">\r\n <div class=\"ius-pageheader__lead\">\r\n @if (showBack() && !backInBreadcrumb()) {\r\n <span class=\"ius-pageheader__back\">\r\n <ius-icon-button\r\n icon=\"arrow_back\"\r\n variant=\"tertiary\"\r\n size=\"small\"\r\n [ariaLabel]=\"backLabel()\"\r\n [disabled]=\"backDisabled()\"\r\n (clicked)=\"back.emit($event)\"\r\n />\r\n </span>\r\n }\r\n <div class=\"ius-pageheader__titles\">\r\n <!-- Cada pieza: input de texto \u203A contenido proyectado con su directiva -->\r\n @if (overline() != null || hasOverlineSlot()) {\r\n <span class=\"ius-pageheader__overline\">\r\n @if (overline() != null) {\r\n {{ overline() }}\r\n } @else {\r\n <ng-content select=\"[iusPageHeaderOverline]\" />\r\n }\r\n </span>\r\n }\r\n @if (title() != null || hasTitleSlot()) {\r\n <h1 class=\"ius-pageheader__title\" [class]=\"'ius-' + titleLevelEfectivo()\">\r\n @if (title() != null) {\r\n {{ title() }}\r\n } @else {\r\n <ng-content select=\"[iusPageHeaderTitle]\" />\r\n }\r\n </h1>\r\n }\r\n @if (subtitle() != null || hasSubtitleSlot()) {\r\n <p class=\"ius-pageheader__subtitle\">\r\n @if (subtitle() != null) {\r\n {{ subtitle() }}\r\n } @else {\r\n <ng-content select=\"[iusPageHeaderSubtitle]\" />\r\n }\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n @if (hasActions()) {\r\n <div class=\"ius-pageheader__actions\"><ng-content select=\"[iusPageHeaderActions]\" /></div>\r\n }\r\n</div>\r\n\r\n@if (hasToolbar()) {\r\n <div class=\"ius-pageheader__toolbar\"><ng-content select=\"[iusPageHeaderToolbar]\" /></div>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:flex;flex-direction:column;gap:var(--ius-space-xs)}:host([data-surface=true]){background:var(--ius-surface-card);border:1px solid var(--ius-stroke);border-radius:var(--ius-radius-lg);padding:var(--ius-space-md) var(--ius-space-lg)}:host([data-divider=true]){border-bottom:1px solid var(--ius-stroke);padding-bottom:var(--ius-space-sm)}.ius-pageheader__bc{min-width:0;display:flex;align-items:center;gap:var(--ius-space-xs)}.ius-pageheader__bc .ius-pageheader__back{margin-top:0}.ius-pageheader__top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--ius-space-lg)}.ius-pageheader__lead{display:flex;align-items:flex-start;gap:var(--ius-space-sm);min-width:0}.ius-pageheader__back{flex:0 0 auto}.ius-pageheader__titles{min-width:0;display:flex;flex-direction:column;gap:var(--ius-space-xxs)}.ius-pageheader__overline{font-family:var(--ius-font-display);font-size:var(--ius-fs-sm);font-weight:var(--ius-fw-medium);line-height:var(--ius-lh-sm);letter-spacing:var(--ius-ls-emphasis);text-transform:uppercase;color:var(--ius-text-tertiary)}.ius-pageheader__title{margin:0}.ius-pageheader__subtitle{margin:0;font-family:var(--ius-font-body);font-size:var(--ius-fs-base);line-height:var(--ius-lh-base);color:var(--ius-text-secondary)}.ius-pageheader__actions{flex:0 0 auto;display:inline-flex;align-items:center;gap:var(--ius-space-sm)}.ius-pageheader__toolbar{display:flex;align-items:center;gap:var(--ius-space-sm);flex-wrap:wrap}:host([data-density=compact]){--ius-control-size: small;gap:0}:host([data-density=compact]) .ius-pageheader__bc{line-height:var(--ius-lh-sm)}:host([data-density=compact]) .ius-pageheader__top{align-items:center;gap:var(--ius-space-sm)}:host([data-density=compact]) .ius-pageheader__lead{align-items:center;gap:var(--ius-space-xs)}:host([data-density=compact]) .ius-pageheader__titles{gap:0}:host([data-density=compact]) .ius-pageheader__overline{font-size:var(--ius-fs-sm);line-height:var(--ius-lh-sm)}:host([data-density=compact]) .ius-pageheader__subtitle{font-size:var(--ius-fs-sm);line-height:var(--ius-lh-sm);color:var(--ius-text-tertiary)}:host([data-density=compact][data-surface=true]){padding:var(--ius-space-xs) var(--ius-space-md)}:host([data-density=compact][data-divider=true]){padding-bottom:var(--ius-space-xs)}\n"] }]
16561
+ }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], overline: [{ type: i0.Input, args: [{ isSignal: true, alias: "overline", required: false }] }], titleLevel: [{ type: i0.Input, args: [{ isSignal: true, alias: "titleLevel", required: false }] }], density: [{ type: i0.Input, args: [{ isSignal: true, alias: "density", required: false }] }], showBack: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBack", required: false }] }], backLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "backLabel", required: false }] }], backDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "backDisabled", required: false }] }], divider: [{ type: i0.Input, args: [{ isSignal: true, alias: "divider", required: false }] }], surface: [{ type: i0.Input, args: [{ isSignal: true, alias: "surface", required: false }] }], back: [{ type: i0.Output, args: ["back"] }], breadcrumbRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => IusPageHeaderBreadcrumbDirective), { isSignal: true }] }], actionsRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => IusPageHeaderActionsDirective), { isSignal: true }] }], toolbarRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => IusPageHeaderToolbarDirective), { isSignal: true }] }], overlineRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => IusPageHeaderOverlineDirective), { isSignal: true }] }], titleRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => IusPageHeaderTitleDirective), { isSignal: true }] }], subtitleRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => IusPageHeaderSubtitleDirective), { isSignal: true }] }] } });
16451
16562
 
16452
16563
  let uid$a = 0;
16453
16564
  /** `min`/`max`/`step` llegan como número o como atributo de texto; vacío = sin valor.
@@ -17114,15 +17225,17 @@ class BreadcrumbComponent {
17114
17225
  this.navigate.emit({ item, index, event });
17115
17226
  }
17116
17227
  onHidden(item, index, event) {
17228
+ if (item.disabled)
17229
+ return;
17117
17230
  this.navigate.emit({ item, index, event });
17118
17231
  this.moreOpen.set(false);
17119
17232
  }
17120
17233
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: BreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
17121
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: BreadcrumbComponent, isStandalone: true, selector: "ius-breadcrumb", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, maxItems: { classPropertyName: "maxItems", publicName: "maxItems", isSignal: true, isRequired: false, transformFunction: null }, itemsBeforeCollapse: { classPropertyName: "itemsBeforeCollapse", publicName: "itemsBeforeCollapse", isSignal: true, isRequired: false, transformFunction: null }, itemsAfterCollapse: { classPropertyName: "itemsAfterCollapse", publicName: "itemsAfterCollapse", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { navigate: "navigate" }, ngImport: i0, template: "<nav [attr.aria-label]=\"ariaLabel()\">\r\n <ol class=\"ius-bc\" [attr.data-size]=\"size() !== 'medium' ? size() : null\">\r\n @for (entry of rendered(); track $index; let i = $index) {\r\n @if (i > 0) {\r\n <li class=\"ius-bc__item\" aria-hidden=\"true\">\r\n @if (separator() === 'slash') {\r\n <span class=\"ius-bc__sep ius-bc__sep--slash\">/</span>\r\n } @else {\r\n <span class=\"ius-bc__sep\"><span translate=\"no\" class=\"ius-icon\">chevron_right</span></span>\r\n }\r\n </li>\r\n }\r\n\r\n @if (entry.kind === 'more') {\r\n <li class=\"ius-bc__item\">\r\n <ius-popover\r\n placement=\"bottom\"\r\n trigger=\"click\"\r\n [showArrow]=\"true\"\r\n padding=\"compact\"\r\n [open]=\"moreOpen()\"\r\n (openChange)=\"moreOpen.set($event)\"\r\n >\r\n <button type=\"button\" class=\"ius-bc__more\" aria-label=\"Mostrar ruta oculta\">\r\n <span translate=\"no\" class=\"ius-icon\">more_horiz</span>\r\n </button>\r\n <div iusPopoverContent class=\"ius-bc__menu\">\r\n @for (h of entry.hidden; track h.index) {\r\n <button type=\"button\" class=\"ius-bc__menu-item\" (click)=\"onHidden(h.item, h.index, $event)\">\r\n @if (h.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ h.item.icon }}</span>\r\n }\r\n <span>{{ h.item.label }}</span>\r\n </button>\r\n }\r\n </div>\r\n </ius-popover>\r\n </li>\r\n } @else {\r\n <li class=\"ius-bc__item\">\r\n @if (isCurrent(entry.index)) {\r\n <span class=\"ius-bc__crumb\" aria-current=\"page\">\r\n @if (entry.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ entry.item.icon }}</span>\r\n }\r\n <span class=\"ius-bc__label\">{{ entry.item.label }}</span>\r\n </span>\r\n } @else if (entry.item.href) {\r\n <a class=\"ius-bc__crumb\" [href]=\"entry.item.href\" (click)=\"onCrumb(entry.item, entry.index, $event)\">\r\n @if (entry.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ entry.item.icon }}</span>\r\n }\r\n <span class=\"ius-bc__label\">{{ entry.item.label }}</span>\r\n </a>\r\n } @else {\r\n <button type=\"button\" class=\"ius-bc__crumb\" (click)=\"onCrumb(entry.item, entry.index, $event)\">\r\n @if (entry.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ entry.item.icon }}</span>\r\n }\r\n <span class=\"ius-bc__label\">{{ entry.item.label }}</span>\r\n </button>\r\n }\r\n </li>\r\n }\r\n }\r\n </ol>\r\n</nav>\r\n", styles: ["@charset \"UTF-8\";:host{display:block}.ius-bc{-webkit-user-select:none;user-select:none;--_bc-fs: var(--ius-fs-base);--_bc-lh: var(--ius-lh-base);--_bc-icon: var(--ius-icon-sm);--_bc-gap: var(--ius-space-xs);display:flex;align-items:center;flex-wrap:wrap;font-family:var(--ius-font-body);margin:0;padding:0;list-style:none}.ius-bc[data-size=small]{--_bc-fs: var(--ius-fs-sm);--_bc-lh: var(--ius-lh-sm);--_bc-icon: var(--ius-icon-sm);--_bc-gap: var(--ius-space-xxs)}.ius-bc__item{display:inline-flex;align-items:center}.ius-bc__crumb{appearance:none;border:0;background:transparent;padding:var(--ius-space-xxs) var(--ius-space-xxs);margin:0;border-radius:var(--ius-radius-sm);display:inline-flex;align-items:center;gap:var(--_bc-gap);font-family:inherit;font-size:var(--_bc-fs);line-height:var(--_bc-lh);font-weight:var(--ius-fw-regular);color:var(--ius-text-secondary);text-decoration:none;cursor:pointer;max-width:220px;transition:color var(--ius-duration-fast) var(--ius-ease-standard),background-color var(--ius-duration-fast) var(--ius-ease-standard)}.ius-bc__crumb .ius-bc__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ius-bc__crumb .ius-icon{font-size:var(--_bc-icon);line-height:1;flex:0 0 auto}a.ius-bc__crumb:hover,button.ius-bc__crumb:hover{color:var(--ius-primary-500)}a.ius-bc__crumb:focus-visible,button.ius-bc__crumb:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-bc__crumb[aria-current=page]{color:var(--ius-primary-900);font-weight:var(--ius-fw-medium);cursor:default}.ius-bc__sep{display:inline-flex;align-items:center;justify-content:center;color:var(--ius-neutral-6);margin:0 var(--ius-space-xxs);-webkit-user-select:none;user-select:none}.ius-bc__sep .ius-icon{font-size:var(--_bc-icon);line-height:1}.ius-bc__sep--slash{font-size:var(--_bc-fs);line-height:var(--_bc-lh)}.ius-bc__more{appearance:none;border:0;background:transparent;padding:var(--ius-space-xxs) var(--ius-space-xxs);border-radius:var(--ius-radius-sm);display:inline-flex;align-items:center;color:var(--ius-text-secondary);cursor:pointer;transition:color var(--ius-duration-fast) var(--ius-ease-standard),background-color var(--ius-duration-fast) var(--ius-ease-standard)}.ius-bc__more:hover{color:var(--ius-primary-500);background:var(--ius-neutral-2)}.ius-bc__more:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-bc__more .ius-icon{font-size:var(--_bc-icon);line-height:1}.ius-bc__menu{display:flex;flex-direction:column;gap:var(--ius-space-xxs);min-width:160px}.ius-bc__menu-item{appearance:none;border:0;background:transparent;text-align:left;padding:var(--ius-space-xs) var(--ius-space-xs);border-radius:var(--ius-radius-sm);display:flex;align-items:center;gap:var(--ius-space-xs);font-family:var(--ius-font-body);font-size:var(--ius-fs-base);line-height:var(--ius-lh-base);color:var(--ius-text-primary);cursor:pointer;white-space:nowrap}.ius-bc__menu-item:hover{background:var(--ius-info-100);color:var(--ius-primary-900)}.ius-bc__menu-item .ius-icon{font-size:var(--ius-icon-md);line-height:1;color:var(--ius-text-tertiary);flex:0 0 auto}.ius-bc__menu-item:hover .ius-icon{color:var(--ius-primary-700)}\n"], dependencies: [{ kind: "component", type: PopoverComponent, selector: "ius-popover", inputs: ["title", "content", "placement", "trigger", "offset", "open", "defaultOpen", "showArrow", "disabled", "anchorRect", "padding", "dismissable", "panelClass"], outputs: ["openChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17234
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: BreadcrumbComponent, isStandalone: true, selector: "ius-breadcrumb", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, maxItems: { classPropertyName: "maxItems", publicName: "maxItems", isSignal: true, isRequired: false, transformFunction: null }, itemsBeforeCollapse: { classPropertyName: "itemsBeforeCollapse", publicName: "itemsBeforeCollapse", isSignal: true, isRequired: false, transformFunction: null }, itemsAfterCollapse: { classPropertyName: "itemsAfterCollapse", publicName: "itemsAfterCollapse", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { navigate: "navigate" }, ngImport: i0, template: "<nav [attr.aria-label]=\"ariaLabel()\">\r\n <ol class=\"ius-bc\" [attr.data-size]=\"size() !== 'medium' ? size() : null\">\r\n @for (entry of rendered(); track $index; let i = $index) {\r\n @if (i > 0) {\r\n <li class=\"ius-bc__item\" aria-hidden=\"true\">\r\n @if (separator() === 'slash') {\r\n <span class=\"ius-bc__sep ius-bc__sep--slash\">/</span>\r\n } @else {\r\n <span class=\"ius-bc__sep\"><span translate=\"no\" class=\"ius-icon\">chevron_right</span></span>\r\n }\r\n </li>\r\n }\r\n\r\n @if (entry.kind === 'more') {\r\n <li class=\"ius-bc__item\">\r\n <ius-popover\r\n placement=\"bottom\"\r\n trigger=\"click\"\r\n [showArrow]=\"true\"\r\n padding=\"compact\"\r\n [open]=\"moreOpen()\"\r\n (openChange)=\"moreOpen.set($event)\"\r\n >\r\n <button type=\"button\" class=\"ius-bc__more\" aria-label=\"Mostrar ruta oculta\">\r\n <span translate=\"no\" class=\"ius-icon\">more_horiz</span>\r\n </button>\r\n <div iusPopoverContent class=\"ius-bc__menu\">\r\n @for (h of entry.hidden; track h.index) {\r\n <button\r\n type=\"button\"\r\n class=\"ius-bc__menu-item\"\r\n [disabled]=\"!!h.item.disabled\"\r\n (click)=\"onHidden(h.item, h.index, $event)\"\r\n >\r\n @if (h.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ h.item.icon }}</span>\r\n }\r\n <span>{{ h.item.label }}</span>\r\n </button>\r\n }\r\n </div>\r\n </ius-popover>\r\n </li>\r\n } @else {\r\n <li class=\"ius-bc__item\">\r\n @if (isCurrent(entry.index)) {\r\n <span class=\"ius-bc__crumb\" aria-current=\"page\">\r\n @if (entry.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ entry.item.icon }}</span>\r\n }\r\n <span class=\"ius-bc__label\">{{ entry.item.label }}</span>\r\n </span>\r\n } @else if (entry.item.disabled) {\r\n <span class=\"ius-bc__crumb\" aria-disabled=\"true\">\r\n @if (entry.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ entry.item.icon }}</span>\r\n }\r\n <span class=\"ius-bc__label\">{{ entry.item.label }}</span>\r\n </span>\r\n } @else if (entry.item.href) {\r\n <a class=\"ius-bc__crumb\" [href]=\"entry.item.href\" (click)=\"onCrumb(entry.item, entry.index, $event)\">\r\n @if (entry.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ entry.item.icon }}</span>\r\n }\r\n <span class=\"ius-bc__label\">{{ entry.item.label }}</span>\r\n </a>\r\n } @else {\r\n <button type=\"button\" class=\"ius-bc__crumb\" (click)=\"onCrumb(entry.item, entry.index, $event)\">\r\n @if (entry.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ entry.item.icon }}</span>\r\n }\r\n <span class=\"ius-bc__label\">{{ entry.item.label }}</span>\r\n </button>\r\n }\r\n </li>\r\n }\r\n }\r\n </ol>\r\n</nav>\r\n", styles: ["@charset \"UTF-8\";:host{display:block}.ius-bc{-webkit-user-select:none;user-select:none;--_bc-fs: var(--ius-fs-base);--_bc-lh: var(--ius-lh-base);--_bc-icon: var(--ius-icon-sm);--_bc-gap: var(--ius-space-xs);display:flex;align-items:center;flex-wrap:wrap;font-family:var(--ius-font-body);margin:0;padding:0;list-style:none}.ius-bc[data-size=small]{--_bc-fs: var(--ius-fs-sm);--_bc-lh: var(--ius-lh-sm);--_bc-icon: var(--ius-icon-sm);--_bc-gap: var(--ius-space-xxs)}.ius-bc__item{display:inline-flex;align-items:center}.ius-bc__crumb{appearance:none;border:0;background:transparent;padding:var(--ius-space-xxs) var(--ius-space-xxs);margin:0;border-radius:var(--ius-radius-sm);display:inline-flex;align-items:center;gap:var(--_bc-gap);font-family:inherit;font-size:var(--_bc-fs);line-height:var(--_bc-lh);font-weight:var(--ius-fw-regular);color:var(--ius-text-secondary);text-decoration:none;cursor:pointer;max-width:220px;transition:color var(--ius-duration-fast) var(--ius-ease-standard),background-color var(--ius-duration-fast) var(--ius-ease-standard)}.ius-bc__crumb .ius-bc__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ius-bc__crumb .ius-icon{font-size:var(--_bc-icon);line-height:1;flex:0 0 auto}a.ius-bc__crumb:hover,button.ius-bc__crumb:hover{color:var(--ius-primary-500)}a.ius-bc__crumb:focus-visible,button.ius-bc__crumb:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-bc__crumb[aria-current=page]{color:var(--ius-primary-900);font-weight:var(--ius-fw-medium);cursor:default}.ius-bc__crumb[aria-disabled=true]{color:var(--ius-text-disabled);cursor:default}.ius-bc__sep{display:inline-flex;align-items:center;justify-content:center;color:var(--ius-neutral-6);margin:0 var(--ius-space-xxs);-webkit-user-select:none;user-select:none}.ius-bc__sep .ius-icon{font-size:var(--_bc-icon);line-height:1}.ius-bc__sep--slash{font-size:var(--_bc-fs);line-height:var(--_bc-lh)}.ius-bc__more{appearance:none;border:0;background:transparent;padding:var(--ius-space-xxs) var(--ius-space-xxs);border-radius:var(--ius-radius-sm);display:inline-flex;align-items:center;color:var(--ius-text-secondary);cursor:pointer;transition:color var(--ius-duration-fast) var(--ius-ease-standard),background-color var(--ius-duration-fast) var(--ius-ease-standard)}.ius-bc__more:hover{color:var(--ius-primary-500);background:var(--ius-neutral-2)}.ius-bc__more:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-bc__more .ius-icon{font-size:var(--_bc-icon);line-height:1}.ius-bc__menu{display:flex;flex-direction:column;gap:var(--ius-space-xxs);min-width:160px}.ius-bc__menu-item{appearance:none;border:0;background:transparent;text-align:left;padding:var(--ius-space-xs) var(--ius-space-xs);border-radius:var(--ius-radius-sm);display:flex;align-items:center;gap:var(--ius-space-xs);font-family:var(--ius-font-body);font-size:var(--ius-fs-base);line-height:var(--ius-lh-base);color:var(--ius-text-primary);cursor:pointer;white-space:nowrap}.ius-bc__menu-item:hover{background:var(--ius-info-100);color:var(--ius-primary-900)}.ius-bc__menu-item .ius-icon{font-size:var(--ius-icon-md);line-height:1;color:var(--ius-text-tertiary);flex:0 0 auto}.ius-bc__menu-item:hover .ius-icon{color:var(--ius-primary-700)}.ius-bc__menu-item:disabled{color:var(--ius-text-disabled);cursor:default;background:transparent}.ius-bc__menu-item:disabled .ius-icon{color:var(--ius-text-disabled)}\n"], dependencies: [{ kind: "component", type: PopoverComponent, selector: "ius-popover", inputs: ["title", "content", "placement", "trigger", "offset", "open", "defaultOpen", "showArrow", "disabled", "anchorRect", "padding", "dismissable", "panelClass"], outputs: ["openChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17122
17235
  }
17123
17236
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: BreadcrumbComponent, decorators: [{
17124
17237
  type: Component,
17125
- args: [{ selector: 'ius-breadcrumb', standalone: true, imports: [PopoverComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav [attr.aria-label]=\"ariaLabel()\">\r\n <ol class=\"ius-bc\" [attr.data-size]=\"size() !== 'medium' ? size() : null\">\r\n @for (entry of rendered(); track $index; let i = $index) {\r\n @if (i > 0) {\r\n <li class=\"ius-bc__item\" aria-hidden=\"true\">\r\n @if (separator() === 'slash') {\r\n <span class=\"ius-bc__sep ius-bc__sep--slash\">/</span>\r\n } @else {\r\n <span class=\"ius-bc__sep\"><span translate=\"no\" class=\"ius-icon\">chevron_right</span></span>\r\n }\r\n </li>\r\n }\r\n\r\n @if (entry.kind === 'more') {\r\n <li class=\"ius-bc__item\">\r\n <ius-popover\r\n placement=\"bottom\"\r\n trigger=\"click\"\r\n [showArrow]=\"true\"\r\n padding=\"compact\"\r\n [open]=\"moreOpen()\"\r\n (openChange)=\"moreOpen.set($event)\"\r\n >\r\n <button type=\"button\" class=\"ius-bc__more\" aria-label=\"Mostrar ruta oculta\">\r\n <span translate=\"no\" class=\"ius-icon\">more_horiz</span>\r\n </button>\r\n <div iusPopoverContent class=\"ius-bc__menu\">\r\n @for (h of entry.hidden; track h.index) {\r\n <button type=\"button\" class=\"ius-bc__menu-item\" (click)=\"onHidden(h.item, h.index, $event)\">\r\n @if (h.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ h.item.icon }}</span>\r\n }\r\n <span>{{ h.item.label }}</span>\r\n </button>\r\n }\r\n </div>\r\n </ius-popover>\r\n </li>\r\n } @else {\r\n <li class=\"ius-bc__item\">\r\n @if (isCurrent(entry.index)) {\r\n <span class=\"ius-bc__crumb\" aria-current=\"page\">\r\n @if (entry.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ entry.item.icon }}</span>\r\n }\r\n <span class=\"ius-bc__label\">{{ entry.item.label }}</span>\r\n </span>\r\n } @else if (entry.item.href) {\r\n <a class=\"ius-bc__crumb\" [href]=\"entry.item.href\" (click)=\"onCrumb(entry.item, entry.index, $event)\">\r\n @if (entry.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ entry.item.icon }}</span>\r\n }\r\n <span class=\"ius-bc__label\">{{ entry.item.label }}</span>\r\n </a>\r\n } @else {\r\n <button type=\"button\" class=\"ius-bc__crumb\" (click)=\"onCrumb(entry.item, entry.index, $event)\">\r\n @if (entry.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ entry.item.icon }}</span>\r\n }\r\n <span class=\"ius-bc__label\">{{ entry.item.label }}</span>\r\n </button>\r\n }\r\n </li>\r\n }\r\n }\r\n </ol>\r\n</nav>\r\n", styles: ["@charset \"UTF-8\";:host{display:block}.ius-bc{-webkit-user-select:none;user-select:none;--_bc-fs: var(--ius-fs-base);--_bc-lh: var(--ius-lh-base);--_bc-icon: var(--ius-icon-sm);--_bc-gap: var(--ius-space-xs);display:flex;align-items:center;flex-wrap:wrap;font-family:var(--ius-font-body);margin:0;padding:0;list-style:none}.ius-bc[data-size=small]{--_bc-fs: var(--ius-fs-sm);--_bc-lh: var(--ius-lh-sm);--_bc-icon: var(--ius-icon-sm);--_bc-gap: var(--ius-space-xxs)}.ius-bc__item{display:inline-flex;align-items:center}.ius-bc__crumb{appearance:none;border:0;background:transparent;padding:var(--ius-space-xxs) var(--ius-space-xxs);margin:0;border-radius:var(--ius-radius-sm);display:inline-flex;align-items:center;gap:var(--_bc-gap);font-family:inherit;font-size:var(--_bc-fs);line-height:var(--_bc-lh);font-weight:var(--ius-fw-regular);color:var(--ius-text-secondary);text-decoration:none;cursor:pointer;max-width:220px;transition:color var(--ius-duration-fast) var(--ius-ease-standard),background-color var(--ius-duration-fast) var(--ius-ease-standard)}.ius-bc__crumb .ius-bc__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ius-bc__crumb .ius-icon{font-size:var(--_bc-icon);line-height:1;flex:0 0 auto}a.ius-bc__crumb:hover,button.ius-bc__crumb:hover{color:var(--ius-primary-500)}a.ius-bc__crumb:focus-visible,button.ius-bc__crumb:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-bc__crumb[aria-current=page]{color:var(--ius-primary-900);font-weight:var(--ius-fw-medium);cursor:default}.ius-bc__sep{display:inline-flex;align-items:center;justify-content:center;color:var(--ius-neutral-6);margin:0 var(--ius-space-xxs);-webkit-user-select:none;user-select:none}.ius-bc__sep .ius-icon{font-size:var(--_bc-icon);line-height:1}.ius-bc__sep--slash{font-size:var(--_bc-fs);line-height:var(--_bc-lh)}.ius-bc__more{appearance:none;border:0;background:transparent;padding:var(--ius-space-xxs) var(--ius-space-xxs);border-radius:var(--ius-radius-sm);display:inline-flex;align-items:center;color:var(--ius-text-secondary);cursor:pointer;transition:color var(--ius-duration-fast) var(--ius-ease-standard),background-color var(--ius-duration-fast) var(--ius-ease-standard)}.ius-bc__more:hover{color:var(--ius-primary-500);background:var(--ius-neutral-2)}.ius-bc__more:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-bc__more .ius-icon{font-size:var(--_bc-icon);line-height:1}.ius-bc__menu{display:flex;flex-direction:column;gap:var(--ius-space-xxs);min-width:160px}.ius-bc__menu-item{appearance:none;border:0;background:transparent;text-align:left;padding:var(--ius-space-xs) var(--ius-space-xs);border-radius:var(--ius-radius-sm);display:flex;align-items:center;gap:var(--ius-space-xs);font-family:var(--ius-font-body);font-size:var(--ius-fs-base);line-height:var(--ius-lh-base);color:var(--ius-text-primary);cursor:pointer;white-space:nowrap}.ius-bc__menu-item:hover{background:var(--ius-info-100);color:var(--ius-primary-900)}.ius-bc__menu-item .ius-icon{font-size:var(--ius-icon-md);line-height:1;color:var(--ius-text-tertiary);flex:0 0 auto}.ius-bc__menu-item:hover .ius-icon{color:var(--ius-primary-700)}\n"] }]
17238
+ args: [{ selector: 'ius-breadcrumb', standalone: true, imports: [PopoverComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav [attr.aria-label]=\"ariaLabel()\">\r\n <ol class=\"ius-bc\" [attr.data-size]=\"size() !== 'medium' ? size() : null\">\r\n @for (entry of rendered(); track $index; let i = $index) {\r\n @if (i > 0) {\r\n <li class=\"ius-bc__item\" aria-hidden=\"true\">\r\n @if (separator() === 'slash') {\r\n <span class=\"ius-bc__sep ius-bc__sep--slash\">/</span>\r\n } @else {\r\n <span class=\"ius-bc__sep\"><span translate=\"no\" class=\"ius-icon\">chevron_right</span></span>\r\n }\r\n </li>\r\n }\r\n\r\n @if (entry.kind === 'more') {\r\n <li class=\"ius-bc__item\">\r\n <ius-popover\r\n placement=\"bottom\"\r\n trigger=\"click\"\r\n [showArrow]=\"true\"\r\n padding=\"compact\"\r\n [open]=\"moreOpen()\"\r\n (openChange)=\"moreOpen.set($event)\"\r\n >\r\n <button type=\"button\" class=\"ius-bc__more\" aria-label=\"Mostrar ruta oculta\">\r\n <span translate=\"no\" class=\"ius-icon\">more_horiz</span>\r\n </button>\r\n <div iusPopoverContent class=\"ius-bc__menu\">\r\n @for (h of entry.hidden; track h.index) {\r\n <button\r\n type=\"button\"\r\n class=\"ius-bc__menu-item\"\r\n [disabled]=\"!!h.item.disabled\"\r\n (click)=\"onHidden(h.item, h.index, $event)\"\r\n >\r\n @if (h.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ h.item.icon }}</span>\r\n }\r\n <span>{{ h.item.label }}</span>\r\n </button>\r\n }\r\n </div>\r\n </ius-popover>\r\n </li>\r\n } @else {\r\n <li class=\"ius-bc__item\">\r\n @if (isCurrent(entry.index)) {\r\n <span class=\"ius-bc__crumb\" aria-current=\"page\">\r\n @if (entry.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ entry.item.icon }}</span>\r\n }\r\n <span class=\"ius-bc__label\">{{ entry.item.label }}</span>\r\n </span>\r\n } @else if (entry.item.disabled) {\r\n <span class=\"ius-bc__crumb\" aria-disabled=\"true\">\r\n @if (entry.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ entry.item.icon }}</span>\r\n }\r\n <span class=\"ius-bc__label\">{{ entry.item.label }}</span>\r\n </span>\r\n } @else if (entry.item.href) {\r\n <a class=\"ius-bc__crumb\" [href]=\"entry.item.href\" (click)=\"onCrumb(entry.item, entry.index, $event)\">\r\n @if (entry.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ entry.item.icon }}</span>\r\n }\r\n <span class=\"ius-bc__label\">{{ entry.item.label }}</span>\r\n </a>\r\n } @else {\r\n <button type=\"button\" class=\"ius-bc__crumb\" (click)=\"onCrumb(entry.item, entry.index, $event)\">\r\n @if (entry.item.icon) {\r\n <span translate=\"no\" class=\"ius-icon\" aria-hidden=\"true\">{{ entry.item.icon }}</span>\r\n }\r\n <span class=\"ius-bc__label\">{{ entry.item.label }}</span>\r\n </button>\r\n }\r\n </li>\r\n }\r\n }\r\n </ol>\r\n</nav>\r\n", styles: ["@charset \"UTF-8\";:host{display:block}.ius-bc{-webkit-user-select:none;user-select:none;--_bc-fs: var(--ius-fs-base);--_bc-lh: var(--ius-lh-base);--_bc-icon: var(--ius-icon-sm);--_bc-gap: var(--ius-space-xs);display:flex;align-items:center;flex-wrap:wrap;font-family:var(--ius-font-body);margin:0;padding:0;list-style:none}.ius-bc[data-size=small]{--_bc-fs: var(--ius-fs-sm);--_bc-lh: var(--ius-lh-sm);--_bc-icon: var(--ius-icon-sm);--_bc-gap: var(--ius-space-xxs)}.ius-bc__item{display:inline-flex;align-items:center}.ius-bc__crumb{appearance:none;border:0;background:transparent;padding:var(--ius-space-xxs) var(--ius-space-xxs);margin:0;border-radius:var(--ius-radius-sm);display:inline-flex;align-items:center;gap:var(--_bc-gap);font-family:inherit;font-size:var(--_bc-fs);line-height:var(--_bc-lh);font-weight:var(--ius-fw-regular);color:var(--ius-text-secondary);text-decoration:none;cursor:pointer;max-width:220px;transition:color var(--ius-duration-fast) var(--ius-ease-standard),background-color var(--ius-duration-fast) var(--ius-ease-standard)}.ius-bc__crumb .ius-bc__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ius-bc__crumb .ius-icon{font-size:var(--_bc-icon);line-height:1;flex:0 0 auto}a.ius-bc__crumb:hover,button.ius-bc__crumb:hover{color:var(--ius-primary-500)}a.ius-bc__crumb:focus-visible,button.ius-bc__crumb:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-bc__crumb[aria-current=page]{color:var(--ius-primary-900);font-weight:var(--ius-fw-medium);cursor:default}.ius-bc__crumb[aria-disabled=true]{color:var(--ius-text-disabled);cursor:default}.ius-bc__sep{display:inline-flex;align-items:center;justify-content:center;color:var(--ius-neutral-6);margin:0 var(--ius-space-xxs);-webkit-user-select:none;user-select:none}.ius-bc__sep .ius-icon{font-size:var(--_bc-icon);line-height:1}.ius-bc__sep--slash{font-size:var(--_bc-fs);line-height:var(--_bc-lh)}.ius-bc__more{appearance:none;border:0;background:transparent;padding:var(--ius-space-xxs) var(--ius-space-xxs);border-radius:var(--ius-radius-sm);display:inline-flex;align-items:center;color:var(--ius-text-secondary);cursor:pointer;transition:color var(--ius-duration-fast) var(--ius-ease-standard),background-color var(--ius-duration-fast) var(--ius-ease-standard)}.ius-bc__more:hover{color:var(--ius-primary-500);background:var(--ius-neutral-2)}.ius-bc__more:focus-visible{outline:none;box-shadow:var(--ius-focus-ring)}.ius-bc__more .ius-icon{font-size:var(--_bc-icon);line-height:1}.ius-bc__menu{display:flex;flex-direction:column;gap:var(--ius-space-xxs);min-width:160px}.ius-bc__menu-item{appearance:none;border:0;background:transparent;text-align:left;padding:var(--ius-space-xs) var(--ius-space-xs);border-radius:var(--ius-radius-sm);display:flex;align-items:center;gap:var(--ius-space-xs);font-family:var(--ius-font-body);font-size:var(--ius-fs-base);line-height:var(--ius-lh-base);color:var(--ius-text-primary);cursor:pointer;white-space:nowrap}.ius-bc__menu-item:hover{background:var(--ius-info-100);color:var(--ius-primary-900)}.ius-bc__menu-item .ius-icon{font-size:var(--ius-icon-md);line-height:1;color:var(--ius-text-tertiary);flex:0 0 auto}.ius-bc__menu-item:hover .ius-icon{color:var(--ius-primary-700)}.ius-bc__menu-item:disabled{color:var(--ius-text-disabled);cursor:default;background:transparent}.ius-bc__menu-item:disabled .ius-icon{color:var(--ius-text-disabled)}\n"] }]
17126
17239
  }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], separator: [{ type: i0.Input, args: [{ isSignal: true, alias: "separator", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], maxItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxItems", required: false }] }], itemsBeforeCollapse: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemsBeforeCollapse", required: false }] }], itemsAfterCollapse: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemsAfterCollapse", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], navigate: [{ type: i0.Output, args: ["navigate"] }] } });
17127
17240
 
17128
17241
  /*
@@ -26559,6 +26672,13 @@ class KanbanBoardComponent {
26559
26672
  this.bulkMove = input(true, { ...(ngDevMode ? { debugName: "bulkMove" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
26560
26673
  this.addColumnLabel = input('Agregar columna', /* @ts-ignore */
26561
26674
  ...(ngDevMode ? [{ debugName: "addColumnLabel" }] : /* istanbul ignore next */ []));
26675
+ /**
26676
+ * Nombre accesible del tablero o de la lista (equivalente del `...rest` que el
26677
+ * golden esparce en su raíz). Con nombre, la raíz lleva `role="group"`, porque
26678
+ * `aria-label` no aplica a un div sin rol.
26679
+ */
26680
+ this.ariaLabel = input(/* @ts-ignore */
26681
+ ...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
26562
26682
  /** Tarjeta movida. */
26563
26683
  this.itemMove = new EventEmitter();
26564
26684
  /** Pila movida (multi-selección o «Mover todas a…»). Si no se enlaza, el bulk emite `itemMove` por id. */
@@ -26814,7 +26934,7 @@ class KanbanBoardComponent {
26814
26934
  this.columnCollapse.emit({ columnId: col.id, collapsed });
26815
26935
  }
26816
26936
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: KanbanBoardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26817
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: KanbanBoardComponent, isStandalone: true, selector: "ius-kanban-board", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, accent: { classPropertyName: "accent", publicName: "accent", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, reorderColumns: { classPropertyName: "reorderColumns", publicName: "reorderColumns", isSignal: true, isRequired: false, transformFunction: null }, cardLayout: { classPropertyName: "cardLayout", publicName: "cardLayout", isSignal: true, isRequired: false, transformFunction: null }, cardHandle: { classPropertyName: "cardHandle", publicName: "cardHandle", isSignal: true, isRequired: false, transformFunction: null }, renderCard: { classPropertyName: "renderCard", publicName: "renderCard", isSignal: true, isRequired: false, transformFunction: null }, columnWidth: { classPropertyName: "columnWidth", publicName: "columnWidth", isSignal: true, isRequired: false, transformFunction: null }, selectedItemId: { classPropertyName: "selectedItemId", publicName: "selectedItemId", isSignal: true, isRequired: false, transformFunction: null }, multiSelect: { classPropertyName: "multiSelect", publicName: "multiSelect", isSignal: true, isRequired: false, transformFunction: null }, bulkMove: { classPropertyName: "bulkMove", publicName: "bulkMove", isSignal: true, isRequired: false, transformFunction: null }, addColumnLabel: { classPropertyName: "addColumnLabel", publicName: "addColumnLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemMove: "itemMove", itemsMove: "itemsMove", itemClick: "itemClick", selectionChange: "selectionChange", columnCollapse: "columnCollapse", columnMove: "columnMove", addItem: "addItem", addColumn: "addColumn" }, host: { properties: { "attr.data-variant": "variant()" } }, ngImport: i0, template: "<!-- Ra\u00EDz = lista horizontal de columnas (cdkDropList) y grupo que conecta las\r\n listas de tarjetas (cdkDropListGroup no incluye a la lista de su mismo nodo). -->\r\n<div\r\n class=\"ius-kbboard ius-scroll\"\r\n [attr.data-variant]=\"variant()\"\r\n cdkDropListGroup\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListDisabled]=\"isList() || !reorderColumns()\"\r\n (cdkDropListDropped)=\"onColumnDrop($event)\"\r\n>\r\n @for (col of cols(); track col.id) {\r\n @let collapsed = isColCollapsed(col);\r\n <ius-kanban-column\r\n [attr.data-col-id]=\"col.id\"\r\n cdkDrag\r\n [cdkDragData]=\"col.id\"\r\n [cdkDragDisabled]=\"isList() || !reorderColumns()\"\r\n cdkDropList\r\n iusKanbanScrollParents\r\n [cdkDropListData]=\"col.id\"\r\n cdkDropListElementContainer=\".ius-kbcol__body, .ius-kbcol__strip\"\r\n [cdkDropListSortingDisabled]=\"collapsed\"\r\n (cdkDropListDropped)=\"onItemDrop($event)\"\r\n (cdkDropListEntered)=\"overCol.set(col.id)\"\r\n (cdkDropListExited)=\"onListExited(col.id)\"\r\n [title]=\"col.title\"\r\n [tone]=\"col.tone || 'neutral'\"\r\n [accent]=\"col.accent || accent()\"\r\n [count]=\"countOf(col)\"\r\n [actions]=\"columnActions().get(col.id)\"\r\n [bare]=\"!!col.bare || isList()\"\r\n [width]=\"col.width || columnWidth()\"\r\n [collapsible]=\"!!col.collapsible && !isList()\"\r\n [collapsed]=\"!!col.collapsible && !isList() ? collapsed : undefined\"\r\n (collapsedChange)=\"toggleCollapse(col, $event)\"\r\n [draggable]=\"reorderColumns() && !isList()\"\r\n [over]=\"overCol() === col.id\"\r\n [addable]=\"addItem.observed\"\r\n (addItem)=\"addItem.emit(isList() ? undefined : col.id)\"\r\n [addLabel]=\"col.addLabel\"\r\n [empty]=\"isEmpty(col)\"\r\n [emptyLabel]=\"col.emptyLabel || (isList() ? 'Sin elementos' : 'Suelta una tarjeta aqu\u00ED')\"\r\n >\r\n <!-- Plegada no pinta tarjetas: el CDK exige que sus items vivan en el contenedor. -->\r\n @if (!collapsed) {\r\n @for (id of orderOf(col.id); track id) {\r\n @if (itemOf(id); as item) {\r\n <div\r\n class=\"ius-kbboard__item\"\r\n cdkDrag\r\n #drag=\"cdkDrag\"\r\n [cdkDragData]=\"id\"\r\n [cdkDragDisabled]=\"!sortable() || !!item.disabled\"\r\n (pointerdown)=\"measure($event)\"\r\n (cdkDragStarted)=\"onDragStarted($event, col.id)\"\r\n >\r\n @if (renderCard(); as tpl) {\r\n <ng-container\r\n *ngTemplateOutlet=\"tpl; context: renderContext(item); injector: dragInjector(drag)\"\r\n />\r\n } @else {\r\n <ius-kanban-card\r\n [overline]=\"item.overline\"\r\n [title]=\"item.title\"\r\n [subtitle]=\"item.subtitle\"\r\n [paragraph]=\"item.paragraph\"\r\n [caption]=\"item.caption\"\r\n [tags]=\"item.tags\"\r\n [assignee]=\"item.assignee\"\r\n [flag]=\"item.flag\"\r\n [leading]=\"item.leading\"\r\n [trailing]=\"item.trailing\"\r\n [content]=\"item.content\"\r\n [templateContext]=\"itemContext(item)\"\r\n [actions]=\"item.actions\"\r\n [ariaLabel]=\"item.ariaLabel\"\r\n [layout]=\"item.layout ?? effLayout()\"\r\n [handle]=\"item.handle ?? effHandle()\"\r\n [accent]=\"accent()\"\r\n [disabled]=\"!!item.disabled\"\r\n [selected]=\"isSelected(item)\"\r\n [draggable]=\"sortable()\"\r\n [dragging]=\"isDragging(id)\"\r\n [itemId]=\"id\"\r\n [clickable]=\"isInteractive(item)\"\r\n (clicked)=\"onCardClick(item, $event)\"\r\n />\r\n }\r\n <div *cdkDragPlaceholder class=\"ius-kbcol__placeholder\" aria-hidden=\"true\" [style.height.px]=\"phHeight()\"></div>\r\n </div>\r\n }\r\n }\r\n }\r\n </ius-kanban-column>\r\n }\r\n\r\n @if (addColumn.observed && !isList()) {\r\n <div class=\"ius-kbboard__add-col\">\r\n <ius-text-button prefixIcon=\"add\" [label]=\"addColumnLabel()\" (clicked)=\"addColumn.emit($event)\" />\r\n </div>\r\n }\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%;height:100%;min-height:0}:host([data-variant=list]){height:auto}.ius-kbboard{box-sizing:border-box;display:flex;align-items:stretch;gap:var(--ius-space-md);width:100%;height:100%;min-height:0;padding:var(--ius-space-xxs);overflow-x:auto;overflow-y:hidden;font-family:var(--ius-font-body)}.ius-kbboard[data-variant=list]{flex-direction:column;align-items:stretch;gap:0;overflow:visible;height:auto}.ius-kbboard__add-col{flex:0 0 auto;align-self:stretch;min-width:200px;display:flex;align-items:center;justify-content:center;padding:var(--ius-space-md) var(--ius-space-md);border:1px dashed var(--ius-stroke);border-radius:var(--ius-radius-lg)}.ius-kbcol__placeholder{flex:0 0 auto;border:1px dashed var(--_kbc-accent);border-radius:var(--ius-radius-md);background:color-mix(in srgb,var(--_kbc-accent) 7%,transparent)}:host ::ng-deep .ius-kbcol__strip>.ius-kbcol__placeholder{display:none}.ius-kbcol.cdk-drag-placeholder{opacity:.5}.ius-kbboard__item.cdk-drag-preview>.ius-kbcard{opacity:.5;box-shadow:var(--ius-elevation-300)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "component", type: KanbanCardComponent, selector: "ius-kanban-card", inputs: ["overline", "title", "subtitle", "paragraph", "caption", "tags", "assignee", "flag", "leading", "trailing", "content", "templateContext", "layout", "handle", "accent", "selected", "dragging", "disabled", "state", "actions", "draggable", "itemId", "ariaLabel", "clickable"], outputs: ["clicked"] }, { kind: "component", type: KanbanColumnComponent, selector: "ius-kanban-column", inputs: ["title", "tone", "count", "accent", "actions", "addLabel", "addable", "empty", "emptyLabel", "emptyIcon", "bare", "width", "collapsible", "collapsed", "defaultCollapsed", "draggable", "dragging", "over"], outputs: ["addItem", "collapsedChange"] }, { kind: "component", type: TextButtonComponent, selector: "ius-text-button", inputs: ["label", "prefixIcon", "sufixIcon", "size", "disabled", "type", "ariaExpanded", "ariaControls"], outputs: ["clicked"] }, { kind: "directive", type: IusKanbanScrollParentsDirective, selector: "[iusKanbanScrollParents]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26937
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: KanbanBoardComponent, isStandalone: true, selector: "ius-kanban-board", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, accent: { classPropertyName: "accent", publicName: "accent", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, reorderColumns: { classPropertyName: "reorderColumns", publicName: "reorderColumns", isSignal: true, isRequired: false, transformFunction: null }, cardLayout: { classPropertyName: "cardLayout", publicName: "cardLayout", isSignal: true, isRequired: false, transformFunction: null }, cardHandle: { classPropertyName: "cardHandle", publicName: "cardHandle", isSignal: true, isRequired: false, transformFunction: null }, renderCard: { classPropertyName: "renderCard", publicName: "renderCard", isSignal: true, isRequired: false, transformFunction: null }, columnWidth: { classPropertyName: "columnWidth", publicName: "columnWidth", isSignal: true, isRequired: false, transformFunction: null }, selectedItemId: { classPropertyName: "selectedItemId", publicName: "selectedItemId", isSignal: true, isRequired: false, transformFunction: null }, multiSelect: { classPropertyName: "multiSelect", publicName: "multiSelect", isSignal: true, isRequired: false, transformFunction: null }, bulkMove: { classPropertyName: "bulkMove", publicName: "bulkMove", isSignal: true, isRequired: false, transformFunction: null }, addColumnLabel: { classPropertyName: "addColumnLabel", publicName: "addColumnLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemMove: "itemMove", itemsMove: "itemsMove", itemClick: "itemClick", selectionChange: "selectionChange", columnCollapse: "columnCollapse", columnMove: "columnMove", addItem: "addItem", addColumn: "addColumn" }, host: { properties: { "attr.data-variant": "variant()" } }, ngImport: i0, template: "<!-- Ra\u00EDz = lista horizontal de columnas (cdkDropList) y grupo que conecta las\r\n listas de tarjetas (cdkDropListGroup no incluye a la lista de su mismo nodo). -->\r\n<div\r\n class=\"ius-kbboard ius-scroll\"\r\n [attr.data-variant]=\"variant()\"\r\n [attr.role]=\"ariaLabel() ? 'group' : null\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n cdkDropListGroup\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListDisabled]=\"isList() || !reorderColumns()\"\r\n (cdkDropListDropped)=\"onColumnDrop($event)\"\r\n>\r\n @for (col of cols(); track col.id) {\r\n @let collapsed = isColCollapsed(col);\r\n <ius-kanban-column\r\n [attr.data-col-id]=\"col.id\"\r\n cdkDrag\r\n [cdkDragData]=\"col.id\"\r\n [cdkDragDisabled]=\"isList() || !reorderColumns()\"\r\n cdkDropList\r\n iusKanbanScrollParents\r\n [cdkDropListData]=\"col.id\"\r\n cdkDropListElementContainer=\".ius-kbcol__body, .ius-kbcol__strip\"\r\n [cdkDropListSortingDisabled]=\"collapsed\"\r\n (cdkDropListDropped)=\"onItemDrop($event)\"\r\n (cdkDropListEntered)=\"overCol.set(col.id)\"\r\n (cdkDropListExited)=\"onListExited(col.id)\"\r\n [title]=\"col.title\"\r\n [tone]=\"col.tone || 'neutral'\"\r\n [accent]=\"col.accent || accent()\"\r\n [count]=\"countOf(col)\"\r\n [actions]=\"columnActions().get(col.id)\"\r\n [bare]=\"!!col.bare || isList()\"\r\n [width]=\"col.width || columnWidth()\"\r\n [collapsible]=\"!!col.collapsible && !isList()\"\r\n [collapsed]=\"!!col.collapsible && !isList() ? collapsed : undefined\"\r\n (collapsedChange)=\"toggleCollapse(col, $event)\"\r\n [draggable]=\"reorderColumns() && !isList()\"\r\n [over]=\"overCol() === col.id\"\r\n [addable]=\"addItem.observed\"\r\n (addItem)=\"addItem.emit(isList() ? undefined : col.id)\"\r\n [addLabel]=\"col.addLabel\"\r\n [empty]=\"isEmpty(col)\"\r\n [emptyLabel]=\"col.emptyLabel || (isList() ? 'Sin elementos' : 'Suelta una tarjeta aqu\u00ED')\"\r\n >\r\n <!-- Plegada no pinta tarjetas: el CDK exige que sus items vivan en el contenedor. -->\r\n @if (!collapsed) {\r\n @for (id of orderOf(col.id); track id) {\r\n @if (itemOf(id); as item) {\r\n <div\r\n class=\"ius-kbboard__item\"\r\n cdkDrag\r\n #drag=\"cdkDrag\"\r\n [cdkDragData]=\"id\"\r\n [cdkDragDisabled]=\"!sortable() || !!item.disabled\"\r\n (pointerdown)=\"measure($event)\"\r\n (cdkDragStarted)=\"onDragStarted($event, col.id)\"\r\n >\r\n @if (renderCard(); as tpl) {\r\n <ng-container\r\n *ngTemplateOutlet=\"tpl; context: renderContext(item); injector: dragInjector(drag)\"\r\n />\r\n } @else {\r\n <ius-kanban-card\r\n [overline]=\"item.overline\"\r\n [title]=\"item.title\"\r\n [subtitle]=\"item.subtitle\"\r\n [paragraph]=\"item.paragraph\"\r\n [caption]=\"item.caption\"\r\n [tags]=\"item.tags\"\r\n [assignee]=\"item.assignee\"\r\n [flag]=\"item.flag\"\r\n [leading]=\"item.leading\"\r\n [trailing]=\"item.trailing\"\r\n [content]=\"item.content\"\r\n [templateContext]=\"itemContext(item)\"\r\n [actions]=\"item.actions\"\r\n [ariaLabel]=\"item.ariaLabel\"\r\n [layout]=\"item.layout ?? effLayout()\"\r\n [handle]=\"item.handle ?? effHandle()\"\r\n [accent]=\"accent()\"\r\n [disabled]=\"!!item.disabled\"\r\n [selected]=\"isSelected(item)\"\r\n [draggable]=\"sortable()\"\r\n [dragging]=\"isDragging(id)\"\r\n [itemId]=\"id\"\r\n [clickable]=\"isInteractive(item)\"\r\n (clicked)=\"onCardClick(item, $event)\"\r\n />\r\n }\r\n <div *cdkDragPlaceholder class=\"ius-kbcol__placeholder\" aria-hidden=\"true\" [style.height.px]=\"phHeight()\"></div>\r\n </div>\r\n }\r\n }\r\n }\r\n </ius-kanban-column>\r\n }\r\n\r\n @if (addColumn.observed && !isList()) {\r\n <div class=\"ius-kbboard__add-col\">\r\n <ius-text-button prefixIcon=\"add\" [label]=\"addColumnLabel()\" (clicked)=\"addColumn.emit($event)\" />\r\n </div>\r\n }\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%;height:100%;min-height:0}:host([data-variant=list]){height:auto}.ius-kbboard{box-sizing:border-box;display:flex;align-items:stretch;gap:var(--ius-space-md);width:100%;height:100%;min-height:0;padding:var(--ius-space-xxs);overflow-x:auto;overflow-y:hidden;font-family:var(--ius-font-body)}.ius-kbboard[data-variant=list]{flex-direction:column;align-items:stretch;gap:0;overflow:visible;height:auto}.ius-kbboard__add-col{flex:0 0 auto;align-self:stretch;min-width:200px;display:flex;align-items:center;justify-content:center;padding:var(--ius-space-md) var(--ius-space-md);border:1px dashed var(--ius-stroke);border-radius:var(--ius-radius-lg)}.ius-kbcol__placeholder{flex:0 0 auto;border:1px dashed var(--_kbc-accent);border-radius:var(--ius-radius-md);background:color-mix(in srgb,var(--_kbc-accent) 7%,transparent)}:host ::ng-deep .ius-kbcol__strip>.ius-kbcol__placeholder{display:none}.ius-kbcol.cdk-drag-placeholder{opacity:.5}.ius-kbboard__item.cdk-drag-preview>.ius-kbcard{opacity:.5;box-shadow:var(--ius-elevation-300)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "component", type: KanbanCardComponent, selector: "ius-kanban-card", inputs: ["overline", "title", "subtitle", "paragraph", "caption", "tags", "assignee", "flag", "leading", "trailing", "content", "templateContext", "layout", "handle", "accent", "selected", "dragging", "disabled", "state", "actions", "draggable", "itemId", "ariaLabel", "clickable"], outputs: ["clicked"] }, { kind: "component", type: KanbanColumnComponent, selector: "ius-kanban-column", inputs: ["title", "tone", "count", "accent", "actions", "addLabel", "addable", "empty", "emptyLabel", "emptyIcon", "bare", "width", "collapsible", "collapsed", "defaultCollapsed", "draggable", "dragging", "over"], outputs: ["addItem", "collapsedChange"] }, { kind: "component", type: TextButtonComponent, selector: "ius-text-button", inputs: ["label", "prefixIcon", "sufixIcon", "size", "disabled", "type", "ariaExpanded", "ariaControls"], outputs: ["clicked"] }, { kind: "directive", type: IusKanbanScrollParentsDirective, selector: "[iusKanbanScrollParents]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26818
26938
  }
26819
26939
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: KanbanBoardComponent, decorators: [{
26820
26940
  type: Component,
@@ -26830,8 +26950,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
26830
26950
  IusKanbanScrollParentsDirective,
26831
26951
  ], changeDetection: ChangeDetectionStrategy.OnPush, host: {
26832
26952
  '[attr.data-variant]': 'variant()',
26833
- }, template: "<!-- Ra\u00EDz = lista horizontal de columnas (cdkDropList) y grupo que conecta las\r\n listas de tarjetas (cdkDropListGroup no incluye a la lista de su mismo nodo). -->\r\n<div\r\n class=\"ius-kbboard ius-scroll\"\r\n [attr.data-variant]=\"variant()\"\r\n cdkDropListGroup\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListDisabled]=\"isList() || !reorderColumns()\"\r\n (cdkDropListDropped)=\"onColumnDrop($event)\"\r\n>\r\n @for (col of cols(); track col.id) {\r\n @let collapsed = isColCollapsed(col);\r\n <ius-kanban-column\r\n [attr.data-col-id]=\"col.id\"\r\n cdkDrag\r\n [cdkDragData]=\"col.id\"\r\n [cdkDragDisabled]=\"isList() || !reorderColumns()\"\r\n cdkDropList\r\n iusKanbanScrollParents\r\n [cdkDropListData]=\"col.id\"\r\n cdkDropListElementContainer=\".ius-kbcol__body, .ius-kbcol__strip\"\r\n [cdkDropListSortingDisabled]=\"collapsed\"\r\n (cdkDropListDropped)=\"onItemDrop($event)\"\r\n (cdkDropListEntered)=\"overCol.set(col.id)\"\r\n (cdkDropListExited)=\"onListExited(col.id)\"\r\n [title]=\"col.title\"\r\n [tone]=\"col.tone || 'neutral'\"\r\n [accent]=\"col.accent || accent()\"\r\n [count]=\"countOf(col)\"\r\n [actions]=\"columnActions().get(col.id)\"\r\n [bare]=\"!!col.bare || isList()\"\r\n [width]=\"col.width || columnWidth()\"\r\n [collapsible]=\"!!col.collapsible && !isList()\"\r\n [collapsed]=\"!!col.collapsible && !isList() ? collapsed : undefined\"\r\n (collapsedChange)=\"toggleCollapse(col, $event)\"\r\n [draggable]=\"reorderColumns() && !isList()\"\r\n [over]=\"overCol() === col.id\"\r\n [addable]=\"addItem.observed\"\r\n (addItem)=\"addItem.emit(isList() ? undefined : col.id)\"\r\n [addLabel]=\"col.addLabel\"\r\n [empty]=\"isEmpty(col)\"\r\n [emptyLabel]=\"col.emptyLabel || (isList() ? 'Sin elementos' : 'Suelta una tarjeta aqu\u00ED')\"\r\n >\r\n <!-- Plegada no pinta tarjetas: el CDK exige que sus items vivan en el contenedor. -->\r\n @if (!collapsed) {\r\n @for (id of orderOf(col.id); track id) {\r\n @if (itemOf(id); as item) {\r\n <div\r\n class=\"ius-kbboard__item\"\r\n cdkDrag\r\n #drag=\"cdkDrag\"\r\n [cdkDragData]=\"id\"\r\n [cdkDragDisabled]=\"!sortable() || !!item.disabled\"\r\n (pointerdown)=\"measure($event)\"\r\n (cdkDragStarted)=\"onDragStarted($event, col.id)\"\r\n >\r\n @if (renderCard(); as tpl) {\r\n <ng-container\r\n *ngTemplateOutlet=\"tpl; context: renderContext(item); injector: dragInjector(drag)\"\r\n />\r\n } @else {\r\n <ius-kanban-card\r\n [overline]=\"item.overline\"\r\n [title]=\"item.title\"\r\n [subtitle]=\"item.subtitle\"\r\n [paragraph]=\"item.paragraph\"\r\n [caption]=\"item.caption\"\r\n [tags]=\"item.tags\"\r\n [assignee]=\"item.assignee\"\r\n [flag]=\"item.flag\"\r\n [leading]=\"item.leading\"\r\n [trailing]=\"item.trailing\"\r\n [content]=\"item.content\"\r\n [templateContext]=\"itemContext(item)\"\r\n [actions]=\"item.actions\"\r\n [ariaLabel]=\"item.ariaLabel\"\r\n [layout]=\"item.layout ?? effLayout()\"\r\n [handle]=\"item.handle ?? effHandle()\"\r\n [accent]=\"accent()\"\r\n [disabled]=\"!!item.disabled\"\r\n [selected]=\"isSelected(item)\"\r\n [draggable]=\"sortable()\"\r\n [dragging]=\"isDragging(id)\"\r\n [itemId]=\"id\"\r\n [clickable]=\"isInteractive(item)\"\r\n (clicked)=\"onCardClick(item, $event)\"\r\n />\r\n }\r\n <div *cdkDragPlaceholder class=\"ius-kbcol__placeholder\" aria-hidden=\"true\" [style.height.px]=\"phHeight()\"></div>\r\n </div>\r\n }\r\n }\r\n }\r\n </ius-kanban-column>\r\n }\r\n\r\n @if (addColumn.observed && !isList()) {\r\n <div class=\"ius-kbboard__add-col\">\r\n <ius-text-button prefixIcon=\"add\" [label]=\"addColumnLabel()\" (clicked)=\"addColumn.emit($event)\" />\r\n </div>\r\n }\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%;height:100%;min-height:0}:host([data-variant=list]){height:auto}.ius-kbboard{box-sizing:border-box;display:flex;align-items:stretch;gap:var(--ius-space-md);width:100%;height:100%;min-height:0;padding:var(--ius-space-xxs);overflow-x:auto;overflow-y:hidden;font-family:var(--ius-font-body)}.ius-kbboard[data-variant=list]{flex-direction:column;align-items:stretch;gap:0;overflow:visible;height:auto}.ius-kbboard__add-col{flex:0 0 auto;align-self:stretch;min-width:200px;display:flex;align-items:center;justify-content:center;padding:var(--ius-space-md) var(--ius-space-md);border:1px dashed var(--ius-stroke);border-radius:var(--ius-radius-lg)}.ius-kbcol__placeholder{flex:0 0 auto;border:1px dashed var(--_kbc-accent);border-radius:var(--ius-radius-md);background:color-mix(in srgb,var(--_kbc-accent) 7%,transparent)}:host ::ng-deep .ius-kbcol__strip>.ius-kbcol__placeholder{display:none}.ius-kbcol.cdk-drag-placeholder{opacity:.5}.ius-kbboard__item.cdk-drag-preview>.ius-kbcard{opacity:.5;box-shadow:var(--ius-elevation-300)}\n"] }]
26834
- }], propDecorators: { columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], accent: [{ type: i0.Input, args: [{ isSignal: true, alias: "accent", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], sortable: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortable", required: false }] }], reorderColumns: [{ type: i0.Input, args: [{ isSignal: true, alias: "reorderColumns", required: false }] }], cardLayout: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardLayout", required: false }] }], cardHandle: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardHandle", required: false }] }], renderCard: [{ type: i0.Input, args: [{ isSignal: true, alias: "renderCard", required: false }] }], columnWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnWidth", required: false }] }], selectedItemId: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedItemId", required: false }] }], multiSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiSelect", required: false }] }], bulkMove: [{ type: i0.Input, args: [{ isSignal: true, alias: "bulkMove", required: false }] }], addColumnLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "addColumnLabel", required: false }] }], itemMove: [{
26953
+ }, template: "<!-- Ra\u00EDz = lista horizontal de columnas (cdkDropList) y grupo que conecta las\r\n listas de tarjetas (cdkDropListGroup no incluye a la lista de su mismo nodo). -->\r\n<div\r\n class=\"ius-kbboard ius-scroll\"\r\n [attr.data-variant]=\"variant()\"\r\n [attr.role]=\"ariaLabel() ? 'group' : null\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n cdkDropListGroup\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListDisabled]=\"isList() || !reorderColumns()\"\r\n (cdkDropListDropped)=\"onColumnDrop($event)\"\r\n>\r\n @for (col of cols(); track col.id) {\r\n @let collapsed = isColCollapsed(col);\r\n <ius-kanban-column\r\n [attr.data-col-id]=\"col.id\"\r\n cdkDrag\r\n [cdkDragData]=\"col.id\"\r\n [cdkDragDisabled]=\"isList() || !reorderColumns()\"\r\n cdkDropList\r\n iusKanbanScrollParents\r\n [cdkDropListData]=\"col.id\"\r\n cdkDropListElementContainer=\".ius-kbcol__body, .ius-kbcol__strip\"\r\n [cdkDropListSortingDisabled]=\"collapsed\"\r\n (cdkDropListDropped)=\"onItemDrop($event)\"\r\n (cdkDropListEntered)=\"overCol.set(col.id)\"\r\n (cdkDropListExited)=\"onListExited(col.id)\"\r\n [title]=\"col.title\"\r\n [tone]=\"col.tone || 'neutral'\"\r\n [accent]=\"col.accent || accent()\"\r\n [count]=\"countOf(col)\"\r\n [actions]=\"columnActions().get(col.id)\"\r\n [bare]=\"!!col.bare || isList()\"\r\n [width]=\"col.width || columnWidth()\"\r\n [collapsible]=\"!!col.collapsible && !isList()\"\r\n [collapsed]=\"!!col.collapsible && !isList() ? collapsed : undefined\"\r\n (collapsedChange)=\"toggleCollapse(col, $event)\"\r\n [draggable]=\"reorderColumns() && !isList()\"\r\n [over]=\"overCol() === col.id\"\r\n [addable]=\"addItem.observed\"\r\n (addItem)=\"addItem.emit(isList() ? undefined : col.id)\"\r\n [addLabel]=\"col.addLabel\"\r\n [empty]=\"isEmpty(col)\"\r\n [emptyLabel]=\"col.emptyLabel || (isList() ? 'Sin elementos' : 'Suelta una tarjeta aqu\u00ED')\"\r\n >\r\n <!-- Plegada no pinta tarjetas: el CDK exige que sus items vivan en el contenedor. -->\r\n @if (!collapsed) {\r\n @for (id of orderOf(col.id); track id) {\r\n @if (itemOf(id); as item) {\r\n <div\r\n class=\"ius-kbboard__item\"\r\n cdkDrag\r\n #drag=\"cdkDrag\"\r\n [cdkDragData]=\"id\"\r\n [cdkDragDisabled]=\"!sortable() || !!item.disabled\"\r\n (pointerdown)=\"measure($event)\"\r\n (cdkDragStarted)=\"onDragStarted($event, col.id)\"\r\n >\r\n @if (renderCard(); as tpl) {\r\n <ng-container\r\n *ngTemplateOutlet=\"tpl; context: renderContext(item); injector: dragInjector(drag)\"\r\n />\r\n } @else {\r\n <ius-kanban-card\r\n [overline]=\"item.overline\"\r\n [title]=\"item.title\"\r\n [subtitle]=\"item.subtitle\"\r\n [paragraph]=\"item.paragraph\"\r\n [caption]=\"item.caption\"\r\n [tags]=\"item.tags\"\r\n [assignee]=\"item.assignee\"\r\n [flag]=\"item.flag\"\r\n [leading]=\"item.leading\"\r\n [trailing]=\"item.trailing\"\r\n [content]=\"item.content\"\r\n [templateContext]=\"itemContext(item)\"\r\n [actions]=\"item.actions\"\r\n [ariaLabel]=\"item.ariaLabel\"\r\n [layout]=\"item.layout ?? effLayout()\"\r\n [handle]=\"item.handle ?? effHandle()\"\r\n [accent]=\"accent()\"\r\n [disabled]=\"!!item.disabled\"\r\n [selected]=\"isSelected(item)\"\r\n [draggable]=\"sortable()\"\r\n [dragging]=\"isDragging(id)\"\r\n [itemId]=\"id\"\r\n [clickable]=\"isInteractive(item)\"\r\n (clicked)=\"onCardClick(item, $event)\"\r\n />\r\n }\r\n <div *cdkDragPlaceholder class=\"ius-kbcol__placeholder\" aria-hidden=\"true\" [style.height.px]=\"phHeight()\"></div>\r\n </div>\r\n }\r\n }\r\n }\r\n </ius-kanban-column>\r\n }\r\n\r\n @if (addColumn.observed && !isList()) {\r\n <div class=\"ius-kbboard__add-col\">\r\n <ius-text-button prefixIcon=\"add\" [label]=\"addColumnLabel()\" (clicked)=\"addColumn.emit($event)\" />\r\n </div>\r\n }\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%;height:100%;min-height:0}:host([data-variant=list]){height:auto}.ius-kbboard{box-sizing:border-box;display:flex;align-items:stretch;gap:var(--ius-space-md);width:100%;height:100%;min-height:0;padding:var(--ius-space-xxs);overflow-x:auto;overflow-y:hidden;font-family:var(--ius-font-body)}.ius-kbboard[data-variant=list]{flex-direction:column;align-items:stretch;gap:0;overflow:visible;height:auto}.ius-kbboard__add-col{flex:0 0 auto;align-self:stretch;min-width:200px;display:flex;align-items:center;justify-content:center;padding:var(--ius-space-md) var(--ius-space-md);border:1px dashed var(--ius-stroke);border-radius:var(--ius-radius-lg)}.ius-kbcol__placeholder{flex:0 0 auto;border:1px dashed var(--_kbc-accent);border-radius:var(--ius-radius-md);background:color-mix(in srgb,var(--_kbc-accent) 7%,transparent)}:host ::ng-deep .ius-kbcol__strip>.ius-kbcol__placeholder{display:none}.ius-kbcol.cdk-drag-placeholder{opacity:.5}.ius-kbboard__item.cdk-drag-preview>.ius-kbcard{opacity:.5;box-shadow:var(--ius-elevation-300)}\n"] }]
26954
+ }], propDecorators: { columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], accent: [{ type: i0.Input, args: [{ isSignal: true, alias: "accent", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], sortable: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortable", required: false }] }], reorderColumns: [{ type: i0.Input, args: [{ isSignal: true, alias: "reorderColumns", required: false }] }], cardLayout: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardLayout", required: false }] }], cardHandle: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardHandle", required: false }] }], renderCard: [{ type: i0.Input, args: [{ isSignal: true, alias: "renderCard", required: false }] }], columnWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnWidth", required: false }] }], selectedItemId: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedItemId", required: false }] }], multiSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiSelect", required: false }] }], bulkMove: [{ type: i0.Input, args: [{ isSignal: true, alias: "bulkMove", required: false }] }], addColumnLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "addColumnLabel", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], itemMove: [{
26835
26955
  type: Output
26836
26956
  }], itemsMove: [{
26837
26957
  type: Output