@fabio.buscaroli/scm-utils 22.0.1

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.
Files changed (42) hide show
  1. package/README.md +10 -0
  2. package/fesm2022/abv-scm-utils-core.mjs +3293 -0
  3. package/fesm2022/abv-scm-utils-core.mjs.map +1 -0
  4. package/fesm2022/abv-scm-utils-tinymce.mjs +230 -0
  5. package/fesm2022/abv-scm-utils-tinymce.mjs.map +1 -0
  6. package/fesm2022/abv-scm-utils-ui.application.mjs +3396 -0
  7. package/fesm2022/abv-scm-utils-ui.application.mjs.map +1 -0
  8. package/fesm2022/abv-scm-utils-ui.mjs +3060 -0
  9. package/fesm2022/abv-scm-utils-ui.mjs.map +1 -0
  10. package/fesm2022/abv-scm-utils-ui.oauth.mjs +278 -0
  11. package/fesm2022/abv-scm-utils-ui.oauth.mjs.map +1 -0
  12. package/fesm2022/abv-scm-utils.mjs +13 -0
  13. package/fesm2022/abv-scm-utils.mjs.map +1 -0
  14. package/fesm2022/fabio.buscaroli-scm-utils-core.mjs +3293 -0
  15. package/fesm2022/fabio.buscaroli-scm-utils-core.mjs.map +1 -0
  16. package/fesm2022/fabio.buscaroli-scm-utils-tinymce.mjs +230 -0
  17. package/fesm2022/fabio.buscaroli-scm-utils-tinymce.mjs.map +1 -0
  18. package/fesm2022/fabio.buscaroli-scm-utils-ui.application.mjs +3396 -0
  19. package/fesm2022/fabio.buscaroli-scm-utils-ui.application.mjs.map +1 -0
  20. package/fesm2022/fabio.buscaroli-scm-utils-ui.mjs +3060 -0
  21. package/fesm2022/fabio.buscaroli-scm-utils-ui.mjs.map +1 -0
  22. package/fesm2022/fabio.buscaroli-scm-utils-ui.oauth.mjs +278 -0
  23. package/fesm2022/fabio.buscaroli-scm-utils-ui.oauth.mjs.map +1 -0
  24. package/fesm2022/fabio.buscaroli-scm-utils.mjs +13 -0
  25. package/fesm2022/fabio.buscaroli-scm-utils.mjs.map +1 -0
  26. package/package.json +58 -0
  27. package/styles/ui.colors.scss +77 -0
  28. package/styles/ui.scss +350 -0
  29. package/tinymce/README.md +12 -0
  30. package/tinymce/langs/it.js +466 -0
  31. package/types/abv-scm-utils-core.d.ts +1536 -0
  32. package/types/abv-scm-utils-tinymce.d.ts +59 -0
  33. package/types/abv-scm-utils-ui.application.d.ts +1504 -0
  34. package/types/abv-scm-utils-ui.d.ts +1393 -0
  35. package/types/abv-scm-utils-ui.oauth.d.ts +68 -0
  36. package/types/abv-scm-utils.d.ts +4 -0
  37. package/types/fabio.buscaroli-scm-utils-core.d.ts +1536 -0
  38. package/types/fabio.buscaroli-scm-utils-tinymce.d.ts +59 -0
  39. package/types/fabio.buscaroli-scm-utils-ui.application.d.ts +1504 -0
  40. package/types/fabio.buscaroli-scm-utils-ui.d.ts +1393 -0
  41. package/types/fabio.buscaroli-scm-utils-ui.oauth.d.ts +68 -0
  42. package/types/fabio.buscaroli-scm-utils.d.ts +4 -0
@@ -0,0 +1,3060 @@
1
+ import { MatPaginatorIntl } from '@angular/material/paginator';
2
+ import * as i0 from '@angular/core';
3
+ import { Injectable, signal, ChangeDetectionStrategy, Component, output, inject, Service, input, computed, viewChildren, forwardRef, InjectionToken, TemplateRef, ViewContainerRef, effect, Directive, ElementRef, Renderer2, PLATFORM_ID, isDevMode, NgModule } from '@angular/core';
4
+ import { Overlay } from '@angular/cdk/overlay';
5
+ import { ComponentPortal } from '@angular/cdk/portal';
6
+ import { PlatformLocation, isPlatformBrowser } from '@angular/common';
7
+ import { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogClose, MatDialogActions, MatDialog } from '@angular/material/dialog';
8
+ import { MAT_SNACK_BAR_DATA, MatSnackBar } from '@angular/material/snack-bar';
9
+ import { SafeHtmlPipe, SystemUtils, PasswordValidatorDirective, EqualsValidatorDirective } from '@abv/scm-utils/core';
10
+ import { timer, map, distinctUntilChanged, shareReplay } from 'rxjs';
11
+ import { tap, first } from 'rxjs/operators';
12
+ import * as i3 from '@angular/material/progress-spinner';
13
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
14
+ import * as i2 from '@angular/material/progress-bar';
15
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
16
+ import * as i1 from '@ngbracket/ngx-layout/flex';
17
+ import { FlexModule } from '@ngbracket/ngx-layout/flex';
18
+ import * as i3$1 from '@angular/material/icon';
19
+ import { MatIcon, MatIconModule } from '@angular/material/icon';
20
+ import * as i2$2 from '@angular/material/button';
21
+ import { MatButtonModule } from '@angular/material/button';
22
+ import * as i1$1 from '@angular/forms';
23
+ import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
24
+ import * as i2$1 from '@angular/material/checkbox';
25
+ import { MatCheckboxModule } from '@angular/material/checkbox';
26
+ import * as i4 from '@angular/material/tooltip';
27
+ import { MatTooltipModule } from '@angular/material/tooltip';
28
+ import * as i2$3 from '@angular/material/form-field';
29
+ import { MatFormFieldModule } from '@angular/material/form-field';
30
+ import * as i3$2 from '@angular/material/input';
31
+ import { MatInputModule } from '@angular/material/input';
32
+ import { BreakpointObserver } from '@angular/cdk/layout';
33
+ import { toSignal } from '@angular/core/rxjs-interop';
34
+
35
+ /** Italian localisation for the Material paginator labels. */
36
+ class PaginatorIntl extends MatPaginatorIntl {
37
+ constructor() {
38
+ super(...arguments);
39
+ this.itemsPerPageLabel = 'Elementi per pagina';
40
+ this.nextPageLabel = 'Prossima pagina';
41
+ this.previousPageLabel = 'Pagina precedente';
42
+ this.lastPageLabel = 'Ultima pagina';
43
+ this.firstPageLabel = 'Prima pagina';
44
+ /**
45
+ * Returns the human-readable range label shown inside the paginator.
46
+ * @param page - Zero-based index of the current page.
47
+ * @param pageSize - Number of items displayed per page.
48
+ * @param length - Total number of items, or `-1` when the total is still being calculated.
49
+ * @returns A formatted string such as `"1 - 25 di 100"`.
50
+ */
51
+ this.getRangeLabel = (page, pageSize, length) => {
52
+ if (length === -1) {
53
+ return '0 di calcolo...';
54
+ }
55
+ if (length === 0 || pageSize === 0) {
56
+ return `0 di ${length}`;
57
+ }
58
+ const totalLength = Math.max(length, 0);
59
+ const startIndex = page * pageSize;
60
+ // If the start index exceeds the list length, do not try to fix the end index.
61
+ const endIndex = startIndex < totalLength
62
+ ? Math.min(startIndex + pageSize, totalLength)
63
+ : startIndex + pageSize;
64
+ return `${startIndex + 1} - ${endIndex} di ${totalLength}`;
65
+ };
66
+ }
67
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: PaginatorIntl, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
68
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: PaginatorIntl }); }
69
+ }
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: PaginatorIntl, decorators: [{
71
+ type: Injectable
72
+ }] });
73
+
74
+ /**
75
+ * Overlay dialog that blocks interaction while a background operation is in progress.
76
+ * Supports four visual styles: progress bar, spinner, hourglass, and wait icon.
77
+ */
78
+ class BusyDialogComponent {
79
+ constructor() {
80
+ /** Visual style of the busy indicator. */
81
+ this.type = signal('bar', /* @ts-ignore */
82
+ ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
83
+ /** Current progress value (0–100). Used when `progressMode` is `'determinate'`. */
84
+ this.progress = signal(0, /* @ts-ignore */
85
+ ...(ngDevMode ? [{ debugName: "progress" }] : /* istanbul ignore next */ []));
86
+ /** Progress mode passed to the Material progress components. */
87
+ this.progressMode = signal('indeterminate', /* @ts-ignore */
88
+ ...(ngDevMode ? [{ debugName: "progressMode" }] : /* istanbul ignore next */ []));
89
+ /** Message displayed above the progress indicator. */
90
+ this.message = signal('', /* @ts-ignore */
91
+ ...(ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []));
92
+ }
93
+ /**
94
+ * Updates the busy dialog state.
95
+ * @param message - New message to display. Ignored when empty, preserving the previous text.
96
+ * @param progress - Current progress value (0–100). A value > 0 forces `'determinate'` mode.
97
+ * @param progressMode - Progress bar/spinner mode (default: `'indeterminate'`).
98
+ * @param type - Visual style to use (default: `'bar'`).
99
+ */
100
+ set(message, progress, progressMode = 'indeterminate', type = 'bar') {
101
+ if (message) {
102
+ this.message.set(message);
103
+ }
104
+ if (type) {
105
+ this.type.set(type);
106
+ }
107
+ this.progress.set(progress);
108
+ this.progressMode.set(progress > 0 ? 'determinate' : progressMode);
109
+ }
110
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: BusyDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
111
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: BusyDialogComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, ngImport: i0, template: "@if(type() === 'hourglass') {\r\n<div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\r\n <div><mat-icon class=\"mat-icon-spinner\">hourglass</mat-icon></div>\r\n @if (message()) {\r\n <div [innerHTML]=\"message() | safeHtml\" class=\"busy-message\"></div>\r\n }\r\n</div>\r\n} @else if (type() === 'wait') {\r\n<div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\r\n <div><mat-icon class=\"mat-icon-spinner\">hourglass</mat-icon></div>\r\n</div>\r\n} @else {\r\n<div class=\"busy-panel\">\r\n <div fxLayout=\"column\" fxFill>\r\n @if (message()) {\r\n <div [innerHTML]=\"message() | safeHtml\" class=\"busy-message\"></div>\r\n }\r\n @if (type() === 'bar') {\r\n <div>\r\n <mat-progress-bar [mode]=\"progressMode()\" [value]=\"progress()\"\r\n style=\"margin:15px auto 0 auto; max-width: 350px;\"></mat-progress-bar>\r\n </div>\r\n } @else if (type() === 'spinner') {\r\n <div>\r\n <mat-progress-spinner [mode]=\"progressMode()\" diameter=\"70\" [value]=\"progress()\"\r\n style=\"margin:15px auto 0 auto;\"></mat-progress-spinner>\r\n </div>\r\n }\r\n @if (progress() > 0) {\r\n <div>\r\n <span style=\"font-size: smaller;\"><b>{{progress()}}%</b></span>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n}", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}.busy-message{font-size:larger;font-weight:600;padding-top:15px;padding-bottom:15px;text-align:center}.busy-panel{background-color:var(--mat-dialog-container-color);border-radius:var(--mat-dialog-container-shape, 24px);box-shadow:0 4px 8px #0003,0 6px 20px #00000030;padding:24px;min-width:250px;margin:12px}.busy-panel .busy-message{font-size:larger;font-weight:600;padding-bottom:15px;text-align:center}.busy-backdrop{background-color:#0000006b!important}.mat-icon-spinner{animation:matIconSpinnerKeyFrames 3s linear infinite;font-size:5em;width:1em;height:1em}@keyframes matIconSpinnerKeyFrames{0%{transform:rotate(360deg)}to{transform:rotate(0)}}\n"], dependencies: [{ kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i2.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
112
+ }
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: BusyDialogComponent, decorators: [{
114
+ type: Component,
115
+ args: [{ host: { 'Bind': SystemUtils.generateUUID() }, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [FlexModule, MatProgressBarModule, MatProgressSpinnerModule, MatIcon, SafeHtmlPipe], template: "@if(type() === 'hourglass') {\r\n<div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\r\n <div><mat-icon class=\"mat-icon-spinner\">hourglass</mat-icon></div>\r\n @if (message()) {\r\n <div [innerHTML]=\"message() | safeHtml\" class=\"busy-message\"></div>\r\n }\r\n</div>\r\n} @else if (type() === 'wait') {\r\n<div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\r\n <div><mat-icon class=\"mat-icon-spinner\">hourglass</mat-icon></div>\r\n</div>\r\n} @else {\r\n<div class=\"busy-panel\">\r\n <div fxLayout=\"column\" fxFill>\r\n @if (message()) {\r\n <div [innerHTML]=\"message() | safeHtml\" class=\"busy-message\"></div>\r\n }\r\n @if (type() === 'bar') {\r\n <div>\r\n <mat-progress-bar [mode]=\"progressMode()\" [value]=\"progress()\"\r\n style=\"margin:15px auto 0 auto; max-width: 350px;\"></mat-progress-bar>\r\n </div>\r\n } @else if (type() === 'spinner') {\r\n <div>\r\n <mat-progress-spinner [mode]=\"progressMode()\" diameter=\"70\" [value]=\"progress()\"\r\n style=\"margin:15px auto 0 auto;\"></mat-progress-spinner>\r\n </div>\r\n }\r\n @if (progress() > 0) {\r\n <div>\r\n <span style=\"font-size: smaller;\"><b>{{progress()}}%</b></span>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n}", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}.busy-message{font-size:larger;font-weight:600;padding-top:15px;padding-bottom:15px;text-align:center}.busy-panel{background-color:var(--mat-dialog-container-color);border-radius:var(--mat-dialog-container-shape, 24px);box-shadow:0 4px 8px #0003,0 6px 20px #00000030;padding:24px;min-width:250px;margin:12px}.busy-panel .busy-message{font-size:larger;font-weight:600;padding-bottom:15px;text-align:center}.busy-backdrop{background-color:#0000006b!important}.mat-icon-spinner{animation:matIconSpinnerKeyFrames 3s linear infinite;font-size:5em;width:1em;height:1em}@keyframes matIconSpinnerKeyFrames{0%{transform:rotate(360deg)}to{transform:rotate(0)}}\n"] }]
116
+ }] });
117
+
118
+ class ConfirmDialogComponent {
119
+ constructor() {
120
+ /** Emitted when the user makes a choice. Carries the selected result and any option state. */
121
+ this.choosen = output();
122
+ this.dialogRef = inject((MatDialogRef));
123
+ /** Dialog configuration, with sensible defaults applied at construction time. */
124
+ this.dialogData = signal({
125
+ title: 'Conferma',
126
+ okCaption: 'Si',
127
+ cancelCaption: 'No',
128
+ message: '',
129
+ ...(inject(MAT_DIALOG_DATA) ?? {}),
130
+ }, /* @ts-ignore */
131
+ ...(ngDevMode ? [{ debugName: "dialogData" }] : /* istanbul ignore next */ []));
132
+ // Ensure optional captions always have a value even when the caller omits them
133
+ this.dialogData.update(d => ({
134
+ ...d,
135
+ title: d.title ?? 'Conferma',
136
+ okCaption: d.okCaption ?? 'Si',
137
+ cancelCaption: d.cancelCaption ?? 'No',
138
+ }));
139
+ }
140
+ /**
141
+ * Confirms the dialog, emitting `'ok'` together with the current option selections.
142
+ */
143
+ ok() {
144
+ this.choosen.emit({ result: 'ok', options: this.dialogData().options });
145
+ this.dialogRef.close();
146
+ }
147
+ /**
148
+ * Cancels the dialog, emitting `'cancel'`.
149
+ */
150
+ cancel() {
151
+ this.choosen.emit({ result: 'cancel' });
152
+ this.dialogRef.close();
153
+ }
154
+ /**
155
+ * Triggers the tertiary action, emitting `'other'`.
156
+ */
157
+ other() {
158
+ this.choosen.emit({ result: 'other' });
159
+ this.dialogRef.close();
160
+ }
161
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ConfirmDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
162
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: ConfirmDialogComponent, isStandalone: true, selector: "ng-component", outputs: { choosen: "choosen" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, ngImport: i0, template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData().message) {\r\n <div [innerHtml]=\"dialogData().message | safeHtml\"></div>\r\n }\r\n </div>\r\n @if (dialogData().details) {\r\n <div class=\"details-box\">\r\n <p class=\"x-small uppercase secondary\">Dettaglio:</p>\r\n <div class=\"small details\">\r\n <div [innerHtml]=\"dialogData().details | safeHtml\"></div>\r\n </div>\r\n </div>\r\n }\r\n @if (dialogData().options) {\r\n <div>\r\n @for (o of dialogData().options; track o; let i = $index) {\r\n <div>\r\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\" >\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <br>\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"30\">\r\n @if (dialogData().otherCaption) {\r\n <button mat-flat-button (click)=\"other()\"\r\n [mat-dialog-close]=\"true\">{{dialogData().otherCaption}}</button>\r\n }\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button (click)=\"ok()\"\r\n [mat-dialog-close]=\"true\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" (click)=\"cancel()\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}.dialog-content{padding:0 24px 24px!important}.details-box{border-top:1px solid var(--ars-color-divider, #757d87)}.details{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:5px;max-height:350px;padding:8px 12px;overflow:auto}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i2$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
163
+ }
164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ConfirmDialogComponent, decorators: [{
165
+ type: Component,
166
+ args: [{ host: { 'Bind': SystemUtils.generateUUID() }, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatDialogTitle, MatDialogContent, MatDialogClose, FlexModule, MatCheckboxModule, FormsModule,
167
+ MatDialogActions, MatButtonModule, SafeHtmlPipe], template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData().message) {\r\n <div [innerHtml]=\"dialogData().message | safeHtml\"></div>\r\n }\r\n </div>\r\n @if (dialogData().details) {\r\n <div class=\"details-box\">\r\n <p class=\"x-small uppercase secondary\">Dettaglio:</p>\r\n <div class=\"small details\">\r\n <div [innerHtml]=\"dialogData().details | safeHtml\"></div>\r\n </div>\r\n </div>\r\n }\r\n @if (dialogData().options) {\r\n <div>\r\n @for (o of dialogData().options; track o; let i = $index) {\r\n <div>\r\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\" >\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <br>\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"30\">\r\n @if (dialogData().otherCaption) {\r\n <button mat-flat-button (click)=\"other()\"\r\n [mat-dialog-close]=\"true\">{{dialogData().otherCaption}}</button>\r\n }\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button (click)=\"ok()\"\r\n [mat-dialog-close]=\"true\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" (click)=\"cancel()\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}.dialog-content{padding:0 24px 24px!important}.details-box{border-top:1px solid var(--ars-color-divider, #757d87)}.details{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:5px;max-height:350px;padding:8px 12px;overflow:auto}\n"] }]
168
+ }], ctorParameters: () => [], propDecorators: { choosen: [{ type: i0.Output, args: ["choosen"] }] } });
169
+
170
+ class InfoDialogComponent {
171
+ constructor() {
172
+ this.dialogService = inject(DialogService);
173
+ this.dialogRef = inject((MatDialogRef));
174
+ /** Dialog configuration with defaults applied at construction time. */
175
+ this.dialogData = signal((() => {
176
+ const raw = inject(MAT_DIALOG_DATA) ?? { message: '' };
177
+ return { title: 'Informazioni', ...raw };
178
+ })(), /* @ts-ignore */
179
+ ...(ngDevMode ? [{ debugName: "dialogData" }] : /* istanbul ignore next */ []));
180
+ // Schedule auto-dismiss if configured
181
+ const dismissAfter = this.dialogData().dismissAfter;
182
+ if (dismissAfter) {
183
+ setTimeout(() => this.dialogRef.close(), dismissAfter);
184
+ }
185
+ }
186
+ /**
187
+ * Replaces the dialog data at runtime (e.g. after an async operation resolves).
188
+ * Also re-schedules the auto-dismiss timer if `dismissAfter` is set.
189
+ * @param data - The new dialog data to display.
190
+ */
191
+ setData(data) {
192
+ this.dialogData.set({ title: 'Informazioni', ...data });
193
+ if (data.dismissAfter) {
194
+ setTimeout(() => this.dialogRef.close(), data.dismissAfter);
195
+ }
196
+ }
197
+ /**
198
+ * Invokes the optional navigation callback provided by the caller.
199
+ * @param url - The URL to navigate to.
200
+ */
201
+ navigate(url) {
202
+ this.dialogData().onNavigate?.(url);
203
+ }
204
+ /**
205
+ * Copy to clipboard
206
+ */
207
+ async copy() {
208
+ const elem = document.getElementById('info-dialog-content');
209
+ if (!elem)
210
+ return;
211
+ const htmlBlob = new Blob([elem.innerHTML], { type: 'text/html' });
212
+ const textBlob = new Blob([elem.innerText], { type: 'text/plain' });
213
+ try {
214
+ const data = [
215
+ new ClipboardItem({
216
+ 'text/html': htmlBlob,
217
+ 'text/plain': textBlob
218
+ })
219
+ ];
220
+ setTimeout(async () => {
221
+ window.focus();
222
+ await navigator.clipboard.write(data);
223
+ }, 0);
224
+ this.dialogService.toast('Copiato negli appunti.');
225
+ }
226
+ catch (err) {
227
+ this.dialogService.toast(`Errore copiando negli appunti: ${err}`);
228
+ }
229
+ }
230
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: InfoDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
231
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: InfoDialogComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, ngImport: i0, template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxFill id=\"info-dialog-content\">\r\n <div fxFlex=\"*\">\r\n @if (dialogData().message) {\r\n <div [innerHtml]=\"dialogData().message | safeHtml\"></div>\r\n }\r\n </div>\r\n @if (dialogData().details) {\r\n <div class=\"details-box\">\r\n <p class=\"x-small uppercase secondary\">Dettaglio:</p>\r\n <div class=\"small details\">\r\n <div [innerHtml]=\"dialogData().details | safeHtml\"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <br>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <button mat-icon-button (click)=\"copy()\" matTooltip=\"Copia negli appunti\"><mat-icon>content_copy</mat-icon></button>\r\n <button mat-flat-button [mat-dialog-close]=\"true\" cdkFocusInitial>{{dialogData().okCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}.dialog-content{padding:0 24px 24px!important}.details-box{border-top:1px solid var(--ars-color-divider, #757d87)}.details{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:5px;max-height:350px;padding:8px 12px;overflow:auto}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
232
+ }
233
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: InfoDialogComponent, decorators: [{
234
+ type: Component,
235
+ args: [{ host: { 'Bind': SystemUtils.generateUUID() }, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatDialogTitle, MatDialogContent, MatDialogActions, FlexModule,
236
+ MatButtonModule, MatIconModule, MatDialogClose, MatTooltipModule, SafeHtmlPipe], template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxFill id=\"info-dialog-content\">\r\n <div fxFlex=\"*\">\r\n @if (dialogData().message) {\r\n <div [innerHtml]=\"dialogData().message | safeHtml\"></div>\r\n }\r\n </div>\r\n @if (dialogData().details) {\r\n <div class=\"details-box\">\r\n <p class=\"x-small uppercase secondary\">Dettaglio:</p>\r\n <div class=\"small details\">\r\n <div [innerHtml]=\"dialogData().details | safeHtml\"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <br>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <button mat-icon-button (click)=\"copy()\" matTooltip=\"Copia negli appunti\"><mat-icon>content_copy</mat-icon></button>\r\n <button mat-flat-button [mat-dialog-close]=\"true\" cdkFocusInitial>{{dialogData().okCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}.dialog-content{padding:0 24px 24px!important}.details-box{border-top:1px solid var(--ars-color-divider, #757d87)}.details{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:5px;max-height:350px;padding:8px 12px;overflow:auto}\n"] }]
237
+ }], ctorParameters: () => [] });
238
+
239
+ class ToastComponent {
240
+ constructor() {
241
+ /** Emitted when the user clicks the optional action button. */
242
+ this.action = output();
243
+ /** Snack-bar payload with a safe fallback to an empty message when no data is injected. */
244
+ this.dialogData = signal(inject(MAT_SNACK_BAR_DATA) ?? { message: '' }, /* @ts-ignore */
245
+ ...(ngDevMode ? [{ debugName: "dialogData" }] : /* istanbul ignore next */ []));
246
+ }
247
+ /**
248
+ * Emits the `action` event to notify the caller that the action button was clicked.
249
+ */
250
+ do() {
251
+ this.action.emit();
252
+ }
253
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
254
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: ToastComponent, isStandalone: true, selector: "ng-component", outputs: { action: "action" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, ngImport: i0, template: "<div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n @if (dialogData().icon) {\r\n <div fxFlex='30px' fxLayoutAlign=\"start\" fxFlexAlign=\"center\">\r\n <mat-icon>{{dialogData().icon}}</mat-icon>\r\n </div>\r\n }\r\n <div fxFlex='*' fxLayoutAlign=\"start\" fxFlexAlign=\"center\">\r\n @if (dialogData().message) {\r\n <span [innerHTML]=\"dialogData().message | safeHtml\"></span>\r\n }\r\n </div>\r\n @if (dialogData().actionCaption) {\r\n <div fxLayoutAlign=\"end\" fxFlexAlign=\"center\">\r\n <div style=\"padding-left: 20px;\">\r\n <button type=\"button\" mat-flat-button (click)=\"do()\"\r\n [innerHTML]=\"dialogData().actionCaption\"></button>\r\n </div>\r\n </div>\r\n }\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
255
+ }
256
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ToastComponent, decorators: [{
257
+ type: Component,
258
+ args: [{ host: { 'Bind': SystemUtils.generateUUID() }, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [FlexModule, MatIconModule, MatButtonModule, SafeHtmlPipe], template: "<div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n @if (dialogData().icon) {\r\n <div fxFlex='30px' fxLayoutAlign=\"start\" fxFlexAlign=\"center\">\r\n <mat-icon>{{dialogData().icon}}</mat-icon>\r\n </div>\r\n }\r\n <div fxFlex='*' fxLayoutAlign=\"start\" fxFlexAlign=\"center\">\r\n @if (dialogData().message) {\r\n <span [innerHTML]=\"dialogData().message | safeHtml\"></span>\r\n }\r\n </div>\r\n @if (dialogData().actionCaption) {\r\n <div fxLayoutAlign=\"end\" fxFlexAlign=\"center\">\r\n <div style=\"padding-left: 20px;\">\r\n <button type=\"button\" mat-flat-button (click)=\"do()\"\r\n [innerHTML]=\"dialogData().actionCaption\"></button>\r\n </div>\r\n </div>\r\n }\r\n</div>" }]
259
+ }], propDecorators: { action: [{ type: i0.Output, args: ["action"] }] } });
260
+
261
+ class UIService {
262
+ constructor() {
263
+ /**
264
+ * The default Material form-field appearance used across dialogs and forms.
265
+ * Defaults to `'fill'`.
266
+ */
267
+ this.appearance = signal('fill', /* @ts-ignore */
268
+ ...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
269
+ }
270
+ /**
271
+ * Updates the global form-field appearance.
272
+ * @param value - The new appearance value. Falls back to `'fill'` when `undefined` is passed.
273
+ */
274
+ setAppearance(value) {
275
+ this.appearance.set(value ?? 'fill');
276
+ }
277
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: UIService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
278
+ static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.1", ngImport: i0, type: UIService }); }
279
+ }
280
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: UIService, decorators: [{
281
+ type: Service
282
+ }] });
283
+
284
+ var DeleteDialogConfirmMode;
285
+ (function (DeleteDialogConfirmMode) {
286
+ DeleteDialogConfirmMode[DeleteDialogConfirmMode["None"] = 0] = "None";
287
+ DeleteDialogConfirmMode[DeleteDialogConfirmMode["Simple"] = 1] = "Simple";
288
+ DeleteDialogConfirmMode[DeleteDialogConfirmMode["Strong"] = 2] = "Strong";
289
+ })(DeleteDialogConfirmMode || (DeleteDialogConfirmMode = {}));
290
+ class DeleteDialogComponent {
291
+ constructor() {
292
+ /** Emitted when the user makes a choice. Carries the selected result. */
293
+ this.choosen = output();
294
+ this.dialogRef = inject((MatDialogRef));
295
+ /** Dialog configuration with defaults applied at construction time. */
296
+ this.dialogData = signal((() => {
297
+ const raw = inject(MAT_DIALOG_DATA) ?? {};
298
+ return {
299
+ title: 'Attenzione',
300
+ okCaption: 'Si',
301
+ cancelCaption: 'No',
302
+ confirmMode: DeleteDialogConfirmMode.None,
303
+ message: '',
304
+ ...raw,
305
+ };
306
+ })(), /* @ts-ignore */
307
+ ...(ngDevMode ? [{ debugName: "dialogData" }] : /* istanbul ignore next */ []));
308
+ /**
309
+ * Whether the user has confirmed the deletion.
310
+ * Starts as `true` for all modes except `Simple`, which requires explicit checkbox confirmation.
311
+ */
312
+ this.confirmed = signal(this.dialogData().confirmMode !== DeleteDialogConfirmMode.Simple, /* @ts-ignore */
313
+ ...(ngDevMode ? [{ debugName: "confirmed" }] : /* istanbul ignore next */ []));
314
+ }
315
+ /**
316
+ * Confirms the deletion, emitting `'ok'` and closing the dialog.
317
+ */
318
+ ok() {
319
+ this.choosen.emit({ result: 'ok' });
320
+ this.dialogRef.close();
321
+ }
322
+ /**
323
+ * Cancels the operation, emitting `'cancel'` and closing the dialog.
324
+ */
325
+ cancel() {
326
+ this.choosen.emit({ result: 'cancel' });
327
+ this.dialogRef.close();
328
+ }
329
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DeleteDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
330
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: DeleteDialogComponent, isStandalone: true, selector: "ng-component", outputs: { choosen: "choosen" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, ngImport: i0, template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData().message) {\r\n <div [innerHtml]=\"dialogData().message | safeHtml\"></div>\r\n }\r\n </div>\r\n @if (dialogData().details) {\r\n <div class=\"details-box\">\r\n <p class=\"x-small uppercase secondary\">Dettaglio:</p>\r\n <div class=\"small details\">\r\n <div [innerHtml]=\"dialogData().details | safeHtml\"></div>\r\n </div>\r\n </div>\r\n }\r\n @if (dialogData().confirmMode === 1) {\r\n <div>\r\n <mat-checkbox (change)=\"confirmed.set($event.checked)\" [checked]=\"confirmed()\">\r\n Confermo la cancellazione\r\n </mat-checkbox>\r\n </div>\r\n } @else if (dialogData().confirmMode === 2) {\r\n <p>Per confermare la cancellazione digita la parola <i><b>elimina</b></i>.</p>\r\n <mat-form-field style=\"width: 200px\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Conferma</mat-label>\r\n <input matInput #field_confirm=\"ngModel\" [(ngModel)]=\"confirmValue\" name=\"field_confirm\" required\r\n [attr.aria-label]=\"'Digita la parola -elimina-'\">\r\n @if (field_confirm.invalid) {\r\n <mat-error>Digita la parola \"elimina\"</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <br>\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <button mat-flat-button (click)=\"ok()\"\r\n [disabled]=\"f.form.invalid || (confirmValue && confirmValue.toLowerCase() !== 'elimina') || !confirmed()\"\r\n [mat-dialog-close]=\"true\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\"\r\n (click)=\"cancel()\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}.dialog-content{padding:0 24px 24px!important}.details-box{border-top:1px solid var(--ars-color-divider, #757d87)}.details{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:5px;max-height:350px;padding:8px 12px;overflow:auto}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i2$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
331
+ }
332
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DeleteDialogComponent, decorators: [{
333
+ type: Component,
334
+ args: [{ host: { 'Bind': SystemUtils.generateUUID() }, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatDialogTitle, MatDialogContent, MatDialogClose, FlexModule, MatCheckboxModule, FormsModule,
335
+ MatDialogActions, MatButtonModule, MatFormFieldModule, MatInputModule, SafeHtmlPipe], template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData().message) {\r\n <div [innerHtml]=\"dialogData().message | safeHtml\"></div>\r\n }\r\n </div>\r\n @if (dialogData().details) {\r\n <div class=\"details-box\">\r\n <p class=\"x-small uppercase secondary\">Dettaglio:</p>\r\n <div class=\"small details\">\r\n <div [innerHtml]=\"dialogData().details | safeHtml\"></div>\r\n </div>\r\n </div>\r\n }\r\n @if (dialogData().confirmMode === 1) {\r\n <div>\r\n <mat-checkbox (change)=\"confirmed.set($event.checked)\" [checked]=\"confirmed()\">\r\n Confermo la cancellazione\r\n </mat-checkbox>\r\n </div>\r\n } @else if (dialogData().confirmMode === 2) {\r\n <p>Per confermare la cancellazione digita la parola <i><b>elimina</b></i>.</p>\r\n <mat-form-field style=\"width: 200px\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Conferma</mat-label>\r\n <input matInput #field_confirm=\"ngModel\" [(ngModel)]=\"confirmValue\" name=\"field_confirm\" required\r\n [attr.aria-label]=\"'Digita la parola -elimina-'\">\r\n @if (field_confirm.invalid) {\r\n <mat-error>Digita la parola \"elimina\"</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <br>\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <button mat-flat-button (click)=\"ok()\"\r\n [disabled]=\"f.form.invalid || (confirmValue && confirmValue.toLowerCase() !== 'elimina') || !confirmed()\"\r\n [mat-dialog-close]=\"true\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\"\r\n (click)=\"cancel()\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}.dialog-content{padding:0 24px 24px!important}.details-box{border-top:1px solid var(--ars-color-divider, #757d87)}.details{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:5px;max-height:350px;padding:8px 12px;overflow:auto}\n"] }]
336
+ }], propDecorators: { choosen: [{ type: i0.Output, args: ["choosen"] }] } });
337
+
338
+ class BusyTimer {
339
+ constructor(dialogService, due = 100, message = 'Operazione in corso...') {
340
+ this.dialogService = dialogService;
341
+ this.subscription = timer(due).pipe(tap(() => this.dialogService.busy(message))).subscribe();
342
+ }
343
+ /** Dispose object */
344
+ clear() {
345
+ this.subscription.unsubscribe();
346
+ this.dialogService.clearBusy();
347
+ }
348
+ }
349
+ class DialogService extends UIService {
350
+ constructor() {
351
+ super();
352
+ this.dialog = inject(MatDialog);
353
+ this.overlay = inject(Overlay);
354
+ this.snackBar = inject(MatSnackBar);
355
+ this.location = inject(PlatformLocation);
356
+ this.popHistory = [];
357
+ this.popState = true;
358
+ this.poppingState = false;
359
+ // Handle dialog close when back button is clicked
360
+ this.location.onPopState(() => {
361
+ if (!this.poppingState) {
362
+ const count = this.dialog.openDialogs.length;
363
+ if (count > 0) {
364
+ // Disable pop state if needed
365
+ this.popState = false;
366
+ // Close dialog
367
+ this.dialog.openDialogs[count - 1].close();
368
+ }
369
+ }
370
+ else {
371
+ this.poppingState = false;
372
+ }
373
+ });
374
+ }
375
+ /**
376
+ * Removes trailing `#` characters from the current URL (e.g. after a page reload).
377
+ * @param resetPoppingState - When `true`, resets the internal popping-state flag.
378
+ */
379
+ clearUrl(resetPoppingState = false) {
380
+ const url = location.href;
381
+ let l = url.length;
382
+ while (l >= 0 && url[l - 1] === '#')
383
+ l--;
384
+ if (l < url.length)
385
+ history.replaceState({}, '', url.substring(0, l));
386
+ if (resetPoppingState)
387
+ this.poppingState = false;
388
+ }
389
+ /**
390
+ * Close all dialogs
391
+ */
392
+ closeAll() {
393
+ this.dialog.closeAll();
394
+ }
395
+ /**
396
+ * Opens a Material dialog. Returns `null` when not running in a browser.
397
+ * @param component - The component to open as a dialog.
398
+ * @param config - The dialog configuration.
399
+ * @returns The dialog reference, or `null` outside the browser.
400
+ */
401
+ open(component, config) {
402
+ if (!SystemUtils.isBrowser())
403
+ return null;
404
+ this.clearBusy();
405
+ return this.openDialog(component, config);
406
+ }
407
+ /**
408
+ * Internal helper that wraps `MatDialog.open`, subscribes to lifecycle hooks
409
+ * and manages browser-history push/pop entries.
410
+ * @param component - The component to open.
411
+ * @param config - The dialog configuration.
412
+ * @returns The dialog reference.
413
+ */
414
+ openDialog(component, config) {
415
+ // We will take care of navigation
416
+ config.closeOnNavigation = false;
417
+ const d = this.dialog.open(component, config);
418
+ d.afterOpened().pipe(first()).subscribe(() => this.pushDialog(d.id));
419
+ d.beforeClosed().pipe(first()).subscribe(() => this.popDialog(d.id));
420
+ d.afterClosed().pipe(first()).subscribe(() => {
421
+ // Final cleanup of middle objects
422
+ this.errorDialogRef = undefined;
423
+ });
424
+ return d;
425
+ }
426
+ /**
427
+ * Returns the element height including margins
428
+ * @param element - element
429
+ * @returns the height
430
+ */
431
+ outerHeight(element) {
432
+ if (!SystemUtils.isBrowser())
433
+ return 0;
434
+ const height = element.offsetHeight;
435
+ const style = window.getComputedStyle(element);
436
+ return ['top', 'bottom']
437
+ .map(side => parseInt(style.getPropertyValue(`margin-${side}`), 10))
438
+ .reduce((total, margin) => total + margin, height);
439
+ }
440
+ /**
441
+ * Return current dialog height
442
+ */
443
+ getCurrentDialogHeight() {
444
+ if (!SystemUtils.isBrowser())
445
+ return 0;
446
+ const count = this.popHistory.length;
447
+ if (count > 0) {
448
+ let id = this.popHistory[count - 1].id;
449
+ let elem = document.getElementById(id);
450
+ if (elem && elem.clientHeight > 0)
451
+ return elem.clientHeight;
452
+ }
453
+ return 0;
454
+ }
455
+ /**
456
+ * Returns the scrollable content area height for the topmost open dialog.
457
+ * @param fixedPartsClassName - CSS class names of fixed (non-scrollable) elements whose heights are subtracted.
458
+ * @param minimalHeight - Minimum height floor to use when the dialog height is smaller.
459
+ * @returns The computed scrollable height in pixels.
460
+ */
461
+ getCurrentDialogScrollableHeight(fixedPartsClassName, minimalHeight) {
462
+ if (!SystemUtils.isBrowser())
463
+ return 0;
464
+ let h = Math.max(this.getCurrentDialogHeight(), minimalHeight);
465
+ if (fixedPartsClassName) {
466
+ fixedPartsClassName.forEach(n => {
467
+ const elems = document.getElementsByClassName(n);
468
+ if (elems) {
469
+ for (let i = 0; i < elems.length; i++) {
470
+ h -= this.outerHeight(elems[i]);
471
+ }
472
+ }
473
+ });
474
+ }
475
+ return h;
476
+ }
477
+ /**
478
+ * Push a dialog into the browser history
479
+ */
480
+ pushDialog(id) {
481
+ if (!SystemUtils.isBrowser())
482
+ return;
483
+ const index = history.length;
484
+ history.pushState({ index }, '', location.href + '#');
485
+ this.popHistory.push({ id, value: index });
486
+ }
487
+ /**
488
+ * Pop a dialog from the history
489
+ */
490
+ popDialog(id) {
491
+ if (!SystemUtils.isBrowser())
492
+ return;
493
+ if (this.popState) {
494
+ this.poppingState = true;
495
+ let popped = 1;
496
+ if (id) {
497
+ const p = this.popHistory.findIndex(n => n.id === id);
498
+ if (p !== -1) {
499
+ popped = this.popHistory[p].value - (history.state?.index ?? 0);
500
+ popped = popped ? popped + 1 : 1;
501
+ this.popHistory.splice(p, 1);
502
+ }
503
+ const url = location.href;
504
+ let l = url.length;
505
+ while (l >= 0 && url[l - 1] === '#' && popped > 0) {
506
+ l--;
507
+ popped--;
508
+ }
509
+ if (l < url.length)
510
+ history.replaceState({}, '', url.substring(0, l));
511
+ }
512
+ }
513
+ this.popState = true;
514
+ }
515
+ /**
516
+ * Creates the CDK overlay used to host the busy indicator.
517
+ * @returns The new `OverlayRef`.
518
+ */
519
+ createBusy() {
520
+ return this.overlay.create({
521
+ hasBackdrop: true,
522
+ backdropClass: 'busy-backdrop',
523
+ positionStrategy: this.overlay.position()
524
+ .global()
525
+ .centerHorizontally()
526
+ .centerVertically()
527
+ });
528
+ }
529
+ /**
530
+ * Clear busy dialog
531
+ */
532
+ clearBusy() {
533
+ setTimeout(() => {
534
+ this.busyDialogRef?.detach();
535
+ this.busyComponentRef?.destroy();
536
+ }, 500);
537
+ }
538
+ /**
539
+ * Shows or updates the busy overlay.
540
+ * @param message - Text to display inside the overlay.
541
+ * @param progress - Progress value (`-1` = indeterminate). Defaults to `-1`.
542
+ * @param progressMode - Progress bar mode. Defaults to `'indeterminate'`.
543
+ * @param type - Visual style of the overlay. Defaults to `'bar'`.
544
+ * @param action - Optional observable; the overlay is dismissed when it emits.
545
+ * @returns `true` if a new overlay was created, `false` if an existing one was updated.
546
+ */
547
+ setBusy(message, progress = -1, progressMode = 'indeterminate', type = 'bar', action) {
548
+ const exists = this.busyDialogRef?.hasAttached();
549
+ if (exists) {
550
+ this.busyComponentRef?.instance.set(message, progress, progressMode, type); // update existing
551
+ }
552
+ else {
553
+ // Open new
554
+ if (!this.busyDialogRef) {
555
+ this.busyDialogRef = this.createBusy();
556
+ }
557
+ this.busyComponentRef = this.busyDialogRef.attach(new ComponentPortal(BusyDialogComponent));
558
+ this.busyComponentRef.instance.set(message, progress, progressMode, type);
559
+ if (action) {
560
+ action
561
+ .pipe(first())
562
+ .subscribe(() => {
563
+ this.clearBusy();
564
+ });
565
+ }
566
+ }
567
+ return !exists;
568
+ }
569
+ /**
570
+ * Shows or updates the busy overlay using the progress-bar style.
571
+ * @param message - Text to display inside the overlay.
572
+ * @param progress - Progress value (`-1` = indeterminate). Defaults to `-1`.
573
+ * @param progressMode - Progress bar mode. Defaults to `'indeterminate'`.
574
+ * @param action - Optional observable; the overlay is dismissed when it emits.
575
+ * @returns `true` if a new overlay was created.
576
+ */
577
+ busy(message, progress = -1, progressMode = 'indeterminate', action) {
578
+ return this.setBusy(message, progress, progressMode, 'bar', action);
579
+ }
580
+ /**
581
+ * Returns a `BusyTimer` that shows the busy overlay after a debounce delay.
582
+ * @param message - Text to display. Defaults to `'Operazione in corso...'`.
583
+ * @param due - Delay in milliseconds before the overlay appears. Defaults to `100`.
584
+ * @returns A `BusyTimer` that must be disposed with `clear()` when the operation ends.
585
+ */
586
+ busyTimer(message = "Operazione in corso...", due = 100) {
587
+ return new BusyTimer(this, due, message);
588
+ }
589
+ /**
590
+ * Shows or updates the busy overlay using the hourglass style.
591
+ * @param message - Text to display inside the overlay.
592
+ * @param action - Optional observable; the overlay is dismissed when it emits.
593
+ * @returns `true` if a new overlay was created.
594
+ */
595
+ busyHourglass(message, action) {
596
+ return this.setBusy(message, -1, 'indeterminate', 'hourglass', action);
597
+ }
598
+ /**
599
+ * Shows or updates the busy overlay using the spinner style.
600
+ * @param message - Text to display inside the overlay.
601
+ * @param progress - Progress value (`-1` = indeterminate). Defaults to `-1`.
602
+ * @param progressMode - Progress mode. Defaults to `'indeterminate'`.
603
+ * @param action - Optional observable; the overlay is dismissed when it emits.
604
+ * @returns `true` if a new overlay was created.
605
+ */
606
+ busySpinner(message, progress = -1, progressMode = 'indeterminate', action) {
607
+ return this.setBusy(message, progress, progressMode, 'spinner', action);
608
+ }
609
+ /**
610
+ * Shows a minimal wait spinner overlay.
611
+ * @param action - Optional observable; the overlay is dismissed when it emits.
612
+ * @returns `true` if a new overlay was created.
613
+ */
614
+ wait(action) {
615
+ return this.setBusy('', -1, 'indeterminate', 'wait', action);
616
+ }
617
+ /**
618
+ * Opens an informational dialog.
619
+ * @param message - HTML message to display.
620
+ * @param title - Dialog title. Defaults to `'Informazioni'`.
621
+ * @param okCaption - Confirmation button label. Defaults to `'Ok'`.
622
+ * @param width - Maximum dialog width in pixels. Defaults to `500`.
623
+ * @param dismissAfter - Auto-close delay in milliseconds (optional).
624
+ * @param details - Optional secondary details text.
625
+ * @param onNavigate - Optional navigation callback invoked when the user clicks a link.
626
+ * @returns The dialog reference, or `null` outside the browser.
627
+ */
628
+ info(message, title = 'Informazioni', okCaption = 'Ok', width = 500, dismissAfter, details, onNavigate) {
629
+ this.clearBusy();
630
+ return this.open(InfoDialogComponent, {
631
+ ariaLabel: 'informazioni',
632
+ autoFocus: 'dialog',
633
+ restoreFocus: false,
634
+ data: {
635
+ message,
636
+ title,
637
+ okCaption,
638
+ dismissAfter,
639
+ details,
640
+ onNavigate,
641
+ appearance: 'fill'
642
+ },
643
+ closeOnNavigation: false,
644
+ minWidth: '375px',
645
+ maxWidth: `${width}px`,
646
+ width: '100%'
647
+ });
648
+ }
649
+ /**
650
+ * Opens an error dialog. If one is already open, its content is updated in place.
651
+ * @param message - HTML error message to display.
652
+ * @param log - Optional technical log / stack trace shown in the details panel.
653
+ * @param title - Dialog title. Defaults to `'Errore'`.
654
+ * @param okCaption - Confirmation button label. Defaults to `'Ok'`.
655
+ * @param width - Maximum dialog width in pixels. Defaults to `500`.
656
+ * @param dismissAfter - Auto-close delay in milliseconds (optional).
657
+ * @returns The dialog reference, or `null` outside the browser.
658
+ */
659
+ error(message, log, title = 'Errore', okCaption = 'Ok', width = 500, dismissAfter) {
660
+ this.clearBusy();
661
+ if (this.errorDialogRef) {
662
+ // Just change current error
663
+ this.errorDialogRef.componentInstance.setData({
664
+ message,
665
+ title,
666
+ details: log,
667
+ okCaption,
668
+ dismissAfter
669
+ });
670
+ return this.errorDialogRef;
671
+ }
672
+ const ref = this.open(InfoDialogComponent, {
673
+ ariaLabel: 'errore',
674
+ autoFocus: 'dialog',
675
+ restoreFocus: false,
676
+ data: {
677
+ message,
678
+ title,
679
+ details: log,
680
+ okCaption,
681
+ dismissAfter,
682
+ appearance: 'fill'
683
+ },
684
+ closeOnNavigation: false,
685
+ minWidth: '375px',
686
+ maxWidth: `${width}px`,
687
+ width: '100%'
688
+ });
689
+ this.errorDialogRef = ref ?? undefined;
690
+ return ref;
691
+ }
692
+ /**
693
+ * Shows a snack-bar toast notification.
694
+ * @param message - HTML message to display.
695
+ * @param duration - Visible duration in milliseconds. Defaults to `2000`.
696
+ * @param icon - Material icon name shown beside the message. Defaults to `'check'`.
697
+ * @param actionCaption - Optional label for the action button.
698
+ * @returns The snack-bar reference.
699
+ */
700
+ toast(message, duration = 2000, icon = 'check', actionCaption) {
701
+ this.clearBusy();
702
+ if (duration === -1)
703
+ duration = 2000; // default
704
+ const toastRef = this.snackBar.openFromComponent(ToastComponent, {
705
+ duration,
706
+ data: { message, icon, actionCaption }
707
+ });
708
+ toastRef.instance.action.subscribe(() => toastRef.dismiss());
709
+ return toastRef;
710
+ }
711
+ /**
712
+ * Opens a confirmation dialog.
713
+ * @param message - HTML message to display.
714
+ * @param title - Dialog title. Defaults to `'Conferma'`.
715
+ * @param okCaption - Primary action button label. Defaults to `'Si'`.
716
+ * @param cancelCaption - Cancel button label. Defaults to `'No'`.
717
+ * @param otherCaption - Optional tertiary action button label.
718
+ * @param options - Optional list of checkbox options shown to the user.
719
+ * @param width - Maximum dialog width in pixels. Defaults to `500`.
720
+ * @param details - Optional secondary details text.
721
+ * @returns The dialog reference, or `null` outside the browser.
722
+ */
723
+ confirm(message, title = 'Conferma', okCaption = 'Si', cancelCaption = 'No', otherCaption, options, width = 500, details) {
724
+ return this.open(ConfirmDialogComponent, {
725
+ ariaLabel: 'conferma',
726
+ autoFocus: 'dialog',
727
+ restoreFocus: false,
728
+ data: {
729
+ message,
730
+ title,
731
+ okCaption,
732
+ cancelCaption,
733
+ otherCaption,
734
+ options,
735
+ details,
736
+ appearance: 'fill'
737
+ },
738
+ closeOnNavigation: false,
739
+ disableClose: true,
740
+ minWidth: '375px',
741
+ maxWidth: `${width}px`,
742
+ width: '100%'
743
+ });
744
+ }
745
+ /**
746
+ * Opens a deletion-confirmation dialog.
747
+ * @param message - HTML message to display.
748
+ * @param title - Dialog title. Defaults to `'Attenzione'`.
749
+ * @param confirmMode - Confirmation mode (none / checkbox / type-to-confirm). Defaults to `None`.
750
+ * @param okCaption - Primary action button label. Defaults to `'Si'`.
751
+ * @param cancelCaption - Cancel button label. Defaults to `'No'`.
752
+ * @param width - Maximum dialog width in pixels. Defaults to `500`.
753
+ * @param details - Optional secondary details text.
754
+ * @returns The dialog reference, or `null` outside the browser.
755
+ */
756
+ delete(message, title = 'Attenzione', confirmMode = DeleteDialogConfirmMode.None, okCaption = 'Si', cancelCaption = 'No', width = 500, details) {
757
+ return this.open(DeleteDialogComponent, {
758
+ ariaLabel: 'attenzione',
759
+ autoFocus: 'dialog',
760
+ restoreFocus: false,
761
+ data: {
762
+ message,
763
+ title,
764
+ confirmMode,
765
+ okCaption,
766
+ cancelCaption,
767
+ details,
768
+ appearance: 'fill'
769
+ },
770
+ closeOnNavigation: false,
771
+ disableClose: true,
772
+ minWidth: '375px',
773
+ maxWidth: `${width}px`,
774
+ width: '100%'
775
+ });
776
+ }
777
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DialogService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
778
+ static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.1", ngImport: i0, type: DialogService }); }
779
+ }
780
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DialogService, decorators: [{
781
+ type: Service
782
+ }], ctorParameters: () => [] });
783
+
784
+ const DEFAULT_STRENGTH = { score: 0, label: '', color: '', suggestions: [], isValid: false };
785
+ /**
786
+ * Displays a password-strength indicator for the provided password string.
787
+ * Uses `SystemUtils.calculatePasswordStrength` to derive the score and label.
788
+ */
789
+ class PasswordStrengthComponent {
790
+ constructor() {
791
+ /** The password to evaluate. An empty string renders the default (score 0) state. */
792
+ this.password = input('', /* @ts-ignore */
793
+ ...(ngDevMode ? [{ debugName: "password" }] : /* istanbul ignore next */ []));
794
+ /**
795
+ * Computed strength result for the current password.
796
+ * Falls back to `DEFAULT_STRENGTH` when the password is empty.
797
+ */
798
+ this.strength = computed(() => {
799
+ const pwd = this.password();
800
+ return pwd ? SystemUtils.calculatePasswordStrength(pwd) : DEFAULT_STRENGTH;
801
+ }, /* @ts-ignore */
802
+ ...(ngDevMode ? [{ debugName: "strength" }] : /* istanbul ignore next */ []));
803
+ /**
804
+ * CSS class applied to the label element based on the numeric score (1–6 bands).
805
+ * Scores ≤ 2 → `'score-2'`, ≤ 3 → `'score-3'`, etc.
806
+ */
807
+ this.scoreClass = computed(() => {
808
+ const score = this.strength().score;
809
+ if (score <= 2)
810
+ return 'score-2';
811
+ if (score <= 3)
812
+ return 'score-3';
813
+ if (score <= 4)
814
+ return 'score-4';
815
+ if (score <= 5)
816
+ return 'score-5';
817
+ return 'score-6';
818
+ }, /* @ts-ignore */
819
+ ...(ngDevMode ? [{ debugName: "scoreClass" }] : /* istanbul ignore next */ []));
820
+ }
821
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: PasswordStrengthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
822
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.1", type: PasswordStrengthComponent, isStandalone: true, selector: "password-strength", inputs: { password: { classPropertyName: "password", publicName: "password", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"wide x-small bold\" style=\"white-space: nowrap; padding-top:4px\" [matTooltip]=\"strength().suggestions?.join('\\n ')\">\r\n <span [class]=\"scoreClass()\">{{strength().label}}</span>\r\n</div>", styles: [".score-2{color:#f44336!important;font-weight:700}.score-3{color:#ff9800!important;font-weight:700}.score-4{color:#ffc107!important;font-weight:700}.score-5{color:#8bc34a!important;font-weight:700}.score-6{color:#4caf50!important;font-weight:700}.x-small{font-size:x-small}\n"], dependencies: [{ kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
823
+ }
824
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: PasswordStrengthComponent, decorators: [{
825
+ type: Component,
826
+ args: [{ selector: 'password-strength', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatTooltipModule], template: "<div class=\"wide x-small bold\" style=\"white-space: nowrap; padding-top:4px\" [matTooltip]=\"strength().suggestions?.join('\\n ')\">\r\n <span [class]=\"scoreClass()\">{{strength().label}}</span>\r\n</div>", styles: [".score-2{color:#f44336!important;font-weight:700}.score-3{color:#ff9800!important;font-weight:700}.score-4{color:#ffc107!important;font-weight:700}.score-5{color:#8bc34a!important;font-weight:700}.score-6{color:#4caf50!important;font-weight:700}.x-small{font-size:x-small}\n"] }]
827
+ }], propDecorators: { password: [{ type: i0.Input, args: [{ isSignal: true, alias: "password", required: false }] }] } });
828
+
829
+ class OtpInputComponent {
830
+ constructor() {
831
+ /** Signal-based query for all individual OTP digit input elements. */
832
+ this.otpFields = viewChildren('otpField', /* @ts-ignore */
833
+ ...(ngDevMode ? [{ debugName: "otpFields" }] : /* istanbul ignore next */ []));
834
+ /** `true` when every digit slot contains a valid single decimal digit. */
835
+ this.isValid = computed(() => this.otpArray().every(d => /^\d$/.test(d)), /* @ts-ignore */
836
+ ...(ngDevMode ? [{ debugName: "isValid" }] : /* istanbul ignore next */ []));
837
+ /** Array of per-digit values backing the OTP display. */
838
+ this.otpArray = signal(Array(6).fill(''), /* @ts-ignore */
839
+ ...(ngDevMode ? [{ debugName: "otpArray" }] : /* istanbul ignore next */ []));
840
+ /** Whether the control is currently disabled. */
841
+ this.disabled = signal(false, /* @ts-ignore */
842
+ ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
843
+ this.onChange = () => { };
844
+ this.onTouched = () => { };
845
+ }
846
+ // ── ControlValueAccessor ───────────────────────────────────────────────────
847
+ /**
848
+ * Writes a new value into the control from the model.
849
+ * @param value - A string of up to 6 digits to pre-fill the OTP fields.
850
+ */
851
+ writeValue(value) {
852
+ const arr = Array(6).fill('');
853
+ if (value) {
854
+ value.split('').forEach((c, i) => {
855
+ if (i < 6)
856
+ arr[i] = c;
857
+ });
858
+ }
859
+ this.otpArray.set(arr);
860
+ }
861
+ /**
862
+ * Registers the callback invoked when the control value changes.
863
+ * @param fn - The callback function.
864
+ */
865
+ registerOnChange(fn) {
866
+ this.onChange = fn;
867
+ }
868
+ /**
869
+ * Registers the callback invoked when the control is touched.
870
+ * @param fn - The callback function.
871
+ */
872
+ registerOnTouched(fn) {
873
+ this.onTouched = fn;
874
+ }
875
+ /**
876
+ * Enables or disables the control.
877
+ * @param isDisabled - `true` to disable all OTP inputs.
878
+ */
879
+ setDisabledState(isDisabled) {
880
+ this.disabled.set(isDisabled);
881
+ }
882
+ // ── Event handlers ─────────────────────────────────────────────────────────
883
+ /**
884
+ * Blocks non-digit characters before they are inserted.
885
+ * @param event - The `beforeinput` event from the input element.
886
+ */
887
+ onBeforeInput(event) {
888
+ if (event.data && !/^\d$/.test(event.data)) {
889
+ event.preventDefault();
890
+ }
891
+ }
892
+ /**
893
+ * Handles digit input, updates the OTP array, and advances focus.
894
+ * @param event - The `input` event from the digit field.
895
+ * @param index - Zero-based index of the field that received input.
896
+ */
897
+ onInput(event, index) {
898
+ let val = event.target.value;
899
+ val = val.replace(/\D/g, '').slice(-1);
900
+ const arr = [...this.otpArray()];
901
+ arr[index] = val;
902
+ this.otpArray.set(arr);
903
+ this.updateModel();
904
+ if (val && index < 5) {
905
+ this.focusField(index + 1);
906
+ }
907
+ }
908
+ /**
909
+ * Handles the Backspace key by moving focus to the previous field when the current one is empty.
910
+ * @param event - The `keydown` event.
911
+ * @param index - Zero-based index of the field that received the keydown.
912
+ */
913
+ onKeyDown(event, index) {
914
+ if (event.key === 'Backspace' && !this.otpArray()[index] && index > 0) {
915
+ this.focusField(index - 1);
916
+ }
917
+ }
918
+ /**
919
+ * Handles paste events by extracting up to 6 digits and distributing them across the OTP fields.
920
+ * @param event - The `ClipboardEvent` from the paste action.
921
+ */
922
+ onPaste(event) {
923
+ event.preventDefault();
924
+ const pasted = event.clipboardData?.getData('text') ?? '';
925
+ const digits = pasted.replace(/\D/g, '').slice(0, 6).split('');
926
+ if (digits.length > 0) {
927
+ const arr = Array(6).fill('');
928
+ digits.forEach((d, i) => (arr[i] = d));
929
+ this.otpArray.set(arr);
930
+ this.updateModel();
931
+ this.focusField(Math.min(digits.length, 5));
932
+ }
933
+ }
934
+ /**
935
+ * Moves focus to the OTP field at the given index.
936
+ * @param index - Zero-based index of the target field.
937
+ */
938
+ focusField(index) {
939
+ const field = this.otpFields()[index];
940
+ field?.nativeElement.focus();
941
+ field?.nativeElement.select();
942
+ }
943
+ /**
944
+ * Notifies the form model of the current OTP value and marks the control as touched.
945
+ */
946
+ updateModel() {
947
+ const code = this.otpArray().join('');
948
+ this.onChange(code);
949
+ this.onTouched();
950
+ }
951
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: OtpInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
952
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: OtpInputComponent, isStandalone: true, selector: "otp-input", providers: [
953
+ {
954
+ provide: NG_VALUE_ACCESSOR,
955
+ useExisting: forwardRef(() => OtpInputComponent),
956
+ multi: true,
957
+ },
958
+ ], viewQueries: [{ propertyName: "otpFields", predicate: ["otpField"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"otp-container\">\r\n @for (digit of otpArray(); track $index) {\r\n <input\r\n #otpField\r\n type=\"text\"\r\n maxlength=\"1\"\r\n inputmode=\"numeric\"\r\n pattern=\"[0-9]*\"\r\n class=\"otp-box\"\r\n [value]=\"digit\"\r\n (beforeinput)=\"onBeforeInput($event)\"\r\n (input)=\"onInput($event, $index)\"\r\n (keydown)=\"onKeyDown($event, $index)\"\r\n (paste)=\"onPaste($event)\"\r\n [disabled]=\"disabled()\"\r\n required\r\n />\r\n }\r\n</div>\r\n\r\n", styles: [".otp-container{display:flex;align-self:center;gap:.5rem;align-content:center;justify-content:center;padding:30px 0}.otp-box{width:2.3rem;height:2.8rem;font-size:1.5rem;text-align:center;border:2px solid var(--ars-color-ok, #388E3C);background-color:var(--app-color-background, #f7faf8);border-radius:8px;color:var(--ars-color-ok, #388E3C)}.otp-box:focus{border-color:#007bff!important;outline:none;box-shadow:0 0 3px #007bff!important}.error{margin-top:.5rem;color:red;font-size:.9rem}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
959
+ }
960
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: OtpInputComponent, decorators: [{
961
+ type: Component,
962
+ args: [{ selector: 'otp-input', standalone: true, imports: [FormsModule], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
963
+ {
964
+ provide: NG_VALUE_ACCESSOR,
965
+ useExisting: forwardRef(() => OtpInputComponent),
966
+ multi: true,
967
+ },
968
+ ], template: "<div class=\"otp-container\">\r\n @for (digit of otpArray(); track $index) {\r\n <input\r\n #otpField\r\n type=\"text\"\r\n maxlength=\"1\"\r\n inputmode=\"numeric\"\r\n pattern=\"[0-9]*\"\r\n class=\"otp-box\"\r\n [value]=\"digit\"\r\n (beforeinput)=\"onBeforeInput($event)\"\r\n (input)=\"onInput($event, $index)\"\r\n (keydown)=\"onKeyDown($event, $index)\"\r\n (paste)=\"onPaste($event)\"\r\n [disabled]=\"disabled()\"\r\n required\r\n />\r\n }\r\n</div>\r\n\r\n", styles: [".otp-container{display:flex;align-self:center;gap:.5rem;align-content:center;justify-content:center;padding:30px 0}.otp-box{width:2.3rem;height:2.8rem;font-size:1.5rem;text-align:center;border:2px solid var(--ars-color-ok, #388E3C);background-color:var(--app-color-background, #f7faf8);border-radius:8px;color:var(--ars-color-ok, #388E3C)}.otp-box:focus{border-color:#007bff!important;outline:none;box-shadow:0 0 3px #007bff!important}.error{margin-top:.5rem;color:red;font-size:.9rem}\n"] }]
969
+ }], propDecorators: { otpFields: [{ type: i0.ViewChildren, args: ['otpField', { isSignal: true }] }] } });
970
+
971
+ class CredentialsDialogComponent {
972
+ constructor() {
973
+ /** Emitted when the user submits the form. Carries the entered credentials. */
974
+ this.done = output();
975
+ /** Emitted when the user requests a password-recovery flow. */
976
+ this.recoveringPassword = output();
977
+ /** Dialog configuration with defaults applied at construction time. */
978
+ this.dialogData = signal((() => {
979
+ const raw = inject(MAT_DIALOG_DATA) ?? {};
980
+ const data = {
981
+ appearance: 'fill',
982
+ title: 'Informazioni',
983
+ okCaption: 'Salva',
984
+ mode: 'email',
985
+ ...raw,
986
+ };
987
+ data.appearance ??= 'fill';
988
+ data.title ??= 'Informazioni';
989
+ data.okCaption ??= 'Salva';
990
+ data.mode ??= 'email';
991
+ if (data.mode === 'otp' && !data.message) {
992
+ data.message = '<div class="small">Inserisci il codice di verifica di 6 cifre che ti abbiamo inviato ora per email<br><span class="x-small">(controlla anche la posta indesiderata)</span>.</div>';
993
+ }
994
+ return data;
995
+ })(), /* @ts-ignore */
996
+ ...(ngDevMode ? [{ debugName: "dialogData" }] : /* istanbul ignore next */ []));
997
+ /** Current form model, pre-filled with the user name from dialog data when provided. */
998
+ this.item = {
999
+ user: inject(MAT_DIALOG_DATA)?.user,
1000
+ };
1001
+ /** Whether the password field is currently shown as plain text. */
1002
+ this.showPassword = signal(false, /* @ts-ignore */
1003
+ ...(ngDevMode ? [{ debugName: "showPassword" }] : /* istanbul ignore next */ []));
1004
+ }
1005
+ /**
1006
+ * Switches the input mode of the dialog at runtime (e.g. from login to OTP).
1007
+ * Intended to be called from outside via the dialog component reference.
1008
+ * @param mode - The new input mode (`'email'`, `'user'`, or `'otp'`).
1009
+ * @param message - Optional new message to display above the form.
1010
+ */
1011
+ changeMode(mode, message) {
1012
+ this.dialogData.update(d => ({
1013
+ ...d,
1014
+ mode,
1015
+ message: message ?? d.message,
1016
+ }));
1017
+ }
1018
+ /**
1019
+ * Emits the current form result and closes the dialog.
1020
+ */
1021
+ ok() {
1022
+ this.done.emit(this.item);
1023
+ }
1024
+ /**
1025
+ * Emits the current form result for the password-recovery flow and optionally
1026
+ * opens the recovery URL in a new tab.
1027
+ */
1028
+ recoverPassword() {
1029
+ this.recoveringPassword.emit(this.item);
1030
+ const url = this.dialogData().recoverPasswordUrl;
1031
+ if (url) {
1032
+ window.open(url, '_blank');
1033
+ }
1034
+ }
1035
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: CredentialsDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1036
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: CredentialsDialogComponent, isStandalone: true, selector: "ng-component", outputs: { done: "done", recoveringPassword: "recoveringPassword" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, ngImport: i0, template: "<div class=\"dialog-info\">\r\n @if (f.form.invalid) {\r\n <span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\r\n } @else {\r\n <span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\r\n }\r\n</div>\r\n<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content>\r\n @if (dialogData().message) {\r\n <div [innerHtml]=\"dialogData().message | safeHtml\" style=\"padding-bottom: 20px;\"></div>\r\n }\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n @if(dialogData().mode !== 'otp') {\r\n @if (dialogData().mode === 'email') {\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Email</mat-label>\r\n <input type=\"email\" matInput [(ngModel)]=\"item.user\" name=\"email\" #email=\"ngModel\" email required\r\n [attr.aria-label]=\"'Email'\">\r\n @if (email.invalid) {\r\n <mat-error>Email non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else if (dialogData().mode === 'user') {\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Utente</mat-label>\r\n <input matInput [(ngModel)]=\"item.user\" name=\"user\" #user=\"ngModel\" required [attr.aria-label]=\"'user'\">\r\n @if (user.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>La tua password abilitata</mat-label>\r\n <input matInput name=\"password\" #password=\"ngModel\" [type]=\"!showPassword() ? 'password' : 'text'\"\r\n [(ngModel)]=\"item.password\" required [attr.aria-label]=\"'La tua password abilitata'\" autocomplete=\"on\">\r\n @if(item.password) {\r\n <password-strength [password]=\"item.password\"></password-strength>\r\n }\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix (click)=\"showPassword.set(!showPassword())\">\r\n <mat-icon>{{showPassword() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n <mat-hint>Attento a maiuscole e minuscole</mat-hint>\r\n @if (password.invalid) {\r\n <mat-error>Password non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n @if (dialogData().remember || dialogData().recoverPassword) {\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxFill style=\"margin-top: 20px;\">\r\n <div>\r\n @if (dialogData().remember) {\r\n <mat-checkbox fxFlexAlign=\"center\" [(ngModel)]=\"item.rememberMe\" name=\"rememberMe\"> Ricordami</mat-checkbox>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (dialogData().recoverPassword) {\r\n <button fxFlexAlign=\"center\" mat-button (click)=\"recoverPassword()\" title=\"Recupero password\"\r\n >Non riesco ad accedere</button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n <otp-input name=\"otp\" [(ngModel)]=\"item.code\" required></otp-input>\r\n }\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n </div>\r\n</mat-dialog-actions>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}input[type=password]::-ms-reveal{display:none}input[type=password]::-webkit-credentials-auto-fill-button{visibility:hidden;display:none!important}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.EmailValidator, selector: "[email][formControlName],[email][formControl],[email][ngModel]", inputs: ["email"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2$3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i2$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "component", type: PasswordStrengthComponent, selector: "password-strength", inputs: ["password"] }, { kind: "component", type: OtpInputComponent, selector: "otp-input" }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1037
+ }
1038
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: CredentialsDialogComponent, decorators: [{
1039
+ type: Component,
1040
+ args: [{ host: { 'Bind': SystemUtils.generateUUID() }, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
1041
+ MatDialogTitle,
1042
+ MatDialogContent,
1043
+ FormsModule,
1044
+ MatFormFieldModule,
1045
+ MatInputModule,
1046
+ MatIconModule,
1047
+ MatCheckboxModule,
1048
+ MatDialogActions,
1049
+ FlexModule,
1050
+ MatButtonModule,
1051
+ MatDialogClose,
1052
+ PasswordStrengthComponent,
1053
+ OtpInputComponent,
1054
+ SafeHtmlPipe,
1055
+ ], template: "<div class=\"dialog-info\">\r\n @if (f.form.invalid) {\r\n <span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\r\n } @else {\r\n <span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\r\n }\r\n</div>\r\n<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content>\r\n @if (dialogData().message) {\r\n <div [innerHtml]=\"dialogData().message | safeHtml\" style=\"padding-bottom: 20px;\"></div>\r\n }\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n @if(dialogData().mode !== 'otp') {\r\n @if (dialogData().mode === 'email') {\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Email</mat-label>\r\n <input type=\"email\" matInput [(ngModel)]=\"item.user\" name=\"email\" #email=\"ngModel\" email required\r\n [attr.aria-label]=\"'Email'\">\r\n @if (email.invalid) {\r\n <mat-error>Email non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else if (dialogData().mode === 'user') {\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Utente</mat-label>\r\n <input matInput [(ngModel)]=\"item.user\" name=\"user\" #user=\"ngModel\" required [attr.aria-label]=\"'user'\">\r\n @if (user.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>La tua password abilitata</mat-label>\r\n <input matInput name=\"password\" #password=\"ngModel\" [type]=\"!showPassword() ? 'password' : 'text'\"\r\n [(ngModel)]=\"item.password\" required [attr.aria-label]=\"'La tua password abilitata'\" autocomplete=\"on\">\r\n @if(item.password) {\r\n <password-strength [password]=\"item.password\"></password-strength>\r\n }\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix (click)=\"showPassword.set(!showPassword())\">\r\n <mat-icon>{{showPassword() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n <mat-hint>Attento a maiuscole e minuscole</mat-hint>\r\n @if (password.invalid) {\r\n <mat-error>Password non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n @if (dialogData().remember || dialogData().recoverPassword) {\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxFill style=\"margin-top: 20px;\">\r\n <div>\r\n @if (dialogData().remember) {\r\n <mat-checkbox fxFlexAlign=\"center\" [(ngModel)]=\"item.rememberMe\" name=\"rememberMe\"> Ricordami</mat-checkbox>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (dialogData().recoverPassword) {\r\n <button fxFlexAlign=\"center\" mat-button (click)=\"recoverPassword()\" title=\"Recupero password\"\r\n >Non riesco ad accedere</button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n <otp-input name=\"otp\" [(ngModel)]=\"item.code\" required></otp-input>\r\n }\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n </div>\r\n</mat-dialog-actions>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}input[type=password]::-ms-reveal{display:none}input[type=password]::-webkit-credentials-auto-fill-button{visibility:hidden;display:none!important}\n"] }]
1056
+ }], propDecorators: { done: [{ type: i0.Output, args: ["done"] }], recoveringPassword: [{ type: i0.Output, args: ["recoveringPassword"] }] } });
1057
+
1058
+ class RecoverPasswordDialogComponent {
1059
+ constructor() {
1060
+ /** Emitted when the user submits the recovery request. Carries the entered email and recaptcha state. */
1061
+ this.done = output();
1062
+ /** Dialog configuration with defaults applied at construction time. */
1063
+ this.dialogData = signal({
1064
+ appearance: 'fill',
1065
+ ...(inject(MAT_DIALOG_DATA) ?? {}),
1066
+ }, /* @ts-ignore */
1067
+ ...(ngDevMode ? [{ debugName: "dialogData" }] : /* istanbul ignore next */ []));
1068
+ /** Current form model bound to the template inputs. */
1069
+ this.item = {
1070
+ email: '',
1071
+ recaptcha: false,
1072
+ };
1073
+ }
1074
+ /**
1075
+ * Emits the current form result to trigger the password-recovery flow.
1076
+ */
1077
+ ok() {
1078
+ this.done.emit(this.item);
1079
+ }
1080
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: RecoverPasswordDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1081
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: RecoverPasswordDialogComponent, isStandalone: true, selector: "ng-component", outputs: { done: "done" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, ngImport: i0, template: "<div class=\"dialog-info\">\r\n @if (f.form.invalid) {\r\n <span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\r\n } @else {\r\n <span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\r\n }\r\n</div>\r\n<div mat-dialog-title>Per quale ragione non sei in grado di effettuare l'accesso?</div>\r\n<mat-dialog-content>\r\n\r\n <b>1. Ho dimenticato la password</b>\r\n <p>\r\n Puoi recuperarla facilmente inserendo l'email a cui la password \u00E8 collegata. Non \u00E8 possibile recuperare password\r\n aziendali (non collegate ad un email).</p>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n\r\n <mat-form-field style=\"width:100%\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Email con cui ti sei registrato</mat-label>\r\n <input type=\"email\" matInput name=\"email\" #email=\"ngModel\" [(ngModel)]=\"item.email\" required email\r\n maxlength=\"200\" />\r\n @if (email.invalid) {\r\n <mat-error>Email non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <div style=\"margin-top:20px; margin-bottom:20px;\">\r\n <button type=\"button\" mat-flat-button (click)=\"ok()\" [disabled]=\"f.form.invalid\"\r\n aria-label=\"Recupera password\">Recupera password</button>\r\n </div>\r\n </form>\r\n <p></p>\r\n <b>2. Il sistema mi dice che la password non \u00E8 corretta.</b>\r\n <p>\r\n E' molto probabile che ci sia stato un difetto di digitazione. Per favore controlla bene che non vi siano spazi non\r\n richiesti e che la password rispetti perfettamente le maiuscole e minuscole. Nel caso in cui la digitazione fosse\r\n corretta, verifica che la data del tuo abbonamento non sia scaduta.\r\n </p>\r\n <p></p>\r\n <b>3. Il sistema mi dice che non pu\u00F2 accettare connessioni dal mio indirizzo IP</b>\r\n <p>\r\n Il tuo abbonamento \u00E8 stato vincolato ad un indirizzo IP (indirizzo dal quale ti colleghi). Capita sovente che\r\n questi indirizzi siano cambiati da parte del reparto IT per questioni di sicurezza informatica.\r\n Per risolvere il problema, contattate il reparto IT e fatevi dire qual'\u00E8 il nuovo indirizzo IP e comunicatelo ad\r\n ARS Edizioni Informatiche.\r\n </p>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Chiudi</button>\r\n </div>\r\n</mat-dialog-actions>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$1.EmailValidator, selector: "[email][formControlName],[email][formControl],[email][ngModel]", inputs: ["email"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1082
+ }
1083
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: RecoverPasswordDialogComponent, decorators: [{
1084
+ type: Component,
1085
+ args: [{ host: { 'Bind': SystemUtils.generateUUID() }, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
1086
+ MatDialogTitle,
1087
+ MatDialogContent,
1088
+ FormsModule,
1089
+ MatFormFieldModule,
1090
+ MatInputModule,
1091
+ MatButtonModule,
1092
+ MatDialogActions,
1093
+ FlexModule,
1094
+ MatDialogClose,
1095
+ ], template: "<div class=\"dialog-info\">\r\n @if (f.form.invalid) {\r\n <span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\r\n } @else {\r\n <span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\r\n }\r\n</div>\r\n<div mat-dialog-title>Per quale ragione non sei in grado di effettuare l'accesso?</div>\r\n<mat-dialog-content>\r\n\r\n <b>1. Ho dimenticato la password</b>\r\n <p>\r\n Puoi recuperarla facilmente inserendo l'email a cui la password \u00E8 collegata. Non \u00E8 possibile recuperare password\r\n aziendali (non collegate ad un email).</p>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n\r\n <mat-form-field style=\"width:100%\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Email con cui ti sei registrato</mat-label>\r\n <input type=\"email\" matInput name=\"email\" #email=\"ngModel\" [(ngModel)]=\"item.email\" required email\r\n maxlength=\"200\" />\r\n @if (email.invalid) {\r\n <mat-error>Email non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <div style=\"margin-top:20px; margin-bottom:20px;\">\r\n <button type=\"button\" mat-flat-button (click)=\"ok()\" [disabled]=\"f.form.invalid\"\r\n aria-label=\"Recupera password\">Recupera password</button>\r\n </div>\r\n </form>\r\n <p></p>\r\n <b>2. Il sistema mi dice che la password non \u00E8 corretta.</b>\r\n <p>\r\n E' molto probabile che ci sia stato un difetto di digitazione. Per favore controlla bene che non vi siano spazi non\r\n richiesti e che la password rispetti perfettamente le maiuscole e minuscole. Nel caso in cui la digitazione fosse\r\n corretta, verifica che la data del tuo abbonamento non sia scaduta.\r\n </p>\r\n <p></p>\r\n <b>3. Il sistema mi dice che non pu\u00F2 accettare connessioni dal mio indirizzo IP</b>\r\n <p>\r\n Il tuo abbonamento \u00E8 stato vincolato ad un indirizzo IP (indirizzo dal quale ti colleghi). Capita sovente che\r\n questi indirizzi siano cambiati da parte del reparto IT per questioni di sicurezza informatica.\r\n Per risolvere il problema, contattate il reparto IT e fatevi dire qual'\u00E8 il nuovo indirizzo IP e comunicatelo ad\r\n ARS Edizioni Informatiche.\r\n </p>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Chiudi</button>\r\n </div>\r\n</mat-dialog-actions>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}\n"] }]
1096
+ }], propDecorators: { done: [{ type: i0.Output, args: ["done"] }] } });
1097
+
1098
+ class ResetPasswordDialogComponent {
1099
+ constructor() {
1100
+ /** Emitted when the user submits the new password. Carries the entered password data. */
1101
+ this.done = output();
1102
+ this.dialogService = inject(DialogService);
1103
+ this.dialogRef = inject((MatDialogRef));
1104
+ /** Dialog configuration with defaults applied at construction time. */
1105
+ this.dialogData = signal((() => {
1106
+ const raw = inject(MAT_DIALOG_DATA);
1107
+ return { mode: 'admin', appearance: 'fill', ...raw };
1108
+ })(), /* @ts-ignore */
1109
+ ...(ngDevMode ? [{ debugName: "dialogData" }] : /* istanbul ignore next */ []));
1110
+ /** Current form model bound to the template inputs. */
1111
+ this.item = {};
1112
+ /** Whether the old-password field is currently shown as plain text. */
1113
+ this.showOldPassword = signal(false, /* @ts-ignore */
1114
+ ...(ngDevMode ? [{ debugName: "showOldPassword" }] : /* istanbul ignore next */ []));
1115
+ /** Whether the new-password field is currently shown as plain text. */
1116
+ this.showPassword = signal(false, /* @ts-ignore */
1117
+ ...(ngDevMode ? [{ debugName: "showPassword" }] : /* istanbul ignore next */ []));
1118
+ /** Whether the confirm-password field is currently shown as plain text. */
1119
+ this.showPassword2 = signal(false, /* @ts-ignore */
1120
+ ...(ngDevMode ? [{ debugName: "showPassword2" }] : /* istanbul ignore next */ []));
1121
+ const data = this.dialogData();
1122
+ if (data.mode !== 'forgot' && !data.userId) {
1123
+ this.dialogRef.close();
1124
+ this.dialogService.error('Utente non specificato.');
1125
+ return;
1126
+ }
1127
+ if (data.mode === 'forgot' && !data.userEmail) {
1128
+ this.dialogRef.close();
1129
+ this.dialogService.error('Email utente non specificata.');
1130
+ return;
1131
+ }
1132
+ this.item.userEmail = data.userEmail;
1133
+ this.item.userId = data.userId;
1134
+ }
1135
+ /**
1136
+ * Emits the current form result to trigger the password-reset flow.
1137
+ */
1138
+ ok() {
1139
+ this.done.emit(this.item);
1140
+ }
1141
+ /**
1142
+ * Generates a random password and populates both password fields with it.
1143
+ */
1144
+ generatePassword() {
1145
+ const password = SystemUtils.generatePassword();
1146
+ this.item.password = password;
1147
+ this.item.password2 = password;
1148
+ }
1149
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ResetPasswordDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1150
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: ResetPasswordDialogComponent, isStandalone: true, selector: "ng-component", outputs: { done: "done" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, ngImport: i0, template: "<div class=\"dialog-info\">\r\n @if (f.form.invalid) {\r\n <span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\r\n } @else {\r\n <span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\r\n }\r\n</div>\r\n<div mat-dialog-title>Reimposta password</div>\r\n<mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n @if (dialogData().mode === 'forgot') {\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Email che hai scelto quando ti sei registrato</mat-label>\r\n <input type=\"email\" matInput [(ngModel)]=\"item.userEmail\" name=\"userEmail\" #userEmail=\"ngModel\" email required\r\n [attr.aria-label]=\"'Email con cui ti sei registrato'\">\r\n @if (userEmail.invalid) {\r\n <mat-error>Email non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().mode !== 'admin') {\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Vecchia password</mat-label>\r\n <input [type]=\"!showOldPassword() ? 'password' : 'text'\" matInput name=\"oldPwd\" autocomplete=\"on\"\r\n [(ngModel)]=\"item.oldPassword\" required maxlength=\"30\" #oldPwd=\"ngModel\">\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix\r\n (click)=\"showOldPassword.set(!showOldPassword())\">\r\n <mat-icon>{{showOldPassword() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n @if(item.oldPassword) {\r\n <password-strength [password]=\"item.oldPassword\"></password-strength>\r\n }\r\n @if (oldPwd.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field style=\"width: 100%;\" hintLabel=\"Minimo 10 car. con 1 simbolo e 1 maiuscola\"\r\n [appearance]=\"dialogData().appearance\">\r\n <mat-label>Nuova password</mat-label>\r\n <input [type]=\"!showPassword() ? 'password' : 'text'\" matInput name=\"newPwd\" [(ngModel)]=\"item.password\" required\r\n password minlength=\"10\" maxlength=\"30\" #newPwd=\"ngModel\">\r\n @if(item.password) {\r\n <password-strength [password]=\"item.password\"></password-strength>\r\n }\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix (click)=\"showPassword.set(!showPassword())\">\r\n <mat-icon>{{showPassword() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n <mat-hint align=\"end\">{{newPwd.value?.length || 0}}/30</mat-hint>\r\n @if (newPwd.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field style=\"width: 100%;\" hintLabel=\"Minimo 10 car. con 1 simbolo e 1 maiuscola\"\r\n [appearance]=\"dialogData().appearance\">\r\n <mat-label>Conferma nuova password</mat-label>\r\n <input [type]=\"!showPassword2() ? 'password' : 'text'\" matInput name=\"newPwd2\" [(ngModel)]=\"item.password2\"\r\n [required]=\"dialogData().mode !== 'admin'\" password minlength=\"10\" maxlength=\"30\" [equals]=\"newPwd.control\" #newPwd2=\"ngModel\">\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix (click)=\"showPassword2.set(!showPassword2())\">\r\n <mat-icon>{{showPassword2() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n @if(item.password2) {\r\n <password-strength [password]=\"item.password2\"></password-strength>\r\n }\r\n <mat-hint align=\"end\">{{newPwd2.value?.length || 0}}/30</mat-hint>\r\n @if (newPwd2.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n @if (dialogData().mode === 'admin') {\r\n <button mat-stroked-button (click)=\"generatePassword()\">Genera</button>\r\n }\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">Salva</button>\r\n @if (dialogData().mode !== 'forgot') {\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n }\r\n </div>\r\n </div>\r\n</mat-dialog-actions>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}input[type=password]::-ms-reveal{display:none}input[type=password]::-webkit-credentials-auto-fill-button{visibility:hidden;display:none!important}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$1.EmailValidator, selector: "[email][formControlName],[email][formControl],[email][ngModel]", inputs: ["email"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2$3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: PasswordValidatorDirective, selector: "[password]" }, { kind: "component", type: PasswordStrengthComponent, selector: "password-strength", inputs: ["password"] }, { kind: "directive", type: EqualsValidatorDirective, selector: "[equals]", inputs: ["equals"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1151
+ }
1152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ResetPasswordDialogComponent, decorators: [{
1153
+ type: Component,
1154
+ args: [{ host: { 'Bind': SystemUtils.generateUUID() }, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
1155
+ MatDialogTitle,
1156
+ MatDialogContent,
1157
+ FormsModule,
1158
+ FlexModule,
1159
+ MatFormFieldModule,
1160
+ MatInputModule,
1161
+ PasswordValidatorDirective,
1162
+ PasswordStrengthComponent,
1163
+ EqualsValidatorDirective,
1164
+ MatIconModule,
1165
+ MatDialogActions,
1166
+ MatButtonModule,
1167
+ MatDialogClose,
1168
+ ], template: "<div class=\"dialog-info\">\r\n @if (f.form.invalid) {\r\n <span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\r\n } @else {\r\n <span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\r\n }\r\n</div>\r\n<div mat-dialog-title>Reimposta password</div>\r\n<mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n @if (dialogData().mode === 'forgot') {\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Email che hai scelto quando ti sei registrato</mat-label>\r\n <input type=\"email\" matInput [(ngModel)]=\"item.userEmail\" name=\"userEmail\" #userEmail=\"ngModel\" email required\r\n [attr.aria-label]=\"'Email con cui ti sei registrato'\">\r\n @if (userEmail.invalid) {\r\n <mat-error>Email non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().mode !== 'admin') {\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Vecchia password</mat-label>\r\n <input [type]=\"!showOldPassword() ? 'password' : 'text'\" matInput name=\"oldPwd\" autocomplete=\"on\"\r\n [(ngModel)]=\"item.oldPassword\" required maxlength=\"30\" #oldPwd=\"ngModel\">\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix\r\n (click)=\"showOldPassword.set(!showOldPassword())\">\r\n <mat-icon>{{showOldPassword() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n @if(item.oldPassword) {\r\n <password-strength [password]=\"item.oldPassword\"></password-strength>\r\n }\r\n @if (oldPwd.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field style=\"width: 100%;\" hintLabel=\"Minimo 10 car. con 1 simbolo e 1 maiuscola\"\r\n [appearance]=\"dialogData().appearance\">\r\n <mat-label>Nuova password</mat-label>\r\n <input [type]=\"!showPassword() ? 'password' : 'text'\" matInput name=\"newPwd\" [(ngModel)]=\"item.password\" required\r\n password minlength=\"10\" maxlength=\"30\" #newPwd=\"ngModel\">\r\n @if(item.password) {\r\n <password-strength [password]=\"item.password\"></password-strength>\r\n }\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix (click)=\"showPassword.set(!showPassword())\">\r\n <mat-icon>{{showPassword() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n <mat-hint align=\"end\">{{newPwd.value?.length || 0}}/30</mat-hint>\r\n @if (newPwd.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field style=\"width: 100%;\" hintLabel=\"Minimo 10 car. con 1 simbolo e 1 maiuscola\"\r\n [appearance]=\"dialogData().appearance\">\r\n <mat-label>Conferma nuova password</mat-label>\r\n <input [type]=\"!showPassword2() ? 'password' : 'text'\" matInput name=\"newPwd2\" [(ngModel)]=\"item.password2\"\r\n [required]=\"dialogData().mode !== 'admin'\" password minlength=\"10\" maxlength=\"30\" [equals]=\"newPwd.control\" #newPwd2=\"ngModel\">\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix (click)=\"showPassword2.set(!showPassword2())\">\r\n <mat-icon>{{showPassword2() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n @if(item.password2) {\r\n <password-strength [password]=\"item.password2\"></password-strength>\r\n }\r\n <mat-hint align=\"end\">{{newPwd2.value?.length || 0}}/30</mat-hint>\r\n @if (newPwd2.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n @if (dialogData().mode === 'admin') {\r\n <button mat-stroked-button (click)=\"generatePassword()\">Genera</button>\r\n }\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">Salva</button>\r\n @if (dialogData().mode !== 'forgot') {\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n }\r\n </div>\r\n </div>\r\n</mat-dialog-actions>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}input[type=password]::-ms-reveal{display:none}input[type=password]::-webkit-credentials-auto-fill-button{visibility:hidden;display:none!important}\n"] }]
1169
+ }], ctorParameters: () => [], propDecorators: { done: [{ type: i0.Output, args: ["done"] }] } });
1170
+
1171
+ /**
1172
+ * @file breakpoints.ts
1173
+ * Bootstrap 5 breakpoint definitions as CDK-compatible MediaQuery strings.
1174
+ *
1175
+ * CDK's BreakpointObserver already handles the actual matching — we only define aliases.
1176
+ *
1177
+ * Bootstrap 5 grid tiers:
1178
+ * xs < 576px
1179
+ * sm >= 576px
1180
+ * md >= 768px
1181
+ * lg >= 992px
1182
+ * xl >= 1200px
1183
+ * xxl >= 1400px
1184
+ *
1185
+ * Supported alias families:
1186
+ *
1187
+ * Canonical ranges xs | sm | md | lg | xl | xxl
1188
+ * "and up" sm-up | md-up | lg-up | xl-up | xxl-up
1189
+ * gt-xs | gt-sm | gt-md | gt-lg | gt-xl (ngx-layout compat)
1190
+ * "and down" sm-down | md-down | lg-down | xl-down
1191
+ * lt-sm | lt-md | lt-lg | lt-xl | lt-xxl (ngx-layout compat)
1192
+ *
1193
+ * The lt-* / gt-* aliases are exact mirrors of the -down / -up aliases.
1194
+ * They share the same media query string so CDK deduplicates them internally.
1195
+ */
1196
+ const BS5_BREAKPOINTS = {
1197
+ // ── Canonical ranges ────────────────────────────────────────────────────────
1198
+ 'xs': '(max-width: 575.98px)',
1199
+ 'sm': '(min-width: 576px) and (max-width: 767.98px)',
1200
+ 'md': '(min-width: 768px) and (max-width: 991.98px)',
1201
+ 'lg': '(min-width: 992px) and (max-width: 1199.98px)',
1202
+ 'xl': '(min-width: 1200px) and (max-width: 1399.98px)',
1203
+ 'xxl': '(min-width: 1400px)',
1204
+ // ── "and up" — Bootstrap style ───────────────────────────────────────────────
1205
+ 'sm-up': '(min-width: 576px)',
1206
+ 'md-up': '(min-width: 768px)',
1207
+ 'lg-up': '(min-width: 992px)',
1208
+ 'xl-up': '(min-width: 1200px)',
1209
+ 'xxl-up': '(min-width: 1400px)',
1210
+ // ── "and up" — ngx-layout gt-* style ────────────────────────────────────────
1211
+ 'gt-xs': '(min-width: 576px)',
1212
+ 'gt-sm': '(min-width: 768px)',
1213
+ 'gt-md': '(min-width: 992px)',
1214
+ 'gt-lg': '(min-width: 1200px)',
1215
+ 'gt-xl': '(min-width: 1400px)',
1216
+ // ── "and down" — Bootstrap style ─────────────────────────────────────────────
1217
+ 'sm-down': '(max-width: 767.98px)',
1218
+ 'md-down': '(max-width: 991.98px)',
1219
+ 'lg-down': '(max-width: 1199.98px)',
1220
+ 'xl-down': '(max-width: 1399.98px)',
1221
+ // ── "and down" — ngx-layout lt-* style ──────────────────────────────────────
1222
+ // lt-sm = everything below sm = xs only
1223
+ 'lt-sm': '(max-width: 575.98px)',
1224
+ // lt-md = everything below md = xs + sm
1225
+ 'lt-md': '(max-width: 767.98px)',
1226
+ // lt-lg = everything below lg = xs + sm + md
1227
+ 'lt-lg': '(max-width: 991.98px)',
1228
+ // lt-xl = everything below xl = xs + sm + md + lg
1229
+ 'lt-xl': '(max-width: 1199.98px)',
1230
+ // lt-xxl = everything below xxl = xs through xl
1231
+ 'lt-xxl': '(max-width: 1399.98px)',
1232
+ };
1233
+ /** InjectionToken — override to customise or extend breakpoints */
1234
+ const LAYOUT_BREAKPOINTS = new InjectionToken('LAYOUT_BREAKPOINTS', { providedIn: 'root', factory: () => BS5_BREAKPOINTS });
1235
+ /** Ordered canonical aliases, smallest → largest (used for mobile-first cascade) */
1236
+ const CANONICAL_ALIASES = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];
1237
+ /**
1238
+ * All non-canonical alias families.
1239
+ * Used by ResponsiveBaseDirective.resolveNonCanonical() to handle lt-* / gt-* / *-up / *-down
1240
+ * inputs without polluting the mobile-first cascade logic.
1241
+ */
1242
+ const ALIAS_FAMILIES = {
1243
+ up: ['sm-up', 'md-up', 'lg-up', 'xl-up', 'xxl-up'],
1244
+ down: ['sm-down', 'md-down', 'lg-down', 'xl-down'],
1245
+ gt: ['gt-xs', 'gt-sm', 'gt-md', 'gt-lg', 'gt-xl'],
1246
+ lt: ['lt-sm', 'lt-md', 'lt-lg', 'lt-xl', 'lt-xxl'],
1247
+ };
1248
+
1249
+ /**
1250
+ * @file media-observer.service.ts (v2 — optimized)
1251
+ *
1252
+ * ── Optimizations over v1 ─────────────────────────────────────────────────
1253
+ *
1254
+ * ✅ Single bo.observe() call for all 6 canonical breakpoints.
1255
+ * CDK internally uses one MediaQueryList listener per query string.
1256
+ * Calling observe() N times creates N listeners — here we create only one.
1257
+ *
1258
+ * ✅ currentBp$ is shared (shareReplay(1)): all subscribers (effects in
1259
+ * directives) receive the same value without redundant re-computations.
1260
+ *
1261
+ * ✅ The currentBp Signal is derived from the Observable via toSignal():
1262
+ * Angular manages the subscription internally and tears it down with root.
1263
+ *
1264
+ * ✅ isActive() delegates to bo.isMatched() — synchronous, O(1), no extra observer.
1265
+ *
1266
+ * ✅ isActive$() reuses the shared currentBp$ stream instead of opening
1267
+ * a new bo.observe() for every requested alias.
1268
+ */
1269
+ class MediaObserver {
1270
+ constructor() {
1271
+ this.bo = inject(BreakpointObserver);
1272
+ this.bp = inject(LAYOUT_BREAKPOINTS);
1273
+ /**
1274
+ * A SINGLE CDK observation for all 6 canonical breakpoints.
1275
+ * Each breakpoint change emits → we resolve the current alias → shared.
1276
+ *
1277
+ * shareReplay(1): all subscribers (N directives in the DOM) receive
1278
+ * the same value without N separate recomputations.
1279
+ */
1280
+ this.currentBp$ = this.bo
1281
+ .observe(CANONICAL_ALIASES.map(a => this.bp[a]))
1282
+ .pipe(map(() => this._resolve()), distinctUntilChanged(), // does not emit if the breakpoint hasn't actually changed
1283
+ shareReplay(1) // multicast: N directives, 1 single execution
1284
+ );
1285
+ /**
1286
+ * Signal derived from currentBp$.
1287
+ * Directives read it via effect() — zero manual subscriptions.
1288
+ * providedIn: 'root' ensures the Signal is a singleton.
1289
+ */
1290
+ this.currentBp = toSignal(this.currentBp$, {
1291
+ initialValue: this._resolve(),
1292
+ });
1293
+ }
1294
+ /**
1295
+ * Returns true if the given alias (or raw media query) is currently active.
1296
+ * Delegates to bo.isMatched() — synchronous, O(1), no extra observer created.
1297
+ *
1298
+ * @example
1299
+ * media.isActive('md') // true on 768–991px screens
1300
+ * media.isActive('lg-up') // true on 992px+
1301
+ */
1302
+ isActive(alias) {
1303
+ const query = this.bp[alias] ?? alias; // fallback: treat as raw media query
1304
+ return this.bo.isMatched(query);
1305
+ }
1306
+ /**
1307
+ * Observable true/false for a specific alias.
1308
+ * Reuses currentBp$ instead of opening a new bo.observe():
1309
+ * no additional MediaQueryList listener is created.
1310
+ */
1311
+ isActive$(alias) {
1312
+ return this.currentBp$.pipe(map(() => this.isActive(alias)), distinctUntilChanged());
1313
+ }
1314
+ /** Resolves the active canonical alias (from xxl down to xs, mobile-first) */
1315
+ _resolve() {
1316
+ for (let i = CANONICAL_ALIASES.length - 1; i >= 0; i--) {
1317
+ if (this.bo.isMatched(this.bp[CANONICAL_ALIASES[i]])) {
1318
+ return CANONICAL_ALIASES[i];
1319
+ }
1320
+ }
1321
+ return 'xs';
1322
+ }
1323
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: MediaObserver, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
1324
+ static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.1", ngImport: i0, type: MediaObserver }); }
1325
+ }
1326
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: MediaObserver, decorators: [{
1327
+ type: Service
1328
+ }] });
1329
+
1330
+ /**
1331
+ * @file if-bp.directive.ts (Angular 21 — signals)
1332
+ *
1333
+ * *ifBp — structural directive that adds/removes an element from the DOM
1334
+ * based on the active Bootstrap 5 breakpoint.
1335
+ *
1336
+ * Unlike [fxShow]/[fxHide] (which use display:none), *ifBp actually adds and
1337
+ * removes the element from the DOM — ideal for heavy components like mat-sidenav.
1338
+ *
1339
+ * Angular 21 changes:
1340
+ * • @Input setters replaced by input() / input.required()
1341
+ * • computed() derives alias list and active state reactively
1342
+ * • effect() in constructor handles DOM add/remove (no OnInit/OnChanges)
1343
+ * • No Injector, EffectRef, _initialized guard or manual subscriptions
1344
+ *
1345
+ * Usage:
1346
+ * <mat-sidenav *ifBp="'lg-up'"> only rendered on lg and above
1347
+ * <div *ifBp="'xs'">Mobile only</div>
1348
+ * <div *ifBp="'sm md'">sm and md only (space-separated list of aliases)</div>
1349
+ * <div *ifBp="'lg-up'; else mobileRef">Desktop view</div>
1350
+ * <ng-template #mobileRef>Mobile fallback</ng-template>
1351
+ *
1352
+ * Accepted alias values:
1353
+ * xs | sm | md | lg | xl | xxl
1354
+ * sm-up | md-up | lg-up | xl-up | xxl-up
1355
+ * sm-down | md-down | lg-down | xl-down
1356
+ * Space-separated list of any of the above
1357
+ */
1358
+ class IfBpDirective {
1359
+ constructor() {
1360
+ this.tpl = inject((TemplateRef));
1361
+ this.vcr = inject(ViewContainerRef);
1362
+ this.media = inject(MediaObserver);
1363
+ /** Space-separated list of breakpoint aliases, e.g. `'lg xl xxl-up'` */
1364
+ this.ifBp = input.required(/* @ts-ignore */
1365
+ ...(ngDevMode ? [{ debugName: "ifBp" }] : /* istanbul ignore next */ []));
1366
+ /** Optional else-template shown when no alias is active */
1367
+ this.ifBpElse = input(/* @ts-ignore */
1368
+ ...(ngDevMode ? [undefined, { debugName: "ifBpElse" }] : /* istanbul ignore next */ []));
1369
+ this._aliases = computed(() => this.ifBp().trim().split(/\s+/), /* @ts-ignore */
1370
+ ...(ngDevMode ? [{ debugName: "_aliases" }] : /* istanbul ignore next */ []));
1371
+ this._isActive = computed(() => {
1372
+ this.media.currentBp(); // reactive dependency — re-evaluates on breakpoint change
1373
+ return this._aliases().some(alias => this.media.isActive(alias));
1374
+ }, /* @ts-ignore */
1375
+ ...(ngDevMode ? [{ debugName: "_isActive" }] : /* istanbul ignore next */ []));
1376
+ /** Tracks whether the main view is currently embedded — plain field, not a signal. */
1377
+ this._hasView = false;
1378
+ effect(() => {
1379
+ const active = this._isActive();
1380
+ const elseTpl = this.ifBpElse();
1381
+ if (active === this._hasView)
1382
+ return; // dirty-check
1383
+ this.vcr.clear();
1384
+ if (active) {
1385
+ this.vcr.createEmbeddedView(this.tpl);
1386
+ }
1387
+ else if (elseTpl) {
1388
+ this.vcr.createEmbeddedView(elseTpl);
1389
+ }
1390
+ this._hasView = active;
1391
+ });
1392
+ }
1393
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: IfBpDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1394
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: IfBpDirective, isStandalone: true, selector: "[ifBp]", inputs: { ifBp: { classPropertyName: "ifBp", publicName: "ifBp", isSignal: true, isRequired: true, transformFunction: null }, ifBpElse: { classPropertyName: "ifBpElse", publicName: "ifBpElse", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
1395
+ }
1396
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: IfBpDirective, decorators: [{
1397
+ type: Directive,
1398
+ args: [{
1399
+ selector: '[ifBp]',
1400
+ standalone: true,
1401
+ }]
1402
+ }], ctorParameters: () => [], propDecorators: { ifBp: [{ type: i0.Input, args: [{ isSignal: true, alias: "ifBp", required: true }] }], ifBpElse: [{ type: i0.Input, args: [{ isSignal: true, alias: "ifBpElse", required: false }] }] } });
1403
+
1404
+ /**
1405
+ * @file responsive-base.directive.ts (v5 — Angular 21 signals)
1406
+ *
1407
+ * ── What changed in v5 ────────────────────────────────────────────────────
1408
+ *
1409
+ * Full Angular 21 signals refactor:
1410
+ *
1411
+ * • resolve(), resolveNonCanonical(), resolveAll() are now PURE EXPORTED
1412
+ * FUNCTIONS that accept currentBp and isActive as parameters.
1413
+ * Directives call them from computed() or effect() with no "this" binding.
1414
+ *
1415
+ * • ResponsiveBaseDirective is now a thin utility base:
1416
+ * – Only injects ElementRef, Renderer2, MediaObserver, PLATFORM_ID.
1417
+ * – Exposes safeSetStyle() helper.
1418
+ * – No lifecycle hooks, no Injector, no EffectRef, no abstract apply().
1419
+ *
1420
+ * • Each concrete directive uses:
1421
+ * – input() for every @Input (signals, no more setters + _v/_nc maps)
1422
+ * – computed() to build BpValues / NcValues maps and derive resolved CSS
1423
+ * – effect() in the constructor to write to the DOM
1424
+ *
1425
+ * Benefits vs v4:
1426
+ * ✅ Zero manual lifecycle/subscription management (no OnInit/OnChanges/EffectRef)
1427
+ * ✅ Angular's reactive graph provides built-in dirty-checking and memoization
1428
+ * ✅ DOM writes happen only when the resolved CSS value actually changes
1429
+ * ✅ No more Injector injection just to create effects
1430
+ *
1431
+ * ── Resolution strategy (unchanged) ──────────────────────────────────────
1432
+ *
1433
+ * Canonical aliases (xs … xxl) → mobile-first cascade via resolve()
1434
+ * Non-canonical (lt-*, gt-*, *-up, *-down) → point-in-time isActive() checks
1435
+ * Final order: resolveNonCanonical() wins over resolve()
1436
+ */
1437
+ // ── O(1) alias → index lookup (module-level constant, shared across instances) ──
1438
+ const ALIAS_INDEX = new Map(CANONICAL_ALIASES.map((a, i) => [a, i]));
1439
+ /**
1440
+ * All non-canonical alias keys in priority order (most specific first).
1441
+ * lt-sm is "below sm" (= xs only), lt-md is "below md" (= xs+sm), etc.
1442
+ * Narrower range = higher priority = checked first.
1443
+ */
1444
+ const NON_CANONICAL_PRIORITY = [
1445
+ // lt-* from narrowest to widest
1446
+ 'lt-sm', 'lt-md', 'lt-lg', 'lt-xl', 'lt-xxl',
1447
+ // gt-* from widest to narrowest
1448
+ 'gt-xs', 'gt-sm', 'gt-md', 'gt-lg', 'gt-xl',
1449
+ // Bootstrap *-down from narrowest to widest
1450
+ 'sm-down', 'md-down', 'lg-down', 'xl-down',
1451
+ // Bootstrap *-up from widest to narrowest
1452
+ 'sm-up', 'md-up', 'lg-up', 'xl-up', 'xxl-up',
1453
+ ];
1454
+ // ── Pure resolution functions ─────────────────────────────────────────────────
1455
+ // These are standalone functions (not class methods) so they can be called
1456
+ // from computed() closures without capturing `this`.
1457
+ /**
1458
+ * Resolution with three-tier priority:
1459
+ *
1460
+ * 1. Exact breakpoint match (e.g. currentBp='sm' → values['sm'])
1461
+ * 2. Generic `default` value (e.g. [fxFlex]="49" — applies to all unspecified bps)
1462
+ * 3. Mobile-first cascade down (e.g. [fxFlex.xs]="X" [fxFlex.md]="Y" → lg cascades to md)
1463
+ *
1464
+ * This ensures [fxFlex]="49" [fxFlex.xs]="100" gives xs→100 and sm+→49,
1465
+ * instead of `xs` cascading up and shadowing the default on sm/md/lg.
1466
+ */
1467
+ function resolve(values, currentBp) {
1468
+ // 1. Exact match
1469
+ const exact = values[currentBp];
1470
+ if (exact !== undefined)
1471
+ return exact;
1472
+ // 2. Generic default (wins over cascade — it's the "applies everywhere" value)
1473
+ const def = values['default'];
1474
+ if (def !== undefined)
1475
+ return def;
1476
+ // 3. Mobile-first cascade (only when no default — e.g. [fxFlex.xs]="X" [fxFlex.md]="Y")
1477
+ const idx = ALIAS_INDEX.get(currentBp) ?? 0;
1478
+ for (let i = idx - 1; i >= 0; i--) {
1479
+ const v = values[CANONICAL_ALIASES[i]];
1480
+ if (v !== undefined)
1481
+ return v;
1482
+ }
1483
+ return undefined;
1484
+ }
1485
+ /**
1486
+ * Non-canonical point-in-time check: iterates NON_CANONICAL_PRIORITY and
1487
+ * returns the value for the first alias that isActive().
1488
+ */
1489
+ function resolveNonCanonical(nc, isActive) {
1490
+ for (const alias of NON_CANONICAL_PRIORITY) {
1491
+ const v = nc[alias];
1492
+ if (v !== undefined && isActive(alias))
1493
+ return v;
1494
+ }
1495
+ return undefined;
1496
+ }
1497
+ /**
1498
+ * Full resolution: non-canonical overrides win over the canonical cascade.
1499
+ *
1500
+ * Usage inside computed():
1501
+ * const resolved = computed(() =>
1502
+ * resolveAll(this._v(), this._nc(), this.media.currentBp(), a => this.media.isActive(a))
1503
+ * );
1504
+ */
1505
+ function resolveAll(canonical, nonCanonical, currentBp, isActive) {
1506
+ return resolveNonCanonical(nonCanonical, isActive) ?? resolve(canonical, currentBp);
1507
+ }
1508
+ // ── Base directive ─────────────────────────────────────────────────────────────
1509
+ class ResponsiveBaseDirective {
1510
+ constructor() {
1511
+ this.el = inject((ElementRef));
1512
+ this.r2 = inject(Renderer2);
1513
+ this.media = inject(MediaObserver);
1514
+ /** true in browser, false in SSR */
1515
+ this.isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
1516
+ }
1517
+ /** SSR-safe style setter. Pass null/empty string to remove the property. */
1518
+ safeSetStyle(prop, value) {
1519
+ if (value === null || value === '') {
1520
+ this.r2.removeStyle(this.el.nativeElement, prop);
1521
+ }
1522
+ else {
1523
+ this.r2.setStyle(this.el.nativeElement, prop, value);
1524
+ }
1525
+ }
1526
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ResponsiveBaseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1527
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.1", type: ResponsiveBaseDirective, isStandalone: true, ngImport: i0 }); }
1528
+ }
1529
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ResponsiveBaseDirective, decorators: [{
1530
+ type: Directive
1531
+ }] });
1532
+
1533
+ /**
1534
+ * @file fx-flex-extras.directives.ts (Angular 21 — signals)
1535
+ *
1536
+ * Flex child helper directives:
1537
+ * [fxFlexOrder] — CSS order
1538
+ * [fxFlexOffset] — margin-inline-start (RTL-safe)
1539
+ * [fxFlexAlign] — align-self override
1540
+ * [fxFlexFill] — fills the container (width/height 100%)
1541
+ *
1542
+ * Angular 21 changes:
1543
+ * • All @Input setters replaced by input() signals
1544
+ * • computed() derives the resolved CSS values
1545
+ * • effect() in constructor writes to DOM — no lifecycle hooks
1546
+ *
1547
+ * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down
1548
+ */
1549
+ class FxFlexOrderDirective extends ResponsiveBaseDirective {
1550
+ constructor() {
1551
+ super();
1552
+ this.fxFlexOrder = input(undefined, { ...(ngDevMode ? { debugName: "fxFlexOrder" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder' });
1553
+ this.xs = input(undefined, { ...(ngDevMode ? { debugName: "xs" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.xs' });
1554
+ this.sm = input(undefined, { ...(ngDevMode ? { debugName: "sm" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.sm' });
1555
+ this.md = input(undefined, { ...(ngDevMode ? { debugName: "md" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.md' });
1556
+ this.lg = input(undefined, { ...(ngDevMode ? { debugName: "lg" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.lg' });
1557
+ this.xl = input(undefined, { ...(ngDevMode ? { debugName: "xl" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.xl' });
1558
+ this.xxl = input(undefined, { ...(ngDevMode ? { debugName: "xxl" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.xxl' });
1559
+ this.ltSm = input(undefined, { ...(ngDevMode ? { debugName: "ltSm" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.lt-sm' });
1560
+ this.ltMd = input(undefined, { ...(ngDevMode ? { debugName: "ltMd" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.lt-md' });
1561
+ this.ltLg = input(undefined, { ...(ngDevMode ? { debugName: "ltLg" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.lt-lg' });
1562
+ this.ltXl = input(undefined, { ...(ngDevMode ? { debugName: "ltXl" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.lt-xl' });
1563
+ this.ltXxl = input(undefined, { ...(ngDevMode ? { debugName: "ltXxl" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.lt-xxl' });
1564
+ this.gtXs = input(undefined, { ...(ngDevMode ? { debugName: "gtXs" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.gt-xs' });
1565
+ this.gtSm = input(undefined, { ...(ngDevMode ? { debugName: "gtSm" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.gt-sm' });
1566
+ this.gtMd = input(undefined, { ...(ngDevMode ? { debugName: "gtMd" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.gt-md' });
1567
+ this.gtLg = input(undefined, { ...(ngDevMode ? { debugName: "gtLg" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.gt-lg' });
1568
+ this.gtXl = input(undefined, { ...(ngDevMode ? { debugName: "gtXl" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.gt-xl' });
1569
+ this.smUp = input(undefined, { ...(ngDevMode ? { debugName: "smUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.sm-up' });
1570
+ this.mdUp = input(undefined, { ...(ngDevMode ? { debugName: "mdUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.md-up' });
1571
+ this.lgUp = input(undefined, { ...(ngDevMode ? { debugName: "lgUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.lg-up' });
1572
+ this.xlUp = input(undefined, { ...(ngDevMode ? { debugName: "xlUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.xl-up' });
1573
+ this.xxlUp = input(undefined, { ...(ngDevMode ? { debugName: "xxlUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.xxl-up' });
1574
+ this.smDown = input(undefined, { ...(ngDevMode ? { debugName: "smDown" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.sm-down' });
1575
+ this.mdDown = input(undefined, { ...(ngDevMode ? { debugName: "mdDown" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.md-down' });
1576
+ this.lgDown = input(undefined, { ...(ngDevMode ? { debugName: "lgDown" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.lg-down' });
1577
+ this.xlDown = input(undefined, { ...(ngDevMode ? { debugName: "xlDown" } : /* istanbul ignore next */ {}), alias: 'fxFlexOrder.xl-down' });
1578
+ this._order = computed(() => resolveAll({ default: this.fxFlexOrder(), xs: this.xs(), sm: this.sm(), md: this.md(),
1579
+ lg: this.lg(), xl: this.xl(), xxl: this.xxl() }, { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),
1580
+ 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),
1581
+ 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),
1582
+ 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),
1583
+ 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),
1584
+ 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),
1585
+ 'sm-down': this.smDown(), 'md-down': this.mdDown(),
1586
+ 'lg-down': this.lgDown(), 'xl-down': this.xlDown() }, this.media.currentBp(), a => this.media.isActive(a)) ?? '0', /* @ts-ignore */
1587
+ ...(ngDevMode ? [{ debugName: "_order" }] : /* istanbul ignore next */ []));
1588
+ effect(() => {
1589
+ const v = this._order();
1590
+ if (isDevMode() && isNaN(Number(v)))
1591
+ console.warn(`[fxFlexOrder] Non-numeric value: "${v}"`);
1592
+ this.safeSetStyle('order', v);
1593
+ });
1594
+ }
1595
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxFlexOrderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1596
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: FxFlexOrderDirective, isStandalone: true, selector: "\n [fxFlexOrder],\n [fxFlexOrder.xs],[fxFlexOrder.sm],[fxFlexOrder.md],[fxFlexOrder.lg],[fxFlexOrder.xl],[fxFlexOrder.xxl],\n [fxFlexOrder.lt-sm],[fxFlexOrder.lt-md],[fxFlexOrder.lt-lg],[fxFlexOrder.lt-xl],[fxFlexOrder.lt-xxl],\n [fxFlexOrder.gt-xs],[fxFlexOrder.gt-sm],[fxFlexOrder.gt-md],[fxFlexOrder.gt-lg],[fxFlexOrder.gt-xl],\n [fxFlexOrder.sm-up],[fxFlexOrder.md-up],[fxFlexOrder.lg-up],[fxFlexOrder.xl-up],[fxFlexOrder.xxl-up],\n [fxFlexOrder.sm-down],[fxFlexOrder.md-down],[fxFlexOrder.lg-down],[fxFlexOrder.xl-down]\n ", inputs: { fxFlexOrder: { classPropertyName: "fxFlexOrder", publicName: "fxFlexOrder", isSignal: true, isRequired: false, transformFunction: null }, xs: { classPropertyName: "xs", publicName: "fxFlexOrder.xs", isSignal: true, isRequired: false, transformFunction: null }, sm: { classPropertyName: "sm", publicName: "fxFlexOrder.sm", isSignal: true, isRequired: false, transformFunction: null }, md: { classPropertyName: "md", publicName: "fxFlexOrder.md", isSignal: true, isRequired: false, transformFunction: null }, lg: { classPropertyName: "lg", publicName: "fxFlexOrder.lg", isSignal: true, isRequired: false, transformFunction: null }, xl: { classPropertyName: "xl", publicName: "fxFlexOrder.xl", isSignal: true, isRequired: false, transformFunction: null }, xxl: { classPropertyName: "xxl", publicName: "fxFlexOrder.xxl", isSignal: true, isRequired: false, transformFunction: null }, ltSm: { classPropertyName: "ltSm", publicName: "fxFlexOrder.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, ltMd: { classPropertyName: "ltMd", publicName: "fxFlexOrder.lt-md", isSignal: true, isRequired: false, transformFunction: null }, ltLg: { classPropertyName: "ltLg", publicName: "fxFlexOrder.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, ltXl: { classPropertyName: "ltXl", publicName: "fxFlexOrder.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, ltXxl: { classPropertyName: "ltXxl", publicName: "fxFlexOrder.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, gtXs: { classPropertyName: "gtXs", publicName: "fxFlexOrder.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, gtSm: { classPropertyName: "gtSm", publicName: "fxFlexOrder.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, gtMd: { classPropertyName: "gtMd", publicName: "fxFlexOrder.gt-md", isSignal: true, isRequired: false, transformFunction: null }, gtLg: { classPropertyName: "gtLg", publicName: "fxFlexOrder.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, gtXl: { classPropertyName: "gtXl", publicName: "fxFlexOrder.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, smUp: { classPropertyName: "smUp", publicName: "fxFlexOrder.sm-up", isSignal: true, isRequired: false, transformFunction: null }, mdUp: { classPropertyName: "mdUp", publicName: "fxFlexOrder.md-up", isSignal: true, isRequired: false, transformFunction: null }, lgUp: { classPropertyName: "lgUp", publicName: "fxFlexOrder.lg-up", isSignal: true, isRequired: false, transformFunction: null }, xlUp: { classPropertyName: "xlUp", publicName: "fxFlexOrder.xl-up", isSignal: true, isRequired: false, transformFunction: null }, xxlUp: { classPropertyName: "xxlUp", publicName: "fxFlexOrder.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, smDown: { classPropertyName: "smDown", publicName: "fxFlexOrder.sm-down", isSignal: true, isRequired: false, transformFunction: null }, mdDown: { classPropertyName: "mdDown", publicName: "fxFlexOrder.md-down", isSignal: true, isRequired: false, transformFunction: null }, lgDown: { classPropertyName: "lgDown", publicName: "fxFlexOrder.lg-down", isSignal: true, isRequired: false, transformFunction: null }, xlDown: { classPropertyName: "xlDown", publicName: "fxFlexOrder.xl-down", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
1597
+ }
1598
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxFlexOrderDirective, decorators: [{
1599
+ type: Directive,
1600
+ args: [{
1601
+ selector: `
1602
+ [fxFlexOrder],
1603
+ [fxFlexOrder.xs],[fxFlexOrder.sm],[fxFlexOrder.md],[fxFlexOrder.lg],[fxFlexOrder.xl],[fxFlexOrder.xxl],
1604
+ [fxFlexOrder.lt-sm],[fxFlexOrder.lt-md],[fxFlexOrder.lt-lg],[fxFlexOrder.lt-xl],[fxFlexOrder.lt-xxl],
1605
+ [fxFlexOrder.gt-xs],[fxFlexOrder.gt-sm],[fxFlexOrder.gt-md],[fxFlexOrder.gt-lg],[fxFlexOrder.gt-xl],
1606
+ [fxFlexOrder.sm-up],[fxFlexOrder.md-up],[fxFlexOrder.lg-up],[fxFlexOrder.xl-up],[fxFlexOrder.xxl-up],
1607
+ [fxFlexOrder.sm-down],[fxFlexOrder.md-down],[fxFlexOrder.lg-down],[fxFlexOrder.xl-down]
1608
+ `,
1609
+ standalone: true,
1610
+ }]
1611
+ }], ctorParameters: () => [], propDecorators: { fxFlexOrder: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder", required: false }] }], xs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.xs", required: false }] }], sm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.sm", required: false }] }], md: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.md", required: false }] }], lg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.lg", required: false }] }], xl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.xl", required: false }] }], xxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.xxl", required: false }] }], ltSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.lt-sm", required: false }] }], ltMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.lt-md", required: false }] }], ltLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.lt-lg", required: false }] }], ltXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.lt-xl", required: false }] }], ltXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.lt-xxl", required: false }] }], gtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.gt-xs", required: false }] }], gtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.gt-sm", required: false }] }], gtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.gt-md", required: false }] }], gtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.gt-lg", required: false }] }], gtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.gt-xl", required: false }] }], smUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.sm-up", required: false }] }], mdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.md-up", required: false }] }], lgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.lg-up", required: false }] }], xlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.xl-up", required: false }] }], xxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.xxl-up", required: false }] }], smDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.sm-down", required: false }] }], mdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.md-down", required: false }] }], lgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.lg-down", required: false }] }], xlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOrder.xl-down", required: false }] }] } });
1612
+ // ─── fxFlexOffset ────────────────────────────────────────────────────────────
1613
+ class FxFlexOffsetDirective extends ResponsiveBaseDirective {
1614
+ constructor() {
1615
+ super();
1616
+ this.fxFlexOffset = input(undefined, { ...(ngDevMode ? { debugName: "fxFlexOffset" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset' });
1617
+ this.xs = input(undefined, { ...(ngDevMode ? { debugName: "xs" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.xs' });
1618
+ this.sm = input(undefined, { ...(ngDevMode ? { debugName: "sm" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.sm' });
1619
+ this.md = input(undefined, { ...(ngDevMode ? { debugName: "md" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.md' });
1620
+ this.lg = input(undefined, { ...(ngDevMode ? { debugName: "lg" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.lg' });
1621
+ this.xl = input(undefined, { ...(ngDevMode ? { debugName: "xl" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.xl' });
1622
+ this.xxl = input(undefined, { ...(ngDevMode ? { debugName: "xxl" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.xxl' });
1623
+ this.ltSm = input(undefined, { ...(ngDevMode ? { debugName: "ltSm" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.lt-sm' });
1624
+ this.ltMd = input(undefined, { ...(ngDevMode ? { debugName: "ltMd" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.lt-md' });
1625
+ this.ltLg = input(undefined, { ...(ngDevMode ? { debugName: "ltLg" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.lt-lg' });
1626
+ this.ltXl = input(undefined, { ...(ngDevMode ? { debugName: "ltXl" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.lt-xl' });
1627
+ this.ltXxl = input(undefined, { ...(ngDevMode ? { debugName: "ltXxl" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.lt-xxl' });
1628
+ this.gtXs = input(undefined, { ...(ngDevMode ? { debugName: "gtXs" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.gt-xs' });
1629
+ this.gtSm = input(undefined, { ...(ngDevMode ? { debugName: "gtSm" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.gt-sm' });
1630
+ this.gtMd = input(undefined, { ...(ngDevMode ? { debugName: "gtMd" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.gt-md' });
1631
+ this.gtLg = input(undefined, { ...(ngDevMode ? { debugName: "gtLg" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.gt-lg' });
1632
+ this.gtXl = input(undefined, { ...(ngDevMode ? { debugName: "gtXl" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.gt-xl' });
1633
+ this.smUp = input(undefined, { ...(ngDevMode ? { debugName: "smUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.sm-up' });
1634
+ this.mdUp = input(undefined, { ...(ngDevMode ? { debugName: "mdUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.md-up' });
1635
+ this.lgUp = input(undefined, { ...(ngDevMode ? { debugName: "lgUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.lg-up' });
1636
+ this.xlUp = input(undefined, { ...(ngDevMode ? { debugName: "xlUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.xl-up' });
1637
+ this.xxlUp = input(undefined, { ...(ngDevMode ? { debugName: "xxlUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.xxl-up' });
1638
+ this.smDown = input(undefined, { ...(ngDevMode ? { debugName: "smDown" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.sm-down' });
1639
+ this.mdDown = input(undefined, { ...(ngDevMode ? { debugName: "mdDown" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.md-down' });
1640
+ this.lgDown = input(undefined, { ...(ngDevMode ? { debugName: "lgDown" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.lg-down' });
1641
+ this.xlDown = input(undefined, { ...(ngDevMode ? { debugName: "xlDown" } : /* istanbul ignore next */ {}), alias: 'fxFlexOffset.xl-down' });
1642
+ this._offset = computed(() => resolveAll({ default: this.fxFlexOffset(), xs: this.xs(), sm: this.sm(), md: this.md(),
1643
+ lg: this.lg(), xl: this.xl(), xxl: this.xxl() }, { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),
1644
+ 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),
1645
+ 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),
1646
+ 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),
1647
+ 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),
1648
+ 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),
1649
+ 'sm-down': this.smDown(), 'md-down': this.mdDown(),
1650
+ 'lg-down': this.lgDown(), 'xl-down': this.xlDown() }, this.media.currentBp(), a => this.media.isActive(a)) ?? '0', /* @ts-ignore */
1651
+ ...(ngDevMode ? [{ debugName: "_offset" }] : /* istanbul ignore next */ []));
1652
+ effect(() => {
1653
+ const v = this._offset();
1654
+ // ngx-layout parity: when the parent flex container is a column, offset
1655
+ // means push down on the cross axis -> margin-top. Otherwise (row or any
1656
+ // non-flex parent, e.g. plain block) push on the inline axis -> margin-inline-start
1657
+ // (RTL-safe). Detection is done via getComputedStyle so it works both with
1658
+ // [fxLayout] and with plain CSS flex containers.
1659
+ if (!this.isBrowser) {
1660
+ this.safeSetStyle('margin-inline-start', v);
1661
+ return;
1662
+ }
1663
+ const parent = this.el.nativeElement.parentElement;
1664
+ const isColumn = !!parent &&
1665
+ /^column/.test(getComputedStyle(parent).flexDirection || '');
1666
+ if (isColumn) {
1667
+ this.safeSetStyle('margin-inline-start', null);
1668
+ this.safeSetStyle('margin-top', v);
1669
+ }
1670
+ else {
1671
+ this.safeSetStyle('margin-top', null);
1672
+ this.safeSetStyle('margin-inline-start', v);
1673
+ }
1674
+ });
1675
+ }
1676
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxFlexOffsetDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1677
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: FxFlexOffsetDirective, isStandalone: true, selector: "\n [fxFlexOffset],\n [fxFlexOffset.xs],[fxFlexOffset.sm],[fxFlexOffset.md],[fxFlexOffset.lg],[fxFlexOffset.xl],[fxFlexOffset.xxl],\n [fxFlexOffset.lt-sm],[fxFlexOffset.lt-md],[fxFlexOffset.lt-lg],[fxFlexOffset.lt-xl],[fxFlexOffset.lt-xxl],\n [fxFlexOffset.gt-xs],[fxFlexOffset.gt-sm],[fxFlexOffset.gt-md],[fxFlexOffset.gt-lg],[fxFlexOffset.gt-xl],\n [fxFlexOffset.sm-up],[fxFlexOffset.md-up],[fxFlexOffset.lg-up],[fxFlexOffset.xl-up],[fxFlexOffset.xxl-up],\n [fxFlexOffset.sm-down],[fxFlexOffset.md-down],[fxFlexOffset.lg-down],[fxFlexOffset.xl-down]\n ", inputs: { fxFlexOffset: { classPropertyName: "fxFlexOffset", publicName: "fxFlexOffset", isSignal: true, isRequired: false, transformFunction: null }, xs: { classPropertyName: "xs", publicName: "fxFlexOffset.xs", isSignal: true, isRequired: false, transformFunction: null }, sm: { classPropertyName: "sm", publicName: "fxFlexOffset.sm", isSignal: true, isRequired: false, transformFunction: null }, md: { classPropertyName: "md", publicName: "fxFlexOffset.md", isSignal: true, isRequired: false, transformFunction: null }, lg: { classPropertyName: "lg", publicName: "fxFlexOffset.lg", isSignal: true, isRequired: false, transformFunction: null }, xl: { classPropertyName: "xl", publicName: "fxFlexOffset.xl", isSignal: true, isRequired: false, transformFunction: null }, xxl: { classPropertyName: "xxl", publicName: "fxFlexOffset.xxl", isSignal: true, isRequired: false, transformFunction: null }, ltSm: { classPropertyName: "ltSm", publicName: "fxFlexOffset.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, ltMd: { classPropertyName: "ltMd", publicName: "fxFlexOffset.lt-md", isSignal: true, isRequired: false, transformFunction: null }, ltLg: { classPropertyName: "ltLg", publicName: "fxFlexOffset.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, ltXl: { classPropertyName: "ltXl", publicName: "fxFlexOffset.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, ltXxl: { classPropertyName: "ltXxl", publicName: "fxFlexOffset.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, gtXs: { classPropertyName: "gtXs", publicName: "fxFlexOffset.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, gtSm: { classPropertyName: "gtSm", publicName: "fxFlexOffset.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, gtMd: { classPropertyName: "gtMd", publicName: "fxFlexOffset.gt-md", isSignal: true, isRequired: false, transformFunction: null }, gtLg: { classPropertyName: "gtLg", publicName: "fxFlexOffset.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, gtXl: { classPropertyName: "gtXl", publicName: "fxFlexOffset.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, smUp: { classPropertyName: "smUp", publicName: "fxFlexOffset.sm-up", isSignal: true, isRequired: false, transformFunction: null }, mdUp: { classPropertyName: "mdUp", publicName: "fxFlexOffset.md-up", isSignal: true, isRequired: false, transformFunction: null }, lgUp: { classPropertyName: "lgUp", publicName: "fxFlexOffset.lg-up", isSignal: true, isRequired: false, transformFunction: null }, xlUp: { classPropertyName: "xlUp", publicName: "fxFlexOffset.xl-up", isSignal: true, isRequired: false, transformFunction: null }, xxlUp: { classPropertyName: "xxlUp", publicName: "fxFlexOffset.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, smDown: { classPropertyName: "smDown", publicName: "fxFlexOffset.sm-down", isSignal: true, isRequired: false, transformFunction: null }, mdDown: { classPropertyName: "mdDown", publicName: "fxFlexOffset.md-down", isSignal: true, isRequired: false, transformFunction: null }, lgDown: { classPropertyName: "lgDown", publicName: "fxFlexOffset.lg-down", isSignal: true, isRequired: false, transformFunction: null }, xlDown: { classPropertyName: "xlDown", publicName: "fxFlexOffset.xl-down", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
1678
+ }
1679
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxFlexOffsetDirective, decorators: [{
1680
+ type: Directive,
1681
+ args: [{
1682
+ selector: `
1683
+ [fxFlexOffset],
1684
+ [fxFlexOffset.xs],[fxFlexOffset.sm],[fxFlexOffset.md],[fxFlexOffset.lg],[fxFlexOffset.xl],[fxFlexOffset.xxl],
1685
+ [fxFlexOffset.lt-sm],[fxFlexOffset.lt-md],[fxFlexOffset.lt-lg],[fxFlexOffset.lt-xl],[fxFlexOffset.lt-xxl],
1686
+ [fxFlexOffset.gt-xs],[fxFlexOffset.gt-sm],[fxFlexOffset.gt-md],[fxFlexOffset.gt-lg],[fxFlexOffset.gt-xl],
1687
+ [fxFlexOffset.sm-up],[fxFlexOffset.md-up],[fxFlexOffset.lg-up],[fxFlexOffset.xl-up],[fxFlexOffset.xxl-up],
1688
+ [fxFlexOffset.sm-down],[fxFlexOffset.md-down],[fxFlexOffset.lg-down],[fxFlexOffset.xl-down]
1689
+ `,
1690
+ standalone: true,
1691
+ }]
1692
+ }], ctorParameters: () => [], propDecorators: { fxFlexOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset", required: false }] }], xs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.xs", required: false }] }], sm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.sm", required: false }] }], md: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.md", required: false }] }], lg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.lg", required: false }] }], xl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.xl", required: false }] }], xxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.xxl", required: false }] }], ltSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.lt-sm", required: false }] }], ltMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.lt-md", required: false }] }], ltLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.lt-lg", required: false }] }], ltXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.lt-xl", required: false }] }], ltXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.lt-xxl", required: false }] }], gtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.gt-xs", required: false }] }], gtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.gt-sm", required: false }] }], gtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.gt-md", required: false }] }], gtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.gt-lg", required: false }] }], gtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.gt-xl", required: false }] }], smUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.sm-up", required: false }] }], mdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.md-up", required: false }] }], lgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.lg-up", required: false }] }], xlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.xl-up", required: false }] }], xxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.xxl-up", required: false }] }], smDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.sm-down", required: false }] }], mdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.md-down", required: false }] }], lgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.lg-down", required: false }] }], xlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexOffset.xl-down", required: false }] }] } });
1693
+ const ALIGN_SELF_MAP = {
1694
+ start: 'flex-start', end: 'flex-end', center: 'center',
1695
+ stretch: 'stretch', baseline: 'baseline', auto: 'auto',
1696
+ };
1697
+ class FxFlexAlignDirective extends ResponsiveBaseDirective {
1698
+ constructor() {
1699
+ super();
1700
+ this.fxFlexAlign = input(undefined, { ...(ngDevMode ? { debugName: "fxFlexAlign" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign' });
1701
+ this.xs = input(undefined, { ...(ngDevMode ? { debugName: "xs" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.xs' });
1702
+ this.sm = input(undefined, { ...(ngDevMode ? { debugName: "sm" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.sm' });
1703
+ this.md = input(undefined, { ...(ngDevMode ? { debugName: "md" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.md' });
1704
+ this.lg = input(undefined, { ...(ngDevMode ? { debugName: "lg" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.lg' });
1705
+ this.xl = input(undefined, { ...(ngDevMode ? { debugName: "xl" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.xl' });
1706
+ this.xxl = input(undefined, { ...(ngDevMode ? { debugName: "xxl" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.xxl' });
1707
+ this.ltSm = input(undefined, { ...(ngDevMode ? { debugName: "ltSm" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.lt-sm' });
1708
+ this.ltMd = input(undefined, { ...(ngDevMode ? { debugName: "ltMd" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.lt-md' });
1709
+ this.ltLg = input(undefined, { ...(ngDevMode ? { debugName: "ltLg" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.lt-lg' });
1710
+ this.ltXl = input(undefined, { ...(ngDevMode ? { debugName: "ltXl" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.lt-xl' });
1711
+ this.ltXxl = input(undefined, { ...(ngDevMode ? { debugName: "ltXxl" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.lt-xxl' });
1712
+ this.gtXs = input(undefined, { ...(ngDevMode ? { debugName: "gtXs" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.gt-xs' });
1713
+ this.gtSm = input(undefined, { ...(ngDevMode ? { debugName: "gtSm" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.gt-sm' });
1714
+ this.gtMd = input(undefined, { ...(ngDevMode ? { debugName: "gtMd" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.gt-md' });
1715
+ this.gtLg = input(undefined, { ...(ngDevMode ? { debugName: "gtLg" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.gt-lg' });
1716
+ this.gtXl = input(undefined, { ...(ngDevMode ? { debugName: "gtXl" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.gt-xl' });
1717
+ this.smUp = input(undefined, { ...(ngDevMode ? { debugName: "smUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.sm-up' });
1718
+ this.mdUp = input(undefined, { ...(ngDevMode ? { debugName: "mdUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.md-up' });
1719
+ this.lgUp = input(undefined, { ...(ngDevMode ? { debugName: "lgUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.lg-up' });
1720
+ this.xlUp = input(undefined, { ...(ngDevMode ? { debugName: "xlUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.xl-up' });
1721
+ this.xxlUp = input(undefined, { ...(ngDevMode ? { debugName: "xxlUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.xxl-up' });
1722
+ this.smDown = input(undefined, { ...(ngDevMode ? { debugName: "smDown" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.sm-down' });
1723
+ this.mdDown = input(undefined, { ...(ngDevMode ? { debugName: "mdDown" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.md-down' });
1724
+ this.lgDown = input(undefined, { ...(ngDevMode ? { debugName: "lgDown" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.lg-down' });
1725
+ this.xlDown = input(undefined, { ...(ngDevMode ? { debugName: "xlDown" } : /* istanbul ignore next */ {}), alias: 'fxFlexAlign.xl-down' });
1726
+ this._alignSelf = computed(() => {
1727
+ const v = resolveAll({ default: this.fxFlexAlign(), xs: this.xs(), sm: this.sm(), md: this.md(),
1728
+ lg: this.lg(), xl: this.xl(), xxl: this.xxl() }, { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),
1729
+ 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),
1730
+ 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),
1731
+ 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),
1732
+ 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),
1733
+ 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),
1734
+ 'sm-down': this.smDown(), 'md-down': this.mdDown(),
1735
+ 'lg-down': this.lgDown(), 'xl-down': this.xlDown() }, this.media.currentBp(), a => this.media.isActive(a)) ?? 'stretch';
1736
+ if (isDevMode() && !ALIGN_SELF_MAP[v])
1737
+ console.warn(`[fxFlexAlign] Unknown value: "${v}". Valid: ${Object.keys(ALIGN_SELF_MAP).join(', ')}`);
1738
+ return ALIGN_SELF_MAP[v] ?? v;
1739
+ }, /* @ts-ignore */
1740
+ ...(ngDevMode ? [{ debugName: "_alignSelf" }] : /* istanbul ignore next */ []));
1741
+ effect(() => { this.safeSetStyle('align-self', this._alignSelf()); });
1742
+ }
1743
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxFlexAlignDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1744
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: FxFlexAlignDirective, isStandalone: true, selector: "\n [fxFlexAlign],\n [fxFlexAlign.xs],[fxFlexAlign.sm],[fxFlexAlign.md],[fxFlexAlign.lg],[fxFlexAlign.xl],[fxFlexAlign.xxl],\n [fxFlexAlign.lt-sm],[fxFlexAlign.lt-md],[fxFlexAlign.lt-lg],[fxFlexAlign.lt-xl],[fxFlexAlign.lt-xxl],\n [fxFlexAlign.gt-xs],[fxFlexAlign.gt-sm],[fxFlexAlign.gt-md],[fxFlexAlign.gt-lg],[fxFlexAlign.gt-xl],\n [fxFlexAlign.sm-up],[fxFlexAlign.md-up],[fxFlexAlign.lg-up],[fxFlexAlign.xl-up],[fxFlexAlign.xxl-up],\n [fxFlexAlign.sm-down],[fxFlexAlign.md-down],[fxFlexAlign.lg-down],[fxFlexAlign.xl-down]\n ", inputs: { fxFlexAlign: { classPropertyName: "fxFlexAlign", publicName: "fxFlexAlign", isSignal: true, isRequired: false, transformFunction: null }, xs: { classPropertyName: "xs", publicName: "fxFlexAlign.xs", isSignal: true, isRequired: false, transformFunction: null }, sm: { classPropertyName: "sm", publicName: "fxFlexAlign.sm", isSignal: true, isRequired: false, transformFunction: null }, md: { classPropertyName: "md", publicName: "fxFlexAlign.md", isSignal: true, isRequired: false, transformFunction: null }, lg: { classPropertyName: "lg", publicName: "fxFlexAlign.lg", isSignal: true, isRequired: false, transformFunction: null }, xl: { classPropertyName: "xl", publicName: "fxFlexAlign.xl", isSignal: true, isRequired: false, transformFunction: null }, xxl: { classPropertyName: "xxl", publicName: "fxFlexAlign.xxl", isSignal: true, isRequired: false, transformFunction: null }, ltSm: { classPropertyName: "ltSm", publicName: "fxFlexAlign.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, ltMd: { classPropertyName: "ltMd", publicName: "fxFlexAlign.lt-md", isSignal: true, isRequired: false, transformFunction: null }, ltLg: { classPropertyName: "ltLg", publicName: "fxFlexAlign.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, ltXl: { classPropertyName: "ltXl", publicName: "fxFlexAlign.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, ltXxl: { classPropertyName: "ltXxl", publicName: "fxFlexAlign.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, gtXs: { classPropertyName: "gtXs", publicName: "fxFlexAlign.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, gtSm: { classPropertyName: "gtSm", publicName: "fxFlexAlign.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, gtMd: { classPropertyName: "gtMd", publicName: "fxFlexAlign.gt-md", isSignal: true, isRequired: false, transformFunction: null }, gtLg: { classPropertyName: "gtLg", publicName: "fxFlexAlign.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, gtXl: { classPropertyName: "gtXl", publicName: "fxFlexAlign.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, smUp: { classPropertyName: "smUp", publicName: "fxFlexAlign.sm-up", isSignal: true, isRequired: false, transformFunction: null }, mdUp: { classPropertyName: "mdUp", publicName: "fxFlexAlign.md-up", isSignal: true, isRequired: false, transformFunction: null }, lgUp: { classPropertyName: "lgUp", publicName: "fxFlexAlign.lg-up", isSignal: true, isRequired: false, transformFunction: null }, xlUp: { classPropertyName: "xlUp", publicName: "fxFlexAlign.xl-up", isSignal: true, isRequired: false, transformFunction: null }, xxlUp: { classPropertyName: "xxlUp", publicName: "fxFlexAlign.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, smDown: { classPropertyName: "smDown", publicName: "fxFlexAlign.sm-down", isSignal: true, isRequired: false, transformFunction: null }, mdDown: { classPropertyName: "mdDown", publicName: "fxFlexAlign.md-down", isSignal: true, isRequired: false, transformFunction: null }, lgDown: { classPropertyName: "lgDown", publicName: "fxFlexAlign.lg-down", isSignal: true, isRequired: false, transformFunction: null }, xlDown: { classPropertyName: "xlDown", publicName: "fxFlexAlign.xl-down", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
1745
+ }
1746
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxFlexAlignDirective, decorators: [{
1747
+ type: Directive,
1748
+ args: [{
1749
+ selector: `
1750
+ [fxFlexAlign],
1751
+ [fxFlexAlign.xs],[fxFlexAlign.sm],[fxFlexAlign.md],[fxFlexAlign.lg],[fxFlexAlign.xl],[fxFlexAlign.xxl],
1752
+ [fxFlexAlign.lt-sm],[fxFlexAlign.lt-md],[fxFlexAlign.lt-lg],[fxFlexAlign.lt-xl],[fxFlexAlign.lt-xxl],
1753
+ [fxFlexAlign.gt-xs],[fxFlexAlign.gt-sm],[fxFlexAlign.gt-md],[fxFlexAlign.gt-lg],[fxFlexAlign.gt-xl],
1754
+ [fxFlexAlign.sm-up],[fxFlexAlign.md-up],[fxFlexAlign.lg-up],[fxFlexAlign.xl-up],[fxFlexAlign.xxl-up],
1755
+ [fxFlexAlign.sm-down],[fxFlexAlign.md-down],[fxFlexAlign.lg-down],[fxFlexAlign.xl-down]
1756
+ `,
1757
+ standalone: true,
1758
+ }]
1759
+ }], ctorParameters: () => [], propDecorators: { fxFlexAlign: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign", required: false }] }], xs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.xs", required: false }] }], sm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.sm", required: false }] }], md: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.md", required: false }] }], lg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.lg", required: false }] }], xl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.xl", required: false }] }], xxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.xxl", required: false }] }], ltSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.lt-sm", required: false }] }], ltMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.lt-md", required: false }] }], ltLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.lt-lg", required: false }] }], ltXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.lt-xl", required: false }] }], ltXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.lt-xxl", required: false }] }], gtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.gt-xs", required: false }] }], gtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.gt-sm", required: false }] }], gtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.gt-md", required: false }] }], gtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.gt-lg", required: false }] }], gtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.gt-xl", required: false }] }], smUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.sm-up", required: false }] }], mdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.md-up", required: false }] }], lgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.lg-up", required: false }] }], xlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.xl-up", required: false }] }], xxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.xxl-up", required: false }] }], smDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.sm-down", required: false }] }], mdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.md-down", required: false }] }], lgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.lg-down", required: false }] }], xlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexAlign.xl-down", required: false }] }] } });
1760
+ function toBool$1(v) {
1761
+ if (v === undefined)
1762
+ return undefined;
1763
+ if (typeof v === 'boolean')
1764
+ return v;
1765
+ if (v === '')
1766
+ return true;
1767
+ return v !== 'none';
1768
+ }
1769
+ class FxFlexFillDirective extends ResponsiveBaseDirective {
1770
+ constructor() {
1771
+ super();
1772
+ this.fxFlexFill = input(undefined, { ...(ngDevMode ? { debugName: "fxFlexFill" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill', transform: toBool$1 });
1773
+ this.fxFill = input(undefined, { ...(ngDevMode ? { debugName: "fxFill" } : /* istanbul ignore next */ {}), alias: 'fxFill', transform: toBool$1 });
1774
+ this.xs = input(undefined, { ...(ngDevMode ? { debugName: "xs" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.xs', transform: toBool$1 });
1775
+ this.sm = input(undefined, { ...(ngDevMode ? { debugName: "sm" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.sm', transform: toBool$1 });
1776
+ this.md = input(undefined, { ...(ngDevMode ? { debugName: "md" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.md', transform: toBool$1 });
1777
+ this.lg = input(undefined, { ...(ngDevMode ? { debugName: "lg" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.lg', transform: toBool$1 });
1778
+ this.xl = input(undefined, { ...(ngDevMode ? { debugName: "xl" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.xl', transform: toBool$1 });
1779
+ this.xxl = input(undefined, { ...(ngDevMode ? { debugName: "xxl" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.xxl', transform: toBool$1 });
1780
+ this.ltSm = input(undefined, { ...(ngDevMode ? { debugName: "ltSm" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.lt-sm', transform: toBool$1 });
1781
+ this.ltMd = input(undefined, { ...(ngDevMode ? { debugName: "ltMd" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.lt-md', transform: toBool$1 });
1782
+ this.ltLg = input(undefined, { ...(ngDevMode ? { debugName: "ltLg" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.lt-lg', transform: toBool$1 });
1783
+ this.ltXl = input(undefined, { ...(ngDevMode ? { debugName: "ltXl" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.lt-xl', transform: toBool$1 });
1784
+ this.ltXxl = input(undefined, { ...(ngDevMode ? { debugName: "ltXxl" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.lt-xxl', transform: toBool$1 });
1785
+ this.gtXs = input(undefined, { ...(ngDevMode ? { debugName: "gtXs" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.gt-xs', transform: toBool$1 });
1786
+ this.gtSm = input(undefined, { ...(ngDevMode ? { debugName: "gtSm" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.gt-sm', transform: toBool$1 });
1787
+ this.gtMd = input(undefined, { ...(ngDevMode ? { debugName: "gtMd" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.gt-md', transform: toBool$1 });
1788
+ this.gtLg = input(undefined, { ...(ngDevMode ? { debugName: "gtLg" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.gt-lg', transform: toBool$1 });
1789
+ this.gtXl = input(undefined, { ...(ngDevMode ? { debugName: "gtXl" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.gt-xl', transform: toBool$1 });
1790
+ this.smUp = input(undefined, { ...(ngDevMode ? { debugName: "smUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.sm-up', transform: toBool$1 });
1791
+ this.mdUp = input(undefined, { ...(ngDevMode ? { debugName: "mdUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.md-up', transform: toBool$1 });
1792
+ this.lgUp = input(undefined, { ...(ngDevMode ? { debugName: "lgUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.lg-up', transform: toBool$1 });
1793
+ this.xlUp = input(undefined, { ...(ngDevMode ? { debugName: "xlUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.xl-up', transform: toBool$1 });
1794
+ this.xxlUp = input(undefined, { ...(ngDevMode ? { debugName: "xxlUp" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.xxl-up', transform: toBool$1 });
1795
+ this.smDown = input(undefined, { ...(ngDevMode ? { debugName: "smDown" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.sm-down', transform: toBool$1 });
1796
+ this.mdDown = input(undefined, { ...(ngDevMode ? { debugName: "mdDown" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.md-down', transform: toBool$1 });
1797
+ this.lgDown = input(undefined, { ...(ngDevMode ? { debugName: "lgDown" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.lg-down', transform: toBool$1 });
1798
+ this.xlDown = input(undefined, { ...(ngDevMode ? { debugName: "xlDown" } : /* istanbul ignore next */ {}), alias: 'fxFlexFill.xl-down', transform: toBool$1 });
1799
+ this._active = computed(() => resolveAll(
1800
+ // fxFill is a shorthand alias for the default; fxFlexFill wins if both set
1801
+ { default: this.fxFlexFill() ?? this.fxFill(),
1802
+ xs: this.xs(), sm: this.sm(),
1803
+ md: this.md(), lg: this.lg(),
1804
+ xl: this.xl(), xxl: this.xxl() }, { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(),
1805
+ 'lt-lg': this.ltLg(), 'lt-xl': this.ltXl(),
1806
+ 'lt-xxl': this.ltXxl(),
1807
+ 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(),
1808
+ 'gt-md': this.gtMd(), 'gt-lg': this.gtLg(),
1809
+ 'gt-xl': this.gtXl(),
1810
+ 'sm-up': this.smUp(), 'md-up': this.mdUp(),
1811
+ 'lg-up': this.lgUp(), 'xl-up': this.xlUp(),
1812
+ 'xxl-up': this.xxlUp(),
1813
+ 'sm-down': this.smDown(), 'md-down': this.mdDown(),
1814
+ 'lg-down': this.lgDown(), 'xl-down': this.xlDown() }, this.media.currentBp(), a => this.media.isActive(a)) ?? true, /* @ts-ignore */
1815
+ ...(ngDevMode ? [{ debugName: "_active" }] : /* istanbul ignore next */ []));
1816
+ effect(() => {
1817
+ const active = this._active();
1818
+ const v = active ? '100%' : null;
1819
+ this.safeSetStyle('margin', active ? '0' : null);
1820
+ // align-self: stretch ensures this element fills the parent's cross axis even
1821
+ // when the parent flex container has align-items: center (e.g. mat-toolbar).
1822
+ // Without this, height: 100% collapses to content height and align-items on
1823
+ // this container has no visible centering space.
1824
+ this.safeSetStyle('align-self', active ? 'stretch' : null);
1825
+ this.safeSetStyle('width', v);
1826
+ this.safeSetStyle('height', v);
1827
+ this.safeSetStyle('min-width', v);
1828
+ this.safeSetStyle('min-height', v);
1829
+ });
1830
+ }
1831
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxFlexFillDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1832
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: FxFlexFillDirective, isStandalone: true, selector: "\n [fxFlexFill],[fxFill],\n [fxFlexFill.xs],[fxFlexFill.sm],[fxFlexFill.md],[fxFlexFill.lg],[fxFlexFill.xl],[fxFlexFill.xxl],\n [fxFlexFill.lt-sm],[fxFlexFill.lt-md],[fxFlexFill.lt-lg],[fxFlexFill.lt-xl],[fxFlexFill.lt-xxl],\n [fxFlexFill.gt-xs],[fxFlexFill.gt-sm],[fxFlexFill.gt-md],[fxFlexFill.gt-lg],[fxFlexFill.gt-xl],\n [fxFlexFill.sm-up],[fxFlexFill.md-up],[fxFlexFill.lg-up],[fxFlexFill.xl-up],[fxFlexFill.xxl-up],\n [fxFlexFill.sm-down],[fxFlexFill.md-down],[fxFlexFill.lg-down],[fxFlexFill.xl-down]\n ", inputs: { fxFlexFill: { classPropertyName: "fxFlexFill", publicName: "fxFlexFill", isSignal: true, isRequired: false, transformFunction: null }, fxFill: { classPropertyName: "fxFill", publicName: "fxFill", isSignal: true, isRequired: false, transformFunction: null }, xs: { classPropertyName: "xs", publicName: "fxFlexFill.xs", isSignal: true, isRequired: false, transformFunction: null }, sm: { classPropertyName: "sm", publicName: "fxFlexFill.sm", isSignal: true, isRequired: false, transformFunction: null }, md: { classPropertyName: "md", publicName: "fxFlexFill.md", isSignal: true, isRequired: false, transformFunction: null }, lg: { classPropertyName: "lg", publicName: "fxFlexFill.lg", isSignal: true, isRequired: false, transformFunction: null }, xl: { classPropertyName: "xl", publicName: "fxFlexFill.xl", isSignal: true, isRequired: false, transformFunction: null }, xxl: { classPropertyName: "xxl", publicName: "fxFlexFill.xxl", isSignal: true, isRequired: false, transformFunction: null }, ltSm: { classPropertyName: "ltSm", publicName: "fxFlexFill.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, ltMd: { classPropertyName: "ltMd", publicName: "fxFlexFill.lt-md", isSignal: true, isRequired: false, transformFunction: null }, ltLg: { classPropertyName: "ltLg", publicName: "fxFlexFill.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, ltXl: { classPropertyName: "ltXl", publicName: "fxFlexFill.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, ltXxl: { classPropertyName: "ltXxl", publicName: "fxFlexFill.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, gtXs: { classPropertyName: "gtXs", publicName: "fxFlexFill.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, gtSm: { classPropertyName: "gtSm", publicName: "fxFlexFill.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, gtMd: { classPropertyName: "gtMd", publicName: "fxFlexFill.gt-md", isSignal: true, isRequired: false, transformFunction: null }, gtLg: { classPropertyName: "gtLg", publicName: "fxFlexFill.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, gtXl: { classPropertyName: "gtXl", publicName: "fxFlexFill.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, smUp: { classPropertyName: "smUp", publicName: "fxFlexFill.sm-up", isSignal: true, isRequired: false, transformFunction: null }, mdUp: { classPropertyName: "mdUp", publicName: "fxFlexFill.md-up", isSignal: true, isRequired: false, transformFunction: null }, lgUp: { classPropertyName: "lgUp", publicName: "fxFlexFill.lg-up", isSignal: true, isRequired: false, transformFunction: null }, xlUp: { classPropertyName: "xlUp", publicName: "fxFlexFill.xl-up", isSignal: true, isRequired: false, transformFunction: null }, xxlUp: { classPropertyName: "xxlUp", publicName: "fxFlexFill.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, smDown: { classPropertyName: "smDown", publicName: "fxFlexFill.sm-down", isSignal: true, isRequired: false, transformFunction: null }, mdDown: { classPropertyName: "mdDown", publicName: "fxFlexFill.md-down", isSignal: true, isRequired: false, transformFunction: null }, lgDown: { classPropertyName: "lgDown", publicName: "fxFlexFill.lg-down", isSignal: true, isRequired: false, transformFunction: null }, xlDown: { classPropertyName: "xlDown", publicName: "fxFlexFill.xl-down", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
1833
+ }
1834
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxFlexFillDirective, decorators: [{
1835
+ type: Directive,
1836
+ args: [{
1837
+ selector: `
1838
+ [fxFlexFill],[fxFill],
1839
+ [fxFlexFill.xs],[fxFlexFill.sm],[fxFlexFill.md],[fxFlexFill.lg],[fxFlexFill.xl],[fxFlexFill.xxl],
1840
+ [fxFlexFill.lt-sm],[fxFlexFill.lt-md],[fxFlexFill.lt-lg],[fxFlexFill.lt-xl],[fxFlexFill.lt-xxl],
1841
+ [fxFlexFill.gt-xs],[fxFlexFill.gt-sm],[fxFlexFill.gt-md],[fxFlexFill.gt-lg],[fxFlexFill.gt-xl],
1842
+ [fxFlexFill.sm-up],[fxFlexFill.md-up],[fxFlexFill.lg-up],[fxFlexFill.xl-up],[fxFlexFill.xxl-up],
1843
+ [fxFlexFill.sm-down],[fxFlexFill.md-down],[fxFlexFill.lg-down],[fxFlexFill.xl-down]
1844
+ `,
1845
+ standalone: true,
1846
+ }]
1847
+ }], ctorParameters: () => [], propDecorators: { fxFlexFill: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill", required: false }] }], fxFill: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFill", required: false }] }], xs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.xs", required: false }] }], sm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.sm", required: false }] }], md: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.md", required: false }] }], lg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.lg", required: false }] }], xl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.xl", required: false }] }], xxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.xxl", required: false }] }], ltSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.lt-sm", required: false }] }], ltMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.lt-md", required: false }] }], ltLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.lt-lg", required: false }] }], ltXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.lt-xl", required: false }] }], ltXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.lt-xxl", required: false }] }], gtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.gt-xs", required: false }] }], gtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.gt-sm", required: false }] }], gtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.gt-md", required: false }] }], gtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.gt-lg", required: false }] }], gtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.gt-xl", required: false }] }], smUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.sm-up", required: false }] }], mdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.md-up", required: false }] }], lgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.lg-up", required: false }] }], xlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.xl-up", required: false }] }], xxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.xxl-up", required: false }] }], smDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.sm-down", required: false }] }], mdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.md-down", required: false }] }], lgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.lg-down", required: false }] }], xlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlexFill.xl-down", required: false }] }] } });
1848
+
1849
+ /**
1850
+ * @file fx-flex.directive.ts (Angular 21 — signals)
1851
+ *
1852
+ * [fxFlex] — flex shorthand on a flex child element.
1853
+ *
1854
+ * Angular 21 changes:
1855
+ * • All @Input setters replaced by input() signals
1856
+ * • computed() builds the BpValues / NcValues maps reactively
1857
+ * • effect() in constructor writes to the DOM — no lifecycle hooks needed
1858
+ * • resolveAll() is the pure function from responsive-base.directive.ts
1859
+ *
1860
+ * Accepted values:
1861
+ * (empty) → flex: 1 1 0%
1862
+ * "auto" → flex: 1 1 auto
1863
+ * "none" → flex: none
1864
+ * "grow" → flex: 1 1 100%
1865
+ * "nogrow" → flex: 0 1 auto
1866
+ * "noshrink" → flex: 1 0 auto
1867
+ * "50%" → flex: 1 1 50%
1868
+ * "50" → flex: 1 1 50% (unitless normalized to %)
1869
+ * "200px" → flex: 1 1 200px
1870
+ * "0 0 200px" → flex: 0 0 200px (full shorthand passthrough)
1871
+ *
1872
+ * Breakpoint suffixes:
1873
+ * Canonical : .xs .sm .md .lg .xl .xxl
1874
+ * lt-* : .lt-sm .lt-md .lt-lg .lt-xl .lt-xxl
1875
+ * gt-* : .gt-xs .gt-sm .gt-md .gt-lg .gt-xl
1876
+ * *-up : .sm-up .md-up .lg-up .xl-up .xxl-up
1877
+ * *-down : .sm-down .md-down .lg-down .xl-down
1878
+ */
1879
+ function toFlexCss(raw) {
1880
+ if (raw === undefined || raw === '' || raw === '*')
1881
+ return '1 1 auto';
1882
+ if (raw === 'none')
1883
+ return 'none';
1884
+ if (raw === 'auto')
1885
+ return '1 1 auto';
1886
+ if (raw === 'grow')
1887
+ return '1 1 100%';
1888
+ if (raw === 'nogrow')
1889
+ return '0 1 auto';
1890
+ if (raw === 'noshrink')
1891
+ return '1 0 auto';
1892
+ const parts = raw.trim().split(/\s+/);
1893
+ if (parts.length === 3)
1894
+ return raw.trim();
1895
+ let basis = parts[0];
1896
+ if (/^\d+(\.\d+)?$/.test(basis))
1897
+ basis = basis + '%';
1898
+ // Fixed units (px, em, rem, vh, vw…) → 0 0 (no grow/shrink); % → 1 1
1899
+ const fixed = /px|em|rem|vh|vw|vmin|vmax|ch|ex|cm|mm|in|pt|pc/.test(basis);
1900
+ return `${fixed ? '0 0' : '1 1'} ${basis}`;
1901
+ }
1902
+ /** Returns true if any sibling element in the same parent has fxFlex="*" */
1903
+ function parentHasStar(el) {
1904
+ const parent = el.parentElement;
1905
+ if (!parent)
1906
+ return false;
1907
+ return Array.from(parent.children).some(c => c !== el && (c.getAttribute('fxflex') === '*' || c.getAttribute('fxFlex') === '*'));
1908
+ }
1909
+ class FxFlexDirective extends ResponsiveBaseDirective {
1910
+ constructor() {
1911
+ super();
1912
+ // ── Canonical signal inputs ───────────────────────────────────────────────
1913
+ this.fxFlex = input(undefined, { ...(ngDevMode ? { debugName: "fxFlex" } : /* istanbul ignore next */ {}), alias: 'fxFlex' });
1914
+ this.xs = input(undefined, { ...(ngDevMode ? { debugName: "xs" } : /* istanbul ignore next */ {}), alias: 'fxFlex.xs' });
1915
+ this.sm = input(undefined, { ...(ngDevMode ? { debugName: "sm" } : /* istanbul ignore next */ {}), alias: 'fxFlex.sm' });
1916
+ this.md = input(undefined, { ...(ngDevMode ? { debugName: "md" } : /* istanbul ignore next */ {}), alias: 'fxFlex.md' });
1917
+ this.lg = input(undefined, { ...(ngDevMode ? { debugName: "lg" } : /* istanbul ignore next */ {}), alias: 'fxFlex.lg' });
1918
+ this.xl = input(undefined, { ...(ngDevMode ? { debugName: "xl" } : /* istanbul ignore next */ {}), alias: 'fxFlex.xl' });
1919
+ this.xxl = input(undefined, { ...(ngDevMode ? { debugName: "xxl" } : /* istanbul ignore next */ {}), alias: 'fxFlex.xxl' });
1920
+ // ── lt-* ─────────────────────────────────────────────────────────────────
1921
+ this.ltSm = input(undefined, { ...(ngDevMode ? { debugName: "ltSm" } : /* istanbul ignore next */ {}), alias: 'fxFlex.lt-sm' });
1922
+ this.ltMd = input(undefined, { ...(ngDevMode ? { debugName: "ltMd" } : /* istanbul ignore next */ {}), alias: 'fxFlex.lt-md' });
1923
+ this.ltLg = input(undefined, { ...(ngDevMode ? { debugName: "ltLg" } : /* istanbul ignore next */ {}), alias: 'fxFlex.lt-lg' });
1924
+ this.ltXl = input(undefined, { ...(ngDevMode ? { debugName: "ltXl" } : /* istanbul ignore next */ {}), alias: 'fxFlex.lt-xl' });
1925
+ this.ltXxl = input(undefined, { ...(ngDevMode ? { debugName: "ltXxl" } : /* istanbul ignore next */ {}), alias: 'fxFlex.lt-xxl' });
1926
+ // ── gt-* ─────────────────────────────────────────────────────────────────
1927
+ this.gtXs = input(undefined, { ...(ngDevMode ? { debugName: "gtXs" } : /* istanbul ignore next */ {}), alias: 'fxFlex.gt-xs' });
1928
+ this.gtSm = input(undefined, { ...(ngDevMode ? { debugName: "gtSm" } : /* istanbul ignore next */ {}), alias: 'fxFlex.gt-sm' });
1929
+ this.gtMd = input(undefined, { ...(ngDevMode ? { debugName: "gtMd" } : /* istanbul ignore next */ {}), alias: 'fxFlex.gt-md' });
1930
+ this.gtLg = input(undefined, { ...(ngDevMode ? { debugName: "gtLg" } : /* istanbul ignore next */ {}), alias: 'fxFlex.gt-lg' });
1931
+ this.gtXl = input(undefined, { ...(ngDevMode ? { debugName: "gtXl" } : /* istanbul ignore next */ {}), alias: 'fxFlex.gt-xl' });
1932
+ // ── *-up ─────────────────────────────────────────────────────────────────
1933
+ this.smUp = input(undefined, { ...(ngDevMode ? { debugName: "smUp" } : /* istanbul ignore next */ {}), alias: 'fxFlex.sm-up' });
1934
+ this.mdUp = input(undefined, { ...(ngDevMode ? { debugName: "mdUp" } : /* istanbul ignore next */ {}), alias: 'fxFlex.md-up' });
1935
+ this.lgUp = input(undefined, { ...(ngDevMode ? { debugName: "lgUp" } : /* istanbul ignore next */ {}), alias: 'fxFlex.lg-up' });
1936
+ this.xlUp = input(undefined, { ...(ngDevMode ? { debugName: "xlUp" } : /* istanbul ignore next */ {}), alias: 'fxFlex.xl-up' });
1937
+ this.xxlUp = input(undefined, { ...(ngDevMode ? { debugName: "xxlUp" } : /* istanbul ignore next */ {}), alias: 'fxFlex.xxl-up' });
1938
+ // ── *-down ───────────────────────────────────────────────────────────────
1939
+ this.smDown = input(undefined, { ...(ngDevMode ? { debugName: "smDown" } : /* istanbul ignore next */ {}), alias: 'fxFlex.sm-down' });
1940
+ this.mdDown = input(undefined, { ...(ngDevMode ? { debugName: "mdDown" } : /* istanbul ignore next */ {}), alias: 'fxFlex.md-down' });
1941
+ this.lgDown = input(undefined, { ...(ngDevMode ? { debugName: "lgDown" } : /* istanbul ignore next */ {}), alias: 'fxFlex.lg-down' });
1942
+ this.xlDown = input(undefined, { ...(ngDevMode ? { debugName: "xlDown" } : /* istanbul ignore next */ {}), alias: 'fxFlex.xl-down' });
1943
+ // ── Derived CSS value ──────────────────────────────────────────────────────
1944
+ // Inlined single computed: Angular tracks each input() individually,
1945
+ // so _flexCss only recomputes when a signal it actually reads changes.
1946
+ this._rawFlex = computed(() => resolveAll({ default: this.fxFlex(), xs: this.xs(), sm: this.sm(), md: this.md(),
1947
+ lg: this.lg(), xl: this.xl(), xxl: this.xxl() }, { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),
1948
+ 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),
1949
+ 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),
1950
+ 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),
1951
+ 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),
1952
+ 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),
1953
+ 'sm-down': this.smDown(), 'md-down': this.mdDown(),
1954
+ 'lg-down': this.lgDown(), 'xl-down': this.xlDown() }, this.media.currentBp(), a => this.media.isActive(a)), /* @ts-ignore */
1955
+ ...(ngDevMode ? [{ debugName: "_rawFlex" }] : /* istanbul ignore next */ []));
1956
+ effect(() => {
1957
+ const raw = this._rawFlex();
1958
+ // undefined means no rule matched the current breakpoint (e.g. only fxFlex.lt-md="100"
1959
+ // is set and the current bp is lg+). Remove flex entirely so the browser default
1960
+ // (flex: 0 1 auto) applies and justify-content can distribute the remaining space.
1961
+ if (raw === undefined) {
1962
+ this.safeSetStyle('flex', null);
1963
+ this.safeSetStyle('box-sizing', null);
1964
+ return;
1965
+ }
1966
+ // empty string / "*" → equal distribution (1 1 auto), unless a star-sibling is present
1967
+ const css = raw === ''
1968
+ ? (parentHasStar(this.el.nativeElement) ? '0 0 auto' : '1 1 auto')
1969
+ : toFlexCss(raw);
1970
+ this.safeSetStyle('flex', css);
1971
+ this.safeSetStyle('box-sizing', 'border-box');
1972
+ });
1973
+ }
1974
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxFlexDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1975
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: FxFlexDirective, isStandalone: true, selector: "\n [fxFlex],\n [fxFlex.xs],[fxFlex.sm],[fxFlex.md],[fxFlex.lg],[fxFlex.xl],[fxFlex.xxl],\n [fxFlex.lt-sm],[fxFlex.lt-md],[fxFlex.lt-lg],[fxFlex.lt-xl],[fxFlex.lt-xxl],\n [fxFlex.gt-xs],[fxFlex.gt-sm],[fxFlex.gt-md],[fxFlex.gt-lg],[fxFlex.gt-xl],\n [fxFlex.sm-up],[fxFlex.md-up],[fxFlex.lg-up],[fxFlex.xl-up],[fxFlex.xxl-up],\n [fxFlex.sm-down],[fxFlex.md-down],[fxFlex.lg-down],[fxFlex.xl-down]\n ", inputs: { fxFlex: { classPropertyName: "fxFlex", publicName: "fxFlex", isSignal: true, isRequired: false, transformFunction: null }, xs: { classPropertyName: "xs", publicName: "fxFlex.xs", isSignal: true, isRequired: false, transformFunction: null }, sm: { classPropertyName: "sm", publicName: "fxFlex.sm", isSignal: true, isRequired: false, transformFunction: null }, md: { classPropertyName: "md", publicName: "fxFlex.md", isSignal: true, isRequired: false, transformFunction: null }, lg: { classPropertyName: "lg", publicName: "fxFlex.lg", isSignal: true, isRequired: false, transformFunction: null }, xl: { classPropertyName: "xl", publicName: "fxFlex.xl", isSignal: true, isRequired: false, transformFunction: null }, xxl: { classPropertyName: "xxl", publicName: "fxFlex.xxl", isSignal: true, isRequired: false, transformFunction: null }, ltSm: { classPropertyName: "ltSm", publicName: "fxFlex.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, ltMd: { classPropertyName: "ltMd", publicName: "fxFlex.lt-md", isSignal: true, isRequired: false, transformFunction: null }, ltLg: { classPropertyName: "ltLg", publicName: "fxFlex.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, ltXl: { classPropertyName: "ltXl", publicName: "fxFlex.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, ltXxl: { classPropertyName: "ltXxl", publicName: "fxFlex.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, gtXs: { classPropertyName: "gtXs", publicName: "fxFlex.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, gtSm: { classPropertyName: "gtSm", publicName: "fxFlex.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, gtMd: { classPropertyName: "gtMd", publicName: "fxFlex.gt-md", isSignal: true, isRequired: false, transformFunction: null }, gtLg: { classPropertyName: "gtLg", publicName: "fxFlex.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, gtXl: { classPropertyName: "gtXl", publicName: "fxFlex.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, smUp: { classPropertyName: "smUp", publicName: "fxFlex.sm-up", isSignal: true, isRequired: false, transformFunction: null }, mdUp: { classPropertyName: "mdUp", publicName: "fxFlex.md-up", isSignal: true, isRequired: false, transformFunction: null }, lgUp: { classPropertyName: "lgUp", publicName: "fxFlex.lg-up", isSignal: true, isRequired: false, transformFunction: null }, xlUp: { classPropertyName: "xlUp", publicName: "fxFlex.xl-up", isSignal: true, isRequired: false, transformFunction: null }, xxlUp: { classPropertyName: "xxlUp", publicName: "fxFlex.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, smDown: { classPropertyName: "smDown", publicName: "fxFlex.sm-down", isSignal: true, isRequired: false, transformFunction: null }, mdDown: { classPropertyName: "mdDown", publicName: "fxFlex.md-down", isSignal: true, isRequired: false, transformFunction: null }, lgDown: { classPropertyName: "lgDown", publicName: "fxFlex.lg-down", isSignal: true, isRequired: false, transformFunction: null }, xlDown: { classPropertyName: "xlDown", publicName: "fxFlex.xl-down", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
1976
+ }
1977
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxFlexDirective, decorators: [{
1978
+ type: Directive,
1979
+ args: [{
1980
+ selector: `
1981
+ [fxFlex],
1982
+ [fxFlex.xs],[fxFlex.sm],[fxFlex.md],[fxFlex.lg],[fxFlex.xl],[fxFlex.xxl],
1983
+ [fxFlex.lt-sm],[fxFlex.lt-md],[fxFlex.lt-lg],[fxFlex.lt-xl],[fxFlex.lt-xxl],
1984
+ [fxFlex.gt-xs],[fxFlex.gt-sm],[fxFlex.gt-md],[fxFlex.gt-lg],[fxFlex.gt-xl],
1985
+ [fxFlex.sm-up],[fxFlex.md-up],[fxFlex.lg-up],[fxFlex.xl-up],[fxFlex.xxl-up],
1986
+ [fxFlex.sm-down],[fxFlex.md-down],[fxFlex.lg-down],[fxFlex.xl-down]
1987
+ `,
1988
+ standalone: true,
1989
+ }]
1990
+ }], ctorParameters: () => [], propDecorators: { fxFlex: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex", required: false }] }], xs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.xs", required: false }] }], sm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.sm", required: false }] }], md: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.md", required: false }] }], lg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.lg", required: false }] }], xl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.xl", required: false }] }], xxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.xxl", required: false }] }], ltSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.lt-sm", required: false }] }], ltMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.lt-md", required: false }] }], ltLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.lt-lg", required: false }] }], ltXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.lt-xl", required: false }] }], ltXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.lt-xxl", required: false }] }], gtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.gt-xs", required: false }] }], gtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.gt-sm", required: false }] }], gtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.gt-md", required: false }] }], gtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.gt-lg", required: false }] }], gtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.gt-xl", required: false }] }], smUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.sm-up", required: false }] }], mdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.md-up", required: false }] }], lgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.lg-up", required: false }] }], xlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.xl-up", required: false }] }], xxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.xxl-up", required: false }] }], smDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.sm-down", required: false }] }], mdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.md-down", required: false }] }], lgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.lg-down", required: false }] }], xlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxFlex.xl-down", required: false }] }] } });
1991
+
1992
+ /**
1993
+ * @file fx-grid.directives.ts (Angular 21 — signals)
1994
+ *
1995
+ * CSS Grid responsive directives.
1996
+ *
1997
+ * [fxGrid] — display:grid + responsive grid-template-columns.
1998
+ * Accepts [fxGridRows] and [fxGridGap] inputs on same host.
1999
+ * [fxGridColumn] — grid-column on a child
2000
+ * [fxGridArea] — grid-area on a child
2001
+ *
2002
+ * Angular 21 changes:
2003
+ * • All @Input setters replaced by input() signals
2004
+ * • FxGridDirective uses 3 pairs of computed() for cols/rows/gap maps
2005
+ * • Single effect() in constructor writes all 3 CSS props
2006
+ * • Null/undefined props are removed (no style leak)
2007
+ *
2008
+ * Unitless numeric gap values are normalized to px ("16" → "16px").
2009
+ *
2010
+ * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down
2011
+ */
2012
+ function normalizeGap$1(raw) {
2013
+ if (!raw)
2014
+ return undefined;
2015
+ return raw.trim().split(/\s+/)
2016
+ .map(v => /^\d+(\.\d+)?$/.test(v) ? `${v}px` : v)
2017
+ .join(' ');
2018
+ }
2019
+ // ─── fxGrid (container) ──────────────────────────────────────────────────────
2020
+ class FxGridDirective extends ResponsiveBaseDirective {
2021
+ constructor() {
2022
+ super();
2023
+ // ── grid-template-columns ──────────────────────────────────────────────────
2024
+ this.fxGrid = input(undefined, { ...(ngDevMode ? { debugName: "fxGrid" } : /* istanbul ignore next */ {}), alias: 'fxGrid' });
2025
+ this.xs = input(undefined, { ...(ngDevMode ? { debugName: "xs" } : /* istanbul ignore next */ {}), alias: 'fxGrid.xs' });
2026
+ this.sm = input(undefined, { ...(ngDevMode ? { debugName: "sm" } : /* istanbul ignore next */ {}), alias: 'fxGrid.sm' });
2027
+ this.md = input(undefined, { ...(ngDevMode ? { debugName: "md" } : /* istanbul ignore next */ {}), alias: 'fxGrid.md' });
2028
+ this.lg = input(undefined, { ...(ngDevMode ? { debugName: "lg" } : /* istanbul ignore next */ {}), alias: 'fxGrid.lg' });
2029
+ this.xl = input(undefined, { ...(ngDevMode ? { debugName: "xl" } : /* istanbul ignore next */ {}), alias: 'fxGrid.xl' });
2030
+ this.xxl = input(undefined, { ...(ngDevMode ? { debugName: "xxl" } : /* istanbul ignore next */ {}), alias: 'fxGrid.xxl' });
2031
+ this.ltSm = input(undefined, { ...(ngDevMode ? { debugName: "ltSm" } : /* istanbul ignore next */ {}), alias: 'fxGrid.lt-sm' });
2032
+ this.ltMd = input(undefined, { ...(ngDevMode ? { debugName: "ltMd" } : /* istanbul ignore next */ {}), alias: 'fxGrid.lt-md' });
2033
+ this.ltLg = input(undefined, { ...(ngDevMode ? { debugName: "ltLg" } : /* istanbul ignore next */ {}), alias: 'fxGrid.lt-lg' });
2034
+ this.ltXl = input(undefined, { ...(ngDevMode ? { debugName: "ltXl" } : /* istanbul ignore next */ {}), alias: 'fxGrid.lt-xl' });
2035
+ this.ltXxl = input(undefined, { ...(ngDevMode ? { debugName: "ltXxl" } : /* istanbul ignore next */ {}), alias: 'fxGrid.lt-xxl' });
2036
+ this.gtXs = input(undefined, { ...(ngDevMode ? { debugName: "gtXs" } : /* istanbul ignore next */ {}), alias: 'fxGrid.gt-xs' });
2037
+ this.gtSm = input(undefined, { ...(ngDevMode ? { debugName: "gtSm" } : /* istanbul ignore next */ {}), alias: 'fxGrid.gt-sm' });
2038
+ this.gtMd = input(undefined, { ...(ngDevMode ? { debugName: "gtMd" } : /* istanbul ignore next */ {}), alias: 'fxGrid.gt-md' });
2039
+ this.gtLg = input(undefined, { ...(ngDevMode ? { debugName: "gtLg" } : /* istanbul ignore next */ {}), alias: 'fxGrid.gt-lg' });
2040
+ this.gtXl = input(undefined, { ...(ngDevMode ? { debugName: "gtXl" } : /* istanbul ignore next */ {}), alias: 'fxGrid.gt-xl' });
2041
+ this.smUp = input(undefined, { ...(ngDevMode ? { debugName: "smUp" } : /* istanbul ignore next */ {}), alias: 'fxGrid.sm-up' });
2042
+ this.mdUp = input(undefined, { ...(ngDevMode ? { debugName: "mdUp" } : /* istanbul ignore next */ {}), alias: 'fxGrid.md-up' });
2043
+ this.lgUp = input(undefined, { ...(ngDevMode ? { debugName: "lgUp" } : /* istanbul ignore next */ {}), alias: 'fxGrid.lg-up' });
2044
+ this.xlUp = input(undefined, { ...(ngDevMode ? { debugName: "xlUp" } : /* istanbul ignore next */ {}), alias: 'fxGrid.xl-up' });
2045
+ this.xxlUp = input(undefined, { ...(ngDevMode ? { debugName: "xxlUp" } : /* istanbul ignore next */ {}), alias: 'fxGrid.xxl-up' });
2046
+ this.smDown = input(undefined, { ...(ngDevMode ? { debugName: "smDown" } : /* istanbul ignore next */ {}), alias: 'fxGrid.sm-down' });
2047
+ this.mdDown = input(undefined, { ...(ngDevMode ? { debugName: "mdDown" } : /* istanbul ignore next */ {}), alias: 'fxGrid.md-down' });
2048
+ this.lgDown = input(undefined, { ...(ngDevMode ? { debugName: "lgDown" } : /* istanbul ignore next */ {}), alias: 'fxGrid.lg-down' });
2049
+ this.xlDown = input(undefined, { ...(ngDevMode ? { debugName: "xlDown" } : /* istanbul ignore next */ {}), alias: 'fxGrid.xl-down' });
2050
+ // ── grid-template-rows ────────────────────────────────────────────────────
2051
+ this.fxGridRows = input(undefined, { ...(ngDevMode ? { debugName: "fxGridRows" } : /* istanbul ignore next */ {}), alias: 'fxGridRows' });
2052
+ this.rowsXs = input(undefined, { ...(ngDevMode ? { debugName: "rowsXs" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.xs' });
2053
+ this.rowsSm = input(undefined, { ...(ngDevMode ? { debugName: "rowsSm" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.sm' });
2054
+ this.rowsMd = input(undefined, { ...(ngDevMode ? { debugName: "rowsMd" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.md' });
2055
+ this.rowsLg = input(undefined, { ...(ngDevMode ? { debugName: "rowsLg" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.lg' });
2056
+ this.rowsXl = input(undefined, { ...(ngDevMode ? { debugName: "rowsXl" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.xl' });
2057
+ this.rowsXxl = input(undefined, { ...(ngDevMode ? { debugName: "rowsXxl" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.xxl' });
2058
+ this.rowsLtSm = input(undefined, { ...(ngDevMode ? { debugName: "rowsLtSm" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.lt-sm' });
2059
+ this.rowsLtMd = input(undefined, { ...(ngDevMode ? { debugName: "rowsLtMd" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.lt-md' });
2060
+ this.rowsLtLg = input(undefined, { ...(ngDevMode ? { debugName: "rowsLtLg" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.lt-lg' });
2061
+ this.rowsLtXl = input(undefined, { ...(ngDevMode ? { debugName: "rowsLtXl" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.lt-xl' });
2062
+ this.rowsLtXxl = input(undefined, { ...(ngDevMode ? { debugName: "rowsLtXxl" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.lt-xxl' });
2063
+ this.rowsGtXs = input(undefined, { ...(ngDevMode ? { debugName: "rowsGtXs" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.gt-xs' });
2064
+ this.rowsGtSm = input(undefined, { ...(ngDevMode ? { debugName: "rowsGtSm" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.gt-sm' });
2065
+ this.rowsGtMd = input(undefined, { ...(ngDevMode ? { debugName: "rowsGtMd" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.gt-md' });
2066
+ this.rowsGtLg = input(undefined, { ...(ngDevMode ? { debugName: "rowsGtLg" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.gt-lg' });
2067
+ this.rowsGtXl = input(undefined, { ...(ngDevMode ? { debugName: "rowsGtXl" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.gt-xl' });
2068
+ this.rowsSmUp = input(undefined, { ...(ngDevMode ? { debugName: "rowsSmUp" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.sm-up' });
2069
+ this.rowsMdUp = input(undefined, { ...(ngDevMode ? { debugName: "rowsMdUp" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.md-up' });
2070
+ this.rowsLgUp = input(undefined, { ...(ngDevMode ? { debugName: "rowsLgUp" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.lg-up' });
2071
+ this.rowsXlUp = input(undefined, { ...(ngDevMode ? { debugName: "rowsXlUp" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.xl-up' });
2072
+ this.rowsXxlUp = input(undefined, { ...(ngDevMode ? { debugName: "rowsXxlUp" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.xxl-up' });
2073
+ this.rowsSmDown = input(undefined, { ...(ngDevMode ? { debugName: "rowsSmDown" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.sm-down' });
2074
+ this.rowsMdDown = input(undefined, { ...(ngDevMode ? { debugName: "rowsMdDown" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.md-down' });
2075
+ this.rowsLgDown = input(undefined, { ...(ngDevMode ? { debugName: "rowsLgDown" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.lg-down' });
2076
+ this.rowsXlDown = input(undefined, { ...(ngDevMode ? { debugName: "rowsXlDown" } : /* istanbul ignore next */ {}), alias: 'fxGridRows.xl-down' });
2077
+ // ── gap ───────────────────────────────────────────────────────────────────
2078
+ this.fxGridGap = input(undefined, { ...(ngDevMode ? { debugName: "fxGridGap" } : /* istanbul ignore next */ {}), alias: 'fxGridGap' });
2079
+ this.gapXs = input(undefined, { ...(ngDevMode ? { debugName: "gapXs" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.xs' });
2080
+ this.gapSm = input(undefined, { ...(ngDevMode ? { debugName: "gapSm" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.sm' });
2081
+ this.gapMd = input(undefined, { ...(ngDevMode ? { debugName: "gapMd" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.md' });
2082
+ this.gapLg = input(undefined, { ...(ngDevMode ? { debugName: "gapLg" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.lg' });
2083
+ this.gapXl = input(undefined, { ...(ngDevMode ? { debugName: "gapXl" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.xl' });
2084
+ this.gapXxl = input(undefined, { ...(ngDevMode ? { debugName: "gapXxl" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.xxl' });
2085
+ this.gapLtSm = input(undefined, { ...(ngDevMode ? { debugName: "gapLtSm" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.lt-sm' });
2086
+ this.gapLtMd = input(undefined, { ...(ngDevMode ? { debugName: "gapLtMd" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.lt-md' });
2087
+ this.gapLtLg = input(undefined, { ...(ngDevMode ? { debugName: "gapLtLg" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.lt-lg' });
2088
+ this.gapLtXl = input(undefined, { ...(ngDevMode ? { debugName: "gapLtXl" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.lt-xl' });
2089
+ this.gapLtXxl = input(undefined, { ...(ngDevMode ? { debugName: "gapLtXxl" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.lt-xxl' });
2090
+ this.gapGtXs = input(undefined, { ...(ngDevMode ? { debugName: "gapGtXs" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.gt-xs' });
2091
+ this.gapGtSm = input(undefined, { ...(ngDevMode ? { debugName: "gapGtSm" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.gt-sm' });
2092
+ this.gapGtMd = input(undefined, { ...(ngDevMode ? { debugName: "gapGtMd" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.gt-md' });
2093
+ this.gapGtLg = input(undefined, { ...(ngDevMode ? { debugName: "gapGtLg" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.gt-lg' });
2094
+ this.gapGtXl = input(undefined, { ...(ngDevMode ? { debugName: "gapGtXl" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.gt-xl' });
2095
+ this.gapSmUp = input(undefined, { ...(ngDevMode ? { debugName: "gapSmUp" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.sm-up' });
2096
+ this.gapMdUp = input(undefined, { ...(ngDevMode ? { debugName: "gapMdUp" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.md-up' });
2097
+ this.gapLgUp = input(undefined, { ...(ngDevMode ? { debugName: "gapLgUp" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.lg-up' });
2098
+ this.gapXlUp = input(undefined, { ...(ngDevMode ? { debugName: "gapXlUp" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.xl-up' });
2099
+ this.gapXxlUp = input(undefined, { ...(ngDevMode ? { debugName: "gapXxlUp" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.xxl-up' });
2100
+ this.gapSmDown = input(undefined, { ...(ngDevMode ? { debugName: "gapSmDown" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.sm-down' });
2101
+ this.gapMdDown = input(undefined, { ...(ngDevMode ? { debugName: "gapMdDown" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.md-down' });
2102
+ this.gapLgDown = input(undefined, { ...(ngDevMode ? { debugName: "gapLgDown" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.lg-down' });
2103
+ this.gapXlDown = input(undefined, { ...(ngDevMode ? { debugName: "gapXlDown" } : /* istanbul ignore next */ {}), alias: 'fxGridGap.xl-down' });
2104
+ // ── resolved values (flat computed — no intermediate object computed) ──────
2105
+ this._cols = computed(() => resolveAll({ default: this.fxGrid(), xs: this.xs(), sm: this.sm(),
2106
+ md: this.md(), lg: this.lg(), xl: this.xl(), xxl: this.xxl() }, { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),
2107
+ 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),
2108
+ 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),
2109
+ 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),
2110
+ 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),
2111
+ 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),
2112
+ 'sm-down': this.smDown(), 'md-down': this.mdDown(),
2113
+ 'lg-down': this.lgDown(), 'xl-down': this.xlDown() }, this.media.currentBp(), a => this.media.isActive(a)), /* @ts-ignore */
2114
+ ...(ngDevMode ? [{ debugName: "_cols" }] : /* istanbul ignore next */ []));
2115
+ this._rows = computed(() => resolveAll({ default: this.fxGridRows(), xs: this.rowsXs(), sm: this.rowsSm(),
2116
+ md: this.rowsMd(), lg: this.rowsLg(), xl: this.rowsXl(), xxl: this.rowsXxl() }, { 'lt-sm': this.rowsLtSm(), 'lt-md': this.rowsLtMd(), 'lt-lg': this.rowsLtLg(),
2117
+ 'lt-xl': this.rowsLtXl(), 'lt-xxl': this.rowsLtXxl(),
2118
+ 'gt-xs': this.rowsGtXs(), 'gt-sm': this.rowsGtSm(), 'gt-md': this.rowsGtMd(),
2119
+ 'gt-lg': this.rowsGtLg(), 'gt-xl': this.rowsGtXl(),
2120
+ 'sm-up': this.rowsSmUp(), 'md-up': this.rowsMdUp(), 'lg-up': this.rowsLgUp(),
2121
+ 'xl-up': this.rowsXlUp(), 'xxl-up': this.rowsXxlUp(),
2122
+ 'sm-down': this.rowsSmDown(), 'md-down': this.rowsMdDown(),
2123
+ 'lg-down': this.rowsLgDown(), 'xl-down': this.rowsXlDown() }, this.media.currentBp(), a => this.media.isActive(a)), /* @ts-ignore */
2124
+ ...(ngDevMode ? [{ debugName: "_rows" }] : /* istanbul ignore next */ []));
2125
+ this._gap = computed(() => normalizeGap$1(resolveAll({ default: this.fxGridGap(), xs: this.gapXs(), sm: this.gapSm(),
2126
+ md: this.gapMd(), lg: this.gapLg(), xl: this.gapXl(), xxl: this.gapXxl() }, { 'lt-sm': this.gapLtSm(), 'lt-md': this.gapLtMd(), 'lt-lg': this.gapLtLg(),
2127
+ 'lt-xl': this.gapLtXl(), 'lt-xxl': this.gapLtXxl(),
2128
+ 'gt-xs': this.gapGtXs(), 'gt-sm': this.gapGtSm(), 'gt-md': this.gapGtMd(),
2129
+ 'gt-lg': this.gapGtLg(), 'gt-xl': this.gapGtXl(),
2130
+ 'sm-up': this.gapSmUp(), 'md-up': this.gapMdUp(), 'lg-up': this.gapLgUp(),
2131
+ 'xl-up': this.gapXlUp(), 'xxl-up': this.gapXxlUp(),
2132
+ 'sm-down': this.gapSmDown(), 'md-down': this.gapMdDown(),
2133
+ 'lg-down': this.gapLgDown(), 'xl-down': this.gapXlDown() }, this.media.currentBp(), a => this.media.isActive(a))), /* @ts-ignore */
2134
+ ...(ngDevMode ? [{ debugName: "_gap" }] : /* istanbul ignore next */ []));
2135
+ effect(() => {
2136
+ const cols = this._cols();
2137
+ const rows = this._rows();
2138
+ const gap = this._gap();
2139
+ cols ? this.safeSetStyle('grid-template-columns', cols)
2140
+ : this.r2.removeStyle(this.el.nativeElement, 'grid-template-columns');
2141
+ rows ? this.safeSetStyle('grid-template-rows', rows)
2142
+ : this.r2.removeStyle(this.el.nativeElement, 'grid-template-rows');
2143
+ gap ? this.safeSetStyle('gap', gap)
2144
+ : this.r2.removeStyle(this.el.nativeElement, 'gap');
2145
+ });
2146
+ }
2147
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxGridDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2148
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: FxGridDirective, isStandalone: true, selector: "\n [fxGrid],\n [fxGrid.xs],[fxGrid.sm],[fxGrid.md],[fxGrid.lg],[fxGrid.xl],[fxGrid.xxl],\n [fxGrid.lt-sm],[fxGrid.lt-md],[fxGrid.lt-lg],[fxGrid.lt-xl],[fxGrid.lt-xxl],\n [fxGrid.gt-xs],[fxGrid.gt-sm],[fxGrid.gt-md],[fxGrid.gt-lg],[fxGrid.gt-xl],\n [fxGrid.sm-up],[fxGrid.md-up],[fxGrid.lg-up],[fxGrid.xl-up],[fxGrid.xxl-up],\n [fxGrid.sm-down],[fxGrid.md-down],[fxGrid.lg-down],[fxGrid.xl-down]\n ", inputs: { fxGrid: { classPropertyName: "fxGrid", publicName: "fxGrid", isSignal: true, isRequired: false, transformFunction: null }, xs: { classPropertyName: "xs", publicName: "fxGrid.xs", isSignal: true, isRequired: false, transformFunction: null }, sm: { classPropertyName: "sm", publicName: "fxGrid.sm", isSignal: true, isRequired: false, transformFunction: null }, md: { classPropertyName: "md", publicName: "fxGrid.md", isSignal: true, isRequired: false, transformFunction: null }, lg: { classPropertyName: "lg", publicName: "fxGrid.lg", isSignal: true, isRequired: false, transformFunction: null }, xl: { classPropertyName: "xl", publicName: "fxGrid.xl", isSignal: true, isRequired: false, transformFunction: null }, xxl: { classPropertyName: "xxl", publicName: "fxGrid.xxl", isSignal: true, isRequired: false, transformFunction: null }, ltSm: { classPropertyName: "ltSm", publicName: "fxGrid.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, ltMd: { classPropertyName: "ltMd", publicName: "fxGrid.lt-md", isSignal: true, isRequired: false, transformFunction: null }, ltLg: { classPropertyName: "ltLg", publicName: "fxGrid.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, ltXl: { classPropertyName: "ltXl", publicName: "fxGrid.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, ltXxl: { classPropertyName: "ltXxl", publicName: "fxGrid.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, gtXs: { classPropertyName: "gtXs", publicName: "fxGrid.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, gtSm: { classPropertyName: "gtSm", publicName: "fxGrid.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, gtMd: { classPropertyName: "gtMd", publicName: "fxGrid.gt-md", isSignal: true, isRequired: false, transformFunction: null }, gtLg: { classPropertyName: "gtLg", publicName: "fxGrid.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, gtXl: { classPropertyName: "gtXl", publicName: "fxGrid.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, smUp: { classPropertyName: "smUp", publicName: "fxGrid.sm-up", isSignal: true, isRequired: false, transformFunction: null }, mdUp: { classPropertyName: "mdUp", publicName: "fxGrid.md-up", isSignal: true, isRequired: false, transformFunction: null }, lgUp: { classPropertyName: "lgUp", publicName: "fxGrid.lg-up", isSignal: true, isRequired: false, transformFunction: null }, xlUp: { classPropertyName: "xlUp", publicName: "fxGrid.xl-up", isSignal: true, isRequired: false, transformFunction: null }, xxlUp: { classPropertyName: "xxlUp", publicName: "fxGrid.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, smDown: { classPropertyName: "smDown", publicName: "fxGrid.sm-down", isSignal: true, isRequired: false, transformFunction: null }, mdDown: { classPropertyName: "mdDown", publicName: "fxGrid.md-down", isSignal: true, isRequired: false, transformFunction: null }, lgDown: { classPropertyName: "lgDown", publicName: "fxGrid.lg-down", isSignal: true, isRequired: false, transformFunction: null }, xlDown: { classPropertyName: "xlDown", publicName: "fxGrid.xl-down", isSignal: true, isRequired: false, transformFunction: null }, fxGridRows: { classPropertyName: "fxGridRows", publicName: "fxGridRows", isSignal: true, isRequired: false, transformFunction: null }, rowsXs: { classPropertyName: "rowsXs", publicName: "fxGridRows.xs", isSignal: true, isRequired: false, transformFunction: null }, rowsSm: { classPropertyName: "rowsSm", publicName: "fxGridRows.sm", isSignal: true, isRequired: false, transformFunction: null }, rowsMd: { classPropertyName: "rowsMd", publicName: "fxGridRows.md", isSignal: true, isRequired: false, transformFunction: null }, rowsLg: { classPropertyName: "rowsLg", publicName: "fxGridRows.lg", isSignal: true, isRequired: false, transformFunction: null }, rowsXl: { classPropertyName: "rowsXl", publicName: "fxGridRows.xl", isSignal: true, isRequired: false, transformFunction: null }, rowsXxl: { classPropertyName: "rowsXxl", publicName: "fxGridRows.xxl", isSignal: true, isRequired: false, transformFunction: null }, rowsLtSm: { classPropertyName: "rowsLtSm", publicName: "fxGridRows.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, rowsLtMd: { classPropertyName: "rowsLtMd", publicName: "fxGridRows.lt-md", isSignal: true, isRequired: false, transformFunction: null }, rowsLtLg: { classPropertyName: "rowsLtLg", publicName: "fxGridRows.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, rowsLtXl: { classPropertyName: "rowsLtXl", publicName: "fxGridRows.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, rowsLtXxl: { classPropertyName: "rowsLtXxl", publicName: "fxGridRows.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, rowsGtXs: { classPropertyName: "rowsGtXs", publicName: "fxGridRows.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, rowsGtSm: { classPropertyName: "rowsGtSm", publicName: "fxGridRows.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, rowsGtMd: { classPropertyName: "rowsGtMd", publicName: "fxGridRows.gt-md", isSignal: true, isRequired: false, transformFunction: null }, rowsGtLg: { classPropertyName: "rowsGtLg", publicName: "fxGridRows.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, rowsGtXl: { classPropertyName: "rowsGtXl", publicName: "fxGridRows.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, rowsSmUp: { classPropertyName: "rowsSmUp", publicName: "fxGridRows.sm-up", isSignal: true, isRequired: false, transformFunction: null }, rowsMdUp: { classPropertyName: "rowsMdUp", publicName: "fxGridRows.md-up", isSignal: true, isRequired: false, transformFunction: null }, rowsLgUp: { classPropertyName: "rowsLgUp", publicName: "fxGridRows.lg-up", isSignal: true, isRequired: false, transformFunction: null }, rowsXlUp: { classPropertyName: "rowsXlUp", publicName: "fxGridRows.xl-up", isSignal: true, isRequired: false, transformFunction: null }, rowsXxlUp: { classPropertyName: "rowsXxlUp", publicName: "fxGridRows.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, rowsSmDown: { classPropertyName: "rowsSmDown", publicName: "fxGridRows.sm-down", isSignal: true, isRequired: false, transformFunction: null }, rowsMdDown: { classPropertyName: "rowsMdDown", publicName: "fxGridRows.md-down", isSignal: true, isRequired: false, transformFunction: null }, rowsLgDown: { classPropertyName: "rowsLgDown", publicName: "fxGridRows.lg-down", isSignal: true, isRequired: false, transformFunction: null }, rowsXlDown: { classPropertyName: "rowsXlDown", publicName: "fxGridRows.xl-down", isSignal: true, isRequired: false, transformFunction: null }, fxGridGap: { classPropertyName: "fxGridGap", publicName: "fxGridGap", isSignal: true, isRequired: false, transformFunction: null }, gapXs: { classPropertyName: "gapXs", publicName: "fxGridGap.xs", isSignal: true, isRequired: false, transformFunction: null }, gapSm: { classPropertyName: "gapSm", publicName: "fxGridGap.sm", isSignal: true, isRequired: false, transformFunction: null }, gapMd: { classPropertyName: "gapMd", publicName: "fxGridGap.md", isSignal: true, isRequired: false, transformFunction: null }, gapLg: { classPropertyName: "gapLg", publicName: "fxGridGap.lg", isSignal: true, isRequired: false, transformFunction: null }, gapXl: { classPropertyName: "gapXl", publicName: "fxGridGap.xl", isSignal: true, isRequired: false, transformFunction: null }, gapXxl: { classPropertyName: "gapXxl", publicName: "fxGridGap.xxl", isSignal: true, isRequired: false, transformFunction: null }, gapLtSm: { classPropertyName: "gapLtSm", publicName: "fxGridGap.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, gapLtMd: { classPropertyName: "gapLtMd", publicName: "fxGridGap.lt-md", isSignal: true, isRequired: false, transformFunction: null }, gapLtLg: { classPropertyName: "gapLtLg", publicName: "fxGridGap.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, gapLtXl: { classPropertyName: "gapLtXl", publicName: "fxGridGap.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, gapLtXxl: { classPropertyName: "gapLtXxl", publicName: "fxGridGap.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, gapGtXs: { classPropertyName: "gapGtXs", publicName: "fxGridGap.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, gapGtSm: { classPropertyName: "gapGtSm", publicName: "fxGridGap.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, gapGtMd: { classPropertyName: "gapGtMd", publicName: "fxGridGap.gt-md", isSignal: true, isRequired: false, transformFunction: null }, gapGtLg: { classPropertyName: "gapGtLg", publicName: "fxGridGap.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, gapGtXl: { classPropertyName: "gapGtXl", publicName: "fxGridGap.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, gapSmUp: { classPropertyName: "gapSmUp", publicName: "fxGridGap.sm-up", isSignal: true, isRequired: false, transformFunction: null }, gapMdUp: { classPropertyName: "gapMdUp", publicName: "fxGridGap.md-up", isSignal: true, isRequired: false, transformFunction: null }, gapLgUp: { classPropertyName: "gapLgUp", publicName: "fxGridGap.lg-up", isSignal: true, isRequired: false, transformFunction: null }, gapXlUp: { classPropertyName: "gapXlUp", publicName: "fxGridGap.xl-up", isSignal: true, isRequired: false, transformFunction: null }, gapXxlUp: { classPropertyName: "gapXxlUp", publicName: "fxGridGap.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, gapSmDown: { classPropertyName: "gapSmDown", publicName: "fxGridGap.sm-down", isSignal: true, isRequired: false, transformFunction: null }, gapMdDown: { classPropertyName: "gapMdDown", publicName: "fxGridGap.md-down", isSignal: true, isRequired: false, transformFunction: null }, gapLgDown: { classPropertyName: "gapLgDown", publicName: "fxGridGap.lg-down", isSignal: true, isRequired: false, transformFunction: null }, gapXlDown: { classPropertyName: "gapXlDown", publicName: "fxGridGap.xl-down", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.display": "\"grid\"" } }, usesInheritance: true, ngImport: i0 }); }
2149
+ }
2150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxGridDirective, decorators: [{
2151
+ type: Directive,
2152
+ args: [{
2153
+ selector: `
2154
+ [fxGrid],
2155
+ [fxGrid.xs],[fxGrid.sm],[fxGrid.md],[fxGrid.lg],[fxGrid.xl],[fxGrid.xxl],
2156
+ [fxGrid.lt-sm],[fxGrid.lt-md],[fxGrid.lt-lg],[fxGrid.lt-xl],[fxGrid.lt-xxl],
2157
+ [fxGrid.gt-xs],[fxGrid.gt-sm],[fxGrid.gt-md],[fxGrid.gt-lg],[fxGrid.gt-xl],
2158
+ [fxGrid.sm-up],[fxGrid.md-up],[fxGrid.lg-up],[fxGrid.xl-up],[fxGrid.xxl-up],
2159
+ [fxGrid.sm-down],[fxGrid.md-down],[fxGrid.lg-down],[fxGrid.xl-down]
2160
+ `,
2161
+ standalone: true,
2162
+ host: { '[style.display]': '"grid"' },
2163
+ }]
2164
+ }], ctorParameters: () => [], propDecorators: { fxGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid", required: false }] }], xs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.xs", required: false }] }], sm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.sm", required: false }] }], md: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.md", required: false }] }], lg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.lg", required: false }] }], xl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.xl", required: false }] }], xxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.xxl", required: false }] }], ltSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.lt-sm", required: false }] }], ltMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.lt-md", required: false }] }], ltLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.lt-lg", required: false }] }], ltXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.lt-xl", required: false }] }], ltXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.lt-xxl", required: false }] }], gtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.gt-xs", required: false }] }], gtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.gt-sm", required: false }] }], gtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.gt-md", required: false }] }], gtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.gt-lg", required: false }] }], gtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.gt-xl", required: false }] }], smUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.sm-up", required: false }] }], mdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.md-up", required: false }] }], lgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.lg-up", required: false }] }], xlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.xl-up", required: false }] }], xxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.xxl-up", required: false }] }], smDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.sm-down", required: false }] }], mdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.md-down", required: false }] }], lgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.lg-down", required: false }] }], xlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGrid.xl-down", required: false }] }], fxGridRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows", required: false }] }], rowsXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.xs", required: false }] }], rowsSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.sm", required: false }] }], rowsMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.md", required: false }] }], rowsLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.lg", required: false }] }], rowsXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.xl", required: false }] }], rowsXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.xxl", required: false }] }], rowsLtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.lt-sm", required: false }] }], rowsLtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.lt-md", required: false }] }], rowsLtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.lt-lg", required: false }] }], rowsLtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.lt-xl", required: false }] }], rowsLtXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.lt-xxl", required: false }] }], rowsGtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.gt-xs", required: false }] }], rowsGtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.gt-sm", required: false }] }], rowsGtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.gt-md", required: false }] }], rowsGtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.gt-lg", required: false }] }], rowsGtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.gt-xl", required: false }] }], rowsSmUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.sm-up", required: false }] }], rowsMdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.md-up", required: false }] }], rowsLgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.lg-up", required: false }] }], rowsXlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.xl-up", required: false }] }], rowsXxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.xxl-up", required: false }] }], rowsSmDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.sm-down", required: false }] }], rowsMdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.md-down", required: false }] }], rowsLgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.lg-down", required: false }] }], rowsXlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridRows.xl-down", required: false }] }], fxGridGap: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap", required: false }] }], gapXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.xs", required: false }] }], gapSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.sm", required: false }] }], gapMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.md", required: false }] }], gapLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.lg", required: false }] }], gapXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.xl", required: false }] }], gapXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.xxl", required: false }] }], gapLtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.lt-sm", required: false }] }], gapLtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.lt-md", required: false }] }], gapLtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.lt-lg", required: false }] }], gapLtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.lt-xl", required: false }] }], gapLtXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.lt-xxl", required: false }] }], gapGtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.gt-xs", required: false }] }], gapGtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.gt-sm", required: false }] }], gapGtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.gt-md", required: false }] }], gapGtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.gt-lg", required: false }] }], gapGtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.gt-xl", required: false }] }], gapSmUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.sm-up", required: false }] }], gapMdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.md-up", required: false }] }], gapLgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.lg-up", required: false }] }], gapXlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.xl-up", required: false }] }], gapXxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.xxl-up", required: false }] }], gapSmDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.sm-down", required: false }] }], gapMdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.md-down", required: false }] }], gapLgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.lg-down", required: false }] }], gapXlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridGap.xl-down", required: false }] }] } });
2165
+ // ─── fxGridColumn ─────────────────────────────────────────────────────────────
2166
+ class FxGridColumnDirective extends ResponsiveBaseDirective {
2167
+ constructor() {
2168
+ super();
2169
+ this.fxGridColumn = input(undefined, { ...(ngDevMode ? { debugName: "fxGridColumn" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn' });
2170
+ this.xs = input(undefined, { ...(ngDevMode ? { debugName: "xs" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.xs' });
2171
+ this.sm = input(undefined, { ...(ngDevMode ? { debugName: "sm" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.sm' });
2172
+ this.md = input(undefined, { ...(ngDevMode ? { debugName: "md" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.md' });
2173
+ this.lg = input(undefined, { ...(ngDevMode ? { debugName: "lg" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.lg' });
2174
+ this.xl = input(undefined, { ...(ngDevMode ? { debugName: "xl" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.xl' });
2175
+ this.xxl = input(undefined, { ...(ngDevMode ? { debugName: "xxl" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.xxl' });
2176
+ this.ltSm = input(undefined, { ...(ngDevMode ? { debugName: "ltSm" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.lt-sm' });
2177
+ this.ltMd = input(undefined, { ...(ngDevMode ? { debugName: "ltMd" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.lt-md' });
2178
+ this.ltLg = input(undefined, { ...(ngDevMode ? { debugName: "ltLg" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.lt-lg' });
2179
+ this.ltXl = input(undefined, { ...(ngDevMode ? { debugName: "ltXl" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.lt-xl' });
2180
+ this.ltXxl = input(undefined, { ...(ngDevMode ? { debugName: "ltXxl" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.lt-xxl' });
2181
+ this.gtXs = input(undefined, { ...(ngDevMode ? { debugName: "gtXs" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.gt-xs' });
2182
+ this.gtSm = input(undefined, { ...(ngDevMode ? { debugName: "gtSm" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.gt-sm' });
2183
+ this.gtMd = input(undefined, { ...(ngDevMode ? { debugName: "gtMd" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.gt-md' });
2184
+ this.gtLg = input(undefined, { ...(ngDevMode ? { debugName: "gtLg" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.gt-lg' });
2185
+ this.gtXl = input(undefined, { ...(ngDevMode ? { debugName: "gtXl" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.gt-xl' });
2186
+ this.smUp = input(undefined, { ...(ngDevMode ? { debugName: "smUp" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.sm-up' });
2187
+ this.mdUp = input(undefined, { ...(ngDevMode ? { debugName: "mdUp" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.md-up' });
2188
+ this.lgUp = input(undefined, { ...(ngDevMode ? { debugName: "lgUp" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.lg-up' });
2189
+ this.xlUp = input(undefined, { ...(ngDevMode ? { debugName: "xlUp" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.xl-up' });
2190
+ this.xxlUp = input(undefined, { ...(ngDevMode ? { debugName: "xxlUp" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.xxl-up' });
2191
+ this.smDown = input(undefined, { ...(ngDevMode ? { debugName: "smDown" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.sm-down' });
2192
+ this.mdDown = input(undefined, { ...(ngDevMode ? { debugName: "mdDown" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.md-down' });
2193
+ this.lgDown = input(undefined, { ...(ngDevMode ? { debugName: "lgDown" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.lg-down' });
2194
+ this.xlDown = input(undefined, { ...(ngDevMode ? { debugName: "xlDown" } : /* istanbul ignore next */ {}), alias: 'fxGridColumn.xl-down' });
2195
+ this._resolved = computed(() => resolveAll({ default: this.fxGridColumn(), xs: this.xs(), sm: this.sm(),
2196
+ md: this.md(), lg: this.lg(), xl: this.xl(), xxl: this.xxl() }, { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),
2197
+ 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),
2198
+ 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),
2199
+ 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),
2200
+ 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),
2201
+ 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),
2202
+ 'sm-down': this.smDown(), 'md-down': this.mdDown(),
2203
+ 'lg-down': this.lgDown(), 'xl-down': this.xlDown() }, this.media.currentBp(), a => this.media.isActive(a)), /* @ts-ignore */
2204
+ ...(ngDevMode ? [{ debugName: "_resolved" }] : /* istanbul ignore next */ []));
2205
+ effect(() => {
2206
+ const v = this._resolved();
2207
+ v ? this.safeSetStyle('grid-column', v)
2208
+ : this.r2.removeStyle(this.el.nativeElement, 'grid-column');
2209
+ });
2210
+ }
2211
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxGridColumnDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2212
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: FxGridColumnDirective, isStandalone: true, selector: "\n [fxGridColumn],\n [fxGridColumn.xs],[fxGridColumn.sm],[fxGridColumn.md],[fxGridColumn.lg],[fxGridColumn.xl],[fxGridColumn.xxl],\n [fxGridColumn.lt-sm],[fxGridColumn.lt-md],[fxGridColumn.lt-lg],[fxGridColumn.lt-xl],[fxGridColumn.lt-xxl],\n [fxGridColumn.gt-xs],[fxGridColumn.gt-sm],[fxGridColumn.gt-md],[fxGridColumn.gt-lg],[fxGridColumn.gt-xl],\n [fxGridColumn.sm-up],[fxGridColumn.md-up],[fxGridColumn.lg-up],[fxGridColumn.xl-up],[fxGridColumn.xxl-up],\n [fxGridColumn.sm-down],[fxGridColumn.md-down],[fxGridColumn.lg-down],[fxGridColumn.xl-down]\n ", inputs: { fxGridColumn: { classPropertyName: "fxGridColumn", publicName: "fxGridColumn", isSignal: true, isRequired: false, transformFunction: null }, xs: { classPropertyName: "xs", publicName: "fxGridColumn.xs", isSignal: true, isRequired: false, transformFunction: null }, sm: { classPropertyName: "sm", publicName: "fxGridColumn.sm", isSignal: true, isRequired: false, transformFunction: null }, md: { classPropertyName: "md", publicName: "fxGridColumn.md", isSignal: true, isRequired: false, transformFunction: null }, lg: { classPropertyName: "lg", publicName: "fxGridColumn.lg", isSignal: true, isRequired: false, transformFunction: null }, xl: { classPropertyName: "xl", publicName: "fxGridColumn.xl", isSignal: true, isRequired: false, transformFunction: null }, xxl: { classPropertyName: "xxl", publicName: "fxGridColumn.xxl", isSignal: true, isRequired: false, transformFunction: null }, ltSm: { classPropertyName: "ltSm", publicName: "fxGridColumn.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, ltMd: { classPropertyName: "ltMd", publicName: "fxGridColumn.lt-md", isSignal: true, isRequired: false, transformFunction: null }, ltLg: { classPropertyName: "ltLg", publicName: "fxGridColumn.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, ltXl: { classPropertyName: "ltXl", publicName: "fxGridColumn.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, ltXxl: { classPropertyName: "ltXxl", publicName: "fxGridColumn.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, gtXs: { classPropertyName: "gtXs", publicName: "fxGridColumn.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, gtSm: { classPropertyName: "gtSm", publicName: "fxGridColumn.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, gtMd: { classPropertyName: "gtMd", publicName: "fxGridColumn.gt-md", isSignal: true, isRequired: false, transformFunction: null }, gtLg: { classPropertyName: "gtLg", publicName: "fxGridColumn.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, gtXl: { classPropertyName: "gtXl", publicName: "fxGridColumn.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, smUp: { classPropertyName: "smUp", publicName: "fxGridColumn.sm-up", isSignal: true, isRequired: false, transformFunction: null }, mdUp: { classPropertyName: "mdUp", publicName: "fxGridColumn.md-up", isSignal: true, isRequired: false, transformFunction: null }, lgUp: { classPropertyName: "lgUp", publicName: "fxGridColumn.lg-up", isSignal: true, isRequired: false, transformFunction: null }, xlUp: { classPropertyName: "xlUp", publicName: "fxGridColumn.xl-up", isSignal: true, isRequired: false, transformFunction: null }, xxlUp: { classPropertyName: "xxlUp", publicName: "fxGridColumn.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, smDown: { classPropertyName: "smDown", publicName: "fxGridColumn.sm-down", isSignal: true, isRequired: false, transformFunction: null }, mdDown: { classPropertyName: "mdDown", publicName: "fxGridColumn.md-down", isSignal: true, isRequired: false, transformFunction: null }, lgDown: { classPropertyName: "lgDown", publicName: "fxGridColumn.lg-down", isSignal: true, isRequired: false, transformFunction: null }, xlDown: { classPropertyName: "xlDown", publicName: "fxGridColumn.xl-down", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
2213
+ }
2214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxGridColumnDirective, decorators: [{
2215
+ type: Directive,
2216
+ args: [{
2217
+ selector: `
2218
+ [fxGridColumn],
2219
+ [fxGridColumn.xs],[fxGridColumn.sm],[fxGridColumn.md],[fxGridColumn.lg],[fxGridColumn.xl],[fxGridColumn.xxl],
2220
+ [fxGridColumn.lt-sm],[fxGridColumn.lt-md],[fxGridColumn.lt-lg],[fxGridColumn.lt-xl],[fxGridColumn.lt-xxl],
2221
+ [fxGridColumn.gt-xs],[fxGridColumn.gt-sm],[fxGridColumn.gt-md],[fxGridColumn.gt-lg],[fxGridColumn.gt-xl],
2222
+ [fxGridColumn.sm-up],[fxGridColumn.md-up],[fxGridColumn.lg-up],[fxGridColumn.xl-up],[fxGridColumn.xxl-up],
2223
+ [fxGridColumn.sm-down],[fxGridColumn.md-down],[fxGridColumn.lg-down],[fxGridColumn.xl-down]
2224
+ `,
2225
+ standalone: true,
2226
+ }]
2227
+ }], ctorParameters: () => [], propDecorators: { fxGridColumn: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn", required: false }] }], xs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.xs", required: false }] }], sm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.sm", required: false }] }], md: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.md", required: false }] }], lg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.lg", required: false }] }], xl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.xl", required: false }] }], xxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.xxl", required: false }] }], ltSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.lt-sm", required: false }] }], ltMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.lt-md", required: false }] }], ltLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.lt-lg", required: false }] }], ltXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.lt-xl", required: false }] }], ltXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.lt-xxl", required: false }] }], gtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.gt-xs", required: false }] }], gtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.gt-sm", required: false }] }], gtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.gt-md", required: false }] }], gtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.gt-lg", required: false }] }], gtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.gt-xl", required: false }] }], smUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.sm-up", required: false }] }], mdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.md-up", required: false }] }], lgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.lg-up", required: false }] }], xlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.xl-up", required: false }] }], xxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.xxl-up", required: false }] }], smDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.sm-down", required: false }] }], mdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.md-down", required: false }] }], lgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.lg-down", required: false }] }], xlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridColumn.xl-down", required: false }] }] } });
2228
+ // ─── fxGridArea ───────────────────────────────────────────────────────────────
2229
+ class FxGridAreaDirective extends ResponsiveBaseDirective {
2230
+ constructor() {
2231
+ super();
2232
+ this.fxGridArea = input(undefined, { ...(ngDevMode ? { debugName: "fxGridArea" } : /* istanbul ignore next */ {}), alias: 'fxGridArea' });
2233
+ this.xs = input(undefined, { ...(ngDevMode ? { debugName: "xs" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.xs' });
2234
+ this.sm = input(undefined, { ...(ngDevMode ? { debugName: "sm" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.sm' });
2235
+ this.md = input(undefined, { ...(ngDevMode ? { debugName: "md" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.md' });
2236
+ this.lg = input(undefined, { ...(ngDevMode ? { debugName: "lg" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.lg' });
2237
+ this.xl = input(undefined, { ...(ngDevMode ? { debugName: "xl" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.xl' });
2238
+ this.xxl = input(undefined, { ...(ngDevMode ? { debugName: "xxl" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.xxl' });
2239
+ this.ltSm = input(undefined, { ...(ngDevMode ? { debugName: "ltSm" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.lt-sm' });
2240
+ this.ltMd = input(undefined, { ...(ngDevMode ? { debugName: "ltMd" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.lt-md' });
2241
+ this.ltLg = input(undefined, { ...(ngDevMode ? { debugName: "ltLg" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.lt-lg' });
2242
+ this.ltXl = input(undefined, { ...(ngDevMode ? { debugName: "ltXl" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.lt-xl' });
2243
+ this.ltXxl = input(undefined, { ...(ngDevMode ? { debugName: "ltXxl" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.lt-xxl' });
2244
+ this.gtXs = input(undefined, { ...(ngDevMode ? { debugName: "gtXs" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.gt-xs' });
2245
+ this.gtSm = input(undefined, { ...(ngDevMode ? { debugName: "gtSm" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.gt-sm' });
2246
+ this.gtMd = input(undefined, { ...(ngDevMode ? { debugName: "gtMd" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.gt-md' });
2247
+ this.gtLg = input(undefined, { ...(ngDevMode ? { debugName: "gtLg" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.gt-lg' });
2248
+ this.gtXl = input(undefined, { ...(ngDevMode ? { debugName: "gtXl" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.gt-xl' });
2249
+ this.smUp = input(undefined, { ...(ngDevMode ? { debugName: "smUp" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.sm-up' });
2250
+ this.mdUp = input(undefined, { ...(ngDevMode ? { debugName: "mdUp" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.md-up' });
2251
+ this.lgUp = input(undefined, { ...(ngDevMode ? { debugName: "lgUp" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.lg-up' });
2252
+ this.xlUp = input(undefined, { ...(ngDevMode ? { debugName: "xlUp" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.xl-up' });
2253
+ this.xxlUp = input(undefined, { ...(ngDevMode ? { debugName: "xxlUp" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.xxl-up' });
2254
+ this.smDown = input(undefined, { ...(ngDevMode ? { debugName: "smDown" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.sm-down' });
2255
+ this.mdDown = input(undefined, { ...(ngDevMode ? { debugName: "mdDown" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.md-down' });
2256
+ this.lgDown = input(undefined, { ...(ngDevMode ? { debugName: "lgDown" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.lg-down' });
2257
+ this.xlDown = input(undefined, { ...(ngDevMode ? { debugName: "xlDown" } : /* istanbul ignore next */ {}), alias: 'fxGridArea.xl-down' });
2258
+ this._resolved = computed(() => resolveAll({ default: this.fxGridArea(), xs: this.xs(), sm: this.sm(),
2259
+ md: this.md(), lg: this.lg(), xl: this.xl(), xxl: this.xxl() }, { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),
2260
+ 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),
2261
+ 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),
2262
+ 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),
2263
+ 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),
2264
+ 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),
2265
+ 'sm-down': this.smDown(), 'md-down': this.mdDown(),
2266
+ 'lg-down': this.lgDown(), 'xl-down': this.xlDown() }, this.media.currentBp(), a => this.media.isActive(a)), /* @ts-ignore */
2267
+ ...(ngDevMode ? [{ debugName: "_resolved" }] : /* istanbul ignore next */ []));
2268
+ effect(() => {
2269
+ const v = this._resolved();
2270
+ v ? this.safeSetStyle('grid-area', v)
2271
+ : this.r2.removeStyle(this.el.nativeElement, 'grid-area');
2272
+ });
2273
+ }
2274
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxGridAreaDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2275
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: FxGridAreaDirective, isStandalone: true, selector: "\n [fxGridArea],\n [fxGridArea.xs],[fxGridArea.sm],[fxGridArea.md],[fxGridArea.lg],[fxGridArea.xl],[fxGridArea.xxl],\n [fxGridArea.lt-sm],[fxGridArea.lt-md],[fxGridArea.lt-lg],[fxGridArea.lt-xl],[fxGridArea.lt-xxl],\n [fxGridArea.gt-xs],[fxGridArea.gt-sm],[fxGridArea.gt-md],[fxGridArea.gt-lg],[fxGridArea.gt-xl],\n [fxGridArea.sm-up],[fxGridArea.md-up],[fxGridArea.lg-up],[fxGridArea.xl-up],[fxGridArea.xxl-up],\n [fxGridArea.sm-down],[fxGridArea.md-down],[fxGridArea.lg-down],[fxGridArea.xl-down]\n ", inputs: { fxGridArea: { classPropertyName: "fxGridArea", publicName: "fxGridArea", isSignal: true, isRequired: false, transformFunction: null }, xs: { classPropertyName: "xs", publicName: "fxGridArea.xs", isSignal: true, isRequired: false, transformFunction: null }, sm: { classPropertyName: "sm", publicName: "fxGridArea.sm", isSignal: true, isRequired: false, transformFunction: null }, md: { classPropertyName: "md", publicName: "fxGridArea.md", isSignal: true, isRequired: false, transformFunction: null }, lg: { classPropertyName: "lg", publicName: "fxGridArea.lg", isSignal: true, isRequired: false, transformFunction: null }, xl: { classPropertyName: "xl", publicName: "fxGridArea.xl", isSignal: true, isRequired: false, transformFunction: null }, xxl: { classPropertyName: "xxl", publicName: "fxGridArea.xxl", isSignal: true, isRequired: false, transformFunction: null }, ltSm: { classPropertyName: "ltSm", publicName: "fxGridArea.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, ltMd: { classPropertyName: "ltMd", publicName: "fxGridArea.lt-md", isSignal: true, isRequired: false, transformFunction: null }, ltLg: { classPropertyName: "ltLg", publicName: "fxGridArea.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, ltXl: { classPropertyName: "ltXl", publicName: "fxGridArea.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, ltXxl: { classPropertyName: "ltXxl", publicName: "fxGridArea.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, gtXs: { classPropertyName: "gtXs", publicName: "fxGridArea.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, gtSm: { classPropertyName: "gtSm", publicName: "fxGridArea.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, gtMd: { classPropertyName: "gtMd", publicName: "fxGridArea.gt-md", isSignal: true, isRequired: false, transformFunction: null }, gtLg: { classPropertyName: "gtLg", publicName: "fxGridArea.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, gtXl: { classPropertyName: "gtXl", publicName: "fxGridArea.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, smUp: { classPropertyName: "smUp", publicName: "fxGridArea.sm-up", isSignal: true, isRequired: false, transformFunction: null }, mdUp: { classPropertyName: "mdUp", publicName: "fxGridArea.md-up", isSignal: true, isRequired: false, transformFunction: null }, lgUp: { classPropertyName: "lgUp", publicName: "fxGridArea.lg-up", isSignal: true, isRequired: false, transformFunction: null }, xlUp: { classPropertyName: "xlUp", publicName: "fxGridArea.xl-up", isSignal: true, isRequired: false, transformFunction: null }, xxlUp: { classPropertyName: "xxlUp", publicName: "fxGridArea.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, smDown: { classPropertyName: "smDown", publicName: "fxGridArea.sm-down", isSignal: true, isRequired: false, transformFunction: null }, mdDown: { classPropertyName: "mdDown", publicName: "fxGridArea.md-down", isSignal: true, isRequired: false, transformFunction: null }, lgDown: { classPropertyName: "lgDown", publicName: "fxGridArea.lg-down", isSignal: true, isRequired: false, transformFunction: null }, xlDown: { classPropertyName: "xlDown", publicName: "fxGridArea.xl-down", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
2276
+ }
2277
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxGridAreaDirective, decorators: [{
2278
+ type: Directive,
2279
+ args: [{
2280
+ selector: `
2281
+ [fxGridArea],
2282
+ [fxGridArea.xs],[fxGridArea.sm],[fxGridArea.md],[fxGridArea.lg],[fxGridArea.xl],[fxGridArea.xxl],
2283
+ [fxGridArea.lt-sm],[fxGridArea.lt-md],[fxGridArea.lt-lg],[fxGridArea.lt-xl],[fxGridArea.lt-xxl],
2284
+ [fxGridArea.gt-xs],[fxGridArea.gt-sm],[fxGridArea.gt-md],[fxGridArea.gt-lg],[fxGridArea.gt-xl],
2285
+ [fxGridArea.sm-up],[fxGridArea.md-up],[fxGridArea.lg-up],[fxGridArea.xl-up],[fxGridArea.xxl-up],
2286
+ [fxGridArea.sm-down],[fxGridArea.md-down],[fxGridArea.lg-down],[fxGridArea.xl-down]
2287
+ `,
2288
+ standalone: true,
2289
+ }]
2290
+ }], ctorParameters: () => [], propDecorators: { fxGridArea: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea", required: false }] }], xs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.xs", required: false }] }], sm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.sm", required: false }] }], md: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.md", required: false }] }], lg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.lg", required: false }] }], xl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.xl", required: false }] }], xxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.xxl", required: false }] }], ltSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.lt-sm", required: false }] }], ltMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.lt-md", required: false }] }], ltLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.lt-lg", required: false }] }], ltXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.lt-xl", required: false }] }], ltXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.lt-xxl", required: false }] }], gtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.gt-xs", required: false }] }], gtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.gt-sm", required: false }] }], gtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.gt-md", required: false }] }], gtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.gt-lg", required: false }] }], gtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.gt-xl", required: false }] }], smUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.sm-up", required: false }] }], mdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.md-up", required: false }] }], lgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.lg-up", required: false }] }], xlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.xl-up", required: false }] }], xxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.xxl-up", required: false }] }], smDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.sm-down", required: false }] }], mdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.md-down", required: false }] }], lgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.lg-down", required: false }] }], xlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxGridArea.xl-down", required: false }] }] } });
2291
+
2292
+ /**
2293
+ * @file fx-layout-align.directive.ts (Angular 21 — signals)
2294
+ *
2295
+ * [fxLayoutAlign] — sets justify-content + align-items on a flex container.
2296
+ *
2297
+ * Format: "mainAxis crossAxis"
2298
+ * mainAxis : start | center | end | space-between | space-around | space-evenly
2299
+ * crossAxis : start | center | end | stretch | baseline (default: stretch)
2300
+ *
2301
+ * Angular 21 changes:
2302
+ * • All @Input setters replaced by input() signals
2303
+ * • computed() derives the resolved CSS pair
2304
+ * • effect() in constructor writes to DOM
2305
+ *
2306
+ * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down
2307
+ */
2308
+ const MAIN_MAP = {
2309
+ 'start': 'flex-start', 'end': 'flex-end', 'center': 'center',
2310
+ 'space-between': 'space-between', 'space-around': 'space-around', 'space-evenly': 'space-evenly',
2311
+ };
2312
+ const CROSS_MAP = {
2313
+ 'start': 'flex-start', 'end': 'flex-end', 'center': 'center',
2314
+ 'stretch': 'stretch', 'baseline': 'baseline',
2315
+ };
2316
+ function parseAlign(raw) {
2317
+ const [main = 'start', cross = 'stretch'] = raw.trim().split(/\s+/);
2318
+ if (isDevMode() && !MAIN_MAP[main])
2319
+ console.warn(`[fxLayoutAlign] Unknown mainAxis: "${main}"`);
2320
+ if (isDevMode() && !CROSS_MAP[cross])
2321
+ console.warn(`[fxLayoutAlign] Unknown crossAxis: "${cross}"`);
2322
+ return [MAIN_MAP[main] ?? 'flex-start', CROSS_MAP[cross] ?? 'stretch'];
2323
+ }
2324
+ class FxLayoutAlignDirective extends ResponsiveBaseDirective {
2325
+ constructor() {
2326
+ super();
2327
+ this.fxLayoutAlign = input(undefined, { ...(ngDevMode ? { debugName: "fxLayoutAlign" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign' });
2328
+ this.xs = input(undefined, { ...(ngDevMode ? { debugName: "xs" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.xs' });
2329
+ this.sm = input(undefined, { ...(ngDevMode ? { debugName: "sm" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.sm' });
2330
+ this.md = input(undefined, { ...(ngDevMode ? { debugName: "md" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.md' });
2331
+ this.lg = input(undefined, { ...(ngDevMode ? { debugName: "lg" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.lg' });
2332
+ this.xl = input(undefined, { ...(ngDevMode ? { debugName: "xl" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.xl' });
2333
+ this.xxl = input(undefined, { ...(ngDevMode ? { debugName: "xxl" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.xxl' });
2334
+ this.ltSm = input(undefined, { ...(ngDevMode ? { debugName: "ltSm" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.lt-sm' });
2335
+ this.ltMd = input(undefined, { ...(ngDevMode ? { debugName: "ltMd" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.lt-md' });
2336
+ this.ltLg = input(undefined, { ...(ngDevMode ? { debugName: "ltLg" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.lt-lg' });
2337
+ this.ltXl = input(undefined, { ...(ngDevMode ? { debugName: "ltXl" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.lt-xl' });
2338
+ this.ltXxl = input(undefined, { ...(ngDevMode ? { debugName: "ltXxl" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.lt-xxl' });
2339
+ this.gtXs = input(undefined, { ...(ngDevMode ? { debugName: "gtXs" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.gt-xs' });
2340
+ this.gtSm = input(undefined, { ...(ngDevMode ? { debugName: "gtSm" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.gt-sm' });
2341
+ this.gtMd = input(undefined, { ...(ngDevMode ? { debugName: "gtMd" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.gt-md' });
2342
+ this.gtLg = input(undefined, { ...(ngDevMode ? { debugName: "gtLg" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.gt-lg' });
2343
+ this.gtXl = input(undefined, { ...(ngDevMode ? { debugName: "gtXl" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.gt-xl' });
2344
+ this.smUp = input(undefined, { ...(ngDevMode ? { debugName: "smUp" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.sm-up' });
2345
+ this.mdUp = input(undefined, { ...(ngDevMode ? { debugName: "mdUp" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.md-up' });
2346
+ this.lgUp = input(undefined, { ...(ngDevMode ? { debugName: "lgUp" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.lg-up' });
2347
+ this.xlUp = input(undefined, { ...(ngDevMode ? { debugName: "xlUp" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.xl-up' });
2348
+ this.xxlUp = input(undefined, { ...(ngDevMode ? { debugName: "xxlUp" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.xxl-up' });
2349
+ this.smDown = input(undefined, { ...(ngDevMode ? { debugName: "smDown" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.sm-down' });
2350
+ this.mdDown = input(undefined, { ...(ngDevMode ? { debugName: "mdDown" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.md-down' });
2351
+ this.lgDown = input(undefined, { ...(ngDevMode ? { debugName: "lgDown" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.lg-down' });
2352
+ this.xlDown = input(undefined, { ...(ngDevMode ? { debugName: "xlDown" } : /* istanbul ignore next */ {}), alias: 'fxLayoutAlign.xl-down' });
2353
+ this._parsed = computed(() => parseAlign(resolveAll({ default: this.fxLayoutAlign(), xs: this.xs(), sm: this.sm(), md: this.md(),
2354
+ lg: this.lg(), xl: this.xl(), xxl: this.xxl() }, { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),
2355
+ 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),
2356
+ 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),
2357
+ 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),
2358
+ 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),
2359
+ 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),
2360
+ 'sm-down': this.smDown(), 'md-down': this.mdDown(),
2361
+ 'lg-down': this.lgDown(), 'xl-down': this.xlDown() }, this.media.currentBp(), a => this.media.isActive(a)) ?? 'start stretch'), /* @ts-ignore */
2362
+ ...(ngDevMode ? [{ debugName: "_parsed" }] : /* istanbul ignore next */ []));
2363
+ effect(() => {
2364
+ const [jc, ai] = this._parsed();
2365
+ this.safeSetStyle('justify-content', jc);
2366
+ this.safeSetStyle('align-items', ai);
2367
+ });
2368
+ }
2369
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxLayoutAlignDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2370
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: FxLayoutAlignDirective, isStandalone: true, selector: "\n [fxLayoutAlign],\n [fxLayoutAlign.xs],[fxLayoutAlign.sm],[fxLayoutAlign.md],[fxLayoutAlign.lg],[fxLayoutAlign.xl],[fxLayoutAlign.xxl],\n [fxLayoutAlign.lt-sm],[fxLayoutAlign.lt-md],[fxLayoutAlign.lt-lg],[fxLayoutAlign.lt-xl],[fxLayoutAlign.lt-xxl],\n [fxLayoutAlign.gt-xs],[fxLayoutAlign.gt-sm],[fxLayoutAlign.gt-md],[fxLayoutAlign.gt-lg],[fxLayoutAlign.gt-xl],\n [fxLayoutAlign.sm-up],[fxLayoutAlign.md-up],[fxLayoutAlign.lg-up],[fxLayoutAlign.xl-up],[fxLayoutAlign.xxl-up],\n [fxLayoutAlign.sm-down],[fxLayoutAlign.md-down],[fxLayoutAlign.lg-down],[fxLayoutAlign.xl-down]\n ", inputs: { fxLayoutAlign: { classPropertyName: "fxLayoutAlign", publicName: "fxLayoutAlign", isSignal: true, isRequired: false, transformFunction: null }, xs: { classPropertyName: "xs", publicName: "fxLayoutAlign.xs", isSignal: true, isRequired: false, transformFunction: null }, sm: { classPropertyName: "sm", publicName: "fxLayoutAlign.sm", isSignal: true, isRequired: false, transformFunction: null }, md: { classPropertyName: "md", publicName: "fxLayoutAlign.md", isSignal: true, isRequired: false, transformFunction: null }, lg: { classPropertyName: "lg", publicName: "fxLayoutAlign.lg", isSignal: true, isRequired: false, transformFunction: null }, xl: { classPropertyName: "xl", publicName: "fxLayoutAlign.xl", isSignal: true, isRequired: false, transformFunction: null }, xxl: { classPropertyName: "xxl", publicName: "fxLayoutAlign.xxl", isSignal: true, isRequired: false, transformFunction: null }, ltSm: { classPropertyName: "ltSm", publicName: "fxLayoutAlign.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, ltMd: { classPropertyName: "ltMd", publicName: "fxLayoutAlign.lt-md", isSignal: true, isRequired: false, transformFunction: null }, ltLg: { classPropertyName: "ltLg", publicName: "fxLayoutAlign.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, ltXl: { classPropertyName: "ltXl", publicName: "fxLayoutAlign.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, ltXxl: { classPropertyName: "ltXxl", publicName: "fxLayoutAlign.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, gtXs: { classPropertyName: "gtXs", publicName: "fxLayoutAlign.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, gtSm: { classPropertyName: "gtSm", publicName: "fxLayoutAlign.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, gtMd: { classPropertyName: "gtMd", publicName: "fxLayoutAlign.gt-md", isSignal: true, isRequired: false, transformFunction: null }, gtLg: { classPropertyName: "gtLg", publicName: "fxLayoutAlign.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, gtXl: { classPropertyName: "gtXl", publicName: "fxLayoutAlign.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, smUp: { classPropertyName: "smUp", publicName: "fxLayoutAlign.sm-up", isSignal: true, isRequired: false, transformFunction: null }, mdUp: { classPropertyName: "mdUp", publicName: "fxLayoutAlign.md-up", isSignal: true, isRequired: false, transformFunction: null }, lgUp: { classPropertyName: "lgUp", publicName: "fxLayoutAlign.lg-up", isSignal: true, isRequired: false, transformFunction: null }, xlUp: { classPropertyName: "xlUp", publicName: "fxLayoutAlign.xl-up", isSignal: true, isRequired: false, transformFunction: null }, xxlUp: { classPropertyName: "xxlUp", publicName: "fxLayoutAlign.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, smDown: { classPropertyName: "smDown", publicName: "fxLayoutAlign.sm-down", isSignal: true, isRequired: false, transformFunction: null }, mdDown: { classPropertyName: "mdDown", publicName: "fxLayoutAlign.md-down", isSignal: true, isRequired: false, transformFunction: null }, lgDown: { classPropertyName: "lgDown", publicName: "fxLayoutAlign.lg-down", isSignal: true, isRequired: false, transformFunction: null }, xlDown: { classPropertyName: "xlDown", publicName: "fxLayoutAlign.xl-down", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.display": "\"flex\"" } }, usesInheritance: true, ngImport: i0 }); }
2371
+ }
2372
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxLayoutAlignDirective, decorators: [{
2373
+ type: Directive,
2374
+ args: [{
2375
+ selector: `
2376
+ [fxLayoutAlign],
2377
+ [fxLayoutAlign.xs],[fxLayoutAlign.sm],[fxLayoutAlign.md],[fxLayoutAlign.lg],[fxLayoutAlign.xl],[fxLayoutAlign.xxl],
2378
+ [fxLayoutAlign.lt-sm],[fxLayoutAlign.lt-md],[fxLayoutAlign.lt-lg],[fxLayoutAlign.lt-xl],[fxLayoutAlign.lt-xxl],
2379
+ [fxLayoutAlign.gt-xs],[fxLayoutAlign.gt-sm],[fxLayoutAlign.gt-md],[fxLayoutAlign.gt-lg],[fxLayoutAlign.gt-xl],
2380
+ [fxLayoutAlign.sm-up],[fxLayoutAlign.md-up],[fxLayoutAlign.lg-up],[fxLayoutAlign.xl-up],[fxLayoutAlign.xxl-up],
2381
+ [fxLayoutAlign.sm-down],[fxLayoutAlign.md-down],[fxLayoutAlign.lg-down],[fxLayoutAlign.xl-down]
2382
+ `,
2383
+ standalone: true,
2384
+ // fxLayoutAlign implies a flex container. The host binding makes this SSR-safe
2385
+ // and avoids racing with fxLayout (which also sets display:flex via host binding):
2386
+ // when both directives are on the same element Angular sets the property once.
2387
+ host: { '[style.display]': '"flex"' },
2388
+ }]
2389
+ }], ctorParameters: () => [], propDecorators: { fxLayoutAlign: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign", required: false }] }], xs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.xs", required: false }] }], sm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.sm", required: false }] }], md: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.md", required: false }] }], lg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.lg", required: false }] }], xl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.xl", required: false }] }], xxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.xxl", required: false }] }], ltSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.lt-sm", required: false }] }], ltMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.lt-md", required: false }] }], ltLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.lt-lg", required: false }] }], ltXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.lt-xl", required: false }] }], ltXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.lt-xxl", required: false }] }], gtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.gt-xs", required: false }] }], gtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.gt-sm", required: false }] }], gtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.gt-md", required: false }] }], gtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.gt-lg", required: false }] }], gtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.gt-xl", required: false }] }], smUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.sm-up", required: false }] }], mdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.md-up", required: false }] }], lgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.lg-up", required: false }] }], xlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.xl-up", required: false }] }], xxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.xxl-up", required: false }] }], smDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.sm-down", required: false }] }], mdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.md-down", required: false }] }], lgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.lg-down", required: false }] }], xlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutAlign.xl-down", required: false }] }] } });
2390
+
2391
+ /**
2392
+ * @file fx-layout-gap.directive.ts (Angular 21 — signals)
2393
+ *
2394
+ * [fxLayoutGap] — sets gap on a flex or grid container.
2395
+ * Unitless numbers are normalized to px (e.g. "16" → "16px").
2396
+ *
2397
+ * Angular 21 changes:
2398
+ * • All @Input setters replaced by input() signals
2399
+ * • computed() derives the normalized gap value
2400
+ * • effect() in constructor writes to DOM
2401
+ *
2402
+ * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down
2403
+ */
2404
+ function normalizeGap(raw) {
2405
+ return raw.trim().split(/\s+/)
2406
+ .map(v => /^\d+(\.\d+)?$/.test(v) ? `${v}px` : v)
2407
+ .join(' ');
2408
+ }
2409
+ class FxLayoutGapDirective extends ResponsiveBaseDirective {
2410
+ constructor() {
2411
+ super();
2412
+ this.fxLayoutGap = input(undefined, { ...(ngDevMode ? { debugName: "fxLayoutGap" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap' });
2413
+ this.xs = input(undefined, { ...(ngDevMode ? { debugName: "xs" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.xs' });
2414
+ this.sm = input(undefined, { ...(ngDevMode ? { debugName: "sm" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.sm' });
2415
+ this.md = input(undefined, { ...(ngDevMode ? { debugName: "md" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.md' });
2416
+ this.lg = input(undefined, { ...(ngDevMode ? { debugName: "lg" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.lg' });
2417
+ this.xl = input(undefined, { ...(ngDevMode ? { debugName: "xl" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.xl' });
2418
+ this.xxl = input(undefined, { ...(ngDevMode ? { debugName: "xxl" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.xxl' });
2419
+ this.ltSm = input(undefined, { ...(ngDevMode ? { debugName: "ltSm" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.lt-sm' });
2420
+ this.ltMd = input(undefined, { ...(ngDevMode ? { debugName: "ltMd" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.lt-md' });
2421
+ this.ltLg = input(undefined, { ...(ngDevMode ? { debugName: "ltLg" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.lt-lg' });
2422
+ this.ltXl = input(undefined, { ...(ngDevMode ? { debugName: "ltXl" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.lt-xl' });
2423
+ this.ltXxl = input(undefined, { ...(ngDevMode ? { debugName: "ltXxl" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.lt-xxl' });
2424
+ this.gtXs = input(undefined, { ...(ngDevMode ? { debugName: "gtXs" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.gt-xs' });
2425
+ this.gtSm = input(undefined, { ...(ngDevMode ? { debugName: "gtSm" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.gt-sm' });
2426
+ this.gtMd = input(undefined, { ...(ngDevMode ? { debugName: "gtMd" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.gt-md' });
2427
+ this.gtLg = input(undefined, { ...(ngDevMode ? { debugName: "gtLg" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.gt-lg' });
2428
+ this.gtXl = input(undefined, { ...(ngDevMode ? { debugName: "gtXl" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.gt-xl' });
2429
+ this.smUp = input(undefined, { ...(ngDevMode ? { debugName: "smUp" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.sm-up' });
2430
+ this.mdUp = input(undefined, { ...(ngDevMode ? { debugName: "mdUp" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.md-up' });
2431
+ this.lgUp = input(undefined, { ...(ngDevMode ? { debugName: "lgUp" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.lg-up' });
2432
+ this.xlUp = input(undefined, { ...(ngDevMode ? { debugName: "xlUp" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.xl-up' });
2433
+ this.xxlUp = input(undefined, { ...(ngDevMode ? { debugName: "xxlUp" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.xxl-up' });
2434
+ this.smDown = input(undefined, { ...(ngDevMode ? { debugName: "smDown" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.sm-down' });
2435
+ this.mdDown = input(undefined, { ...(ngDevMode ? { debugName: "mdDown" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.md-down' });
2436
+ this.lgDown = input(undefined, { ...(ngDevMode ? { debugName: "lgDown" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.lg-down' });
2437
+ this.xlDown = input(undefined, { ...(ngDevMode ? { debugName: "xlDown" } : /* istanbul ignore next */ {}), alias: 'fxLayoutGap.xl-down' });
2438
+ this._gap = computed(() => normalizeGap(resolveAll({ default: this.fxLayoutGap(), xs: this.xs(), sm: this.sm(), md: this.md(),
2439
+ lg: this.lg(), xl: this.xl(), xxl: this.xxl() }, { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),
2440
+ 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),
2441
+ 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),
2442
+ 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),
2443
+ 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),
2444
+ 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),
2445
+ 'sm-down': this.smDown(), 'md-down': this.mdDown(),
2446
+ 'lg-down': this.lgDown(), 'xl-down': this.xlDown() }, this.media.currentBp(), a => this.media.isActive(a)) ?? '0'), /* @ts-ignore */
2447
+ ...(ngDevMode ? [{ debugName: "_gap" }] : /* istanbul ignore next */ []));
2448
+ effect(() => { this.safeSetStyle('gap', this._gap()); });
2449
+ }
2450
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxLayoutGapDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2451
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: FxLayoutGapDirective, isStandalone: true, selector: "\n [fxLayoutGap],\n [fxLayoutGap.xs],[fxLayoutGap.sm],[fxLayoutGap.md],[fxLayoutGap.lg],[fxLayoutGap.xl],[fxLayoutGap.xxl],\n [fxLayoutGap.lt-sm],[fxLayoutGap.lt-md],[fxLayoutGap.lt-lg],[fxLayoutGap.lt-xl],[fxLayoutGap.lt-xxl],\n [fxLayoutGap.gt-xs],[fxLayoutGap.gt-sm],[fxLayoutGap.gt-md],[fxLayoutGap.gt-lg],[fxLayoutGap.gt-xl],\n [fxLayoutGap.sm-up],[fxLayoutGap.md-up],[fxLayoutGap.lg-up],[fxLayoutGap.xl-up],[fxLayoutGap.xxl-up],\n [fxLayoutGap.sm-down],[fxLayoutGap.md-down],[fxLayoutGap.lg-down],[fxLayoutGap.xl-down]\n ", inputs: { fxLayoutGap: { classPropertyName: "fxLayoutGap", publicName: "fxLayoutGap", isSignal: true, isRequired: false, transformFunction: null }, xs: { classPropertyName: "xs", publicName: "fxLayoutGap.xs", isSignal: true, isRequired: false, transformFunction: null }, sm: { classPropertyName: "sm", publicName: "fxLayoutGap.sm", isSignal: true, isRequired: false, transformFunction: null }, md: { classPropertyName: "md", publicName: "fxLayoutGap.md", isSignal: true, isRequired: false, transformFunction: null }, lg: { classPropertyName: "lg", publicName: "fxLayoutGap.lg", isSignal: true, isRequired: false, transformFunction: null }, xl: { classPropertyName: "xl", publicName: "fxLayoutGap.xl", isSignal: true, isRequired: false, transformFunction: null }, xxl: { classPropertyName: "xxl", publicName: "fxLayoutGap.xxl", isSignal: true, isRequired: false, transformFunction: null }, ltSm: { classPropertyName: "ltSm", publicName: "fxLayoutGap.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, ltMd: { classPropertyName: "ltMd", publicName: "fxLayoutGap.lt-md", isSignal: true, isRequired: false, transformFunction: null }, ltLg: { classPropertyName: "ltLg", publicName: "fxLayoutGap.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, ltXl: { classPropertyName: "ltXl", publicName: "fxLayoutGap.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, ltXxl: { classPropertyName: "ltXxl", publicName: "fxLayoutGap.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, gtXs: { classPropertyName: "gtXs", publicName: "fxLayoutGap.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, gtSm: { classPropertyName: "gtSm", publicName: "fxLayoutGap.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, gtMd: { classPropertyName: "gtMd", publicName: "fxLayoutGap.gt-md", isSignal: true, isRequired: false, transformFunction: null }, gtLg: { classPropertyName: "gtLg", publicName: "fxLayoutGap.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, gtXl: { classPropertyName: "gtXl", publicName: "fxLayoutGap.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, smUp: { classPropertyName: "smUp", publicName: "fxLayoutGap.sm-up", isSignal: true, isRequired: false, transformFunction: null }, mdUp: { classPropertyName: "mdUp", publicName: "fxLayoutGap.md-up", isSignal: true, isRequired: false, transformFunction: null }, lgUp: { classPropertyName: "lgUp", publicName: "fxLayoutGap.lg-up", isSignal: true, isRequired: false, transformFunction: null }, xlUp: { classPropertyName: "xlUp", publicName: "fxLayoutGap.xl-up", isSignal: true, isRequired: false, transformFunction: null }, xxlUp: { classPropertyName: "xxlUp", publicName: "fxLayoutGap.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, smDown: { classPropertyName: "smDown", publicName: "fxLayoutGap.sm-down", isSignal: true, isRequired: false, transformFunction: null }, mdDown: { classPropertyName: "mdDown", publicName: "fxLayoutGap.md-down", isSignal: true, isRequired: false, transformFunction: null }, lgDown: { classPropertyName: "lgDown", publicName: "fxLayoutGap.lg-down", isSignal: true, isRequired: false, transformFunction: null }, xlDown: { classPropertyName: "xlDown", publicName: "fxLayoutGap.xl-down", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
2452
+ }
2453
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxLayoutGapDirective, decorators: [{
2454
+ type: Directive,
2455
+ args: [{
2456
+ selector: `
2457
+ [fxLayoutGap],
2458
+ [fxLayoutGap.xs],[fxLayoutGap.sm],[fxLayoutGap.md],[fxLayoutGap.lg],[fxLayoutGap.xl],[fxLayoutGap.xxl],
2459
+ [fxLayoutGap.lt-sm],[fxLayoutGap.lt-md],[fxLayoutGap.lt-lg],[fxLayoutGap.lt-xl],[fxLayoutGap.lt-xxl],
2460
+ [fxLayoutGap.gt-xs],[fxLayoutGap.gt-sm],[fxLayoutGap.gt-md],[fxLayoutGap.gt-lg],[fxLayoutGap.gt-xl],
2461
+ [fxLayoutGap.sm-up],[fxLayoutGap.md-up],[fxLayoutGap.lg-up],[fxLayoutGap.xl-up],[fxLayoutGap.xxl-up],
2462
+ [fxLayoutGap.sm-down],[fxLayoutGap.md-down],[fxLayoutGap.lg-down],[fxLayoutGap.xl-down]
2463
+ `,
2464
+ standalone: true,
2465
+ }]
2466
+ }], ctorParameters: () => [], propDecorators: { fxLayoutGap: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap", required: false }] }], xs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.xs", required: false }] }], sm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.sm", required: false }] }], md: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.md", required: false }] }], lg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.lg", required: false }] }], xl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.xl", required: false }] }], xxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.xxl", required: false }] }], ltSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.lt-sm", required: false }] }], ltMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.lt-md", required: false }] }], ltLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.lt-lg", required: false }] }], ltXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.lt-xl", required: false }] }], ltXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.lt-xxl", required: false }] }], gtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.gt-xs", required: false }] }], gtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.gt-sm", required: false }] }], gtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.gt-md", required: false }] }], gtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.gt-lg", required: false }] }], gtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.gt-xl", required: false }] }], smUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.sm-up", required: false }] }], mdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.md-up", required: false }] }], lgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.lg-up", required: false }] }], xlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.xl-up", required: false }] }], xxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.xxl-up", required: false }] }], smDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.sm-down", required: false }] }], mdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.md-down", required: false }] }], lgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.lg-down", required: false }] }], xlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutGap.xl-down", required: false }] }] } });
2467
+
2468
+ /**
2469
+ * @file fx-layout.directive.ts (Angular 21 - signals)
2470
+ *
2471
+ * [fxLayout] -- sets flex-direction (and optionally flex-wrap) on the host.
2472
+ * [fxLayoutWrap] -- dedicated alias for flex-wrap (original ngx-layout compat).
2473
+ *
2474
+ * Angular 21 changes:
2475
+ * - All @Input setters replaced by input() signals
2476
+ * - computed() builds reactive BP maps and derives CSS values
2477
+ * - effect() in constructor writes to DOM -- no lifecycle hooks
2478
+ *
2479
+ * Breakpoint suffixes:
2480
+ * Canonical : .xs .sm .md .lg .xl .xxl
2481
+ * lt-* : .lt-sm .lt-md .lt-lg .lt-xl .lt-xxl
2482
+ * gt-* : .gt-xs .gt-sm .gt-md .gt-lg .gt-xl
2483
+ * *-up : .sm-up .md-up .lg-up .xl-up .xxl-up
2484
+ * *-down : .sm-down .md-down .lg-down .xl-down
2485
+ */
2486
+ const VALID_DIRECTIONS = new Set(['row', 'column', 'row-reverse', 'column-reverse']);
2487
+ const VALID_WRAPS = new Set(['wrap', 'wrap-reverse', 'nowrap']);
2488
+ function parseLayout(raw) {
2489
+ const parts = raw.trim().split(/\s+/);
2490
+ const dir = VALID_DIRECTIONS.has(parts[0]) ? parts[0] : 'row';
2491
+ const wrap = VALID_WRAPS.has(parts[1]) ? parts[1] : 'nowrap';
2492
+ return [dir, wrap];
2493
+ }
2494
+ class FxLayoutDirective extends ResponsiveBaseDirective {
2495
+ constructor() {
2496
+ super();
2497
+ this.fxLayout = input('row', { ...(ngDevMode ? { debugName: "fxLayout" } : /* istanbul ignore next */ {}), alias: 'fxLayout' });
2498
+ this.xs = input(undefined, { ...(ngDevMode ? { debugName: "xs" } : /* istanbul ignore next */ {}), alias: 'fxLayout.xs' });
2499
+ this.sm = input(undefined, { ...(ngDevMode ? { debugName: "sm" } : /* istanbul ignore next */ {}), alias: 'fxLayout.sm' });
2500
+ this.md = input(undefined, { ...(ngDevMode ? { debugName: "md" } : /* istanbul ignore next */ {}), alias: 'fxLayout.md' });
2501
+ this.lg = input(undefined, { ...(ngDevMode ? { debugName: "lg" } : /* istanbul ignore next */ {}), alias: 'fxLayout.lg' });
2502
+ this.xl = input(undefined, { ...(ngDevMode ? { debugName: "xl" } : /* istanbul ignore next */ {}), alias: 'fxLayout.xl' });
2503
+ this.xxl = input(undefined, { ...(ngDevMode ? { debugName: "xxl" } : /* istanbul ignore next */ {}), alias: 'fxLayout.xxl' });
2504
+ this.ltSm = input(undefined, { ...(ngDevMode ? { debugName: "ltSm" } : /* istanbul ignore next */ {}), alias: 'fxLayout.lt-sm' });
2505
+ this.ltMd = input(undefined, { ...(ngDevMode ? { debugName: "ltMd" } : /* istanbul ignore next */ {}), alias: 'fxLayout.lt-md' });
2506
+ this.ltLg = input(undefined, { ...(ngDevMode ? { debugName: "ltLg" } : /* istanbul ignore next */ {}), alias: 'fxLayout.lt-lg' });
2507
+ this.ltXl = input(undefined, { ...(ngDevMode ? { debugName: "ltXl" } : /* istanbul ignore next */ {}), alias: 'fxLayout.lt-xl' });
2508
+ this.ltXxl = input(undefined, { ...(ngDevMode ? { debugName: "ltXxl" } : /* istanbul ignore next */ {}), alias: 'fxLayout.lt-xxl' });
2509
+ this.gtXs = input(undefined, { ...(ngDevMode ? { debugName: "gtXs" } : /* istanbul ignore next */ {}), alias: 'fxLayout.gt-xs' });
2510
+ this.gtSm = input(undefined, { ...(ngDevMode ? { debugName: "gtSm" } : /* istanbul ignore next */ {}), alias: 'fxLayout.gt-sm' });
2511
+ this.gtMd = input(undefined, { ...(ngDevMode ? { debugName: "gtMd" } : /* istanbul ignore next */ {}), alias: 'fxLayout.gt-md' });
2512
+ this.gtLg = input(undefined, { ...(ngDevMode ? { debugName: "gtLg" } : /* istanbul ignore next */ {}), alias: 'fxLayout.gt-lg' });
2513
+ this.gtXl = input(undefined, { ...(ngDevMode ? { debugName: "gtXl" } : /* istanbul ignore next */ {}), alias: 'fxLayout.gt-xl' });
2514
+ this.smUp = input(undefined, { ...(ngDevMode ? { debugName: "smUp" } : /* istanbul ignore next */ {}), alias: 'fxLayout.sm-up' });
2515
+ this.mdUp = input(undefined, { ...(ngDevMode ? { debugName: "mdUp" } : /* istanbul ignore next */ {}), alias: 'fxLayout.md-up' });
2516
+ this.lgUp = input(undefined, { ...(ngDevMode ? { debugName: "lgUp" } : /* istanbul ignore next */ {}), alias: 'fxLayout.lg-up' });
2517
+ this.xlUp = input(undefined, { ...(ngDevMode ? { debugName: "xlUp" } : /* istanbul ignore next */ {}), alias: 'fxLayout.xl-up' });
2518
+ this.xxlUp = input(undefined, { ...(ngDevMode ? { debugName: "xxlUp" } : /* istanbul ignore next */ {}), alias: 'fxLayout.xxl-up' });
2519
+ this.smDown = input(undefined, { ...(ngDevMode ? { debugName: "smDown" } : /* istanbul ignore next */ {}), alias: 'fxLayout.sm-down' });
2520
+ this.mdDown = input(undefined, { ...(ngDevMode ? { debugName: "mdDown" } : /* istanbul ignore next */ {}), alias: 'fxLayout.md-down' });
2521
+ this.lgDown = input(undefined, { ...(ngDevMode ? { debugName: "lgDown" } : /* istanbul ignore next */ {}), alias: 'fxLayout.lg-down' });
2522
+ this.xlDown = input(undefined, { ...(ngDevMode ? { debugName: "xlDown" } : /* istanbul ignore next */ {}), alias: 'fxLayout.xl-down' });
2523
+ this._parsed = computed(() => parseLayout(resolveAll({ default: this.fxLayout(), xs: this.xs(), sm: this.sm(), md: this.md(),
2524
+ lg: this.lg(), xl: this.xl(), xxl: this.xxl() }, { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),
2525
+ 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),
2526
+ 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),
2527
+ 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),
2528
+ 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),
2529
+ 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),
2530
+ 'sm-down': this.smDown(), 'md-down': this.mdDown(),
2531
+ 'lg-down': this.lgDown(), 'xl-down': this.xlDown() }, this.media.currentBp(), a => this.media.isActive(a)) ?? 'row'), /* @ts-ignore */
2532
+ ...(ngDevMode ? [{ debugName: "_parsed" }] : /* istanbul ignore next */ []));
2533
+ effect(() => {
2534
+ const [dir, wrap] = this._parsed();
2535
+ this.safeSetStyle('flex-direction', dir);
2536
+ this.safeSetStyle('flex-wrap', wrap);
2537
+ });
2538
+ }
2539
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxLayoutDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2540
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: FxLayoutDirective, isStandalone: true, selector: "\n [fxLayout],\n [fxLayout.xs],[fxLayout.sm],[fxLayout.md],[fxLayout.lg],[fxLayout.xl],[fxLayout.xxl],\n [fxLayout.lt-sm],[fxLayout.lt-md],[fxLayout.lt-lg],[fxLayout.lt-xl],[fxLayout.lt-xxl],\n [fxLayout.gt-xs],[fxLayout.gt-sm],[fxLayout.gt-md],[fxLayout.gt-lg],[fxLayout.gt-xl],\n [fxLayout.sm-up],[fxLayout.md-up],[fxLayout.lg-up],[fxLayout.xl-up],[fxLayout.xxl-up],\n [fxLayout.sm-down],[fxLayout.md-down],[fxLayout.lg-down],[fxLayout.xl-down]\n ", inputs: { fxLayout: { classPropertyName: "fxLayout", publicName: "fxLayout", isSignal: true, isRequired: false, transformFunction: null }, xs: { classPropertyName: "xs", publicName: "fxLayout.xs", isSignal: true, isRequired: false, transformFunction: null }, sm: { classPropertyName: "sm", publicName: "fxLayout.sm", isSignal: true, isRequired: false, transformFunction: null }, md: { classPropertyName: "md", publicName: "fxLayout.md", isSignal: true, isRequired: false, transformFunction: null }, lg: { classPropertyName: "lg", publicName: "fxLayout.lg", isSignal: true, isRequired: false, transformFunction: null }, xl: { classPropertyName: "xl", publicName: "fxLayout.xl", isSignal: true, isRequired: false, transformFunction: null }, xxl: { classPropertyName: "xxl", publicName: "fxLayout.xxl", isSignal: true, isRequired: false, transformFunction: null }, ltSm: { classPropertyName: "ltSm", publicName: "fxLayout.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, ltMd: { classPropertyName: "ltMd", publicName: "fxLayout.lt-md", isSignal: true, isRequired: false, transformFunction: null }, ltLg: { classPropertyName: "ltLg", publicName: "fxLayout.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, ltXl: { classPropertyName: "ltXl", publicName: "fxLayout.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, ltXxl: { classPropertyName: "ltXxl", publicName: "fxLayout.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, gtXs: { classPropertyName: "gtXs", publicName: "fxLayout.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, gtSm: { classPropertyName: "gtSm", publicName: "fxLayout.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, gtMd: { classPropertyName: "gtMd", publicName: "fxLayout.gt-md", isSignal: true, isRequired: false, transformFunction: null }, gtLg: { classPropertyName: "gtLg", publicName: "fxLayout.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, gtXl: { classPropertyName: "gtXl", publicName: "fxLayout.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, smUp: { classPropertyName: "smUp", publicName: "fxLayout.sm-up", isSignal: true, isRequired: false, transformFunction: null }, mdUp: { classPropertyName: "mdUp", publicName: "fxLayout.md-up", isSignal: true, isRequired: false, transformFunction: null }, lgUp: { classPropertyName: "lgUp", publicName: "fxLayout.lg-up", isSignal: true, isRequired: false, transformFunction: null }, xlUp: { classPropertyName: "xlUp", publicName: "fxLayout.xl-up", isSignal: true, isRequired: false, transformFunction: null }, xxlUp: { classPropertyName: "xxlUp", publicName: "fxLayout.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, smDown: { classPropertyName: "smDown", publicName: "fxLayout.sm-down", isSignal: true, isRequired: false, transformFunction: null }, mdDown: { classPropertyName: "mdDown", publicName: "fxLayout.md-down", isSignal: true, isRequired: false, transformFunction: null }, lgDown: { classPropertyName: "lgDown", publicName: "fxLayout.lg-down", isSignal: true, isRequired: false, transformFunction: null }, xlDown: { classPropertyName: "xlDown", publicName: "fxLayout.xl-down", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.display": "\"flex\"" } }, usesInheritance: true, ngImport: i0 }); }
2541
+ }
2542
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxLayoutDirective, decorators: [{
2543
+ type: Directive,
2544
+ args: [{
2545
+ selector: `
2546
+ [fxLayout],
2547
+ [fxLayout.xs],[fxLayout.sm],[fxLayout.md],[fxLayout.lg],[fxLayout.xl],[fxLayout.xxl],
2548
+ [fxLayout.lt-sm],[fxLayout.lt-md],[fxLayout.lt-lg],[fxLayout.lt-xl],[fxLayout.lt-xxl],
2549
+ [fxLayout.gt-xs],[fxLayout.gt-sm],[fxLayout.gt-md],[fxLayout.gt-lg],[fxLayout.gt-xl],
2550
+ [fxLayout.sm-up],[fxLayout.md-up],[fxLayout.lg-up],[fxLayout.xl-up],[fxLayout.xxl-up],
2551
+ [fxLayout.sm-down],[fxLayout.md-down],[fxLayout.lg-down],[fxLayout.xl-down]
2552
+ `,
2553
+ standalone: true,
2554
+ host: { '[style.display]': '"flex"' },
2555
+ }]
2556
+ }], ctorParameters: () => [], propDecorators: { fxLayout: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout", required: false }] }], xs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.xs", required: false }] }], sm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.sm", required: false }] }], md: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.md", required: false }] }], lg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.lg", required: false }] }], xl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.xl", required: false }] }], xxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.xxl", required: false }] }], ltSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.lt-sm", required: false }] }], ltMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.lt-md", required: false }] }], ltLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.lt-lg", required: false }] }], ltXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.lt-xl", required: false }] }], ltXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.lt-xxl", required: false }] }], gtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.gt-xs", required: false }] }], gtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.gt-sm", required: false }] }], gtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.gt-md", required: false }] }], gtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.gt-lg", required: false }] }], gtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.gt-xl", required: false }] }], smUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.sm-up", required: false }] }], mdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.md-up", required: false }] }], lgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.lg-up", required: false }] }], xlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.xl-up", required: false }] }], xxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.xxl-up", required: false }] }], smDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.sm-down", required: false }] }], mdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.md-down", required: false }] }], lgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.lg-down", required: false }] }], xlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayout.xl-down", required: false }] }] } });
2557
+ class FxLayoutWrapDirective extends ResponsiveBaseDirective {
2558
+ constructor() {
2559
+ super();
2560
+ this.fxLayoutWrap = input('wrap', { ...(ngDevMode ? { debugName: "fxLayoutWrap" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap' });
2561
+ this.xs = input(undefined, { ...(ngDevMode ? { debugName: "xs" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.xs' });
2562
+ this.sm = input(undefined, { ...(ngDevMode ? { debugName: "sm" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.sm' });
2563
+ this.md = input(undefined, { ...(ngDevMode ? { debugName: "md" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.md' });
2564
+ this.lg = input(undefined, { ...(ngDevMode ? { debugName: "lg" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.lg' });
2565
+ this.xl = input(undefined, { ...(ngDevMode ? { debugName: "xl" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.xl' });
2566
+ this.xxl = input(undefined, { ...(ngDevMode ? { debugName: "xxl" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.xxl' });
2567
+ this.ltSm = input(undefined, { ...(ngDevMode ? { debugName: "ltSm" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.lt-sm' });
2568
+ this.ltMd = input(undefined, { ...(ngDevMode ? { debugName: "ltMd" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.lt-md' });
2569
+ this.ltLg = input(undefined, { ...(ngDevMode ? { debugName: "ltLg" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.lt-lg' });
2570
+ this.ltXl = input(undefined, { ...(ngDevMode ? { debugName: "ltXl" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.lt-xl' });
2571
+ this.ltXxl = input(undefined, { ...(ngDevMode ? { debugName: "ltXxl" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.lt-xxl' });
2572
+ this.gtXs = input(undefined, { ...(ngDevMode ? { debugName: "gtXs" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.gt-xs' });
2573
+ this.gtSm = input(undefined, { ...(ngDevMode ? { debugName: "gtSm" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.gt-sm' });
2574
+ this.gtMd = input(undefined, { ...(ngDevMode ? { debugName: "gtMd" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.gt-md' });
2575
+ this.gtLg = input(undefined, { ...(ngDevMode ? { debugName: "gtLg" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.gt-lg' });
2576
+ this.gtXl = input(undefined, { ...(ngDevMode ? { debugName: "gtXl" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.gt-xl' });
2577
+ this.smUp = input(undefined, { ...(ngDevMode ? { debugName: "smUp" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.sm-up' });
2578
+ this.mdUp = input(undefined, { ...(ngDevMode ? { debugName: "mdUp" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.md-up' });
2579
+ this.lgUp = input(undefined, { ...(ngDevMode ? { debugName: "lgUp" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.lg-up' });
2580
+ this.xlUp = input(undefined, { ...(ngDevMode ? { debugName: "xlUp" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.xl-up' });
2581
+ this.xxlUp = input(undefined, { ...(ngDevMode ? { debugName: "xxlUp" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.xxl-up' });
2582
+ this.smDown = input(undefined, { ...(ngDevMode ? { debugName: "smDown" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.sm-down' });
2583
+ this.mdDown = input(undefined, { ...(ngDevMode ? { debugName: "mdDown" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.md-down' });
2584
+ this.lgDown = input(undefined, { ...(ngDevMode ? { debugName: "lgDown" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.lg-down' });
2585
+ this.xlDown = input(undefined, { ...(ngDevMode ? { debugName: "xlDown" } : /* istanbul ignore next */ {}), alias: 'fxLayoutWrap.xl-down' });
2586
+ this._wrap = computed(() => {
2587
+ const w = resolveAll({ default: this.fxLayoutWrap(), xs: this.xs(), sm: this.sm(), md: this.md(),
2588
+ lg: this.lg(), xl: this.xl(), xxl: this.xxl() }, { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),
2589
+ 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),
2590
+ 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),
2591
+ 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),
2592
+ 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),
2593
+ 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),
2594
+ 'sm-down': this.smDown(), 'md-down': this.mdDown(),
2595
+ 'lg-down': this.lgDown(), 'xl-down': this.xlDown() }, this.media.currentBp(), a => this.media.isActive(a)) ?? 'wrap';
2596
+ return VALID_WRAPS.has(w) ? w : 'wrap';
2597
+ }, /* @ts-ignore */
2598
+ ...(ngDevMode ? [{ debugName: "_wrap" }] : /* istanbul ignore next */ []));
2599
+ effect(() => { this.safeSetStyle('flex-wrap', this._wrap()); });
2600
+ }
2601
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxLayoutWrapDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2602
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: FxLayoutWrapDirective, isStandalone: true, selector: "\n [fxLayoutWrap],\n [fxLayoutWrap.xs],[fxLayoutWrap.sm],[fxLayoutWrap.md],[fxLayoutWrap.lg],[fxLayoutWrap.xl],[fxLayoutWrap.xxl],\n [fxLayoutWrap.lt-sm],[fxLayoutWrap.lt-md],[fxLayoutWrap.lt-lg],[fxLayoutWrap.lt-xl],[fxLayoutWrap.lt-xxl],\n [fxLayoutWrap.gt-xs],[fxLayoutWrap.gt-sm],[fxLayoutWrap.gt-md],[fxLayoutWrap.gt-lg],[fxLayoutWrap.gt-xl],\n [fxLayoutWrap.sm-up],[fxLayoutWrap.md-up],[fxLayoutWrap.lg-up],[fxLayoutWrap.xl-up],[fxLayoutWrap.xxl-up],\n [fxLayoutWrap.sm-down],[fxLayoutWrap.md-down],[fxLayoutWrap.lg-down],[fxLayoutWrap.xl-down]\n ", inputs: { fxLayoutWrap: { classPropertyName: "fxLayoutWrap", publicName: "fxLayoutWrap", isSignal: true, isRequired: false, transformFunction: null }, xs: { classPropertyName: "xs", publicName: "fxLayoutWrap.xs", isSignal: true, isRequired: false, transformFunction: null }, sm: { classPropertyName: "sm", publicName: "fxLayoutWrap.sm", isSignal: true, isRequired: false, transformFunction: null }, md: { classPropertyName: "md", publicName: "fxLayoutWrap.md", isSignal: true, isRequired: false, transformFunction: null }, lg: { classPropertyName: "lg", publicName: "fxLayoutWrap.lg", isSignal: true, isRequired: false, transformFunction: null }, xl: { classPropertyName: "xl", publicName: "fxLayoutWrap.xl", isSignal: true, isRequired: false, transformFunction: null }, xxl: { classPropertyName: "xxl", publicName: "fxLayoutWrap.xxl", isSignal: true, isRequired: false, transformFunction: null }, ltSm: { classPropertyName: "ltSm", publicName: "fxLayoutWrap.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, ltMd: { classPropertyName: "ltMd", publicName: "fxLayoutWrap.lt-md", isSignal: true, isRequired: false, transformFunction: null }, ltLg: { classPropertyName: "ltLg", publicName: "fxLayoutWrap.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, ltXl: { classPropertyName: "ltXl", publicName: "fxLayoutWrap.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, ltXxl: { classPropertyName: "ltXxl", publicName: "fxLayoutWrap.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, gtXs: { classPropertyName: "gtXs", publicName: "fxLayoutWrap.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, gtSm: { classPropertyName: "gtSm", publicName: "fxLayoutWrap.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, gtMd: { classPropertyName: "gtMd", publicName: "fxLayoutWrap.gt-md", isSignal: true, isRequired: false, transformFunction: null }, gtLg: { classPropertyName: "gtLg", publicName: "fxLayoutWrap.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, gtXl: { classPropertyName: "gtXl", publicName: "fxLayoutWrap.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, smUp: { classPropertyName: "smUp", publicName: "fxLayoutWrap.sm-up", isSignal: true, isRequired: false, transformFunction: null }, mdUp: { classPropertyName: "mdUp", publicName: "fxLayoutWrap.md-up", isSignal: true, isRequired: false, transformFunction: null }, lgUp: { classPropertyName: "lgUp", publicName: "fxLayoutWrap.lg-up", isSignal: true, isRequired: false, transformFunction: null }, xlUp: { classPropertyName: "xlUp", publicName: "fxLayoutWrap.xl-up", isSignal: true, isRequired: false, transformFunction: null }, xxlUp: { classPropertyName: "xxlUp", publicName: "fxLayoutWrap.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, smDown: { classPropertyName: "smDown", publicName: "fxLayoutWrap.sm-down", isSignal: true, isRequired: false, transformFunction: null }, mdDown: { classPropertyName: "mdDown", publicName: "fxLayoutWrap.md-down", isSignal: true, isRequired: false, transformFunction: null }, lgDown: { classPropertyName: "lgDown", publicName: "fxLayoutWrap.lg-down", isSignal: true, isRequired: false, transformFunction: null }, xlDown: { classPropertyName: "xlDown", publicName: "fxLayoutWrap.xl-down", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
2603
+ }
2604
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxLayoutWrapDirective, decorators: [{
2605
+ type: Directive,
2606
+ args: [{
2607
+ selector: `
2608
+ [fxLayoutWrap],
2609
+ [fxLayoutWrap.xs],[fxLayoutWrap.sm],[fxLayoutWrap.md],[fxLayoutWrap.lg],[fxLayoutWrap.xl],[fxLayoutWrap.xxl],
2610
+ [fxLayoutWrap.lt-sm],[fxLayoutWrap.lt-md],[fxLayoutWrap.lt-lg],[fxLayoutWrap.lt-xl],[fxLayoutWrap.lt-xxl],
2611
+ [fxLayoutWrap.gt-xs],[fxLayoutWrap.gt-sm],[fxLayoutWrap.gt-md],[fxLayoutWrap.gt-lg],[fxLayoutWrap.gt-xl],
2612
+ [fxLayoutWrap.sm-up],[fxLayoutWrap.md-up],[fxLayoutWrap.lg-up],[fxLayoutWrap.xl-up],[fxLayoutWrap.xxl-up],
2613
+ [fxLayoutWrap.sm-down],[fxLayoutWrap.md-down],[fxLayoutWrap.lg-down],[fxLayoutWrap.xl-down]
2614
+ `,
2615
+ standalone: true,
2616
+ }]
2617
+ }], ctorParameters: () => [], propDecorators: { fxLayoutWrap: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap", required: false }] }], xs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.xs", required: false }] }], sm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.sm", required: false }] }], md: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.md", required: false }] }], lg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.lg", required: false }] }], xl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.xl", required: false }] }], xxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.xxl", required: false }] }], ltSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.lt-sm", required: false }] }], ltMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.lt-md", required: false }] }], ltLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.lt-lg", required: false }] }], ltXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.lt-xl", required: false }] }], ltXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.lt-xxl", required: false }] }], gtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.gt-xs", required: false }] }], gtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.gt-sm", required: false }] }], gtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.gt-md", required: false }] }], gtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.gt-lg", required: false }] }], gtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.gt-xl", required: false }] }], smUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.sm-up", required: false }] }], mdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.md-up", required: false }] }], lgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.lg-up", required: false }] }], xlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.xl-up", required: false }] }], xxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.xxl-up", required: false }] }], smDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.sm-down", required: false }] }], mdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.md-down", required: false }] }], lgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.lg-down", required: false }] }], xlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxLayoutWrap.xl-down", required: false }] }] } });
2618
+
2619
+ /**
2620
+ * @file fx-show-hide.directives.ts (Angular 21 — signals)
2621
+ *
2622
+ * [fxShow] / [fxHide] — responsive visibility via display:none.
2623
+ * Elements stay in the DOM (unlike *ifBp which removes them).
2624
+ *
2625
+ * IMPORTANT: fxShow and fxHide are implemented as a SINGLE directive class
2626
+ * (FxShowHideDirective) so that mixed patterns like
2627
+ * <div fxHide fxShow.xs> ← hidden everywhere, shown on xs
2628
+ * <div fxShow fxHide.lt-lg> ← shown everywhere, hidden below lg
2629
+ * work correctly.
2630
+ *
2631
+ * Resolution algorithm (no mobile-first cascade — semantics for show/hide
2632
+ * are point-in-time, not cumulative):
2633
+ * 1. Non-canonical (lt-*, gt-*, *-up, *-down) isActive checks — most specific first
2634
+ * 2. Exact canonical match for current bp
2635
+ * 3. Default values (fxShow / fxHide without suffix)
2636
+ * 4. Fallback: visible (true)
2637
+ *
2638
+ * When both show and hide match at the same priority level, show wins.
2639
+ *
2640
+ * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down
2641
+ */
2642
+ function toBool(v) {
2643
+ if (v === undefined || v === null)
2644
+ return undefined;
2645
+ if (typeof v === 'boolean')
2646
+ return v;
2647
+ if (v === '')
2648
+ return true;
2649
+ if (v === 'false' || v === '0')
2650
+ return false;
2651
+ return true;
2652
+ }
2653
+ // ─── Unified fxShow + fxHide ─────────────────────────────────────────────────
2654
+ class FxShowHideDirective extends ResponsiveBaseDirective {
2655
+ constructor() {
2656
+ super();
2657
+ // ── fxShow inputs ─────────────────────────────────────────────────────────
2658
+ this.fxShow = input(undefined, { ...(ngDevMode ? { debugName: "fxShow" } : /* istanbul ignore next */ {}), alias: 'fxShow', transform: toBool });
2659
+ this.showXs = input(undefined, { ...(ngDevMode ? { debugName: "showXs" } : /* istanbul ignore next */ {}), alias: 'fxShow.xs', transform: toBool });
2660
+ this.showSm = input(undefined, { ...(ngDevMode ? { debugName: "showSm" } : /* istanbul ignore next */ {}), alias: 'fxShow.sm', transform: toBool });
2661
+ this.showMd = input(undefined, { ...(ngDevMode ? { debugName: "showMd" } : /* istanbul ignore next */ {}), alias: 'fxShow.md', transform: toBool });
2662
+ this.showLg = input(undefined, { ...(ngDevMode ? { debugName: "showLg" } : /* istanbul ignore next */ {}), alias: 'fxShow.lg', transform: toBool });
2663
+ this.showXl = input(undefined, { ...(ngDevMode ? { debugName: "showXl" } : /* istanbul ignore next */ {}), alias: 'fxShow.xl', transform: toBool });
2664
+ this.showXxl = input(undefined, { ...(ngDevMode ? { debugName: "showXxl" } : /* istanbul ignore next */ {}), alias: 'fxShow.xxl', transform: toBool });
2665
+ this.showLtSm = input(undefined, { ...(ngDevMode ? { debugName: "showLtSm" } : /* istanbul ignore next */ {}), alias: 'fxShow.lt-sm', transform: toBool });
2666
+ this.showLtMd = input(undefined, { ...(ngDevMode ? { debugName: "showLtMd" } : /* istanbul ignore next */ {}), alias: 'fxShow.lt-md', transform: toBool });
2667
+ this.showLtLg = input(undefined, { ...(ngDevMode ? { debugName: "showLtLg" } : /* istanbul ignore next */ {}), alias: 'fxShow.lt-lg', transform: toBool });
2668
+ this.showLtXl = input(undefined, { ...(ngDevMode ? { debugName: "showLtXl" } : /* istanbul ignore next */ {}), alias: 'fxShow.lt-xl', transform: toBool });
2669
+ this.showLtXxl = input(undefined, { ...(ngDevMode ? { debugName: "showLtXxl" } : /* istanbul ignore next */ {}), alias: 'fxShow.lt-xxl', transform: toBool });
2670
+ this.showGtXs = input(undefined, { ...(ngDevMode ? { debugName: "showGtXs" } : /* istanbul ignore next */ {}), alias: 'fxShow.gt-xs', transform: toBool });
2671
+ this.showGtSm = input(undefined, { ...(ngDevMode ? { debugName: "showGtSm" } : /* istanbul ignore next */ {}), alias: 'fxShow.gt-sm', transform: toBool });
2672
+ this.showGtMd = input(undefined, { ...(ngDevMode ? { debugName: "showGtMd" } : /* istanbul ignore next */ {}), alias: 'fxShow.gt-md', transform: toBool });
2673
+ this.showGtLg = input(undefined, { ...(ngDevMode ? { debugName: "showGtLg" } : /* istanbul ignore next */ {}), alias: 'fxShow.gt-lg', transform: toBool });
2674
+ this.showGtXl = input(undefined, { ...(ngDevMode ? { debugName: "showGtXl" } : /* istanbul ignore next */ {}), alias: 'fxShow.gt-xl', transform: toBool });
2675
+ this.showSmUp = input(undefined, { ...(ngDevMode ? { debugName: "showSmUp" } : /* istanbul ignore next */ {}), alias: 'fxShow.sm-up', transform: toBool });
2676
+ this.showMdUp = input(undefined, { ...(ngDevMode ? { debugName: "showMdUp" } : /* istanbul ignore next */ {}), alias: 'fxShow.md-up', transform: toBool });
2677
+ this.showLgUp = input(undefined, { ...(ngDevMode ? { debugName: "showLgUp" } : /* istanbul ignore next */ {}), alias: 'fxShow.lg-up', transform: toBool });
2678
+ this.showXlUp = input(undefined, { ...(ngDevMode ? { debugName: "showXlUp" } : /* istanbul ignore next */ {}), alias: 'fxShow.xl-up', transform: toBool });
2679
+ this.showXxlUp = input(undefined, { ...(ngDevMode ? { debugName: "showXxlUp" } : /* istanbul ignore next */ {}), alias: 'fxShow.xxl-up', transform: toBool });
2680
+ this.showSmDown = input(undefined, { ...(ngDevMode ? { debugName: "showSmDown" } : /* istanbul ignore next */ {}), alias: 'fxShow.sm-down', transform: toBool });
2681
+ this.showMdDown = input(undefined, { ...(ngDevMode ? { debugName: "showMdDown" } : /* istanbul ignore next */ {}), alias: 'fxShow.md-down', transform: toBool });
2682
+ this.showLgDown = input(undefined, { ...(ngDevMode ? { debugName: "showLgDown" } : /* istanbul ignore next */ {}), alias: 'fxShow.lg-down', transform: toBool });
2683
+ this.showXlDown = input(undefined, { ...(ngDevMode ? { debugName: "showXlDown" } : /* istanbul ignore next */ {}), alias: 'fxShow.xl-down', transform: toBool });
2684
+ // ── fxHide inputs ─────────────────────────────────────────────────────────
2685
+ this.fxHide = input(undefined, { ...(ngDevMode ? { debugName: "fxHide" } : /* istanbul ignore next */ {}), alias: 'fxHide', transform: toBool });
2686
+ this.hideXs = input(undefined, { ...(ngDevMode ? { debugName: "hideXs" } : /* istanbul ignore next */ {}), alias: 'fxHide.xs', transform: toBool });
2687
+ this.hideSm = input(undefined, { ...(ngDevMode ? { debugName: "hideSm" } : /* istanbul ignore next */ {}), alias: 'fxHide.sm', transform: toBool });
2688
+ this.hideMd = input(undefined, { ...(ngDevMode ? { debugName: "hideMd" } : /* istanbul ignore next */ {}), alias: 'fxHide.md', transform: toBool });
2689
+ this.hideLg = input(undefined, { ...(ngDevMode ? { debugName: "hideLg" } : /* istanbul ignore next */ {}), alias: 'fxHide.lg', transform: toBool });
2690
+ this.hideXl = input(undefined, { ...(ngDevMode ? { debugName: "hideXl" } : /* istanbul ignore next */ {}), alias: 'fxHide.xl', transform: toBool });
2691
+ this.hideXxl = input(undefined, { ...(ngDevMode ? { debugName: "hideXxl" } : /* istanbul ignore next */ {}), alias: 'fxHide.xxl', transform: toBool });
2692
+ this.hideLtSm = input(undefined, { ...(ngDevMode ? { debugName: "hideLtSm" } : /* istanbul ignore next */ {}), alias: 'fxHide.lt-sm', transform: toBool });
2693
+ this.hideLtMd = input(undefined, { ...(ngDevMode ? { debugName: "hideLtMd" } : /* istanbul ignore next */ {}), alias: 'fxHide.lt-md', transform: toBool });
2694
+ this.hideLtLg = input(undefined, { ...(ngDevMode ? { debugName: "hideLtLg" } : /* istanbul ignore next */ {}), alias: 'fxHide.lt-lg', transform: toBool });
2695
+ this.hideLtXl = input(undefined, { ...(ngDevMode ? { debugName: "hideLtXl" } : /* istanbul ignore next */ {}), alias: 'fxHide.lt-xl', transform: toBool });
2696
+ this.hideLtXxl = input(undefined, { ...(ngDevMode ? { debugName: "hideLtXxl" } : /* istanbul ignore next */ {}), alias: 'fxHide.lt-xxl', transform: toBool });
2697
+ this.hideGtXs = input(undefined, { ...(ngDevMode ? { debugName: "hideGtXs" } : /* istanbul ignore next */ {}), alias: 'fxHide.gt-xs', transform: toBool });
2698
+ this.hideGtSm = input(undefined, { ...(ngDevMode ? { debugName: "hideGtSm" } : /* istanbul ignore next */ {}), alias: 'fxHide.gt-sm', transform: toBool });
2699
+ this.hideGtMd = input(undefined, { ...(ngDevMode ? { debugName: "hideGtMd" } : /* istanbul ignore next */ {}), alias: 'fxHide.gt-md', transform: toBool });
2700
+ this.hideGtLg = input(undefined, { ...(ngDevMode ? { debugName: "hideGtLg" } : /* istanbul ignore next */ {}), alias: 'fxHide.gt-lg', transform: toBool });
2701
+ this.hideGtXl = input(undefined, { ...(ngDevMode ? { debugName: "hideGtXl" } : /* istanbul ignore next */ {}), alias: 'fxHide.gt-xl', transform: toBool });
2702
+ this.hideSmUp = input(undefined, { ...(ngDevMode ? { debugName: "hideSmUp" } : /* istanbul ignore next */ {}), alias: 'fxHide.sm-up', transform: toBool });
2703
+ this.hideMdUp = input(undefined, { ...(ngDevMode ? { debugName: "hideMdUp" } : /* istanbul ignore next */ {}), alias: 'fxHide.md-up', transform: toBool });
2704
+ this.hideLgUp = input(undefined, { ...(ngDevMode ? { debugName: "hideLgUp" } : /* istanbul ignore next */ {}), alias: 'fxHide.lg-up', transform: toBool });
2705
+ this.hideXlUp = input(undefined, { ...(ngDevMode ? { debugName: "hideXlUp" } : /* istanbul ignore next */ {}), alias: 'fxHide.xl-up', transform: toBool });
2706
+ this.hideXxlUp = input(undefined, { ...(ngDevMode ? { debugName: "hideXxlUp" } : /* istanbul ignore next */ {}), alias: 'fxHide.xxl-up', transform: toBool });
2707
+ this.hideSmDown = input(undefined, { ...(ngDevMode ? { debugName: "hideSmDown" } : /* istanbul ignore next */ {}), alias: 'fxHide.sm-down', transform: toBool });
2708
+ this.hideMdDown = input(undefined, { ...(ngDevMode ? { debugName: "hideMdDown" } : /* istanbul ignore next */ {}), alias: 'fxHide.md-down', transform: toBool });
2709
+ this.hideLgDown = input(undefined, { ...(ngDevMode ? { debugName: "hideLgDown" } : /* istanbul ignore next */ {}), alias: 'fxHide.lg-down', transform: toBool });
2710
+ this.hideXlDown = input(undefined, { ...(ngDevMode ? { debugName: "hideXlDown" } : /* istanbul ignore next */ {}), alias: 'fxHide.xl-down', transform: toBool });
2711
+ this._visible = computed(() => {
2712
+ const bp = this.media.currentBp();
2713
+ const isActive = (a) => this.media.isActive(a);
2714
+ // Non-canonical maps (alias → show value / hide value)
2715
+ const showNc = {
2716
+ 'lt-sm': this.showLtSm(), 'lt-md': this.showLtMd(), 'lt-lg': this.showLtLg(),
2717
+ 'lt-xl': this.showLtXl(), 'lt-xxl': this.showLtXxl(),
2718
+ 'gt-xs': this.showGtXs(), 'gt-sm': this.showGtSm(), 'gt-md': this.showGtMd(),
2719
+ 'gt-lg': this.showGtLg(), 'gt-xl': this.showGtXl(),
2720
+ 'sm-up': this.showSmUp(), 'md-up': this.showMdUp(), 'lg-up': this.showLgUp(),
2721
+ 'xl-up': this.showXlUp(), 'xxl-up': this.showXxlUp(),
2722
+ 'sm-down': this.showSmDown(), 'md-down': this.showMdDown(),
2723
+ 'lg-down': this.showLgDown(), 'xl-down': this.showXlDown(),
2724
+ };
2725
+ const hideNc = {
2726
+ 'lt-sm': this.hideLtSm(), 'lt-md': this.hideLtMd(), 'lt-lg': this.hideLtLg(),
2727
+ 'lt-xl': this.hideLtXl(), 'lt-xxl': this.hideLtXxl(),
2728
+ 'gt-xs': this.hideGtXs(), 'gt-sm': this.hideGtSm(), 'gt-md': this.hideGtMd(),
2729
+ 'gt-lg': this.hideGtLg(), 'gt-xl': this.hideGtXl(),
2730
+ 'sm-up': this.hideSmUp(), 'md-up': this.hideMdUp(), 'lg-up': this.hideLgUp(),
2731
+ 'xl-up': this.hideXlUp(), 'xxl-up': this.hideXxlUp(),
2732
+ 'sm-down': this.hideSmDown(), 'md-down': this.hideMdDown(),
2733
+ 'lg-down': this.hideLgDown(), 'xl-down': this.hideXlDown(),
2734
+ };
2735
+ // 1. Non-canonical (lt-*, gt-*, *-up, *-down) — most specific first
2736
+ for (const alias of NON_CANONICAL_PRIORITY) {
2737
+ const sv = showNc[alias];
2738
+ const hv = hideNc[alias];
2739
+ if ((sv !== undefined || hv !== undefined) && isActive(alias)) {
2740
+ if (sv !== undefined)
2741
+ return sv; // show beats hide at same priority
2742
+ return !hv;
2743
+ }
2744
+ }
2745
+ // Canonical maps (bp → value) — exact only, NO cascade
2746
+ const showV = {
2747
+ xs: this.showXs(), sm: this.showSm(), md: this.showMd(),
2748
+ lg: this.showLg(), xl: this.showXl(), xxl: this.showXxl(),
2749
+ };
2750
+ const hideV = {
2751
+ xs: this.hideXs(), sm: this.hideSm(), md: this.hideMd(),
2752
+ lg: this.hideLg(), xl: this.hideXl(), xxl: this.hideXxl(),
2753
+ };
2754
+ // 2. Exact canonical match for current bp
2755
+ const showExact = showV[bp];
2756
+ const hideExact = hideV[bp];
2757
+ if (showExact !== undefined)
2758
+ return showExact;
2759
+ if (hideExact !== undefined)
2760
+ return !hideExact;
2761
+ // 3. Default values (fxShow / fxHide without suffix)
2762
+ const showDef = this.fxShow();
2763
+ const hideDef = this.fxHide();
2764
+ if (showDef !== undefined)
2765
+ return showDef;
2766
+ if (hideDef !== undefined)
2767
+ return !hideDef;
2768
+ // 4. Neither directive active → visible
2769
+ return true;
2770
+ }, /* @ts-ignore */
2771
+ ...(ngDevMode ? [{ debugName: "_visible" }] : /* istanbul ignore next */ []));
2772
+ effect(() => {
2773
+ this._visible()
2774
+ ? this.r2.removeStyle(this.el.nativeElement, 'display')
2775
+ : this.r2.setStyle(this.el.nativeElement, 'display', 'none');
2776
+ });
2777
+ }
2778
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxShowHideDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2779
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: FxShowHideDirective, isStandalone: true, selector: "\n [fxShow],[fxHide],\n [fxShow.xs],[fxShow.sm],[fxShow.md],[fxShow.lg],[fxShow.xl],[fxShow.xxl],\n [fxShow.lt-sm],[fxShow.lt-md],[fxShow.lt-lg],[fxShow.lt-xl],[fxShow.lt-xxl],\n [fxShow.gt-xs],[fxShow.gt-sm],[fxShow.gt-md],[fxShow.gt-lg],[fxShow.gt-xl],\n [fxShow.sm-up],[fxShow.md-up],[fxShow.lg-up],[fxShow.xl-up],[fxShow.xxl-up],\n [fxShow.sm-down],[fxShow.md-down],[fxShow.lg-down],[fxShow.xl-down],\n [fxHide.xs],[fxHide.sm],[fxHide.md],[fxHide.lg],[fxHide.xl],[fxHide.xxl],\n [fxHide.lt-sm],[fxHide.lt-md],[fxHide.lt-lg],[fxHide.lt-xl],[fxHide.lt-xxl],\n [fxHide.gt-xs],[fxHide.gt-sm],[fxHide.gt-md],[fxHide.gt-lg],[fxHide.gt-xl],\n [fxHide.sm-up],[fxHide.md-up],[fxHide.lg-up],[fxHide.xl-up],[fxHide.xxl-up],\n [fxHide.sm-down],[fxHide.md-down],[fxHide.lg-down],[fxHide.xl-down]\n ", inputs: { fxShow: { classPropertyName: "fxShow", publicName: "fxShow", isSignal: true, isRequired: false, transformFunction: null }, showXs: { classPropertyName: "showXs", publicName: "fxShow.xs", isSignal: true, isRequired: false, transformFunction: null }, showSm: { classPropertyName: "showSm", publicName: "fxShow.sm", isSignal: true, isRequired: false, transformFunction: null }, showMd: { classPropertyName: "showMd", publicName: "fxShow.md", isSignal: true, isRequired: false, transformFunction: null }, showLg: { classPropertyName: "showLg", publicName: "fxShow.lg", isSignal: true, isRequired: false, transformFunction: null }, showXl: { classPropertyName: "showXl", publicName: "fxShow.xl", isSignal: true, isRequired: false, transformFunction: null }, showXxl: { classPropertyName: "showXxl", publicName: "fxShow.xxl", isSignal: true, isRequired: false, transformFunction: null }, showLtSm: { classPropertyName: "showLtSm", publicName: "fxShow.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, showLtMd: { classPropertyName: "showLtMd", publicName: "fxShow.lt-md", isSignal: true, isRequired: false, transformFunction: null }, showLtLg: { classPropertyName: "showLtLg", publicName: "fxShow.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, showLtXl: { classPropertyName: "showLtXl", publicName: "fxShow.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, showLtXxl: { classPropertyName: "showLtXxl", publicName: "fxShow.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, showGtXs: { classPropertyName: "showGtXs", publicName: "fxShow.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, showGtSm: { classPropertyName: "showGtSm", publicName: "fxShow.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, showGtMd: { classPropertyName: "showGtMd", publicName: "fxShow.gt-md", isSignal: true, isRequired: false, transformFunction: null }, showGtLg: { classPropertyName: "showGtLg", publicName: "fxShow.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, showGtXl: { classPropertyName: "showGtXl", publicName: "fxShow.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, showSmUp: { classPropertyName: "showSmUp", publicName: "fxShow.sm-up", isSignal: true, isRequired: false, transformFunction: null }, showMdUp: { classPropertyName: "showMdUp", publicName: "fxShow.md-up", isSignal: true, isRequired: false, transformFunction: null }, showLgUp: { classPropertyName: "showLgUp", publicName: "fxShow.lg-up", isSignal: true, isRequired: false, transformFunction: null }, showXlUp: { classPropertyName: "showXlUp", publicName: "fxShow.xl-up", isSignal: true, isRequired: false, transformFunction: null }, showXxlUp: { classPropertyName: "showXxlUp", publicName: "fxShow.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, showSmDown: { classPropertyName: "showSmDown", publicName: "fxShow.sm-down", isSignal: true, isRequired: false, transformFunction: null }, showMdDown: { classPropertyName: "showMdDown", publicName: "fxShow.md-down", isSignal: true, isRequired: false, transformFunction: null }, showLgDown: { classPropertyName: "showLgDown", publicName: "fxShow.lg-down", isSignal: true, isRequired: false, transformFunction: null }, showXlDown: { classPropertyName: "showXlDown", publicName: "fxShow.xl-down", isSignal: true, isRequired: false, transformFunction: null }, fxHide: { classPropertyName: "fxHide", publicName: "fxHide", isSignal: true, isRequired: false, transformFunction: null }, hideXs: { classPropertyName: "hideXs", publicName: "fxHide.xs", isSignal: true, isRequired: false, transformFunction: null }, hideSm: { classPropertyName: "hideSm", publicName: "fxHide.sm", isSignal: true, isRequired: false, transformFunction: null }, hideMd: { classPropertyName: "hideMd", publicName: "fxHide.md", isSignal: true, isRequired: false, transformFunction: null }, hideLg: { classPropertyName: "hideLg", publicName: "fxHide.lg", isSignal: true, isRequired: false, transformFunction: null }, hideXl: { classPropertyName: "hideXl", publicName: "fxHide.xl", isSignal: true, isRequired: false, transformFunction: null }, hideXxl: { classPropertyName: "hideXxl", publicName: "fxHide.xxl", isSignal: true, isRequired: false, transformFunction: null }, hideLtSm: { classPropertyName: "hideLtSm", publicName: "fxHide.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, hideLtMd: { classPropertyName: "hideLtMd", publicName: "fxHide.lt-md", isSignal: true, isRequired: false, transformFunction: null }, hideLtLg: { classPropertyName: "hideLtLg", publicName: "fxHide.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, hideLtXl: { classPropertyName: "hideLtXl", publicName: "fxHide.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, hideLtXxl: { classPropertyName: "hideLtXxl", publicName: "fxHide.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, hideGtXs: { classPropertyName: "hideGtXs", publicName: "fxHide.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, hideGtSm: { classPropertyName: "hideGtSm", publicName: "fxHide.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, hideGtMd: { classPropertyName: "hideGtMd", publicName: "fxHide.gt-md", isSignal: true, isRequired: false, transformFunction: null }, hideGtLg: { classPropertyName: "hideGtLg", publicName: "fxHide.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, hideGtXl: { classPropertyName: "hideGtXl", publicName: "fxHide.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, hideSmUp: { classPropertyName: "hideSmUp", publicName: "fxHide.sm-up", isSignal: true, isRequired: false, transformFunction: null }, hideMdUp: { classPropertyName: "hideMdUp", publicName: "fxHide.md-up", isSignal: true, isRequired: false, transformFunction: null }, hideLgUp: { classPropertyName: "hideLgUp", publicName: "fxHide.lg-up", isSignal: true, isRequired: false, transformFunction: null }, hideXlUp: { classPropertyName: "hideXlUp", publicName: "fxHide.xl-up", isSignal: true, isRequired: false, transformFunction: null }, hideXxlUp: { classPropertyName: "hideXxlUp", publicName: "fxHide.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, hideSmDown: { classPropertyName: "hideSmDown", publicName: "fxHide.sm-down", isSignal: true, isRequired: false, transformFunction: null }, hideMdDown: { classPropertyName: "hideMdDown", publicName: "fxHide.md-down", isSignal: true, isRequired: false, transformFunction: null }, hideLgDown: { classPropertyName: "hideLgDown", publicName: "fxHide.lg-down", isSignal: true, isRequired: false, transformFunction: null }, hideXlDown: { classPropertyName: "hideXlDown", publicName: "fxHide.xl-down", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
2780
+ }
2781
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxShowHideDirective, decorators: [{
2782
+ type: Directive,
2783
+ args: [{
2784
+ selector: `
2785
+ [fxShow],[fxHide],
2786
+ [fxShow.xs],[fxShow.sm],[fxShow.md],[fxShow.lg],[fxShow.xl],[fxShow.xxl],
2787
+ [fxShow.lt-sm],[fxShow.lt-md],[fxShow.lt-lg],[fxShow.lt-xl],[fxShow.lt-xxl],
2788
+ [fxShow.gt-xs],[fxShow.gt-sm],[fxShow.gt-md],[fxShow.gt-lg],[fxShow.gt-xl],
2789
+ [fxShow.sm-up],[fxShow.md-up],[fxShow.lg-up],[fxShow.xl-up],[fxShow.xxl-up],
2790
+ [fxShow.sm-down],[fxShow.md-down],[fxShow.lg-down],[fxShow.xl-down],
2791
+ [fxHide.xs],[fxHide.sm],[fxHide.md],[fxHide.lg],[fxHide.xl],[fxHide.xxl],
2792
+ [fxHide.lt-sm],[fxHide.lt-md],[fxHide.lt-lg],[fxHide.lt-xl],[fxHide.lt-xxl],
2793
+ [fxHide.gt-xs],[fxHide.gt-sm],[fxHide.gt-md],[fxHide.gt-lg],[fxHide.gt-xl],
2794
+ [fxHide.sm-up],[fxHide.md-up],[fxHide.lg-up],[fxHide.xl-up],[fxHide.xxl-up],
2795
+ [fxHide.sm-down],[fxHide.md-down],[fxHide.lg-down],[fxHide.xl-down]
2796
+ `,
2797
+ standalone: true,
2798
+ }]
2799
+ }], ctorParameters: () => [], propDecorators: { fxShow: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow", required: false }] }], showXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.xs", required: false }] }], showSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.sm", required: false }] }], showMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.md", required: false }] }], showLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.lg", required: false }] }], showXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.xl", required: false }] }], showXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.xxl", required: false }] }], showLtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.lt-sm", required: false }] }], showLtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.lt-md", required: false }] }], showLtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.lt-lg", required: false }] }], showLtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.lt-xl", required: false }] }], showLtXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.lt-xxl", required: false }] }], showGtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.gt-xs", required: false }] }], showGtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.gt-sm", required: false }] }], showGtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.gt-md", required: false }] }], showGtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.gt-lg", required: false }] }], showGtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.gt-xl", required: false }] }], showSmUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.sm-up", required: false }] }], showMdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.md-up", required: false }] }], showLgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.lg-up", required: false }] }], showXlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.xl-up", required: false }] }], showXxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.xxl-up", required: false }] }], showSmDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.sm-down", required: false }] }], showMdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.md-down", required: false }] }], showLgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.lg-down", required: false }] }], showXlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxShow.xl-down", required: false }] }], fxHide: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide", required: false }] }], hideXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.xs", required: false }] }], hideSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.sm", required: false }] }], hideMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.md", required: false }] }], hideLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.lg", required: false }] }], hideXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.xl", required: false }] }], hideXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.xxl", required: false }] }], hideLtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.lt-sm", required: false }] }], hideLtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.lt-md", required: false }] }], hideLtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.lt-lg", required: false }] }], hideLtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.lt-xl", required: false }] }], hideLtXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.lt-xxl", required: false }] }], hideGtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.gt-xs", required: false }] }], hideGtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.gt-sm", required: false }] }], hideGtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.gt-md", required: false }] }], hideGtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.gt-lg", required: false }] }], hideGtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.gt-xl", required: false }] }], hideSmUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.sm-up", required: false }] }], hideMdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.md-up", required: false }] }], hideLgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.lg-up", required: false }] }], hideXlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.xl-up", required: false }] }], hideXxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.xxl-up", required: false }] }], hideSmDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.sm-down", required: false }] }], hideMdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.md-down", required: false }] }], hideLgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.lg-down", required: false }] }], hideXlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxHide.xl-down", required: false }] }] } });
2800
+
2801
+ /**
2802
+ * @file fx-style-class.directives.ts (Angular 21 — signals)
2803
+ *
2804
+ * [fxStyle] — responsive inline style binding (Record<string,string>)
2805
+ * [fxClass] — responsive CSS class binding (string | string[] | Record<string,boolean>)
2806
+ *
2807
+ * Angular 21 changes:
2808
+ * • All @Input setters replaced by input() signals
2809
+ * • computed() derives resolved StyleMap / ClassInput value
2810
+ * • effect() in constructor handles DOM writes with diff
2811
+ *
2812
+ * Style/class leak prevention:
2813
+ * _appliedProps / _appliedClasses are regular Set<string> fields
2814
+ * (NOT signals) — they track what was actively applied so the
2815
+ * effect can remove stale properties/classes on the next run.
2816
+ *
2817
+ * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down
2818
+ */
2819
+ class FxStyleDirective extends ResponsiveBaseDirective {
2820
+ constructor() {
2821
+ super();
2822
+ this.fxStyle = input(undefined, { ...(ngDevMode ? { debugName: "fxStyle" } : /* istanbul ignore next */ {}), alias: 'fxStyle' });
2823
+ this.xs = input(undefined, { ...(ngDevMode ? { debugName: "xs" } : /* istanbul ignore next */ {}), alias: 'fxStyle.xs' });
2824
+ this.sm = input(undefined, { ...(ngDevMode ? { debugName: "sm" } : /* istanbul ignore next */ {}), alias: 'fxStyle.sm' });
2825
+ this.md = input(undefined, { ...(ngDevMode ? { debugName: "md" } : /* istanbul ignore next */ {}), alias: 'fxStyle.md' });
2826
+ this.lg = input(undefined, { ...(ngDevMode ? { debugName: "lg" } : /* istanbul ignore next */ {}), alias: 'fxStyle.lg' });
2827
+ this.xl = input(undefined, { ...(ngDevMode ? { debugName: "xl" } : /* istanbul ignore next */ {}), alias: 'fxStyle.xl' });
2828
+ this.xxl = input(undefined, { ...(ngDevMode ? { debugName: "xxl" } : /* istanbul ignore next */ {}), alias: 'fxStyle.xxl' });
2829
+ this.ltSm = input(undefined, { ...(ngDevMode ? { debugName: "ltSm" } : /* istanbul ignore next */ {}), alias: 'fxStyle.lt-sm' });
2830
+ this.ltMd = input(undefined, { ...(ngDevMode ? { debugName: "ltMd" } : /* istanbul ignore next */ {}), alias: 'fxStyle.lt-md' });
2831
+ this.ltLg = input(undefined, { ...(ngDevMode ? { debugName: "ltLg" } : /* istanbul ignore next */ {}), alias: 'fxStyle.lt-lg' });
2832
+ this.ltXl = input(undefined, { ...(ngDevMode ? { debugName: "ltXl" } : /* istanbul ignore next */ {}), alias: 'fxStyle.lt-xl' });
2833
+ this.ltXxl = input(undefined, { ...(ngDevMode ? { debugName: "ltXxl" } : /* istanbul ignore next */ {}), alias: 'fxStyle.lt-xxl' });
2834
+ this.gtXs = input(undefined, { ...(ngDevMode ? { debugName: "gtXs" } : /* istanbul ignore next */ {}), alias: 'fxStyle.gt-xs' });
2835
+ this.gtSm = input(undefined, { ...(ngDevMode ? { debugName: "gtSm" } : /* istanbul ignore next */ {}), alias: 'fxStyle.gt-sm' });
2836
+ this.gtMd = input(undefined, { ...(ngDevMode ? { debugName: "gtMd" } : /* istanbul ignore next */ {}), alias: 'fxStyle.gt-md' });
2837
+ this.gtLg = input(undefined, { ...(ngDevMode ? { debugName: "gtLg" } : /* istanbul ignore next */ {}), alias: 'fxStyle.gt-lg' });
2838
+ this.gtXl = input(undefined, { ...(ngDevMode ? { debugName: "gtXl" } : /* istanbul ignore next */ {}), alias: 'fxStyle.gt-xl' });
2839
+ this.smUp = input(undefined, { ...(ngDevMode ? { debugName: "smUp" } : /* istanbul ignore next */ {}), alias: 'fxStyle.sm-up' });
2840
+ this.mdUp = input(undefined, { ...(ngDevMode ? { debugName: "mdUp" } : /* istanbul ignore next */ {}), alias: 'fxStyle.md-up' });
2841
+ this.lgUp = input(undefined, { ...(ngDevMode ? { debugName: "lgUp" } : /* istanbul ignore next */ {}), alias: 'fxStyle.lg-up' });
2842
+ this.xlUp = input(undefined, { ...(ngDevMode ? { debugName: "xlUp" } : /* istanbul ignore next */ {}), alias: 'fxStyle.xl-up' });
2843
+ this.xxlUp = input(undefined, { ...(ngDevMode ? { debugName: "xxlUp" } : /* istanbul ignore next */ {}), alias: 'fxStyle.xxl-up' });
2844
+ this.smDown = input(undefined, { ...(ngDevMode ? { debugName: "smDown" } : /* istanbul ignore next */ {}), alias: 'fxStyle.sm-down' });
2845
+ this.mdDown = input(undefined, { ...(ngDevMode ? { debugName: "mdDown" } : /* istanbul ignore next */ {}), alias: 'fxStyle.md-down' });
2846
+ this.lgDown = input(undefined, { ...(ngDevMode ? { debugName: "lgDown" } : /* istanbul ignore next */ {}), alias: 'fxStyle.lg-down' });
2847
+ this.xlDown = input(undefined, { ...(ngDevMode ? { debugName: "xlDown" } : /* istanbul ignore next */ {}), alias: 'fxStyle.xl-down' });
2848
+ this._resolved = computed(() => (resolveAll({ default: this.fxStyle(), xs: this.xs(), sm: this.sm(),
2849
+ md: this.md(), lg: this.lg(), xl: this.xl(), xxl: this.xxl() }, { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),
2850
+ 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),
2851
+ 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),
2852
+ 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),
2853
+ 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),
2854
+ 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),
2855
+ 'sm-down': this.smDown(), 'md-down': this.mdDown(),
2856
+ 'lg-down': this.lgDown(), 'xl-down': this.xlDown() }, this.media.currentBp(), a => this.media.isActive(a)) ?? {}), /* @ts-ignore */
2857
+ ...(ngDevMode ? [{ debugName: "_resolved" }] : /* istanbul ignore next */ []));
2858
+ /** Tracks which CSS properties were last applied — plain field, not a signal. */
2859
+ this._appliedProps = new Set();
2860
+ effect(() => {
2861
+ if (!this.isBrowser)
2862
+ return;
2863
+ const next = this._resolved();
2864
+ const nextKeys = new Set(Object.keys(next));
2865
+ for (const prop of this._appliedProps) {
2866
+ if (!nextKeys.has(prop))
2867
+ this.r2.removeStyle(this.el.nativeElement, prop);
2868
+ }
2869
+ for (const [prop, value] of Object.entries(next)) {
2870
+ this.r2.setStyle(this.el.nativeElement, prop, value);
2871
+ }
2872
+ this._appliedProps = nextKeys;
2873
+ });
2874
+ }
2875
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxStyleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2876
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: FxStyleDirective, isStandalone: true, selector: "\n [fxStyle],\n [fxStyle.xs],[fxStyle.sm],[fxStyle.md],[fxStyle.lg],[fxStyle.xl],[fxStyle.xxl],\n [fxStyle.lt-sm],[fxStyle.lt-md],[fxStyle.lt-lg],[fxStyle.lt-xl],[fxStyle.lt-xxl],\n [fxStyle.gt-xs],[fxStyle.gt-sm],[fxStyle.gt-md],[fxStyle.gt-lg],[fxStyle.gt-xl],\n [fxStyle.sm-up],[fxStyle.md-up],[fxStyle.lg-up],[fxStyle.xl-up],[fxStyle.xxl-up],\n [fxStyle.sm-down],[fxStyle.md-down],[fxStyle.lg-down],[fxStyle.xl-down]\n ", inputs: { fxStyle: { classPropertyName: "fxStyle", publicName: "fxStyle", isSignal: true, isRequired: false, transformFunction: null }, xs: { classPropertyName: "xs", publicName: "fxStyle.xs", isSignal: true, isRequired: false, transformFunction: null }, sm: { classPropertyName: "sm", publicName: "fxStyle.sm", isSignal: true, isRequired: false, transformFunction: null }, md: { classPropertyName: "md", publicName: "fxStyle.md", isSignal: true, isRequired: false, transformFunction: null }, lg: { classPropertyName: "lg", publicName: "fxStyle.lg", isSignal: true, isRequired: false, transformFunction: null }, xl: { classPropertyName: "xl", publicName: "fxStyle.xl", isSignal: true, isRequired: false, transformFunction: null }, xxl: { classPropertyName: "xxl", publicName: "fxStyle.xxl", isSignal: true, isRequired: false, transformFunction: null }, ltSm: { classPropertyName: "ltSm", publicName: "fxStyle.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, ltMd: { classPropertyName: "ltMd", publicName: "fxStyle.lt-md", isSignal: true, isRequired: false, transformFunction: null }, ltLg: { classPropertyName: "ltLg", publicName: "fxStyle.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, ltXl: { classPropertyName: "ltXl", publicName: "fxStyle.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, ltXxl: { classPropertyName: "ltXxl", publicName: "fxStyle.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, gtXs: { classPropertyName: "gtXs", publicName: "fxStyle.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, gtSm: { classPropertyName: "gtSm", publicName: "fxStyle.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, gtMd: { classPropertyName: "gtMd", publicName: "fxStyle.gt-md", isSignal: true, isRequired: false, transformFunction: null }, gtLg: { classPropertyName: "gtLg", publicName: "fxStyle.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, gtXl: { classPropertyName: "gtXl", publicName: "fxStyle.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, smUp: { classPropertyName: "smUp", publicName: "fxStyle.sm-up", isSignal: true, isRequired: false, transformFunction: null }, mdUp: { classPropertyName: "mdUp", publicName: "fxStyle.md-up", isSignal: true, isRequired: false, transformFunction: null }, lgUp: { classPropertyName: "lgUp", publicName: "fxStyle.lg-up", isSignal: true, isRequired: false, transformFunction: null }, xlUp: { classPropertyName: "xlUp", publicName: "fxStyle.xl-up", isSignal: true, isRequired: false, transformFunction: null }, xxlUp: { classPropertyName: "xxlUp", publicName: "fxStyle.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, smDown: { classPropertyName: "smDown", publicName: "fxStyle.sm-down", isSignal: true, isRequired: false, transformFunction: null }, mdDown: { classPropertyName: "mdDown", publicName: "fxStyle.md-down", isSignal: true, isRequired: false, transformFunction: null }, lgDown: { classPropertyName: "lgDown", publicName: "fxStyle.lg-down", isSignal: true, isRequired: false, transformFunction: null }, xlDown: { classPropertyName: "xlDown", publicName: "fxStyle.xl-down", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
2877
+ }
2878
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxStyleDirective, decorators: [{
2879
+ type: Directive,
2880
+ args: [{
2881
+ selector: `
2882
+ [fxStyle],
2883
+ [fxStyle.xs],[fxStyle.sm],[fxStyle.md],[fxStyle.lg],[fxStyle.xl],[fxStyle.xxl],
2884
+ [fxStyle.lt-sm],[fxStyle.lt-md],[fxStyle.lt-lg],[fxStyle.lt-xl],[fxStyle.lt-xxl],
2885
+ [fxStyle.gt-xs],[fxStyle.gt-sm],[fxStyle.gt-md],[fxStyle.gt-lg],[fxStyle.gt-xl],
2886
+ [fxStyle.sm-up],[fxStyle.md-up],[fxStyle.lg-up],[fxStyle.xl-up],[fxStyle.xxl-up],
2887
+ [fxStyle.sm-down],[fxStyle.md-down],[fxStyle.lg-down],[fxStyle.xl-down]
2888
+ `,
2889
+ standalone: true,
2890
+ }]
2891
+ }], ctorParameters: () => [], propDecorators: { fxStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle", required: false }] }], xs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.xs", required: false }] }], sm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.sm", required: false }] }], md: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.md", required: false }] }], lg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.lg", required: false }] }], xl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.xl", required: false }] }], xxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.xxl", required: false }] }], ltSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.lt-sm", required: false }] }], ltMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.lt-md", required: false }] }], ltLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.lt-lg", required: false }] }], ltXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.lt-xl", required: false }] }], ltXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.lt-xxl", required: false }] }], gtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.gt-xs", required: false }] }], gtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.gt-sm", required: false }] }], gtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.gt-md", required: false }] }], gtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.gt-lg", required: false }] }], gtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.gt-xl", required: false }] }], smUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.sm-up", required: false }] }], mdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.md-up", required: false }] }], lgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.lg-up", required: false }] }], xlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.xl-up", required: false }] }], xxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.xxl-up", required: false }] }], smDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.sm-down", required: false }] }], mdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.md-down", required: false }] }], lgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.lg-down", required: false }] }], xlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxStyle.xl-down", required: false }] }] } });
2892
+ function toClassSet(v) {
2893
+ if (!v)
2894
+ return new Set();
2895
+ if (typeof v === 'string')
2896
+ return new Set(v.split(/\s+/).filter(Boolean));
2897
+ if (Array.isArray(v))
2898
+ return new Set(v.filter(Boolean));
2899
+ return new Set(Object.entries(v).filter(([, on]) => on).map(([cls]) => cls));
2900
+ }
2901
+ class FxClassDirective extends ResponsiveBaseDirective {
2902
+ constructor() {
2903
+ super();
2904
+ this.fxClass = input(undefined, { ...(ngDevMode ? { debugName: "fxClass" } : /* istanbul ignore next */ {}), alias: 'fxClass' });
2905
+ this.xs = input(undefined, { ...(ngDevMode ? { debugName: "xs" } : /* istanbul ignore next */ {}), alias: 'fxClass.xs' });
2906
+ this.sm = input(undefined, { ...(ngDevMode ? { debugName: "sm" } : /* istanbul ignore next */ {}), alias: 'fxClass.sm' });
2907
+ this.md = input(undefined, { ...(ngDevMode ? { debugName: "md" } : /* istanbul ignore next */ {}), alias: 'fxClass.md' });
2908
+ this.lg = input(undefined, { ...(ngDevMode ? { debugName: "lg" } : /* istanbul ignore next */ {}), alias: 'fxClass.lg' });
2909
+ this.xl = input(undefined, { ...(ngDevMode ? { debugName: "xl" } : /* istanbul ignore next */ {}), alias: 'fxClass.xl' });
2910
+ this.xxl = input(undefined, { ...(ngDevMode ? { debugName: "xxl" } : /* istanbul ignore next */ {}), alias: 'fxClass.xxl' });
2911
+ this.ltSm = input(undefined, { ...(ngDevMode ? { debugName: "ltSm" } : /* istanbul ignore next */ {}), alias: 'fxClass.lt-sm' });
2912
+ this.ltMd = input(undefined, { ...(ngDevMode ? { debugName: "ltMd" } : /* istanbul ignore next */ {}), alias: 'fxClass.lt-md' });
2913
+ this.ltLg = input(undefined, { ...(ngDevMode ? { debugName: "ltLg" } : /* istanbul ignore next */ {}), alias: 'fxClass.lt-lg' });
2914
+ this.ltXl = input(undefined, { ...(ngDevMode ? { debugName: "ltXl" } : /* istanbul ignore next */ {}), alias: 'fxClass.lt-xl' });
2915
+ this.ltXxl = input(undefined, { ...(ngDevMode ? { debugName: "ltXxl" } : /* istanbul ignore next */ {}), alias: 'fxClass.lt-xxl' });
2916
+ this.gtXs = input(undefined, { ...(ngDevMode ? { debugName: "gtXs" } : /* istanbul ignore next */ {}), alias: 'fxClass.gt-xs' });
2917
+ this.gtSm = input(undefined, { ...(ngDevMode ? { debugName: "gtSm" } : /* istanbul ignore next */ {}), alias: 'fxClass.gt-sm' });
2918
+ this.gtMd = input(undefined, { ...(ngDevMode ? { debugName: "gtMd" } : /* istanbul ignore next */ {}), alias: 'fxClass.gt-md' });
2919
+ this.gtLg = input(undefined, { ...(ngDevMode ? { debugName: "gtLg" } : /* istanbul ignore next */ {}), alias: 'fxClass.gt-lg' });
2920
+ this.gtXl = input(undefined, { ...(ngDevMode ? { debugName: "gtXl" } : /* istanbul ignore next */ {}), alias: 'fxClass.gt-xl' });
2921
+ this.smUp = input(undefined, { ...(ngDevMode ? { debugName: "smUp" } : /* istanbul ignore next */ {}), alias: 'fxClass.sm-up' });
2922
+ this.mdUp = input(undefined, { ...(ngDevMode ? { debugName: "mdUp" } : /* istanbul ignore next */ {}), alias: 'fxClass.md-up' });
2923
+ this.lgUp = input(undefined, { ...(ngDevMode ? { debugName: "lgUp" } : /* istanbul ignore next */ {}), alias: 'fxClass.lg-up' });
2924
+ this.xlUp = input(undefined, { ...(ngDevMode ? { debugName: "xlUp" } : /* istanbul ignore next */ {}), alias: 'fxClass.xl-up' });
2925
+ this.xxlUp = input(undefined, { ...(ngDevMode ? { debugName: "xxlUp" } : /* istanbul ignore next */ {}), alias: 'fxClass.xxl-up' });
2926
+ this.smDown = input(undefined, { ...(ngDevMode ? { debugName: "smDown" } : /* istanbul ignore next */ {}), alias: 'fxClass.sm-down' });
2927
+ this.mdDown = input(undefined, { ...(ngDevMode ? { debugName: "mdDown" } : /* istanbul ignore next */ {}), alias: 'fxClass.md-down' });
2928
+ this.lgDown = input(undefined, { ...(ngDevMode ? { debugName: "lgDown" } : /* istanbul ignore next */ {}), alias: 'fxClass.lg-down' });
2929
+ this.xlDown = input(undefined, { ...(ngDevMode ? { debugName: "xlDown" } : /* istanbul ignore next */ {}), alias: 'fxClass.xl-down' });
2930
+ this._resolved = computed(() => toClassSet(resolveAll({ default: this.fxClass(), xs: this.xs(), sm: this.sm(),
2931
+ md: this.md(), lg: this.lg(), xl: this.xl(), xxl: this.xxl() }, { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),
2932
+ 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),
2933
+ 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),
2934
+ 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),
2935
+ 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),
2936
+ 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),
2937
+ 'sm-down': this.smDown(), 'md-down': this.mdDown(),
2938
+ 'lg-down': this.lgDown(), 'xl-down': this.xlDown() }, this.media.currentBp(), a => this.media.isActive(a))), /* @ts-ignore */
2939
+ ...(ngDevMode ? [{ debugName: "_resolved" }] : /* istanbul ignore next */ []));
2940
+ /** Tracks which CSS classes were last applied — plain field, not a signal. */
2941
+ this._appliedClasses = new Set();
2942
+ effect(() => {
2943
+ if (!this.isBrowser)
2944
+ return;
2945
+ const next = this._resolved();
2946
+ for (const cls of this._appliedClasses) {
2947
+ if (!next.has(cls))
2948
+ this.r2.removeClass(this.el.nativeElement, cls);
2949
+ }
2950
+ for (const cls of next) {
2951
+ this.r2.addClass(this.el.nativeElement, cls);
2952
+ }
2953
+ this._appliedClasses = next;
2954
+ });
2955
+ }
2956
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxClassDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2957
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: FxClassDirective, isStandalone: true, selector: "\n [fxClass],\n [fxClass.xs],[fxClass.sm],[fxClass.md],[fxClass.lg],[fxClass.xl],[fxClass.xxl],\n [fxClass.lt-sm],[fxClass.lt-md],[fxClass.lt-lg],[fxClass.lt-xl],[fxClass.lt-xxl],\n [fxClass.gt-xs],[fxClass.gt-sm],[fxClass.gt-md],[fxClass.gt-lg],[fxClass.gt-xl],\n [fxClass.sm-up],[fxClass.md-up],[fxClass.lg-up],[fxClass.xl-up],[fxClass.xxl-up],\n [fxClass.sm-down],[fxClass.md-down],[fxClass.lg-down],[fxClass.xl-down]\n ", inputs: { fxClass: { classPropertyName: "fxClass", publicName: "fxClass", isSignal: true, isRequired: false, transformFunction: null }, xs: { classPropertyName: "xs", publicName: "fxClass.xs", isSignal: true, isRequired: false, transformFunction: null }, sm: { classPropertyName: "sm", publicName: "fxClass.sm", isSignal: true, isRequired: false, transformFunction: null }, md: { classPropertyName: "md", publicName: "fxClass.md", isSignal: true, isRequired: false, transformFunction: null }, lg: { classPropertyName: "lg", publicName: "fxClass.lg", isSignal: true, isRequired: false, transformFunction: null }, xl: { classPropertyName: "xl", publicName: "fxClass.xl", isSignal: true, isRequired: false, transformFunction: null }, xxl: { classPropertyName: "xxl", publicName: "fxClass.xxl", isSignal: true, isRequired: false, transformFunction: null }, ltSm: { classPropertyName: "ltSm", publicName: "fxClass.lt-sm", isSignal: true, isRequired: false, transformFunction: null }, ltMd: { classPropertyName: "ltMd", publicName: "fxClass.lt-md", isSignal: true, isRequired: false, transformFunction: null }, ltLg: { classPropertyName: "ltLg", publicName: "fxClass.lt-lg", isSignal: true, isRequired: false, transformFunction: null }, ltXl: { classPropertyName: "ltXl", publicName: "fxClass.lt-xl", isSignal: true, isRequired: false, transformFunction: null }, ltXxl: { classPropertyName: "ltXxl", publicName: "fxClass.lt-xxl", isSignal: true, isRequired: false, transformFunction: null }, gtXs: { classPropertyName: "gtXs", publicName: "fxClass.gt-xs", isSignal: true, isRequired: false, transformFunction: null }, gtSm: { classPropertyName: "gtSm", publicName: "fxClass.gt-sm", isSignal: true, isRequired: false, transformFunction: null }, gtMd: { classPropertyName: "gtMd", publicName: "fxClass.gt-md", isSignal: true, isRequired: false, transformFunction: null }, gtLg: { classPropertyName: "gtLg", publicName: "fxClass.gt-lg", isSignal: true, isRequired: false, transformFunction: null }, gtXl: { classPropertyName: "gtXl", publicName: "fxClass.gt-xl", isSignal: true, isRequired: false, transformFunction: null }, smUp: { classPropertyName: "smUp", publicName: "fxClass.sm-up", isSignal: true, isRequired: false, transformFunction: null }, mdUp: { classPropertyName: "mdUp", publicName: "fxClass.md-up", isSignal: true, isRequired: false, transformFunction: null }, lgUp: { classPropertyName: "lgUp", publicName: "fxClass.lg-up", isSignal: true, isRequired: false, transformFunction: null }, xlUp: { classPropertyName: "xlUp", publicName: "fxClass.xl-up", isSignal: true, isRequired: false, transformFunction: null }, xxlUp: { classPropertyName: "xxlUp", publicName: "fxClass.xxl-up", isSignal: true, isRequired: false, transformFunction: null }, smDown: { classPropertyName: "smDown", publicName: "fxClass.sm-down", isSignal: true, isRequired: false, transformFunction: null }, mdDown: { classPropertyName: "mdDown", publicName: "fxClass.md-down", isSignal: true, isRequired: false, transformFunction: null }, lgDown: { classPropertyName: "lgDown", publicName: "fxClass.lg-down", isSignal: true, isRequired: false, transformFunction: null }, xlDown: { classPropertyName: "xlDown", publicName: "fxClass.xl-down", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
2958
+ }
2959
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: FxClassDirective, decorators: [{
2960
+ type: Directive,
2961
+ args: [{
2962
+ selector: `
2963
+ [fxClass],
2964
+ [fxClass.xs],[fxClass.sm],[fxClass.md],[fxClass.lg],[fxClass.xl],[fxClass.xxl],
2965
+ [fxClass.lt-sm],[fxClass.lt-md],[fxClass.lt-lg],[fxClass.lt-xl],[fxClass.lt-xxl],
2966
+ [fxClass.gt-xs],[fxClass.gt-sm],[fxClass.gt-md],[fxClass.gt-lg],[fxClass.gt-xl],
2967
+ [fxClass.sm-up],[fxClass.md-up],[fxClass.lg-up],[fxClass.xl-up],[fxClass.xxl-up],
2968
+ [fxClass.sm-down],[fxClass.md-down],[fxClass.lg-down],[fxClass.xl-down]
2969
+ `,
2970
+ standalone: true,
2971
+ }]
2972
+ }], ctorParameters: () => [], propDecorators: { fxClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass", required: false }] }], xs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.xs", required: false }] }], sm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.sm", required: false }] }], md: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.md", required: false }] }], lg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.lg", required: false }] }], xl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.xl", required: false }] }], xxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.xxl", required: false }] }], ltSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.lt-sm", required: false }] }], ltMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.lt-md", required: false }] }], ltLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.lt-lg", required: false }] }], ltXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.lt-xl", required: false }] }], ltXxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.lt-xxl", required: false }] }], gtXs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.gt-xs", required: false }] }], gtSm: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.gt-sm", required: false }] }], gtMd: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.gt-md", required: false }] }], gtLg: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.gt-lg", required: false }] }], gtXl: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.gt-xl", required: false }] }], smUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.sm-up", required: false }] }], mdUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.md-up", required: false }] }], lgUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.lg-up", required: false }] }], xlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.xl-up", required: false }] }], xxlUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.xxl-up", required: false }] }], smDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.sm-down", required: false }] }], mdDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.md-down", required: false }] }], lgDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.lg-down", required: false }] }], xlDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "fxClass.xl-down", required: false }] }] } });
2973
+
2974
+ class ArsUIFlexModule {
2975
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ArsUIFlexModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2976
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.1", ngImport: i0, type: ArsUIFlexModule, imports: [FxLayoutDirective,
2977
+ FxLayoutWrapDirective,
2978
+ FxFlexDirective,
2979
+ FxShowHideDirective,
2980
+ FxLayoutAlignDirective,
2981
+ FxLayoutGapDirective,
2982
+ FxFlexOrderDirective,
2983
+ FxFlexOffsetDirective,
2984
+ FxFlexAlignDirective,
2985
+ FxFlexFillDirective,
2986
+ FxStyleDirective,
2987
+ FxClassDirective,
2988
+ FxGridDirective,
2989
+ FxGridColumnDirective,
2990
+ FxGridAreaDirective,
2991
+ IfBpDirective], exports: [FxLayoutDirective,
2992
+ FxLayoutWrapDirective,
2993
+ FxFlexDirective,
2994
+ FxShowHideDirective,
2995
+ FxLayoutAlignDirective,
2996
+ FxLayoutGapDirective,
2997
+ FxFlexOrderDirective,
2998
+ FxFlexOffsetDirective,
2999
+ FxFlexAlignDirective,
3000
+ FxFlexFillDirective,
3001
+ FxStyleDirective,
3002
+ FxClassDirective,
3003
+ FxGridDirective,
3004
+ FxGridColumnDirective,
3005
+ FxGridAreaDirective,
3006
+ IfBpDirective] }); }
3007
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ArsUIFlexModule }); }
3008
+ }
3009
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ArsUIFlexModule, decorators: [{
3010
+ type: NgModule,
3011
+ args: [{
3012
+ imports: [
3013
+ FxLayoutDirective,
3014
+ FxLayoutWrapDirective,
3015
+ FxFlexDirective,
3016
+ FxShowHideDirective,
3017
+ FxLayoutAlignDirective,
3018
+ FxLayoutGapDirective,
3019
+ FxFlexOrderDirective,
3020
+ FxFlexOffsetDirective,
3021
+ FxFlexAlignDirective,
3022
+ FxFlexFillDirective,
3023
+ FxStyleDirective,
3024
+ FxClassDirective,
3025
+ FxGridDirective,
3026
+ FxGridColumnDirective,
3027
+ FxGridAreaDirective,
3028
+ IfBpDirective,
3029
+ ],
3030
+ exports: [
3031
+ FxLayoutDirective,
3032
+ FxLayoutWrapDirective,
3033
+ FxFlexDirective,
3034
+ FxShowHideDirective,
3035
+ FxLayoutAlignDirective,
3036
+ FxLayoutGapDirective,
3037
+ FxFlexOrderDirective,
3038
+ FxFlexOffsetDirective,
3039
+ FxFlexAlignDirective,
3040
+ FxFlexFillDirective,
3041
+ FxStyleDirective,
3042
+ FxClassDirective,
3043
+ FxGridDirective,
3044
+ FxGridColumnDirective,
3045
+ FxGridAreaDirective,
3046
+ IfBpDirective,
3047
+ ],
3048
+ }]
3049
+ }] });
3050
+
3051
+ /*
3052
+ * Public API Surface of scm-utils
3053
+ */
3054
+
3055
+ /**
3056
+ * Generated bundle index. Do not edit.
3057
+ */
3058
+
3059
+ export { ALIAS_FAMILIES, ALIAS_INDEX, ArsUIFlexModule, BS5_BREAKPOINTS, BusyDialogComponent, BusyTimer, CANONICAL_ALIASES, ConfirmDialogComponent, CredentialsDialogComponent, DeleteDialogComponent, DeleteDialogConfirmMode, DialogService, FxClassDirective, FxFlexAlignDirective, FxFlexDirective, FxFlexFillDirective, FxFlexOffsetDirective, FxFlexOrderDirective, FxGridAreaDirective, FxGridColumnDirective, FxGridDirective, FxLayoutAlignDirective, FxLayoutDirective, FxLayoutGapDirective, FxLayoutWrapDirective, FxShowHideDirective, FxStyleDirective, IfBpDirective, InfoDialogComponent, LAYOUT_BREAKPOINTS, MediaObserver, NON_CANONICAL_PRIORITY, OtpInputComponent, PaginatorIntl, PasswordStrengthComponent, RecoverPasswordDialogComponent, ResetPasswordDialogComponent, ResponsiveBaseDirective, ToastComponent, UIService, resolve, resolveAll, resolveNonCanonical };
3060
+ //# sourceMappingURL=abv-scm-utils-ui.mjs.map