@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,
|
|
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'),
|
|
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
|
|
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
|
|
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
|
-
/**
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|