@arsedizioni/ars-utils 22.6.86 → 22.6.89

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 (79) hide show
  1. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +3158 -3344
  2. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
  3. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +7616 -4772
  4. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
  5. package/fesm2022/arsedizioni-ars-utils-core.date.mjs +321 -702
  6. package/fesm2022/arsedizioni-ars-utils-core.date.mjs.map +1 -1
  7. package/fesm2022/arsedizioni-ars-utils-core.markdown.mjs +445 -590
  8. package/fesm2022/arsedizioni-ars-utils-core.markdown.mjs.map +1 -1
  9. package/fesm2022/arsedizioni-ars-utils-core.mjs +1735 -2370
  10. package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
  11. package/fesm2022/arsedizioni-ars-utils-core.validators.mjs +1280 -1470
  12. package/fesm2022/arsedizioni-ars-utils-core.validators.mjs.map +1 -1
  13. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +1097 -1528
  14. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
  15. package/fesm2022/arsedizioni-ars-utils-support.common.mjs +198 -294
  16. package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
  17. package/fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs +115 -117
  18. package/fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs.map +1 -1
  19. package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs +1607 -613
  20. package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs.map +1 -1
  21. package/fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs +840 -367
  22. package/fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs.map +1 -1
  23. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +1634 -651
  24. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs.map +1 -1
  25. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs +1255 -792
  26. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs.map +1 -1
  27. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +1410 -357
  28. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs.map +1 -1
  29. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +2401 -944
  30. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs.map +1 -1
  31. package/fesm2022/arsedizioni-ars-utils-ui.files.mjs +1553 -741
  32. package/fesm2022/arsedizioni-ars-utils-ui.files.mjs.map +1 -1
  33. package/fesm2022/arsedizioni-ars-utils-ui.filters.mjs +901 -430
  34. package/fesm2022/arsedizioni-ars-utils-ui.filters.mjs.map +1 -1
  35. package/fesm2022/arsedizioni-ars-utils-ui.help.mjs +737 -530
  36. package/fesm2022/arsedizioni-ars-utils-ui.help.mjs.map +1 -1
  37. package/fesm2022/arsedizioni-ars-utils-ui.mjs +6638 -1755
  38. package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
  39. package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs +1479 -1207
  40. package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs.map +1 -1
  41. package/fesm2022/arsedizioni-ars-utils-ui.notifications.mjs +1003 -270
  42. package/fesm2022/arsedizioni-ars-utils-ui.notifications.mjs.map +1 -1
  43. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +497 -278
  44. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs.map +1 -1
  45. package/fesm2022/arsedizioni-ars-utils-ui.paginator.mjs +48 -52
  46. package/fesm2022/arsedizioni-ars-utils-ui.paginator.mjs.map +1 -1
  47. package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs +464 -704
  48. package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs.map +1 -1
  49. package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs +724 -657
  50. package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs.map +1 -1
  51. package/fesm2022/arsedizioni-ars-utils.mjs +3 -19
  52. package/fesm2022/arsedizioni-ars-utils.mjs.map +1 -1
  53. package/package.json +1 -1
  54. package/types/arsedizioni-ars-utils-clipper.common.d.ts +1151 -1163
  55. package/types/arsedizioni-ars-utils-clipper.ui.d.ts +1588 -1426
  56. package/types/arsedizioni-ars-utils-core.d.ts +1169 -1172
  57. package/types/arsedizioni-ars-utils-core.date.d.ts +204 -208
  58. package/types/arsedizioni-ars-utils-core.markdown.d.ts +128 -126
  59. package/types/arsedizioni-ars-utils-core.validators.d.ts +270 -236
  60. package/types/arsedizioni-ars-utils-evolution.common.d.ts +1054 -1067
  61. package/types/arsedizioni-ars-utils-support.common.d.ts +225 -234
  62. package/types/arsedizioni-ars-utils-ui.controls.d.ts +440 -278
  63. package/types/arsedizioni-ars-utils-ui.controls.date.d.ts +24 -28
  64. package/types/arsedizioni-ars-utils-ui.controls.tree.d.ts +172 -136
  65. package/types/arsedizioni-ars-utils-ui.d.ts +2035 -821
  66. package/types/arsedizioni-ars-utils-ui.dialogs.auth.d.ts +327 -322
  67. package/types/arsedizioni-ars-utils-ui.dialogs.d.ts +343 -347
  68. package/types/arsedizioni-ars-utils-ui.dialogs.prompt.d.ts +167 -167
  69. package/types/arsedizioni-ars-utils-ui.dialogs.select.d.ts +373 -367
  70. package/types/arsedizioni-ars-utils-ui.files.d.ts +335 -283
  71. package/types/arsedizioni-ars-utils-ui.filters.d.ts +232 -160
  72. package/types/arsedizioni-ars-utils-ui.help.d.ts +204 -211
  73. package/types/arsedizioni-ars-utils-ui.navigation.d.ts +811 -646
  74. package/types/arsedizioni-ars-utils-ui.notifications.d.ts +74 -78
  75. package/types/arsedizioni-ars-utils-ui.oauth.d.ts +102 -62
  76. package/types/arsedizioni-ars-utils-ui.paginator.d.ts +19 -22
  77. package/types/arsedizioni-ars-utils-ui.shell.d.ts +376 -382
  78. package/types/arsedizioni-ars-utils-ui.tinymce.d.ts +244 -231
  79. package/types/arsedizioni-ars-utils.d.ts +1 -3
@@ -1,945 +1,2402 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, ChangeDetectorRef, signal, ChangeDetectionStrategy, Component, viewChild, output, afterNextRender, Injectable, DestroyRef, ElementRef, computed } from '@angular/core';
3
- import { form, FormField, required, maxLength, FormRoot } from '@angular/forms/signals';
4
- import * as i4 from '@angular/material/button';
5
- import { MatButtonModule } from '@angular/material/button';
6
- import { MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose, MatDialogRef } from '@angular/material/dialog';
7
- import * as i2 from '@angular/material/form-field';
8
- import { MatFormFieldModule } from '@angular/material/form-field';
9
- import * as i5 from '@angular/material/icon';
10
- import { MatIconModule } from '@angular/material/icon';
11
- import * as i3 from '@angular/material/input';
12
- import { MatInputModule } from '@angular/material/input';
13
- import * as i9 from '@angular/material/list';
14
- import { MatListModule } from '@angular/material/list';
15
- import { SearchFilterPipe, SafeHtmlPipe, DtoUtils } from '@arsedizioni/ars-utils/core';
16
- import * as i1 from '@arsedizioni/ars-utils/ui';
17
- import { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';
18
- import * as i10 from '@angular/material/checkbox';
19
- import { MatCheckboxModule } from '@angular/material/checkbox';
20
- import { MatOptionModule } from '@angular/material/core';
21
- import { MatDividerModule } from '@angular/material/divider';
22
- import * as i8 from '@angular/material/menu';
23
- import { MatMenuModule } from '@angular/material/menu';
24
- import * as i11 from '@angular/material/paginator';
25
- import { MatPaginatorModule } from '@angular/material/paginator';
26
- import * as i6 from '@angular/material/select';
27
- import { MatSelectModule } from '@angular/material/select';
28
- import * as i7 from '@angular/material/tooltip';
29
- import { MatTooltipModule } from '@angular/material/tooltip';
30
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
31
- import * as i7$1 from '@angular/material/tree';
32
- import { MatTree, MatTreeModule } from '@angular/material/tree';
33
- import { BehaviorSubject } from 'rxjs';
34
- import * as i4$1 from '@angular/cdk/text-field';
35
- import { TextFieldModule } from '@angular/cdk/text-field';
36
- import { SignalsUtils, notEmpty, emails } from '@arsedizioni/ars-utils/core.validators';
37
-
38
- /**
39
- * Read-only counterpart of `SelectDialogComponent`: it shows a list of items with a search box
40
- * and nothing else.
41
- *
42
- * Deliberately not a selection: the list is a plain `mat-list`, not a `mat-selection-list`, so
43
- * there is no selected state to read, no `done` payload and no Ok / Annulla pair — closing is the
44
- * only way out and it is always available. It carries no add / edit / delete affordance either:
45
- * a dialog that cannot change anything is the whole point, and a caller that needs commands wants
46
- * `SelectDialogComponent` instead.
47
- *
48
- * Filtering is client-side, through the same `search` pipe the select dialog uses on its local
49
- * items. There is no server-side lookup: paging a list nobody can act on would buy nothing.
50
- */
51
- class ListDialogComponent {
52
- constructor() {
53
- this.cdr = inject(ChangeDetectorRef);
54
- this.dialogData = signal((() => {
55
- const data = inject(MAT_DIALOG_DATA) ?? {};
56
- return {
57
- ...data,
58
- appearance: data.appearance ?? 'outline',
59
- title: data.title ?? 'Elenco',
60
- closeCaption: data.closeCaption ?? 'Chiudi',
61
- items: data.items ?? [],
62
- };
63
- })(), /* @ts-ignore */
64
- ...(ngDevMode ? [{ debugName: "dialogData" }] : /* istanbul ignore next */ []));
65
- /** Items currently on screen. Seeded from the dialog data and replaceable through {@link setItems}. */
66
- this.items = signal(this.dialogData().items ?? [], /* @ts-ignore */
67
- ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
68
- /** Counters written by the `search` pipe while it filters, read back by the footer. */
69
- this.filterMetadata = { total: 0, count: 0 };
70
- /** Current search text. */
71
- this.filterText = signal(this.dialogData().filter ?? '', /* @ts-ignore */
72
- ...(ngDevMode ? [{ debugName: "filterText" }] : /* istanbul ignore next */ []));
73
- /** Root signal form bound to the search input. */
74
- this.filterForm = form(this.filterText);
75
- }
76
- /**
77
- * Replaces the items on screen, for a caller that fills the list after opening the dialog or
78
- * refreshes it while it is open.
79
- * @param items - The new items to display; an empty array clears the list.
80
- */
81
- setItems(items) {
82
- this.items.set(items ?? []);
83
- this.cdr.markForCheck();
84
- }
85
- /**
86
- * Sets the search text programmatically.
87
- * @param text - The new search string to apply.
88
- */
89
- setFilter(text) {
90
- this.filterText.set(text ?? '');
91
- }
92
- /**
93
- * Returns the current search text.
94
- * @returns The active search string.
95
- */
96
- getFilter() {
97
- return this.filterText();
98
- }
99
- /** Clears the search text, restoring the whole list. */
100
- clearFilter() {
101
- this.filterText.set('');
102
- }
103
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: ListDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
104
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: ListDialogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n<div style=\"padding: 0 24px\">\n @if (dialogData().description) {\n <div class=\"list-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n }\n <div fxLayout=\"row\" fxFill>\n <div fxFlex>\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\n <mat-label>{{dialogData().searchLabel ?? 'Cerca...'}}</mat-label>\n <input type=\"text\" matInput title=\"Digita il testo\" [formField]=\"filterForm\"\n (keyup.enter)=\"$event.preventDefault(); $event.stopPropagation()\">\n @if (filterText()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n </div>\n @if (dialogData().header && items().length > 0) {\n <div class=\"text\" style=\"padding-top: 10px;\" [innerHtml]=\"dialogData().header | safeHtml\"></div>\n }\n</div>\n<mat-dialog-content style=\"padding-top:0\">\n <div fxLayout=\"column\" fxFill>\n @if (items().length === 0) {\n <div class=\"text message\"><i>\n @if (dialogData().emptyMessage) {\n <span [innerHtml]=\"dialogData().emptyMessage | safeHtml\"></span>\n } @else {\n <span>Nessun elemento da visualizzare.</span>\n }\n </i>\n </div>\n }\n <!--\n A plain `mat-list`, not a `mat-selection-list`: the rows carry no selected state and no\n click target, so nothing here can be acted upon by mistake.\n -->\n <mat-list role=\"list\">\n @for (item of (items() | search: filterText(): filterMetadata); track $index) {\n <mat-list-item role=\"listitem\">\n <div [innerHtml]=\"item.template | safeHtml\"></div>\n </mat-list-item>\n }\n </mat-list>\n @if (items().length > 0 && filterText() && filterMetadata.count === 0) {\n <div class=\"text message\"><i>\n <span>Nessun elemento corrisponde alla ricerca.</span>\n </i>\n </div>\n }\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\n <div class=\"secondary\" style=\"padding-left:20px\">\n <span class=\"bold\">{{ (filterText() ? filterMetadata.count : items().length) ?? 0 }}</span>&nbsp;\n <span class=\"small\"> elementi</span>\n </div>\n <div>\n <button mat-flat-button mat-dialog-close cdkFocusInitial>\n <span>{{dialogData().closeCaption}}</span>\n </button>\n </div>\n </div>\n</mat-dialog-actions>\n", styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.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}.fill{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;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!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:1.2!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 .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.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}}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}::ng-deep .mdc-list-item__primary-text,.mdc-list-item__content{white-space:normal!important}::ng-deep .mdc-list-item.mdc-list-item--with-one-line{height:unset!important;min-height:48px!important}.list-description{padding:0 24px 24px}.mat-mdc-form-field-icon-suffix{padding-right:8px!important}\n"], dependencies: [{ kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.FxLayoutDirective, 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.FxFlexDirective, 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: "directive", type: i1.FxLayoutAlignDirective, 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.FxLayoutGapDirective, 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.FxFlexFillDirective, selector: " [fxFlexFill], [fxFill], [fxFlexFill.xs], [fxFlexFill.sm], [fxFlexFill.md], [fxFlexFill.lg], [fxFlexFill.xl], [fxFlexFill.lt-sm], [fxFlexFill.lt-md], [fxFlexFill.lt-lg], [fxFlexFill.lt-xl], [fxFlexFill.gt-xs], [fxFlexFill.gt-sm], [fxFlexFill.gt-md], [fxFlexFill.gt-lg] ", inputs: ["fxFlexFill", "fxFill", "fxFlexFill.xs", "fxFlexFill.sm", "fxFlexFill.md", "fxFlexFill.lg", "fxFlexFill.xl", "fxFlexFill.lt-sm", "fxFlexFill.lt-md", "fxFlexFill.lt-lg", "fxFlexFill.lt-xl", "fxFlexFill.gt-xs", "fxFlexFill.gt-sm", "fxFlexFill.gt-md", "fxFlexFill.gt-lg"] }, { 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: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.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: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.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: i4.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i9.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i9.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "pipe", type: SearchFilterPipe, name: "search" }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
105
- }
106
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: ListDialogComponent, decorators: [{
107
- type: Component,
108
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
109
- FlexLayoutModule,
110
- MatDialogTitle,
111
- MatDialogContent,
112
- MatDialogActions,
113
- MatDialogClose,
114
- MatFormFieldModule,
115
- MatInputModule,
116
- FormField,
117
- MatButtonModule,
118
- MatIconModule,
119
- MatListModule,
120
- SearchFilterPipe,
121
- SafeHtmlPipe
122
- ], template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n<div style=\"padding: 0 24px\">\n @if (dialogData().description) {\n <div class=\"list-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n }\n <div fxLayout=\"row\" fxFill>\n <div fxFlex>\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\n <mat-label>{{dialogData().searchLabel ?? 'Cerca...'}}</mat-label>\n <input type=\"text\" matInput title=\"Digita il testo\" [formField]=\"filterForm\"\n (keyup.enter)=\"$event.preventDefault(); $event.stopPropagation()\">\n @if (filterText()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n </div>\n @if (dialogData().header && items().length > 0) {\n <div class=\"text\" style=\"padding-top: 10px;\" [innerHtml]=\"dialogData().header | safeHtml\"></div>\n }\n</div>\n<mat-dialog-content style=\"padding-top:0\">\n <div fxLayout=\"column\" fxFill>\n @if (items().length === 0) {\n <div class=\"text message\"><i>\n @if (dialogData().emptyMessage) {\n <span [innerHtml]=\"dialogData().emptyMessage | safeHtml\"></span>\n } @else {\n <span>Nessun elemento da visualizzare.</span>\n }\n </i>\n </div>\n }\n <!--\n A plain `mat-list`, not a `mat-selection-list`: the rows carry no selected state and no\n click target, so nothing here can be acted upon by mistake.\n -->\n <mat-list role=\"list\">\n @for (item of (items() | search: filterText(): filterMetadata); track $index) {\n <mat-list-item role=\"listitem\">\n <div [innerHtml]=\"item.template | safeHtml\"></div>\n </mat-list-item>\n }\n </mat-list>\n @if (items().length > 0 && filterText() && filterMetadata.count === 0) {\n <div class=\"text message\"><i>\n <span>Nessun elemento corrisponde alla ricerca.</span>\n </i>\n </div>\n }\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\n <div class=\"secondary\" style=\"padding-left:20px\">\n <span class=\"bold\">{{ (filterText() ? filterMetadata.count : items().length) ?? 0 }}</span>&nbsp;\n <span class=\"small\"> elementi</span>\n </div>\n <div>\n <button mat-flat-button mat-dialog-close cdkFocusInitial>\n <span>{{dialogData().closeCaption}}</span>\n </button>\n </div>\n </div>\n</mat-dialog-actions>\n", styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.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}.fill{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;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!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:1.2!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 .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.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}}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}::ng-deep .mdc-list-item__primary-text,.mdc-list-item__content{white-space:normal!important}::ng-deep .mdc-list-item.mdc-list-item--with-one-line{height:unset!important;min-height:48px!important}.list-description{padding:0 24px 24px}.mat-mdc-form-field-icon-suffix{padding-right:8px!important}\n"] }]
123
- }] });
124
-
125
- class SelectDialogComponent {
126
- constructor() {
127
- this.paginator = viewChild.required('paginator', /* @ts-ignore */
128
- ...(ngDevMode ? [{ debugName: "paginator" }] : /* istanbul ignore next */ []));
129
- this.selection = viewChild.required("selection", /* @ts-ignore */
130
- ...(ngDevMode ? [{ debugName: "selection" }] : /* istanbul ignore next */ []));
131
- this.isViewReady = false;
132
- this.dialogRef = inject((MatDialogRef));
133
- this.cdr = inject(ChangeDetectorRef);
134
- this.dialogData = signal((() => {
135
- const data = inject(MAT_DIALOG_DATA) ?? {};
136
- return {
137
- ...data,
138
- appearance: data.appearance ?? 'outline',
139
- title: data.title ?? 'Seleziona',
140
- okCaption: data.okCaption ?? 'Ok',
141
- multipleSelection: data.multipleSelection ?? false,
142
- items: data.canLookup ? [] : (data.items ?? []),
143
- pageSize: data.canLookup && data.canPaginate && !data.pageSize ? 100 : data.pageSize,
144
- };
145
- })(), /* @ts-ignore */
146
- ...(ngDevMode ? [{ debugName: "dialogData" }] : /* istanbul ignore next */ []));
147
- this.done = output();
148
- this.edit = output();
149
- this.view = output();
150
- this.append = output();
151
- this.delete = output();
152
- this.lookup = output();
153
- this.lookupOptions = output();
154
- this.filter = output();
155
- this.canEdit = signal(false, /* @ts-ignore */
156
- ...(ngDevMode ? [{ debugName: "canEdit" }] : /* istanbul ignore next */ []));
157
- this.canView = signal(false, /* @ts-ignore */
158
- ...(ngDevMode ? [{ debugName: "canView" }] : /* istanbul ignore next */ []));
159
- this.canAppend = signal(this.dialogData().canAppend ?? false, /* @ts-ignore */
160
- ...(ngDevMode ? [{ debugName: "canAppend" }] : /* istanbul ignore next */ []));
161
- this.canDelete = signal(false, /* @ts-ignore */
162
- ...(ngDevMode ? [{ debugName: "canDelete" }] : /* istanbul ignore next */ []));
163
- this.canPaginate = signal(this.dialogData().canPaginate ?? false, /* @ts-ignore */
164
- ...(ngDevMode ? [{ debugName: "canPaginate" }] : /* istanbul ignore next */ []));
165
- // Handle submit button activity
166
- this.okDisabled = signal(this.dialogData().mustSelect ?? true, /* @ts-ignore */
167
- ...(ngDevMode ? [{ debugName: "okDisabled" }] : /* istanbul ignore next */ []));
168
- // Used for array filtering
169
- this.filterMetadata = { total: 0, count: 0 };
170
- this.filterText = signal('', /* @ts-ignore */
171
- ...(ngDevMode ? [{ debugName: "filterText" }] : /* istanbul ignore next */ []));
172
- /** Root signal form bound to the filter text input. */
173
- this.filterForm = form(this.filterText);
174
- this.filterOptions = signal([], /* @ts-ignore */
175
- ...(ngDevMode ? [{ debugName: "filterOptions" }] : /* istanbul ignore next */ []));
176
- this.filterOptionsInfo = signal("Tutto", /* @ts-ignore */
177
- ...(ngDevMode ? [{ debugName: "filterOptionsInfo" }] : /* istanbul ignore next */ []));
178
- // Used to sincronize lookup fields and params
179
- this.lookupField = "";
180
- // Used to display selected elements
181
- this.selectionInfo = signal(null, /* @ts-ignore */
182
- ...(ngDevMode ? [{ debugName: "selectionInfo" }] : /* istanbul ignore next */ []));
183
- this.selectionMasterIndeterminate = signal(false, /* @ts-ignore */
184
- ...(ngDevMode ? [{ debugName: "selectionMasterIndeterminate" }] : /* istanbul ignore next */ []));
185
- this.selectionMasterChecked = signal(false, /* @ts-ignore */
186
- ...(ngDevMode ? [{ debugName: "selectionMasterChecked" }] : /* istanbul ignore next */ []));
187
- this.total = signal(this.dialogData().items?.length ?? 0, /* @ts-ignore */
188
- ...(ngDevMode ? [{ debugName: "total" }] : /* istanbul ignore next */ []));
189
- const d = this.dialogData();
190
- if (d.canLookup) {
191
- if (d.lookupFields?.length) {
192
- this.lookupField = d.lookupFields[0].value;
193
- }
194
- if (d.canFilter) {
195
- this.filterOptions.set(d.filters ?? []);
196
- }
197
- }
198
- afterNextRender(() => {
199
- this.isViewReady = true;
200
- const selectedOption = this.filterOptions().find(x => x.checked);
201
- if (selectedOption) {
202
- this.applyFilterByOptions(selectedOption);
203
- }
204
- if (d.lookupOnInit) {
205
- this.applyFilter();
206
- }
207
- });
208
- }
209
- /**
210
- * Updates the total item count signal, triggering UI refresh.
211
- * @param newTotal - The new total count; defaults to 0 if omitted.
212
- */
213
- notifyChanges(newTotal) {
214
- this.total.set(newTotal ?? 0);
215
- this.cdr.markForCheck();
216
- }
217
- /** Returns `true` when every list item is currently selected. */
218
- isAllSelected() {
219
- return this.selection().selectedOptions.selected.length === this.dialogData().items.length;
220
- }
221
- /** Returns `true` when at least one list item is selected. */
222
- hasSelection() {
223
- return this.selection().selectedOptions.selected.length > 0;
224
- }
225
- /**
226
- * Selects or deselects all items based on the master checkbox state.
227
- * @param e - The checkbox change event.
228
- */
229
- masterSelectionToggle(e) {
230
- if (e.checked)
231
- // Deselect if not allselected so that toggle makes the right choice
232
- this.selection().selectAll();
233
- else
234
- this.selection().deselectAll();
235
- this.selectionMasterIndeterminate.set(false);
236
- this.selectionMasterChecked.set(e.checked);
237
- const selection = this.selection();
238
- this.okDisabled.set(!!(this.dialogData().mustSelect &&
239
- selection.selectedOptions.selected.length === 0));
240
- this.updateSelectionInfo();
241
- }
242
- /**
243
- * Handles selection or deselection of a list item.
244
- * @param e - The selection list change event.
245
- */
246
- select(e) {
247
- const selection = this.selection();
248
- if (!this.dialogData().multipleSelection) {
249
- this.selection().deselectAll();
250
- if (e.options?.length > 0)
251
- e.options[0].selected = true;
252
- this.okDisabled.set(false);
253
- }
254
- else {
255
- this.okDisabled.set(!!(this.dialogData().mustSelect &&
256
- selection.selectedOptions.selected.length === 0));
257
- }
258
- // Update editors
259
- this.canEdit.set(!!(this.dialogData().canEdit &&
260
- selection.selectedOptions.selected.length === 1));
261
- this.canView.set(!!(this.dialogData().canView &&
262
- selection.selectedOptions.selected.length === 1));
263
- this.canDelete.set(!!(this.dialogData().canDelete &&
264
- selection.selectedOptions.selected.length > 0));
265
- this.selectionMasterIndeterminate.set(!this.isAllSelected() && this.hasSelection());
266
- this.selectionMasterChecked.set(this.hasSelection());
267
- this.updateSelectionInfo();
268
- }
269
- /** Refreshes the selection info label shown in the dialog footer. */
270
- updateSelectionInfo() {
271
- const selection = this.selection();
272
- if (selection.selectedOptions.selected.length > 0 && this.dialogData().multipleSelection) {
273
- this.selectionInfo.set(selection.selectedOptions.selected.length +
274
- " / " +
275
- selection.options.length);
276
- }
277
- else {
278
- this.selectionInfo.set(null);
279
- }
280
- }
281
- /** Deselects all items and resets the master checkbox state. */
282
- clearSelection() {
283
- this.selectionMasterIndeterminate.set(false);
284
- this.selectionMasterChecked.set(false);
285
- if (this.isViewReady) {
286
- this.selection().deselectAll();
287
- }
288
- this.selectionInfo.set(null);
289
- }
290
- /** Emits the current selection and closes the dialog. */
291
- ok() {
292
- if (!this.okDisabled()) {
293
- const selectedItems = [];
294
- this.selection().selectedOptions.selected.forEach((element) => {
295
- selectedItems.push(element.value);
296
- });
297
- this.done.emit({ selectedItems: selectedItems });
298
- setTimeout(() => {
299
- this.dialogRef.close();
300
- }, 500);
301
- }
302
- }
303
- /** Clears the current filter text input. */
304
- clearFilter() {
305
- this.filterText.set('');
306
- }
307
- /**
308
- * Sets the filter text programmatically.
309
- * @param text - The new filter string to apply.
310
- */
311
- setFilter(text) {
312
- this.filterText.set(text);
313
- }
314
- /**
315
- * Returns the current filter text.
316
- * @returns The active filter string.
317
- */
318
- getFilter() {
319
- return this.filterText();
320
- }
321
- /** Emits the `lookupOptions` output event to open the filter options panel. */
322
- showFilterOptions() {
323
- if (this.lookupOptions) {
324
- this.lookupOptions.emit();
325
- }
326
- }
327
- /**
328
- * Applies the given text filter, emitting a lookup when enabled.
329
- * @param text - Optional filter string; populates `filterText` when provided.
330
- * @param e - Optional keyboard event; lookup only fires on Enter.
331
- */
332
- doFilter(text, e) {
333
- if (text) {
334
- this.filterText.set(text);
335
- }
336
- if (this.dialogData().canLookup) {
337
- if (!e || e.key === 'Enter') {
338
- this.applyFilter();
339
- }
340
- }
341
- }
342
- /**
343
- * Applies the current filter text, emitting a lookup event.
344
- */
345
- applyFilter() {
346
- this.clearSelection();
347
- this.lookup.emit({ items: this.dialogData().items, filter: this.filterText(), owner: this });
348
- }
349
- /**
350
- * Applies a structured filter option, emitting the filter output event.
351
- * @param filterOption - The selected filter option object.
352
- */
353
- applyFilterByOptions(filterOption) {
354
- if (this.dialogData().canLookup && this.dialogData().canFilter) {
355
- this.filter.emit({
356
- items: this.dialogData().items,
357
- filter: this.filterText(),
358
- filterOption: filterOption,
359
- owner: this,
360
- });
361
- this.filterOptionsInfo.set(filterOption ? (filterOption.title ?? "Tutto") : "Tutto");
362
- }
363
- }
364
- /**
365
- * Applies a structured filter option, emitting the filter output event.
366
- * @param filterOption - The selected filter option object.
367
- * @param apply - Optional flag to immediately apply the filter.
368
- */
369
- doFilterByOptions(filterOption, apply) {
370
- this.applyFilterByOptions(filterOption);
371
- if (apply) {
372
- setTimeout(() => {
373
- this.doFilter();
374
- }, 250);
375
- }
376
- }
377
- /**
378
- * Triggers a server-side lookup with the given parameters (public API).
379
- * @param params - An object containing the lookup query parameters.
380
- */
381
- doLookup(params) {
382
- if (this.dialogData().canLookup) {
383
- this.clearSelection();
384
- this.lookupParams = params;
385
- this.lookupParams.first = 0;
386
- this.lookup.emit({ items: this.dialogData().items, params: this.lookupParams, owner: this });
387
- }
388
- }
389
- /**
390
- * Updates the paginator length and resets it to the first page.
391
- * @param total - The new total number of items.
392
- */
393
- updateLookupPaginator(total) {
394
- if (this.canPaginate()) {
395
- const paginator = this.paginator();
396
- if (paginator) {
397
- paginator.pageIndex = 0;
398
- paginator.length = total ?? 0;
399
- }
400
- }
401
- }
402
- /**
403
- * Handles a paginator page change and triggers a new lookup.
404
- * @param e - The paginator page change event.
405
- */
406
- doLookupPage(e) {
407
- if (this.canPaginate() && this.dialogData().canLookup) {
408
- this.clearSelection();
409
- if (!this.lookupParams) {
410
- this.lookupParams = { first: 0, count: this.dialogData().pageSize ?? 0 };
411
- }
412
- this.lookupParams.first = e.pageIndex * (this.dialogData().pageSize ?? 0);
413
- this.lookup.emit({ items: this.dialogData().items, params: this.lookupParams, owner: this });
414
- }
415
- }
416
- /** Emits the `append` output event to open the add-item flow. */
417
- doAppend() {
418
- this.append.emit({ items: this.dialogData().items, owner: this });
419
- }
420
- /** Emits the `edit` output event for the currently selected item. */
421
- doEdit() {
422
- const selection = this.selection();
423
- if (selection.selectedOptions.selected?.length > 0) {
424
- this.edit.emit({
425
- item: selection.selectedOptions.selected[0].value,
426
- items: this.dialogData().items,
427
- owner: this
428
- });
429
- }
430
- }
431
- /** Emits the `view` output event for the currently selected item. */
432
- doView() {
433
- const selection = this.selection();
434
- if (selection.selectedOptions.selected?.length > 0) {
435
- this.view.emit(selection.selectedOptions.selected[0].value);
436
- }
437
- }
438
- /** Emits the `delete` output event with all currently selected items. */
439
- doDelete() {
440
- const selectedItems = [];
441
- this.selection().selectedOptions.selected.forEach((element) => {
442
- selectedItems.push(element.value);
443
- });
444
- this.delete.emit({
445
- items: this.dialogData().items,
446
- selectedItems: selectedItems,
447
- });
448
- this.canDelete.set(false);
449
- this.canEdit.set(false);
450
- }
451
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SelectDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
452
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SelectDialogComponent, isStandalone: true, selector: "ng-component", outputs: { done: "done", edit: "edit", view: "view", append: "append", delete: "delete", lookup: "lookup", lookupOptions: "lookupOptions", filter: "filter" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: ["paginator"], descendants: true, isSignal: true }, { propertyName: "selection", first: true, predicate: ["selection"], descendants: true, isSignal: true }], ngImport: i0, template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n<div style=\"padding: 0 24px\">\n @if (dialogData().description) {\n <div class=\"select-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n }\n <div>\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"space-between center\" fxFill>\n @if (!dialogData().canLookupWithOptions) {\n <div fxFlex>\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\n <mat-label>{{dialogData().searchLabel ?? 'Cerca...'}}</mat-label>\n <input type=\"text\" (keyup.enter)=\"$event.preventDefault(); $event.stopPropagation(); doFilter()\" matInput\n title=\"{{dialogData().canLookup ? 'Digita il testo e premi invio' : 'Digita il testo'}}\"\n [formField]=\"filterForm\">\n @if (filterText()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n @if (dialogData().canLookupWithInlineOptions) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Ricerca\"\n (click)=\"showFilterOptions()\" matTooltip=\"Opzioni di ricerca\">\n <mat-icon>tune</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n }\n @if (!dialogData().canLookupWithOptions && dialogData().canLookup && dialogData().lookupFields) {\n <div fxFlex fxHide.lt-md>\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\n <mat-label>Come...</mat-label>\n <mat-select [(value)]=\"lookupField\">\n @for (field of dialogData().lookupFields; track $index) {\n <mat-option [value]=\"field.value\">\n {{field.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n }\n @if (dialogData().canLookupWithOptions) {\n <div fxFlex fxHide.lt-md>\n <button fxFlexAlign=\"center\" type=\"button\" mat-button aria-label=\"Ricerca\" (click)=\"showFilterOptions()\">\n <mat-icon>search</mat-icon> {{this.dialogData().searchButtonLabel ?? 'Ricerca'}}\n </button>\n </div>\n }\n @if (dialogData().canLookup && dialogData().canFilter) {\n <div fxFlex fxHide.lt-md>\n <button type=\"button\" mat-button matTooltip=\"Filtra\" [attr.aria-label]=\"'Filtra'\"\n [matMenuTriggerFor]=\"menuFilter\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" >\n <div><mat-icon>filter_alt</mat-icon></div>\n <div>{{filterOptionsInfo()}}</div>\n <div><mat-icon class=\"icon-menu-drop-down\">\n arrow_drop_down</mat-icon></div>\n </div>\n </button>\n <mat-menu #menuFilter=\"matMenu\" class=\"mat-menu-300\">\n @for (f of filterOptions(); track $index) {\n @if (f.divider) {\n <mat-divider></mat-divider>\n }\n @if (f.groupName) {\n <span style='font-size:small; padding: 2px 4px;'><i><b>{{f.groupName}}</b></i></span>\n }\n @if (!f.groupName && !f.divider) {\n <button mat-menu-item (click)=\"doFilterByOptions(f, true)\" [attr.aria-label]=\"f.description\">\n @if (f.radio && f.value) {\n <span style=\"padding-left:40px\"></span>\n }\n <mat-icon>{{f.icon}}</mat-icon> {{f.title}}\n </button>\n }\n\n }\n </mat-menu>\n </div>\n }\n @if (canEdit() || canAppend() || canView() || canDelete()) {\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" >\n <div fxFlex fxHide.lt-md>\n @if (canAppend()) {\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\n </button>\n }\n @if (canEdit()) {\n <button type=\"button\" mat-icon-button (click)=\"doEdit()\">\n <mat-icon aria-label=\"Modifica\" matTooltip=\"Modifica\">edit</mat-icon>\n </button>\n }\n @if (canView()) {\n <button type=\"button\" mat-icon-button (click)=\"doView()\">\n <mat-icon aria-label=\"Mostra\" matTooltip=\"Mostra\">visibility</mat-icon>\n </button>\n }\n @if (canDelete()) {\n <button type=\"button\" mat-icon-button (click)=\"doDelete()\">\n <mat-icon aria-label=\"Elimina\" matTooltip=\"Elimina\">delete</mat-icon>\n </button>\n }\n </div>\n <div fxFlex fxHide.gt-sm>\n <button type=\"button\" mat-icon-button matTooltip=\"Azioni\" [attr.aria-label]=\"'Azioni'\"\n [matMenuTriggerFor]=\"menuActions\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menuActions=\"matMenu\" class=\"mat-menu-300\">\n @if (canAppend()) {\n <button mat-menu-item (click)=\"doAppend()\" [attr.aria-label]=\"'Aggiungi'\">\n <mat-icon>add</mat-icon> Aggiungi\n </button>\n }\n @if (canEdit()) {\n <button mat-menu-item (click)=\"doEdit()\" [attr.aria-label]=\"'Modifica'\">\n <mat-icon>edit</mat-icon> Modifica\n </button>\n }\n @if (canView()) {\n <button mat-menu-item (click)=\"doView()\" [attr.aria-label]=\"'Mostra'\">\n <mat-icon>visibility</mat-icon> Mostra\n </button>\n }\n @if (canDelete()) {\n <button mat-menu-item (click)=\"doDelete()\" [attr.aria-label]=\"'Elimina'\">\n <mat-icon>delete</mat-icon> Elimina\n </button>\n }\n </mat-menu>\n </div>\n </div>\n }\n </div>\n </div>\n @if ((dialogData().multipleSelection || dialogData().header) && dialogData().items?.length > 0) {\n <div>\n <div fxLayout=\"row\" fxFill style=\"padding-top: 10px;\">\n @if (dialogData().multipleSelection) {\n <div fxFlex=\"64px\" fxFlexAlign=\"center\" style=\"padding-left: 8px;\">\n <mat-checkbox (change)=\"$event ? masterSelectionToggle($event) : null\"\n [indeterminate]=\"selectionMasterIndeterminate()\" [checked]=\"selectionMasterChecked()\"\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\">\n </mat-checkbox>\n </div>\n }\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\n @if (dialogData().header) {\n <div class=\"text\" [innerHtml]=\"dialogData().header | safeHtml\"></div>\n }\n </div>\n </div>\n </div>\n }\n</div>\n<mat-dialog-content style=\"padding-top:0\">\n <div fxLayout=\"column\" fxFill>\n @if (dialogData().canLookup && (!dialogData().items || dialogData().items.length == 0)) {\n <div class=\"text message\"><i>\n @if (!dialogData().emptyMessage) {\n <span>Nessun elemento da visualizzare.<br>Esegui una nuova ricerca o modifica quella\n esistente.\n @if (dialogData().maxItems > 0) {\n <span>Saranno mostrati al massimo {{dialogData().maxItems}} elementi.</span>\n }\n </span>\n } @else {\n <span [innerHtml]=\"dialogData().emptyMessage | safeHtml\"></span>\n }\n </i>\n </div>\n }\n <mat-selection-list #selection (selectionChange)=\"select($event)\" dense hideSingleSelectionIndicator=\"true\"\n [multiple]=\"dialogData().multipleSelection\">\n @for (item of (dialogData().items | search: (!dialogData().canLookup ? filterText() : ''): filterMetadata); track\n $index) {\n <mat-list-option [value]=\"item\" [selected]=\"item.selected\" togglePosition=\"before\">\n <div [innerHtml]=\"item.template | safeHtml\"></div>\n </mat-list-option>\n }\n </mat-selection-list>\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"column\" fxFill>\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\n <div class=\"secondary\" style=\"padding-left:20px\">\n @if (selectionInfo()) {\n <span class=\"bold\">{{selectionInfo()}}</span>&nbsp; <span class=\"small\"> elementi selezionati</span>\n } @else {\n <span class=\"bold\">{{(dialogData().canLookup ? total() : (filterText() ? filterMetadata.count : total())) ??\n 0}}</span>&nbsp; <span class=\"small\"> elementi</span>\n }\n </div>\n <div fxFlexAlign=\"center\">\n @if (canPaginate()) {\n <mat-paginator class=\"x-small\" #paginator [hidePageSize]=\"true\" [pageSize]=\"dialogData().pageSize\" [showFirstLastButtons]=\"true\"\n (page)=\"doLookupPage($event)\" [length]=\"total() ?? 0\"></mat-paginator>\n }\n </div>\n </div>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"okDisabled()\">\n <span>{{dialogData().mustSelect ? dialogData().okCaption : 'Chiudi'}}</span>\n </button>\n @if (dialogData().mustSelect) {\n <button mat-stroked-button mat-dialog-close>\n <span>Annulla</span>\n </button>\n }\n </div>\n </div>\n</mat-dialog-actions>", styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.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}.fill{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;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!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:1.2!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 .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.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}}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}::ng-deep .mdc-list-item__primary-text,.mdc-list-item__content{white-space:normal!important}::ng-deep .mdc-list-item.mdc-list-item--with-one-line{height:unset!important;min-height:48px!important}.select-description{padding:0 24px 24px}.mat-mdc-form-field-icon-suffix{padding-right:8px!important}\n"], dependencies: [{ kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.FxLayoutDirective, 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.FxFlexDirective, 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: "directive", type: i1.FxShowHideDirective, selector: " [fxShow], [fxHide], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg] ", inputs: ["fxShow", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i1.FxLayoutAlignDirective, 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.FxLayoutGapDirective, 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.FxFlexAlignDirective, 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.FxFlexFillDirective, selector: " [fxFlexFill], [fxFill], [fxFlexFill.xs], [fxFlexFill.sm], [fxFlexFill.md], [fxFlexFill.lg], [fxFlexFill.xl], [fxFlexFill.lt-sm], [fxFlexFill.lt-md], [fxFlexFill.lt-lg], [fxFlexFill.lt-xl], [fxFlexFill.gt-xs], [fxFlexFill.gt-sm], [fxFlexFill.gt-md], [fxFlexFill.gt-lg] ", inputs: ["fxFlexFill", "fxFill", "fxFlexFill.xs", "fxFlexFill.sm", "fxFlexFill.md", "fxFlexFill.lg", "fxFlexFill.xl", "fxFlexFill.lt-sm", "fxFlexFill.lt-md", "fxFlexFill.lt-lg", "fxFlexFill.lt-xl", "fxFlexFill.gt-xs", "fxFlexFill.gt-sm", "fxFlexFill.gt-md", "fxFlexFill.gt-lg"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.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: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.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: i4.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i10.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: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i9.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i9.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i11.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "pipe", type: SearchFilterPipe, name: "search" }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
453
- }
454
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SelectDialogComponent, decorators: [{
455
- type: Component,
456
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
457
- FlexLayoutModule,
458
- MatDialogTitle,
459
- MatFormFieldModule,
460
- MatInputModule,
461
- FormField,
462
- MatButtonModule,
463
- MatIconModule,
464
- MatSelectModule,
465
- MatOptionModule,
466
- MatTooltipModule,
467
- MatMenuModule,
468
- MatDividerModule,
469
- MatCheckboxModule,
470
- MatDialogContent,
471
- MatListModule,
472
- MatDialogActions,
473
- MatDialogClose,
474
- MatPaginatorModule,
475
- SearchFilterPipe,
476
- SafeHtmlPipe
477
- ], template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n<div style=\"padding: 0 24px\">\n @if (dialogData().description) {\n <div class=\"select-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n }\n <div>\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"space-between center\" fxFill>\n @if (!dialogData().canLookupWithOptions) {\n <div fxFlex>\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\n <mat-label>{{dialogData().searchLabel ?? 'Cerca...'}}</mat-label>\n <input type=\"text\" (keyup.enter)=\"$event.preventDefault(); $event.stopPropagation(); doFilter()\" matInput\n title=\"{{dialogData().canLookup ? 'Digita il testo e premi invio' : 'Digita il testo'}}\"\n [formField]=\"filterForm\">\n @if (filterText()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n @if (dialogData().canLookupWithInlineOptions) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Ricerca\"\n (click)=\"showFilterOptions()\" matTooltip=\"Opzioni di ricerca\">\n <mat-icon>tune</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n }\n @if (!dialogData().canLookupWithOptions && dialogData().canLookup && dialogData().lookupFields) {\n <div fxFlex fxHide.lt-md>\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\n <mat-label>Come...</mat-label>\n <mat-select [(value)]=\"lookupField\">\n @for (field of dialogData().lookupFields; track $index) {\n <mat-option [value]=\"field.value\">\n {{field.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n }\n @if (dialogData().canLookupWithOptions) {\n <div fxFlex fxHide.lt-md>\n <button fxFlexAlign=\"center\" type=\"button\" mat-button aria-label=\"Ricerca\" (click)=\"showFilterOptions()\">\n <mat-icon>search</mat-icon> {{this.dialogData().searchButtonLabel ?? 'Ricerca'}}\n </button>\n </div>\n }\n @if (dialogData().canLookup && dialogData().canFilter) {\n <div fxFlex fxHide.lt-md>\n <button type=\"button\" mat-button matTooltip=\"Filtra\" [attr.aria-label]=\"'Filtra'\"\n [matMenuTriggerFor]=\"menuFilter\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" >\n <div><mat-icon>filter_alt</mat-icon></div>\n <div>{{filterOptionsInfo()}}</div>\n <div><mat-icon class=\"icon-menu-drop-down\">\n arrow_drop_down</mat-icon></div>\n </div>\n </button>\n <mat-menu #menuFilter=\"matMenu\" class=\"mat-menu-300\">\n @for (f of filterOptions(); track $index) {\n @if (f.divider) {\n <mat-divider></mat-divider>\n }\n @if (f.groupName) {\n <span style='font-size:small; padding: 2px 4px;'><i><b>{{f.groupName}}</b></i></span>\n }\n @if (!f.groupName && !f.divider) {\n <button mat-menu-item (click)=\"doFilterByOptions(f, true)\" [attr.aria-label]=\"f.description\">\n @if (f.radio && f.value) {\n <span style=\"padding-left:40px\"></span>\n }\n <mat-icon>{{f.icon}}</mat-icon> {{f.title}}\n </button>\n }\n\n }\n </mat-menu>\n </div>\n }\n @if (canEdit() || canAppend() || canView() || canDelete()) {\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" >\n <div fxFlex fxHide.lt-md>\n @if (canAppend()) {\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\n </button>\n }\n @if (canEdit()) {\n <button type=\"button\" mat-icon-button (click)=\"doEdit()\">\n <mat-icon aria-label=\"Modifica\" matTooltip=\"Modifica\">edit</mat-icon>\n </button>\n }\n @if (canView()) {\n <button type=\"button\" mat-icon-button (click)=\"doView()\">\n <mat-icon aria-label=\"Mostra\" matTooltip=\"Mostra\">visibility</mat-icon>\n </button>\n }\n @if (canDelete()) {\n <button type=\"button\" mat-icon-button (click)=\"doDelete()\">\n <mat-icon aria-label=\"Elimina\" matTooltip=\"Elimina\">delete</mat-icon>\n </button>\n }\n </div>\n <div fxFlex fxHide.gt-sm>\n <button type=\"button\" mat-icon-button matTooltip=\"Azioni\" [attr.aria-label]=\"'Azioni'\"\n [matMenuTriggerFor]=\"menuActions\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menuActions=\"matMenu\" class=\"mat-menu-300\">\n @if (canAppend()) {\n <button mat-menu-item (click)=\"doAppend()\" [attr.aria-label]=\"'Aggiungi'\">\n <mat-icon>add</mat-icon> Aggiungi\n </button>\n }\n @if (canEdit()) {\n <button mat-menu-item (click)=\"doEdit()\" [attr.aria-label]=\"'Modifica'\">\n <mat-icon>edit</mat-icon> Modifica\n </button>\n }\n @if (canView()) {\n <button mat-menu-item (click)=\"doView()\" [attr.aria-label]=\"'Mostra'\">\n <mat-icon>visibility</mat-icon> Mostra\n </button>\n }\n @if (canDelete()) {\n <button mat-menu-item (click)=\"doDelete()\" [attr.aria-label]=\"'Elimina'\">\n <mat-icon>delete</mat-icon> Elimina\n </button>\n }\n </mat-menu>\n </div>\n </div>\n }\n </div>\n </div>\n @if ((dialogData().multipleSelection || dialogData().header) && dialogData().items?.length > 0) {\n <div>\n <div fxLayout=\"row\" fxFill style=\"padding-top: 10px;\">\n @if (dialogData().multipleSelection) {\n <div fxFlex=\"64px\" fxFlexAlign=\"center\" style=\"padding-left: 8px;\">\n <mat-checkbox (change)=\"$event ? masterSelectionToggle($event) : null\"\n [indeterminate]=\"selectionMasterIndeterminate()\" [checked]=\"selectionMasterChecked()\"\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\">\n </mat-checkbox>\n </div>\n }\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\n @if (dialogData().header) {\n <div class=\"text\" [innerHtml]=\"dialogData().header | safeHtml\"></div>\n }\n </div>\n </div>\n </div>\n }\n</div>\n<mat-dialog-content style=\"padding-top:0\">\n <div fxLayout=\"column\" fxFill>\n @if (dialogData().canLookup && (!dialogData().items || dialogData().items.length == 0)) {\n <div class=\"text message\"><i>\n @if (!dialogData().emptyMessage) {\n <span>Nessun elemento da visualizzare.<br>Esegui una nuova ricerca o modifica quella\n esistente.\n @if (dialogData().maxItems > 0) {\n <span>Saranno mostrati al massimo {{dialogData().maxItems}} elementi.</span>\n }\n </span>\n } @else {\n <span [innerHtml]=\"dialogData().emptyMessage | safeHtml\"></span>\n }\n </i>\n </div>\n }\n <mat-selection-list #selection (selectionChange)=\"select($event)\" dense hideSingleSelectionIndicator=\"true\"\n [multiple]=\"dialogData().multipleSelection\">\n @for (item of (dialogData().items | search: (!dialogData().canLookup ? filterText() : ''): filterMetadata); track\n $index) {\n <mat-list-option [value]=\"item\" [selected]=\"item.selected\" togglePosition=\"before\">\n <div [innerHtml]=\"item.template | safeHtml\"></div>\n </mat-list-option>\n }\n </mat-selection-list>\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"column\" fxFill>\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\n <div class=\"secondary\" style=\"padding-left:20px\">\n @if (selectionInfo()) {\n <span class=\"bold\">{{selectionInfo()}}</span>&nbsp; <span class=\"small\"> elementi selezionati</span>\n } @else {\n <span class=\"bold\">{{(dialogData().canLookup ? total() : (filterText() ? filterMetadata.count : total())) ??\n 0}}</span>&nbsp; <span class=\"small\"> elementi</span>\n }\n </div>\n <div fxFlexAlign=\"center\">\n @if (canPaginate()) {\n <mat-paginator class=\"x-small\" #paginator [hidePageSize]=\"true\" [pageSize]=\"dialogData().pageSize\" [showFirstLastButtons]=\"true\"\n (page)=\"doLookupPage($event)\" [length]=\"total() ?? 0\"></mat-paginator>\n }\n </div>\n </div>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"okDisabled()\">\n <span>{{dialogData().mustSelect ? dialogData().okCaption : 'Chiudi'}}</span>\n </button>\n @if (dialogData().mustSelect) {\n <button mat-stroked-button mat-dialog-close>\n <span>Annulla</span>\n </button>\n }\n </div>\n </div>\n</mat-dialog-actions>", styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.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}.fill{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;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!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:1.2!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 .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.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}}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}::ng-deep .mdc-list-item__primary-text,.mdc-list-item__content{white-space:normal!important}::ng-deep .mdc-list-item.mdc-list-item--with-one-line{height:unset!important;min-height:48px!important}.select-description{padding:0 24px 24px}.mat-mdc-form-field-icon-suffix{padding-right:8px!important}\n"] }]
478
- }], ctorParameters: () => [], propDecorators: { paginator: [{ type: i0.ViewChild, args: ['paginator', { isSignal: true }] }], selection: [{ type: i0.ViewChild, args: ["selection", { isSignal: true }] }], done: [{ type: i0.Output, args: ["done"] }], edit: [{ type: i0.Output, args: ["edit"] }], view: [{ type: i0.Output, args: ["view"] }], append: [{ type: i0.Output, args: ["append"] }], delete: [{ type: i0.Output, args: ["delete"] }], lookup: [{ type: i0.Output, args: ["lookup"] }], lookupOptions: [{ type: i0.Output, args: ["lookupOptions"] }], filter: [{ type: i0.Output, args: ["filter"] }] } });
479
-
480
- class TreeDataSource {
481
- constructor() {
482
- this._dataChange = new BehaviorSubject([]);
483
- this.dataChange$ = this._dataChange.asObservable();
484
- }
485
- get data() {
486
- return this._dataChange.value;
487
- }
488
- ngOnDestroy() {
489
- this._dataChange.complete();
490
- }
491
- initialize(data) {
492
- this._dataChange.next(data);
493
- }
494
- /**
495
- * Find a node by id recursively.
496
- * @param node - The source node to search from, or null to search from root.
497
- * @param id - The id to search for.
498
- * @returns The matching node, or undefined if not found.
499
- */
500
- findNode(node, id) {
501
- if (node) {
502
- if (node.id === id)
503
- return node;
504
- const children = node.children;
505
- if (children) {
506
- let _n;
507
- children.some(n => {
508
- _n = this.findNode(n, id);
509
- return !!_n;
510
- });
511
- return _n;
512
- }
513
- return undefined;
514
- }
515
- // Search all root nodes when called with null
516
- for (const root of this.data) {
517
- const found = this.findNode(root, id);
518
- if (found)
519
- return found;
520
- }
521
- return undefined;
522
- }
523
- /**
524
- * Remove a node from the tree.
525
- * @param id - The id of the node to remove.
526
- */
527
- removeNode(id) {
528
- let n = this.findNode(null, id);
529
- if (!n)
530
- return;
531
- if (n.parent) {
532
- // children/count are optional on INode: guard before indexing
533
- const siblings = n.parent.children ?? [];
534
- const p = siblings.findIndex(c => c.id === id);
535
- if (p !== -1) {
536
- siblings.splice(p, 1);
537
- if ((n.parent.count ?? 0) > 0)
538
- n.parent.count--;
539
- }
540
- }
541
- else {
542
- const p = this.data.findIndex(n => n.id === id);
543
- if (p !== -1) {
544
- this.data.splice(p, 1);
545
- }
546
- }
547
- this._dataChange.next(this.data);
548
- }
549
- /**
550
- * Insert a new node at the top of its parent (or root).
551
- * @param node - The new node to insert.
552
- */
553
- insertNode(node) {
554
- if (node.parent) {
555
- (node.parent.children ??= []).unshift(node);
556
- node.parent.count = (node.parent.count ?? 0) + 1;
557
- }
558
- else
559
- this.data.unshift(node);
560
- this._dataChange.next(this.data);
561
- }
562
- /**
563
- * Rename a node in the tree.
564
- * @param id - The id of the node to rename.
565
- * @param name - The new name for the node.
566
- * @returns The renamed node, or undefined if not found.
567
- */
568
- renameNode(id, name) {
569
- const n = this.findNode(null, id);
570
- if (n) {
571
- n.name = name;
572
- this._dataChange.next(this.data);
573
- }
574
- return n;
575
- }
576
- /**
577
- * Notify all subscribers of the current data state.
578
- */
579
- update() {
580
- this._dataChange.next(this.data);
581
- }
582
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: TreeDataSource, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
583
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: TreeDataSource }); }
584
- }
585
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: TreeDataSource, decorators: [{
586
- type: Injectable
587
- }] });
588
- class SelectTreeDialogComponent {
589
- constructor() {
590
- /** Emitted when the user confirms a selection. */
591
- this.done = output();
592
- /** Emitted when the user requests to append a new node. */
593
- this.append = output();
594
- this.destroyRef = inject(DestroyRef);
595
- this.dialogRef = inject((MatDialogRef));
596
- /** Dialog configuration, injected and exposed as a signal. */
597
- this.dialogData = signal((() => {
598
- const data = inject(MAT_DIALOG_DATA) ?? {};
599
- return { ...data, title: data.title ?? 'Seleziona', okCaption: data.okCaption ?? 'OK' };
600
- })(), /* @ts-ignore */
601
- ...(ngDevMode ? [{ debugName: "dialogData" }] : /* istanbul ignore next */ []));
602
- this.tree = inject(TreeDataSource);
603
- this._elRef = inject(ElementRef);
604
- /** Reference to the Material tree component. */
605
- this.matTree = viewChild(MatTree, /* @ts-ignore */
606
- ...(ngDevMode ? [{ debugName: "matTree" }] : /* istanbul ignore next */ []));
607
- /** Provides children of a tree node to the tree component. */
608
- this.childrenAccessor = (node) => (node.children ?? []);
609
- /** Root nodes used as the tree data source. */
610
- this.treeNodes = signal([], /* @ts-ignore */
611
- ...(ngDevMode ? [{ debugName: "treeNodes" }] : /* istanbul ignore next */ []));
612
- /** Currently selected tree node. */
613
- this.currentNode = signal(undefined, /* @ts-ignore */
614
- ...(ngDevMode ? [{ debugName: "currentNode" }] : /* istanbul ignore next */ []));
615
- /** Current filter text. */
616
- this.filterText = signal('', /* @ts-ignore */
617
- ...(ngDevMode ? [{ debugName: "filterText" }] : /* istanbul ignore next */ []));
618
- /** Root signal form bound to the filter text input. */
619
- this.filterForm = form(this.filterText);
620
- /** Nodes matching the current filter text. */
621
- this.filteredItems = signal([], /* @ts-ignore */
622
- ...(ngDevMode ? [{ debugName: "filteredItems" }] : /* istanbul ignore next */ []));
623
- /** Index of the currently highlighted filtered node (-1 = none). */
624
- this.filterIndex = signal(-1, /* @ts-ignore */
625
- ...(ngDevMode ? [{ debugName: "filterIndex" }] : /* istanbul ignore next */ []));
626
- /** The currently highlighted filtered node, or null. */
627
- this.filteredNode = computed(() => {
628
- const idx = this.filterIndex();
629
- return idx >= 0 ? (this.filteredItems()[idx] ?? null) : null;
630
- }, /* @ts-ignore */
631
- ...(ngDevMode ? [{ debugName: "filteredNode" }] : /* istanbul ignore next */ []));
632
- this.canAppend = signal(this.dialogData().canAppend || false, /* @ts-ignore */
633
- ...(ngDevMode ? [{ debugName: "canAppend" }] : /* istanbul ignore next */ []));
634
- /** Flat node map rebuilt whenever treeNodes changes. */
635
- this._nodeMap = computed(() => {
636
- const map = new Map();
637
- const build = (nodes) => {
638
- for (const n of nodes) {
639
- map.set(n.id, n);
640
- if (n.children?.length)
641
- build(n.children);
642
- }
643
- };
644
- build(this.treeNodes());
645
- return map;
646
- }, /* @ts-ignore */
647
- ...(ngDevMode ? [{ debugName: "_nodeMap" }] : /* istanbul ignore next */ []));
648
- this.hasChild = (_, node) => !!(node.children?.length);
649
- this.tree.dataChange$
650
- .pipe(takeUntilDestroyed(this.destroyRef))
651
- .subscribe(data => {
652
- this.treeNodes.set(data);
653
- setTimeout(() => {
654
- const current = this.currentNode();
655
- if (current) {
656
- const n = this.findInTree(data, current.id);
657
- if (n) {
658
- this.currentNode.set(n);
659
- this.expand(n);
660
- }
661
- }
662
- });
663
- });
664
- const data = this.dialogData();
665
- if (data.nodes) {
666
- this.tree.initialize(data.nodes);
667
- }
668
- if (data.initialFilter) {
669
- this.filterText.set(data.initialFilter);
670
- this.doFilter();
671
- }
672
- }
673
- /**
674
- * Confirm the current selection and close the dialog.
675
- */
676
- ok() {
677
- const node = this.currentNode();
678
- if (node) {
679
- this.done.emit({ selectedItems: [node] });
680
- }
681
- setTimeout(() => {
682
- this.dialogRef.close();
683
- }, 500);
684
- }
685
- /**
686
- * Toggle selection of a tree node. Clicking the already-selected node deselects it.
687
- * @param e - The mouse event (propagation is stopped).
688
- * @param node - The node that was clicked.
689
- */
690
- select(e, node) {
691
- if (e)
692
- e.stopPropagation();
693
- if (node) {
694
- this.currentNode.set(node.id === this.currentNode()?.id ? undefined : node);
695
- }
696
- }
697
- /**
698
- * Clear the active filter text.
699
- */
700
- clearFilter() {
701
- this.filterText.set('');
702
- this.filteredItems.set([]);
703
- this.filterIndex.set(-1);
704
- }
705
- /**
706
- * Filter the tree nodes by name (minimum 3 characters).
707
- */
708
- doFilter() {
709
- const text = this.filterText().trim().toLowerCase();
710
- if (text.length < 3) {
711
- this.filteredItems.set([]);
712
- this.filterIndex.set(-1);
713
- return;
714
- }
715
- const matches = Array.from(this._nodeMap().values())
716
- .filter(n => n.name?.toLowerCase().includes(text));
717
- this.filteredItems.set(matches);
718
- const idx = matches.length > 0 ? 0 : -1;
719
- this.filterIndex.set(idx);
720
- if (idx >= 0)
721
- this._scrollToFiltered(idx, matches);
722
- }
723
- /**
724
- * Advance to the next matching filtered node and scroll it into view.
725
- */
726
- nextFiltered() {
727
- const items = this.filteredItems();
728
- if (!items.length)
729
- return;
730
- const next = (this.filterIndex() + 1) % items.length;
731
- this.filterIndex.set(next);
732
- this._scrollToFiltered(next, items);
733
- }
734
- /**
735
- * Returns true when the node is the currently highlighted filter match.
736
- * @param node - tree node to check.
737
- */
738
- isFilteredNode(node) {
739
- return this.filteredNode()?.id === node.id;
740
- }
741
- /**
742
- * Expands ancestors of the target node and scrolls it into view.
743
- * @param index - index within `items` to scroll to.
744
- * @param items - current filtered items array.
745
- */
746
- _scrollToFiltered(index, items) {
747
- const node = items[index];
748
- if (!node)
749
- return;
750
- this.currentNode.set(node);
751
- this.expand(node);
752
- setTimeout(() => {
753
- const el = this._elRef.nativeElement.querySelector(`[data-node-id="${node.id}"]`);
754
- el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
755
- });
756
- }
757
- /**
758
- * Expand a node and all of its parent nodes.
759
- * @param node - The node to expand.
760
- * @returns Always false.
761
- */
762
- expand(node) {
763
- this.matTree()?.expand(node);
764
- let parent = node.parent;
765
- const visited = new Set();
766
- while (parent && !visited.has(parent)) {
767
- visited.add(parent);
768
- this.matTree()?.expand(parent);
769
- parent = parent.parent;
770
- }
771
- return false;
772
- }
773
- /**
774
- * Recursively find a node by id.
775
- * @param nodes - Nodes to search.
776
- * @param id - The id to find.
777
- */
778
- findInTree(nodes, id) {
779
- for (const node of nodes) {
780
- if (node.id === id)
781
- return node;
782
- if (node.children?.length) {
783
- const found = this.findInTree(node.children, id);
784
- if (found)
785
- return found;
786
- }
787
- }
788
- return undefined;
789
- }
790
- /**
791
- * Append a new node to the tree.
792
- * @param node - The node to insert.
793
- */
794
- appendNode(node) {
795
- this.tree.insertNode(node);
796
- }
797
- /**
798
- * Collapse all tree nodes and reset the current selection.
799
- */
800
- collapseAll() {
801
- this.matTree()?.collapseAll();
802
- this.currentNode.set(undefined);
803
- }
804
- /**
805
- * Expand all tree nodes and scroll to the selected node, if any.
806
- */
807
- expandAll() {
808
- this.matTree()?.expandAll();
809
- const node = this.currentNode();
810
- if (node) {
811
- setTimeout(() => {
812
- const el = this._elRef.nativeElement.querySelector(`[data-node-id="${node.id}"]`);
813
- el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
814
- });
815
- }
816
- }
817
- /**
818
- * Emit an append request with the currently selected node as the parent.
819
- */
820
- doAppend() {
821
- this.append.emit({ parent: this.currentNode(), owner: this });
822
- }
823
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SelectTreeDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
824
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SelectTreeDialogComponent, isStandalone: true, selector: "ng-component", outputs: { done: "done", append: "append" }, providers: [TreeDataSource], viewQueries: [{ propertyName: "matTree", first: true, predicate: MatTree, descendants: true, isSignal: true }], ngImport: i0, template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n<div style=\"padding: 0 24px\">\n @if (dialogData().description) {\n <div class=\"selecttree-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n }\n <div style=\"padding-bottom: 10px;\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex fxHide.xs>\n <mat-form-field style=\"width:100%\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Cerca...</mat-label>\n <input type=\"text\" (keyup)=\"doFilter()\" matInput title=\"Digita il testo'\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\" \n (keydown.arrowDown)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\"\n [formField]=\"filterForm\">\n @if (filterText()) {\n <button type=\"button\" type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n @if (filteredItems().length > 0) {\n <div fxFlex=\"50px\" fxHide.xs fxLayoutAlign=\"end center\">\n <div class=\"small\">{{filterIndex() + 1}} / {{filteredItems().length}}</div>\n </div>\n <div fxFlex=\"48px\" fxHide.xs fxLayoutAlign=\"end center\">\n <button type=\"button\" type=\"button\" mat-icon-button (click)=\"nextFiltered()\">\n <mat-icon aria-label=\"Vai al prossimo\" matTooltip=\"Vai al prossimo\">arrow_downward</mat-icon>\n </button>\n </div>\n }\n <div fxFlex=\"50\" fxLayoutAlign=\"end center\" style=\"white-space:nowrap\">\n <div>\n @if (canAppend()) {\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\n </button>\n }\n <button type=\"button\" mat-icon-button (click)=\"collapseAll()\">\n <mat-icon aria-label=\"Comprimi tutto\" matTooltip=\"Comprimi tutto\">unfold_less</mat-icon>\n </button>\n <button type=\"button\" mat-icon-button (click)=\"expandAll()\">\n <mat-icon aria-label=\"Espandi tutto\" matTooltip=\"Espandi tutto\">unfold_more</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n<mat-dialog-content>\n <div fxLayout=\"column\" fxFill>\n <mat-tree [dataSource]=\"treeNodes()\" [childrenAccessor]=\"childrenAccessor\" class=\"tree\">\n <mat-tree-node [attr.data-node-id]=\"node.id\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node\" (click)=\"select($event, node);\"\n [class.tree-node-activated]=\"currentNode()?.id === node.id\" [class.tree-node-filtered]=\"isFilteredNode(node)\">\n <div fxLayout=\"row\" fxFill>\n <button type=\"button\" mat-icon-button disabled class=\"small-icon-button\"></button>\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small\">\n {{node.name}}\n </div>\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\n @if (node.count > 0) {\n <span fxLayoutAlign=\"end\" class=\"small\">({{node.count}})</span>\n }\n </div>\n </div>\n </mat-tree-node>\n\n <mat-tree-node #treeNodeRef=\"matTreeNode\" [attr.data-node-id]=\"node.id\" *matTreeNodeDef=\"let node;when: hasChild\"\n matTreeNodePadding [matTreeNodePaddingIndent]=\"20\" class=\"tree-node\"\n [class.tree-node-activated]=\"currentNode()?.id === node.id\" [class.tree-node-filtered]=\"isFilteredNode(node)\"\n (click)=\"select($event, node);\">\n <div fxLayout=\"row\" fxFill>\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\n <button type=\"button\" mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Apri/chiudi ' + node.name\"\n class=\"small-icon-button\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{treeNodeRef.isExpanded ? 'expand_more' : 'chevron_right'}}\n </mat-icon>\n </button>\n </div>\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small\">\n {{node.name}}\n </div>\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\n @if (node.count > 0) {\n <div fxLayoutAlign=\"end\" class=\"small\">({{node.count}})</div>\n }\n </div>\n </div>\n </mat-tree-node>\n </mat-tree>\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!currentNode()\">{{dialogData().okCaption}}</button>\n <button mat-button mat-dialog-close>Annulla</button>\n </div>\n</mat-dialog-actions>", styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.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}.fill{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;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!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:1.2!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 .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.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}}.tree{background-color:transparent!important}.tree-node{min-height:36px!important;padding-right:12px;margin-right:0}.tree-node .small-icon-button{width:2rem!important;height:2rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.tree-node .small-icon-button .mat-mdc-button-touch-target{width:2rem!important;height:2rem!important}.tree-node:hover{cursor:pointer;background-color:var(--mat-menu-item-hover-state-layer-color, transparent);border-radius:24px}.tree-node-filtered ::ng-deep .mdc-label,.tree-node-filtered ::ng-deep .mat-mdc-checkbox label{font-weight:700;color:var(--ars-color-accent, #7894ae)!important}.tree-node-activated ::ng-deep .mdc-label,.tree-node-activated ::ng-deep .mat-mdc-checkbox label{font-weight:700;color:var(--ars-color-secondary, #4a635f)!important}.selecttree-description{padding:0 24px 24px}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.FxLayoutDirective, 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.FxFlexDirective, 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: "directive", type: i1.FxShowHideDirective, selector: " [fxShow], [fxHide], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg] ", inputs: ["fxShow", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i1.FxLayoutAlignDirective, 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.FxLayoutGapDirective, 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.FxFlexAlignDirective, 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.FxFlexFillDirective, selector: " [fxFlexFill], [fxFill], [fxFlexFill.xs], [fxFlexFill.sm], [fxFlexFill.md], [fxFlexFill.lg], [fxFlexFill.xl], [fxFlexFill.lt-sm], [fxFlexFill.lt-md], [fxFlexFill.lt-lg], [fxFlexFill.lt-xl], [fxFlexFill.gt-xs], [fxFlexFill.gt-sm], [fxFlexFill.gt-md], [fxFlexFill.gt-lg] ", inputs: ["fxFlexFill", "fxFill", "fxFlexFill.xs", "fxFlexFill.sm", "fxFlexFill.md", "fxFlexFill.lg", "fxFlexFill.xl", "fxFlexFill.lt-sm", "fxFlexFill.lt-md", "fxFlexFill.lt-lg", "fxFlexFill.lt-xl", "fxFlexFill.gt-xs", "fxFlexFill.gt-sm", "fxFlexFill.gt-md", "fxFlexFill.gt-lg"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.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: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.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: i4.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i7$1.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i7$1.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i7$1.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i7$1.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i7$1.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
825
- }
826
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SelectTreeDialogComponent, decorators: [{
827
- type: Component,
828
- args: [{ providers: [TreeDataSource], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatDialogTitle, FlexLayoutModule, MatFormFieldModule, MatInputModule, FormField, MatButtonModule,
829
- MatIconModule, MatTooltipModule, MatDialogContent, MatTreeModule, MatDialogActions,
830
- MatDialogClose, SafeHtmlPipe], template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n<div style=\"padding: 0 24px\">\n @if (dialogData().description) {\n <div class=\"selecttree-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n }\n <div style=\"padding-bottom: 10px;\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex fxHide.xs>\n <mat-form-field style=\"width:100%\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Cerca...</mat-label>\n <input type=\"text\" (keyup)=\"doFilter()\" matInput title=\"Digita il testo'\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\" \n (keydown.arrowDown)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\"\n [formField]=\"filterForm\">\n @if (filterText()) {\n <button type=\"button\" type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n @if (filteredItems().length > 0) {\n <div fxFlex=\"50px\" fxHide.xs fxLayoutAlign=\"end center\">\n <div class=\"small\">{{filterIndex() + 1}} / {{filteredItems().length}}</div>\n </div>\n <div fxFlex=\"48px\" fxHide.xs fxLayoutAlign=\"end center\">\n <button type=\"button\" type=\"button\" mat-icon-button (click)=\"nextFiltered()\">\n <mat-icon aria-label=\"Vai al prossimo\" matTooltip=\"Vai al prossimo\">arrow_downward</mat-icon>\n </button>\n </div>\n }\n <div fxFlex=\"50\" fxLayoutAlign=\"end center\" style=\"white-space:nowrap\">\n <div>\n @if (canAppend()) {\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\n </button>\n }\n <button type=\"button\" mat-icon-button (click)=\"collapseAll()\">\n <mat-icon aria-label=\"Comprimi tutto\" matTooltip=\"Comprimi tutto\">unfold_less</mat-icon>\n </button>\n <button type=\"button\" mat-icon-button (click)=\"expandAll()\">\n <mat-icon aria-label=\"Espandi tutto\" matTooltip=\"Espandi tutto\">unfold_more</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n<mat-dialog-content>\n <div fxLayout=\"column\" fxFill>\n <mat-tree [dataSource]=\"treeNodes()\" [childrenAccessor]=\"childrenAccessor\" class=\"tree\">\n <mat-tree-node [attr.data-node-id]=\"node.id\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node\" (click)=\"select($event, node);\"\n [class.tree-node-activated]=\"currentNode()?.id === node.id\" [class.tree-node-filtered]=\"isFilteredNode(node)\">\n <div fxLayout=\"row\" fxFill>\n <button type=\"button\" mat-icon-button disabled class=\"small-icon-button\"></button>\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small\">\n {{node.name}}\n </div>\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\n @if (node.count > 0) {\n <span fxLayoutAlign=\"end\" class=\"small\">({{node.count}})</span>\n }\n </div>\n </div>\n </mat-tree-node>\n\n <mat-tree-node #treeNodeRef=\"matTreeNode\" [attr.data-node-id]=\"node.id\" *matTreeNodeDef=\"let node;when: hasChild\"\n matTreeNodePadding [matTreeNodePaddingIndent]=\"20\" class=\"tree-node\"\n [class.tree-node-activated]=\"currentNode()?.id === node.id\" [class.tree-node-filtered]=\"isFilteredNode(node)\"\n (click)=\"select($event, node);\">\n <div fxLayout=\"row\" fxFill>\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\n <button type=\"button\" mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Apri/chiudi ' + node.name\"\n class=\"small-icon-button\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{treeNodeRef.isExpanded ? 'expand_more' : 'chevron_right'}}\n </mat-icon>\n </button>\n </div>\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small\">\n {{node.name}}\n </div>\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\n @if (node.count > 0) {\n <div fxLayoutAlign=\"end\" class=\"small\">({{node.count}})</div>\n }\n </div>\n </div>\n </mat-tree-node>\n </mat-tree>\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!currentNode()\">{{dialogData().okCaption}}</button>\n <button mat-button mat-dialog-close>Annulla</button>\n </div>\n</mat-dialog-actions>", styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.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}.fill{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;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!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:1.2!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 .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.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}}.tree{background-color:transparent!important}.tree-node{min-height:36px!important;padding-right:12px;margin-right:0}.tree-node .small-icon-button{width:2rem!important;height:2rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.tree-node .small-icon-button .mat-mdc-button-touch-target{width:2rem!important;height:2rem!important}.tree-node:hover{cursor:pointer;background-color:var(--mat-menu-item-hover-state-layer-color, transparent);border-radius:24px}.tree-node-filtered ::ng-deep .mdc-label,.tree-node-filtered ::ng-deep .mat-mdc-checkbox label{font-weight:700;color:var(--ars-color-accent, #7894ae)!important}.tree-node-activated ::ng-deep .mdc-label,.tree-node-activated ::ng-deep .mat-mdc-checkbox label{font-weight:700;color:var(--ars-color-secondary, #4a635f)!important}.selecttree-description{padding:0 24px 24px}\n"] }]
831
- }], ctorParameters: () => [], propDecorators: { done: [{ type: i0.Output, args: ["done"] }], append: [{ type: i0.Output, args: ["append"] }], matTree: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MatTree), { isSignal: true }] }] } });
832
-
833
- /** Neutral form model: it declares every field the form owns and its empty value. */
834
- const _EMPTY_ITEM = { recipients: '', subject: '', text: '' };
835
- class SendToDialogComponent {
836
- constructor() {
837
- /** Error text of a field: the message declared in the schema, or the shared fallback. */
838
- this.getErrorMessage = SignalsUtils.getFieldErrorMessage;
839
- /** Emitted when the user confirms and sends the message. */
840
- this.done = output();
841
- /** Emitted when the user requests to populate the recipient list. */
842
- this.populate = output();
843
- /** Dialog configuration, injected and exposed as a signal. */
844
- this.dialogData = signal((() => {
845
- const data = inject(MAT_DIALOG_DATA) ?? {};
846
- const count = data.count ?? 0;
847
- const title = data.title || (count
848
- ? (count === 1 ? 'Invia documento a...' : `Invia ${count} documenti a...`)
849
- : undefined);
850
- return { ...data, count, appearance: data.appearance ?? 'fill', title };
851
- })(), /* @ts-ignore */
852
- ...(ngDevMode ? [{ debugName: "dialogData" }] : /* istanbul ignore next */ []));
853
- /** Model backing the signal form. */
854
- this.model = signal(this.toForm(), /* @ts-ignore */
855
- ...(ngDevMode ? [{ debugName: "model" }] : /* istanbul ignore next */ []));
856
- /**
857
- * Signal form for the send-to fields: recipients (a required, valid,
858
- * semicolon-separated email list), subject and text are all required.
859
- */
860
- this.form = form(this.model, p => {
861
- required(p.recipients);
862
- notEmpty(p.recipients);
863
- maxLength(p.recipients, 1000);
864
- emails(p.recipients);
865
- required(p.subject);
866
- notEmpty(p.subject);
867
- maxLength(p.subject, 200);
868
- required(p.text);
869
- notEmpty(p.text);
870
- maxLength(p.text, 1000);
871
- });
872
- }
873
- /**
874
- * Builds the form model from the dialog data, which may pre-fill subject and body.
875
- * @returns A fresh form model.
876
- */
877
- toForm() {
878
- const data = this.dialogData();
879
- return DtoUtils.toForm(_EMPTY_ITEM, { subject: data.subject, text: data.text });
880
- }
881
- /**
882
- * Builds the dialog result from the current form model.
883
- *
884
- * Ad-hoc because the result also carries the caller's `options`, which the dialog
885
- * only passes through and are therefore not part of the form model.
886
- * @returns The message to emit through `done` or `populate`.
887
- */
888
- toPayload() {
889
- return { ...DtoUtils.toPayload(this.model()), options: this.dialogData().options };
890
- }
891
- /**
892
- * Confirm the form and emit the result.
893
- */
894
- ok() {
895
- this.done.emit(this.toPayload());
896
- }
897
- /**
898
- * Request the host to populate the recipient list.
899
- * Only emits if `canPopulate` is enabled in the dialog data.
900
- */
901
- populateRecipients() {
902
- if (this.dialogData().canPopulate) {
903
- this.populate.emit({ item: this.toPayload(), source: this });
904
- }
905
- }
906
- /**
907
- * Update the recipient list from an external caller.
908
- * @param recipients - The new recipients string (semicolon-separated).
909
- */
910
- updateRecipients(recipients) {
911
- this.model.update(m => ({ ...m, recipients }));
912
- }
913
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SendToDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
914
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SendToDialogComponent, isStandalone: true, selector: "ng-component", outputs: { done: "done", populate: "populate" }, ngImport: i0, template: "<div class=\"dialog-info\">\r\n @if (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 class=\"dialog-content\">\r\n <p>{{dialogData().info}}</p>\r\n <form [formRoot]=\"form\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Destinatari</mat-label>\r\n <textarea matInput [formField]=\"form.recipients\"\r\n cdkTextareaAutosize cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\"></textarea>\r\n @if (form.recipients().value()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"form.recipients().value.set('')\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (dialogData().canPopulate) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Popola\"\r\n (click)=\"populateRecipients()\" matTooltip=\"Popola\">\r\n <mat-icon>person</mat-icon>\r\n </button>\r\n }\r\n <mat-hint align=\"start\">Separati da punto e virgola</mat-hint>\r\n <mat-hint align=\"end\">{{form.recipients().value()?.length || 0}}/1000 </mat-hint>\r\n @if (form.recipients().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.recipients().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Oggetto</mat-label>\r\n <input matInput [formField]=\"form.subject\" />\r\n @if (form.subject().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.subject().errors()) }}</mat-error>\r\n }\r\n <mat-hint align=\"end\">{{form.subject().value()?.length || 0}}/200 </mat-hint>\r\n </mat-form-field>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Testo</mat-label>\r\n <textarea matInput [formField]=\"form.text\" cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\"></textarea>\r\n <mat-hint align=\"end\">{{form.text().value()?.length || 0}}/1000 </mat-hint>\r\n @if (form.text().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.text().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (dialogData().options) {\r\n <div style=\"padding-bottom: 24px;\">\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 </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">Invia</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n", styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.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}.fill{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;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!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:1.2!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 .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.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}\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: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "directive", type: FormRoot, selector: "form[formRoot]", inputs: ["formRoot"] }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.FxLayoutDirective, 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.FxFlexDirective, 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: "directive", type: i1.FxLayoutAlignDirective, 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.FxLayoutGapDirective, 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.FxFlexFillDirective, selector: " [fxFlexFill], [fxFill], [fxFlexFill.xs], [fxFlexFill.sm], [fxFlexFill.md], [fxFlexFill.lg], [fxFlexFill.xl], [fxFlexFill.lt-sm], [fxFlexFill.lt-md], [fxFlexFill.lt-lg], [fxFlexFill.lt-xl], [fxFlexFill.gt-xs], [fxFlexFill.gt-sm], [fxFlexFill.gt-md], [fxFlexFill.gt-lg] ", inputs: ["fxFlexFill", "fxFill", "fxFlexFill.xs", "fxFlexFill.sm", "fxFlexFill.md", "fxFlexFill.lg", "fxFlexFill.xl", "fxFlexFill.lt-sm", "fxFlexFill.lt-md", "fxFlexFill.lt-lg", "fxFlexFill.lt-xl", "fxFlexFill.gt-xs", "fxFlexFill.gt-sm", "fxFlexFill.gt-md", "fxFlexFill.gt-lg"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.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: i4$1.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "ngmodule", type: TextFieldModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.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: i4.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i10.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: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
915
- }
916
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SendToDialogComponent, decorators: [{
917
- type: Component,
918
- args: [{ standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
919
- MatDialogTitle,
920
- MatDialogContent,
921
- FormField, FormRoot,
922
- FlexLayoutModule,
923
- MatFormFieldModule,
924
- MatInputModule,
925
- TextFieldModule,
926
- MatButtonModule,
927
- MatIconModule,
928
- MatTooltipModule,
929
- MatCheckboxModule,
930
- MatDialogActions,
931
- MatDialogClose,
932
- SafeHtmlPipe
933
- ], template: "<div class=\"dialog-info\">\r\n @if (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 class=\"dialog-content\">\r\n <p>{{dialogData().info}}</p>\r\n <form [formRoot]=\"form\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Destinatari</mat-label>\r\n <textarea matInput [formField]=\"form.recipients\"\r\n cdkTextareaAutosize cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\"></textarea>\r\n @if (form.recipients().value()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"form.recipients().value.set('')\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (dialogData().canPopulate) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Popola\"\r\n (click)=\"populateRecipients()\" matTooltip=\"Popola\">\r\n <mat-icon>person</mat-icon>\r\n </button>\r\n }\r\n <mat-hint align=\"start\">Separati da punto e virgola</mat-hint>\r\n <mat-hint align=\"end\">{{form.recipients().value()?.length || 0}}/1000 </mat-hint>\r\n @if (form.recipients().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.recipients().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Oggetto</mat-label>\r\n <input matInput [formField]=\"form.subject\" />\r\n @if (form.subject().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.subject().errors()) }}</mat-error>\r\n }\r\n <mat-hint align=\"end\">{{form.subject().value()?.length || 0}}/200 </mat-hint>\r\n </mat-form-field>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Testo</mat-label>\r\n <textarea matInput [formField]=\"form.text\" cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\"></textarea>\r\n <mat-hint align=\"end\">{{form.text().value()?.length || 0}}/1000 </mat-hint>\r\n @if (form.text().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.text().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (dialogData().options) {\r\n <div style=\"padding-bottom: 24px;\">\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 </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">Invia</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n", styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.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}.fill{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;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!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:1.2!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 .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.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}\n"] }]
934
- }], propDecorators: { done: [{ type: i0.Output, args: ["done"] }], populate: [{ type: i0.Output, args: ["populate"] }] } });
935
-
936
- /*
937
- * Public API Surface of @arsedizioni/ars-utils/ui.dialogs.select
938
- */
939
-
940
- /**
941
- * Generated bundle index. Do not edit.
942
- */
943
-
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, Injectable, afterNextRender, computed, inject, output, signal, viewChild } from "@angular/core";
3
+ import { FormField, FormRoot, form, maxLength, required } from "@angular/forms/signals";
4
+ import * as i4$1 from "@angular/material/button";
5
+ import { MatButtonModule } from "@angular/material/button";
6
+ import { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from "@angular/material/dialog";
7
+ import * as i2 from "@angular/material/form-field";
8
+ import { MatFormFieldModule } from "@angular/material/form-field";
9
+ import * as i5 from "@angular/material/icon";
10
+ import { MatIconModule } from "@angular/material/icon";
11
+ import * as i3 from "@angular/material/input";
12
+ import { MatInputModule } from "@angular/material/input";
13
+ import * as i6$1 from "@angular/material/list";
14
+ import { MatListModule } from "@angular/material/list";
15
+ import { DtoUtils, SafeHtmlPipe, SearchFilterPipe } from "@arsedizioni/ars-utils/core";
16
+ import * as i1 from "@arsedizioni/ars-utils/ui";
17
+ import { FlexLayoutModule } from "@arsedizioni/ars-utils/ui";
18
+ import * as i10 from "@angular/material/checkbox";
19
+ import { MatCheckboxModule } from "@angular/material/checkbox";
20
+ import { MatOptionModule } from "@angular/material/core";
21
+ import { MatDividerModule } from "@angular/material/divider";
22
+ import * as i8 from "@angular/material/menu";
23
+ import { MatMenuModule } from "@angular/material/menu";
24
+ import * as i11 from "@angular/material/paginator";
25
+ import { MatPaginatorModule } from "@angular/material/paginator";
26
+ import * as i6 from "@angular/material/select";
27
+ import { MatSelectModule } from "@angular/material/select";
28
+ import * as i7$1 from "@angular/material/tooltip";
29
+ import { MatTooltipModule } from "@angular/material/tooltip";
30
+ import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
31
+ import * as i7 from "@angular/material/tree";
32
+ import { MatTree, MatTreeModule } from "@angular/material/tree";
33
+ import { BehaviorSubject } from "rxjs";
34
+ import * as i4 from "@angular/cdk/text-field";
35
+ import { TextFieldModule } from "@angular/cdk/text-field";
36
+ import { SignalsUtils, emails, notEmpty } from "@arsedizioni/ars-utils/core.validators";
37
+ var ListDialogComponent = class ListDialogComponent {
38
+ constructor() {
39
+ this.cdr = inject(ChangeDetectorRef);
40
+ this.dialogData = signal((() => {
41
+ const data = inject(MAT_DIALOG_DATA) ?? {};
42
+ return {
43
+ ...data,
44
+ appearance: data.appearance ?? "outline",
45
+ title: data.title ?? "Elenco",
46
+ closeCaption: data.closeCaption ?? "Chiudi",
47
+ items: data.items ?? []
48
+ };
49
+ })(), ...ngDevMode ? [{ debugName: "dialogData" }] : /* istanbul ignore next */ []);
50
+ this.items = signal(this.dialogData().items ?? [], ...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
51
+ this.filterMetadata = {
52
+ total: 0,
53
+ count: 0
54
+ };
55
+ this.filterText = signal(this.dialogData().filter ?? "", ...ngDevMode ? [{ debugName: "filterText" }] : /* istanbul ignore next */ []);
56
+ this.filterForm = form(this.filterText);
57
+ }
58
+ setItems(items) {
59
+ this.items.set(items ?? []);
60
+ this.cdr.markForCheck();
61
+ }
62
+ setFilter(text) {
63
+ this.filterText.set(text ?? "");
64
+ }
65
+ getFilter() {
66
+ return this.filterText();
67
+ }
68
+ clearFilter() {
69
+ this.filterText.set("");
70
+ }
71
+ static {
72
+ this.ɵfac = i0.ɵɵngDeclareFactory({
73
+ minVersion: "12.0.0",
74
+ version: "22.2.1",
75
+ ngImport: i0,
76
+ type: ListDialogComponent,
77
+ deps: [],
78
+ target: i0.ɵɵFactoryTarget.Component
79
+ });
80
+ }
81
+ static {
82
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
83
+ minVersion: "17.0.0",
84
+ version: "22.2.1",
85
+ type: ListDialogComponent,
86
+ isStandalone: true,
87
+ selector: "ng-component",
88
+ ngImport: i0,
89
+ template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n<div style=\"padding: 0 24px\">\n @if (dialogData().description) {\n <div class=\"list-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n }\n <div fxLayout=\"row\" fxFill>\n <div fxFlex>\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\n <mat-label>{{dialogData().searchLabel ?? 'Cerca...'}}</mat-label>\n <input type=\"text\" matInput title=\"Digita il testo\" [formField]=\"filterForm\"\n (keyup.enter)=\"$event.preventDefault(); $event.stopPropagation()\">\n @if (filterText()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n </div>\n @if (dialogData().header && items().length > 0) {\n <div class=\"text\" style=\"padding-top: 10px;\" [innerHtml]=\"dialogData().header | safeHtml\"></div>\n }\n</div>\n<mat-dialog-content style=\"padding-top:0\">\n <div fxLayout=\"column\" fxFill>\n @if (items().length === 0) {\n <div class=\"text message\"><i>\n @if (dialogData().emptyMessage) {\n <span [innerHtml]=\"dialogData().emptyMessage | safeHtml\"></span>\n } @else {\n <span>Nessun elemento da visualizzare.</span>\n }\n </i>\n </div>\n }\n <!--\n A plain `mat-list`, not a `mat-selection-list`: the rows carry no selected state and no\n click target, so nothing here can be acted upon by mistake.\n -->\n <mat-list role=\"list\">\n @for (item of (items() | search: filterText(): filterMetadata); track $index) {\n <mat-list-item role=\"listitem\">\n <div [innerHtml]=\"item.template | safeHtml\"></div>\n </mat-list-item>\n }\n </mat-list>\n @if (items().length > 0 && filterText() && filterMetadata.count === 0) {\n <div class=\"text message\"><i>\n <span>Nessun elemento corrisponde alla ricerca.</span>\n </i>\n </div>\n }\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\n <div class=\"secondary\" style=\"padding-left:20px\">\n <span class=\"bold\">{{ (filterText() ? filterMetadata.count : items().length) ?? 0 }}</span>&nbsp;\n <span class=\"small\"> elementi</span>\n </div>\n <div>\n <button mat-flat-button mat-dialog-close cdkFocusInitial>\n <span>{{dialogData().closeCaption}}</span>\n </button>\n </div>\n </div>\n</mat-dialog-actions>\n",
90
+ styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.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}.fill{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;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!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:1.2!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 .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.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}}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}::ng-deep .mdc-list-item__primary-text,.mdc-list-item__content{white-space:normal!important}::ng-deep .mdc-list-item.mdc-list-item--with-one-line{height:unset!important;min-height:48px!important}.list-description{padding:0 24px 24px}.mat-mdc-form-field-icon-suffix{padding-right:8px!important}\n"],
91
+ dependencies: [
92
+ {
93
+ kind: "ngmodule",
94
+ type: FlexLayoutModule
95
+ },
96
+ {
97
+ kind: "directive",
98
+ type: i1.FxLayoutDirective,
99
+ 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] ",
100
+ inputs: [
101
+ "fxLayout",
102
+ "fxLayout.xs",
103
+ "fxLayout.sm",
104
+ "fxLayout.md",
105
+ "fxLayout.lg",
106
+ "fxLayout.xl",
107
+ "fxLayout.lt-sm",
108
+ "fxLayout.lt-md",
109
+ "fxLayout.lt-lg",
110
+ "fxLayout.lt-xl",
111
+ "fxLayout.gt-xs",
112
+ "fxLayout.gt-sm",
113
+ "fxLayout.gt-md",
114
+ "fxLayout.gt-lg"
115
+ ]
116
+ },
117
+ {
118
+ kind: "directive",
119
+ type: i1.FxFlexDirective,
120
+ 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] ",
121
+ inputs: [
122
+ "fxFlex",
123
+ "fxFlex.xs",
124
+ "fxFlex.sm",
125
+ "fxFlex.md",
126
+ "fxFlex.lg",
127
+ "fxFlex.xl",
128
+ "fxFlex.lt-sm",
129
+ "fxFlex.lt-md",
130
+ "fxFlex.lt-lg",
131
+ "fxFlex.lt-xl",
132
+ "fxFlex.gt-xs",
133
+ "fxFlex.gt-sm",
134
+ "fxFlex.gt-md",
135
+ "fxFlex.gt-lg"
136
+ ]
137
+ },
138
+ {
139
+ kind: "directive",
140
+ type: i1.FxLayoutAlignDirective,
141
+ 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] ",
142
+ inputs: [
143
+ "fxLayoutAlign",
144
+ "fxLayoutAlign.xs",
145
+ "fxLayoutAlign.sm",
146
+ "fxLayoutAlign.md",
147
+ "fxLayoutAlign.lg",
148
+ "fxLayoutAlign.xl",
149
+ "fxLayoutAlign.lt-sm",
150
+ "fxLayoutAlign.lt-md",
151
+ "fxLayoutAlign.lt-lg",
152
+ "fxLayoutAlign.lt-xl",
153
+ "fxLayoutAlign.gt-xs",
154
+ "fxLayoutAlign.gt-sm",
155
+ "fxLayoutAlign.gt-md",
156
+ "fxLayoutAlign.gt-lg"
157
+ ]
158
+ },
159
+ {
160
+ kind: "directive",
161
+ type: i1.FxLayoutGapDirective,
162
+ 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] ",
163
+ inputs: [
164
+ "fxLayoutGap",
165
+ "fxLayoutGap.xs",
166
+ "fxLayoutGap.sm",
167
+ "fxLayoutGap.md",
168
+ "fxLayoutGap.lg",
169
+ "fxLayoutGap.xl",
170
+ "fxLayoutGap.lt-sm",
171
+ "fxLayoutGap.lt-md",
172
+ "fxLayoutGap.lt-lg",
173
+ "fxLayoutGap.lt-xl",
174
+ "fxLayoutGap.gt-xs",
175
+ "fxLayoutGap.gt-sm",
176
+ "fxLayoutGap.gt-md",
177
+ "fxLayoutGap.gt-lg"
178
+ ]
179
+ },
180
+ {
181
+ kind: "directive",
182
+ type: i1.FxFlexFillDirective,
183
+ selector: " [fxFlexFill], [fxFill], [fxFlexFill.xs], [fxFlexFill.sm], [fxFlexFill.md], [fxFlexFill.lg], [fxFlexFill.xl], [fxFlexFill.lt-sm], [fxFlexFill.lt-md], [fxFlexFill.lt-lg], [fxFlexFill.lt-xl], [fxFlexFill.gt-xs], [fxFlexFill.gt-sm], [fxFlexFill.gt-md], [fxFlexFill.gt-lg] ",
184
+ inputs: [
185
+ "fxFlexFill",
186
+ "fxFill",
187
+ "fxFlexFill.xs",
188
+ "fxFlexFill.sm",
189
+ "fxFlexFill.md",
190
+ "fxFlexFill.lg",
191
+ "fxFlexFill.xl",
192
+ "fxFlexFill.lt-sm",
193
+ "fxFlexFill.lt-md",
194
+ "fxFlexFill.lt-lg",
195
+ "fxFlexFill.lt-xl",
196
+ "fxFlexFill.gt-xs",
197
+ "fxFlexFill.gt-sm",
198
+ "fxFlexFill.gt-md",
199
+ "fxFlexFill.gt-lg"
200
+ ]
201
+ },
202
+ {
203
+ kind: "directive",
204
+ type: MatDialogTitle,
205
+ selector: "[mat-dialog-title], [matDialogTitle]",
206
+ inputs: ["id"],
207
+ exportAs: ["matDialogTitle"]
208
+ },
209
+ {
210
+ kind: "directive",
211
+ type: MatDialogContent,
212
+ selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]"
213
+ },
214
+ {
215
+ kind: "directive",
216
+ type: MatDialogActions,
217
+ selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]",
218
+ inputs: ["align"]
219
+ },
220
+ {
221
+ kind: "directive",
222
+ type: MatDialogClose,
223
+ selector: "[mat-dialog-close], [matDialogClose]",
224
+ inputs: [
225
+ "aria-label",
226
+ "type",
227
+ "mat-dialog-close",
228
+ "matDialogClose"
229
+ ],
230
+ exportAs: ["matDialogClose"]
231
+ },
232
+ {
233
+ kind: "ngmodule",
234
+ type: MatFormFieldModule
235
+ },
236
+ {
237
+ kind: "component",
238
+ type: i2.MatFormField,
239
+ selector: "mat-form-field",
240
+ inputs: [
241
+ "hideRequiredMarker",
242
+ "color",
243
+ "floatLabel",
244
+ "appearance",
245
+ "subscriptSizing",
246
+ "hintLabel"
247
+ ],
248
+ exportAs: ["matFormField"]
249
+ },
250
+ {
251
+ kind: "directive",
252
+ type: i2.MatLabel,
253
+ selector: "mat-label"
254
+ },
255
+ {
256
+ kind: "directive",
257
+ type: i2.MatSuffix,
258
+ selector: "[matSuffix], [matIconSuffix], [matTextSuffix]",
259
+ inputs: ["matTextSuffix"]
260
+ },
261
+ {
262
+ kind: "ngmodule",
263
+ type: MatInputModule
264
+ },
265
+ {
266
+ kind: "directive",
267
+ type: i3.MatInput,
268
+ selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",
269
+ inputs: [
270
+ "disabled",
271
+ "id",
272
+ "placeholder",
273
+ "name",
274
+ "required",
275
+ "type",
276
+ "errorStateMatcher",
277
+ "aria-describedby",
278
+ "value",
279
+ "readonly",
280
+ "disabledInteractive"
281
+ ],
282
+ exportAs: ["matInput"]
283
+ },
284
+ {
285
+ kind: "directive",
286
+ type: FormField,
287
+ selector: "[formField]",
288
+ inputs: ["formField"],
289
+ exportAs: ["formField"]
290
+ },
291
+ {
292
+ kind: "ngmodule",
293
+ type: MatButtonModule
294
+ },
295
+ {
296
+ kind: "component",
297
+ type: i4$1.MatButton,
298
+ 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] ",
299
+ inputs: ["matButton"],
300
+ exportAs: ["matButton", "matAnchor"]
301
+ },
302
+ {
303
+ kind: "component",
304
+ type: i4$1.MatIconButton,
305
+ selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]",
306
+ exportAs: ["matButton", "matAnchor"]
307
+ },
308
+ {
309
+ kind: "ngmodule",
310
+ type: MatIconModule
311
+ },
312
+ {
313
+ kind: "component",
314
+ type: i5.MatIcon,
315
+ selector: "mat-icon",
316
+ inputs: [
317
+ "color",
318
+ "inline",
319
+ "svgIcon",
320
+ "fontSet",
321
+ "fontIcon"
322
+ ],
323
+ exportAs: ["matIcon"]
324
+ },
325
+ {
326
+ kind: "ngmodule",
327
+ type: MatListModule
328
+ },
329
+ {
330
+ kind: "component",
331
+ type: i6$1.MatList,
332
+ selector: "mat-list",
333
+ exportAs: ["matList"]
334
+ },
335
+ {
336
+ kind: "component",
337
+ type: i6$1.MatListItem,
338
+ selector: "mat-list-item, a[mat-list-item], button[mat-list-item]",
339
+ inputs: ["activated"],
340
+ exportAs: ["matListItem"]
341
+ },
342
+ {
343
+ kind: "pipe",
344
+ type: SearchFilterPipe,
345
+ name: "search"
346
+ },
347
+ {
348
+ kind: "pipe",
349
+ type: SafeHtmlPipe,
350
+ name: "safeHtml"
351
+ }
352
+ ],
353
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
354
+ });
355
+ }
356
+ };
357
+ i0.ɵɵngDeclareClassMetadata({
358
+ minVersion: "12.0.0",
359
+ version: "22.2.1",
360
+ ngImport: i0,
361
+ type: ListDialogComponent,
362
+ decorators: [{
363
+ type: Component,
364
+ args: [{
365
+ changeDetection: ChangeDetectionStrategy.OnPush,
366
+ standalone: true,
367
+ imports: [
368
+ FlexLayoutModule,
369
+ MatDialogTitle,
370
+ MatDialogContent,
371
+ MatDialogActions,
372
+ MatDialogClose,
373
+ MatFormFieldModule,
374
+ MatInputModule,
375
+ FormField,
376
+ MatButtonModule,
377
+ MatIconModule,
378
+ MatListModule,
379
+ SearchFilterPipe,
380
+ SafeHtmlPipe
381
+ ],
382
+ template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n<div style=\"padding: 0 24px\">\n @if (dialogData().description) {\n <div class=\"list-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n }\n <div fxLayout=\"row\" fxFill>\n <div fxFlex>\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\n <mat-label>{{dialogData().searchLabel ?? 'Cerca...'}}</mat-label>\n <input type=\"text\" matInput title=\"Digita il testo\" [formField]=\"filterForm\"\n (keyup.enter)=\"$event.preventDefault(); $event.stopPropagation()\">\n @if (filterText()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n </div>\n @if (dialogData().header && items().length > 0) {\n <div class=\"text\" style=\"padding-top: 10px;\" [innerHtml]=\"dialogData().header | safeHtml\"></div>\n }\n</div>\n<mat-dialog-content style=\"padding-top:0\">\n <div fxLayout=\"column\" fxFill>\n @if (items().length === 0) {\n <div class=\"text message\"><i>\n @if (dialogData().emptyMessage) {\n <span [innerHtml]=\"dialogData().emptyMessage | safeHtml\"></span>\n } @else {\n <span>Nessun elemento da visualizzare.</span>\n }\n </i>\n </div>\n }\n <!--\n A plain `mat-list`, not a `mat-selection-list`: the rows carry no selected state and no\n click target, so nothing here can be acted upon by mistake.\n -->\n <mat-list role=\"list\">\n @for (item of (items() | search: filterText(): filterMetadata); track $index) {\n <mat-list-item role=\"listitem\">\n <div [innerHtml]=\"item.template | safeHtml\"></div>\n </mat-list-item>\n }\n </mat-list>\n @if (items().length > 0 && filterText() && filterMetadata.count === 0) {\n <div class=\"text message\"><i>\n <span>Nessun elemento corrisponde alla ricerca.</span>\n </i>\n </div>\n }\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\n <div class=\"secondary\" style=\"padding-left:20px\">\n <span class=\"bold\">{{ (filterText() ? filterMetadata.count : items().length) ?? 0 }}</span>&nbsp;\n <span class=\"small\"> elementi</span>\n </div>\n <div>\n <button mat-flat-button mat-dialog-close cdkFocusInitial>\n <span>{{dialogData().closeCaption}}</span>\n </button>\n </div>\n </div>\n</mat-dialog-actions>\n",
383
+ styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.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}.fill{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;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!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:1.2!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 .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.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}}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}::ng-deep .mdc-list-item__primary-text,.mdc-list-item__content{white-space:normal!important}::ng-deep .mdc-list-item.mdc-list-item--with-one-line{height:unset!important;min-height:48px!important}.list-description{padding:0 24px 24px}.mat-mdc-form-field-icon-suffix{padding-right:8px!important}\n"]
384
+ }]
385
+ }]
386
+ });
387
+ var SelectDialogComponent = class SelectDialogComponent {
388
+ constructor() {
389
+ this.paginator = viewChild.required("paginator", ...ngDevMode ? [{ debugName: "paginator" }] : /* istanbul ignore next */ []);
390
+ this.selection = viewChild.required("selection", ...ngDevMode ? [{ debugName: "selection" }] : /* istanbul ignore next */ []);
391
+ this.isViewReady = false;
392
+ this.dialogRef = inject(MatDialogRef);
393
+ this.cdr = inject(ChangeDetectorRef);
394
+ this.dialogData = signal((() => {
395
+ const data = inject(MAT_DIALOG_DATA) ?? {};
396
+ return {
397
+ ...data,
398
+ appearance: data.appearance ?? "outline",
399
+ title: data.title ?? "Seleziona",
400
+ okCaption: data.okCaption ?? "Ok",
401
+ multipleSelection: data.multipleSelection ?? false,
402
+ items: data.canLookup ? [] : data.items ?? [],
403
+ pageSize: data.canLookup && data.canPaginate && !data.pageSize ? 100 : data.pageSize
404
+ };
405
+ })(), ...ngDevMode ? [{ debugName: "dialogData" }] : /* istanbul ignore next */ []);
406
+ this.done = output();
407
+ this.edit = output();
408
+ this.view = output();
409
+ this.append = output();
410
+ this.delete = output();
411
+ this.lookup = output();
412
+ this.lookupOptions = output();
413
+ this.filter = output();
414
+ this.canEdit = signal(false, ...ngDevMode ? [{ debugName: "canEdit" }] : /* istanbul ignore next */ []);
415
+ this.canView = signal(false, ...ngDevMode ? [{ debugName: "canView" }] : /* istanbul ignore next */ []);
416
+ this.canAppend = signal(this.dialogData().canAppend ?? false, ...ngDevMode ? [{ debugName: "canAppend" }] : /* istanbul ignore next */ []);
417
+ this.canDelete = signal(false, ...ngDevMode ? [{ debugName: "canDelete" }] : /* istanbul ignore next */ []);
418
+ this.canPaginate = signal(this.dialogData().canPaginate ?? false, ...ngDevMode ? [{ debugName: "canPaginate" }] : /* istanbul ignore next */ []);
419
+ this.okDisabled = signal(this.dialogData().mustSelect ?? true, ...ngDevMode ? [{ debugName: "okDisabled" }] : /* istanbul ignore next */ []);
420
+ this.filterMetadata = {
421
+ total: 0,
422
+ count: 0
423
+ };
424
+ this.filterText = signal("", ...ngDevMode ? [{ debugName: "filterText" }] : /* istanbul ignore next */ []);
425
+ this.filterForm = form(this.filterText);
426
+ this.filterOptions = signal([], ...ngDevMode ? [{ debugName: "filterOptions" }] : /* istanbul ignore next */ []);
427
+ this.filterOptionsInfo = signal("Tutto", ...ngDevMode ? [{ debugName: "filterOptionsInfo" }] : /* istanbul ignore next */ []);
428
+ this.lookupField = "";
429
+ this.selectionInfo = signal(null, ...ngDevMode ? [{ debugName: "selectionInfo" }] : /* istanbul ignore next */ []);
430
+ this.selectionMasterIndeterminate = signal(false, ...ngDevMode ? [{ debugName: "selectionMasterIndeterminate" }] : /* istanbul ignore next */ []);
431
+ this.selectionMasterChecked = signal(false, ...ngDevMode ? [{ debugName: "selectionMasterChecked" }] : /* istanbul ignore next */ []);
432
+ this.total = signal(this.dialogData().items?.length ?? 0, ...ngDevMode ? [{ debugName: "total" }] : /* istanbul ignore next */ []);
433
+ const d = this.dialogData();
434
+ if (d.canLookup) {
435
+ if (d.lookupFields?.length) this.lookupField = d.lookupFields[0].value;
436
+ if (d.canFilter) this.filterOptions.set(d.filters ?? []);
437
+ }
438
+ afterNextRender(() => {
439
+ this.isViewReady = true;
440
+ const selectedOption = this.filterOptions().find((x) => x.checked);
441
+ if (selectedOption) this.applyFilterByOptions(selectedOption);
442
+ if (d.lookupOnInit) this.applyFilter();
443
+ });
444
+ }
445
+ notifyChanges(newTotal) {
446
+ this.total.set(newTotal ?? 0);
447
+ this.cdr.markForCheck();
448
+ }
449
+ isAllSelected() {
450
+ return this.selection().selectedOptions.selected.length === this.dialogData().items.length;
451
+ }
452
+ hasSelection() {
453
+ return this.selection().selectedOptions.selected.length > 0;
454
+ }
455
+ masterSelectionToggle(e) {
456
+ if (e.checked) this.selection().selectAll();
457
+ else this.selection().deselectAll();
458
+ this.selectionMasterIndeterminate.set(false);
459
+ this.selectionMasterChecked.set(e.checked);
460
+ const selection = this.selection();
461
+ this.okDisabled.set(!!(this.dialogData().mustSelect && selection.selectedOptions.selected.length === 0));
462
+ this.updateSelectionInfo();
463
+ }
464
+ select(e) {
465
+ const selection = this.selection();
466
+ if (!this.dialogData().multipleSelection) {
467
+ this.selection().deselectAll();
468
+ if (e.options?.length > 0) e.options[0].selected = true;
469
+ this.okDisabled.set(false);
470
+ } else this.okDisabled.set(!!(this.dialogData().mustSelect && selection.selectedOptions.selected.length === 0));
471
+ this.canEdit.set(!!(this.dialogData().canEdit && selection.selectedOptions.selected.length === 1));
472
+ this.canView.set(!!(this.dialogData().canView && selection.selectedOptions.selected.length === 1));
473
+ this.canDelete.set(!!(this.dialogData().canDelete && selection.selectedOptions.selected.length > 0));
474
+ this.selectionMasterIndeterminate.set(!this.isAllSelected() && this.hasSelection());
475
+ this.selectionMasterChecked.set(this.hasSelection());
476
+ this.updateSelectionInfo();
477
+ }
478
+ updateSelectionInfo() {
479
+ const selection = this.selection();
480
+ if (selection.selectedOptions.selected.length > 0 && this.dialogData().multipleSelection) this.selectionInfo.set(selection.selectedOptions.selected.length + " / " + selection.options.length);
481
+ else this.selectionInfo.set(null);
482
+ }
483
+ clearSelection() {
484
+ this.selectionMasterIndeterminate.set(false);
485
+ this.selectionMasterChecked.set(false);
486
+ if (this.isViewReady) this.selection().deselectAll();
487
+ this.selectionInfo.set(null);
488
+ }
489
+ ok() {
490
+ if (!this.okDisabled()) {
491
+ const selectedItems = [];
492
+ this.selection().selectedOptions.selected.forEach((element) => {
493
+ selectedItems.push(element.value);
494
+ });
495
+ this.done.emit({ selectedItems });
496
+ setTimeout(() => {
497
+ this.dialogRef.close();
498
+ }, 500);
499
+ }
500
+ }
501
+ clearFilter() {
502
+ this.filterText.set("");
503
+ }
504
+ setFilter(text) {
505
+ this.filterText.set(text);
506
+ }
507
+ getFilter() {
508
+ return this.filterText();
509
+ }
510
+ showFilterOptions() {
511
+ if (this.lookupOptions) this.lookupOptions.emit();
512
+ }
513
+ doFilter(text, e) {
514
+ if (text) this.filterText.set(text);
515
+ if (this.dialogData().canLookup) {
516
+ if (!e || e.key === "Enter") this.applyFilter();
517
+ }
518
+ }
519
+ applyFilter() {
520
+ this.clearSelection();
521
+ this.lookup.emit({
522
+ items: this.dialogData().items,
523
+ filter: this.filterText(),
524
+ owner: this
525
+ });
526
+ }
527
+ applyFilterByOptions(filterOption) {
528
+ if (this.dialogData().canLookup && this.dialogData().canFilter) {
529
+ this.filter.emit({
530
+ items: this.dialogData().items,
531
+ filter: this.filterText(),
532
+ filterOption,
533
+ owner: this
534
+ });
535
+ this.filterOptionsInfo.set(filterOption ? filterOption.title ?? "Tutto" : "Tutto");
536
+ }
537
+ }
538
+ doFilterByOptions(filterOption, apply) {
539
+ this.applyFilterByOptions(filterOption);
540
+ if (apply) setTimeout(() => {
541
+ this.doFilter();
542
+ }, 250);
543
+ }
544
+ doLookup(params) {
545
+ if (this.dialogData().canLookup) {
546
+ this.clearSelection();
547
+ this.lookupParams = params;
548
+ this.lookupParams.first = 0;
549
+ this.lookup.emit({
550
+ items: this.dialogData().items,
551
+ params: this.lookupParams,
552
+ owner: this
553
+ });
554
+ }
555
+ }
556
+ updateLookupPaginator(total) {
557
+ if (this.canPaginate()) {
558
+ const paginator = this.paginator();
559
+ if (paginator) {
560
+ paginator.pageIndex = 0;
561
+ paginator.length = total ?? 0;
562
+ }
563
+ }
564
+ }
565
+ doLookupPage(e) {
566
+ if (this.canPaginate() && this.dialogData().canLookup) {
567
+ this.clearSelection();
568
+ if (!this.lookupParams) this.lookupParams = {
569
+ first: 0,
570
+ count: this.dialogData().pageSize ?? 0
571
+ };
572
+ this.lookupParams.first = e.pageIndex * (this.dialogData().pageSize ?? 0);
573
+ this.lookup.emit({
574
+ items: this.dialogData().items,
575
+ params: this.lookupParams,
576
+ owner: this
577
+ });
578
+ }
579
+ }
580
+ doAppend() {
581
+ this.append.emit({
582
+ items: this.dialogData().items,
583
+ owner: this
584
+ });
585
+ }
586
+ doEdit() {
587
+ const selection = this.selection();
588
+ if (selection.selectedOptions.selected?.length > 0) this.edit.emit({
589
+ item: selection.selectedOptions.selected[0].value,
590
+ items: this.dialogData().items,
591
+ owner: this
592
+ });
593
+ }
594
+ doView() {
595
+ const selection = this.selection();
596
+ if (selection.selectedOptions.selected?.length > 0) this.view.emit(selection.selectedOptions.selected[0].value);
597
+ }
598
+ doDelete() {
599
+ const selectedItems = [];
600
+ this.selection().selectedOptions.selected.forEach((element) => {
601
+ selectedItems.push(element.value);
602
+ });
603
+ this.delete.emit({
604
+ items: this.dialogData().items,
605
+ selectedItems
606
+ });
607
+ this.canDelete.set(false);
608
+ this.canEdit.set(false);
609
+ }
610
+ static {
611
+ this.ɵfac = i0.ɵɵngDeclareFactory({
612
+ minVersion: "12.0.0",
613
+ version: "22.2.1",
614
+ ngImport: i0,
615
+ type: SelectDialogComponent,
616
+ deps: [],
617
+ target: i0.ɵɵFactoryTarget.Component
618
+ });
619
+ }
620
+ static {
621
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
622
+ minVersion: "17.0.0",
623
+ version: "22.2.1",
624
+ type: SelectDialogComponent,
625
+ isStandalone: true,
626
+ selector: "ng-component",
627
+ outputs: {
628
+ done: "done",
629
+ edit: "edit",
630
+ view: "view",
631
+ append: "append",
632
+ delete: "delete",
633
+ lookup: "lookup",
634
+ lookupOptions: "lookupOptions",
635
+ filter: "filter"
636
+ },
637
+ viewQueries: [{
638
+ propertyName: "paginator",
639
+ first: true,
640
+ predicate: ["paginator"],
641
+ descendants: true,
642
+ isSignal: true
643
+ }, {
644
+ propertyName: "selection",
645
+ first: true,
646
+ predicate: ["selection"],
647
+ descendants: true,
648
+ isSignal: true
649
+ }],
650
+ ngImport: i0,
651
+ template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n<div style=\"padding: 0 24px\">\n @if (dialogData().description) {\n <div class=\"select-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n }\n <div>\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"space-between center\" fxFill>\n @if (!dialogData().canLookupWithOptions) {\n <div fxFlex>\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\n <mat-label>{{dialogData().searchLabel ?? 'Cerca...'}}</mat-label>\n <input type=\"text\" (keyup.enter)=\"$event.preventDefault(); $event.stopPropagation(); doFilter()\" matInput\n title=\"{{dialogData().canLookup ? 'Digita il testo e premi invio' : 'Digita il testo'}}\"\n [formField]=\"filterForm\">\n @if (filterText()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n @if (dialogData().canLookupWithInlineOptions) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Ricerca\"\n (click)=\"showFilterOptions()\" matTooltip=\"Opzioni di ricerca\">\n <mat-icon>tune</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n }\n @if (!dialogData().canLookupWithOptions && dialogData().canLookup && dialogData().lookupFields) {\n <div fxFlex fxHide.lt-md>\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\n <mat-label>Come...</mat-label>\n <mat-select [(value)]=\"lookupField\">\n @for (field of dialogData().lookupFields; track $index) {\n <mat-option [value]=\"field.value\">\n {{field.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n }\n @if (dialogData().canLookupWithOptions) {\n <div fxFlex fxHide.lt-md>\n <button fxFlexAlign=\"center\" type=\"button\" mat-button aria-label=\"Ricerca\" (click)=\"showFilterOptions()\">\n <mat-icon>search</mat-icon> {{this.dialogData().searchButtonLabel ?? 'Ricerca'}}\n </button>\n </div>\n }\n @if (dialogData().canLookup && dialogData().canFilter) {\n <div fxFlex fxHide.lt-md>\n <button type=\"button\" mat-button matTooltip=\"Filtra\" [attr.aria-label]=\"'Filtra'\"\n [matMenuTriggerFor]=\"menuFilter\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" >\n <div><mat-icon>filter_alt</mat-icon></div>\n <div>{{filterOptionsInfo()}}</div>\n <div><mat-icon class=\"icon-menu-drop-down\">\n arrow_drop_down</mat-icon></div>\n </div>\n </button>\n <mat-menu #menuFilter=\"matMenu\" class=\"mat-menu-300\">\n @for (f of filterOptions(); track $index) {\n @if (f.divider) {\n <mat-divider></mat-divider>\n }\n @if (f.groupName) {\n <span style='font-size:small; padding: 2px 4px;'><i><b>{{f.groupName}}</b></i></span>\n }\n @if (!f.groupName && !f.divider) {\n <button mat-menu-item (click)=\"doFilterByOptions(f, true)\" [attr.aria-label]=\"f.description\">\n @if (f.radio && f.value) {\n <span style=\"padding-left:40px\"></span>\n }\n <mat-icon>{{f.icon}}</mat-icon> {{f.title}}\n </button>\n }\n\n }\n </mat-menu>\n </div>\n }\n @if (canEdit() || canAppend() || canView() || canDelete()) {\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" >\n <div fxFlex fxHide.lt-md>\n @if (canAppend()) {\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\n </button>\n }\n @if (canEdit()) {\n <button type=\"button\" mat-icon-button (click)=\"doEdit()\">\n <mat-icon aria-label=\"Modifica\" matTooltip=\"Modifica\">edit</mat-icon>\n </button>\n }\n @if (canView()) {\n <button type=\"button\" mat-icon-button (click)=\"doView()\">\n <mat-icon aria-label=\"Mostra\" matTooltip=\"Mostra\">visibility</mat-icon>\n </button>\n }\n @if (canDelete()) {\n <button type=\"button\" mat-icon-button (click)=\"doDelete()\">\n <mat-icon aria-label=\"Elimina\" matTooltip=\"Elimina\">delete</mat-icon>\n </button>\n }\n </div>\n <div fxFlex fxHide.gt-sm>\n <button type=\"button\" mat-icon-button matTooltip=\"Azioni\" [attr.aria-label]=\"'Azioni'\"\n [matMenuTriggerFor]=\"menuActions\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menuActions=\"matMenu\" class=\"mat-menu-300\">\n @if (canAppend()) {\n <button mat-menu-item (click)=\"doAppend()\" [attr.aria-label]=\"'Aggiungi'\">\n <mat-icon>add</mat-icon> Aggiungi\n </button>\n }\n @if (canEdit()) {\n <button mat-menu-item (click)=\"doEdit()\" [attr.aria-label]=\"'Modifica'\">\n <mat-icon>edit</mat-icon> Modifica\n </button>\n }\n @if (canView()) {\n <button mat-menu-item (click)=\"doView()\" [attr.aria-label]=\"'Mostra'\">\n <mat-icon>visibility</mat-icon> Mostra\n </button>\n }\n @if (canDelete()) {\n <button mat-menu-item (click)=\"doDelete()\" [attr.aria-label]=\"'Elimina'\">\n <mat-icon>delete</mat-icon> Elimina\n </button>\n }\n </mat-menu>\n </div>\n </div>\n }\n </div>\n </div>\n @if ((dialogData().multipleSelection || dialogData().header) && dialogData().items?.length > 0) {\n <div>\n <div fxLayout=\"row\" fxFill style=\"padding-top: 10px;\">\n @if (dialogData().multipleSelection) {\n <div fxFlex=\"64px\" fxFlexAlign=\"center\" style=\"padding-left: 8px;\">\n <mat-checkbox (change)=\"$event ? masterSelectionToggle($event) : null\"\n [indeterminate]=\"selectionMasterIndeterminate()\" [checked]=\"selectionMasterChecked()\"\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\">\n </mat-checkbox>\n </div>\n }\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\n @if (dialogData().header) {\n <div class=\"text\" [innerHtml]=\"dialogData().header | safeHtml\"></div>\n }\n </div>\n </div>\n </div>\n }\n</div>\n<mat-dialog-content style=\"padding-top:0\">\n <div fxLayout=\"column\" fxFill>\n @if (dialogData().canLookup && (!dialogData().items || dialogData().items.length == 0)) {\n <div class=\"text message\"><i>\n @if (!dialogData().emptyMessage) {\n <span>Nessun elemento da visualizzare.<br>Esegui una nuova ricerca o modifica quella\n esistente.\n @if (dialogData().maxItems > 0) {\n <span>Saranno mostrati al massimo {{dialogData().maxItems}} elementi.</span>\n }\n </span>\n } @else {\n <span [innerHtml]=\"dialogData().emptyMessage | safeHtml\"></span>\n }\n </i>\n </div>\n }\n <mat-selection-list #selection (selectionChange)=\"select($event)\" dense hideSingleSelectionIndicator=\"true\"\n [multiple]=\"dialogData().multipleSelection\">\n @for (item of (dialogData().items | search: (!dialogData().canLookup ? filterText() : ''): filterMetadata); track\n $index) {\n <mat-list-option [value]=\"item\" [selected]=\"item.selected\" togglePosition=\"before\">\n <div [innerHtml]=\"item.template | safeHtml\"></div>\n </mat-list-option>\n }\n </mat-selection-list>\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"column\" fxFill>\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\n <div class=\"secondary\" style=\"padding-left:20px\">\n @if (selectionInfo()) {\n <span class=\"bold\">{{selectionInfo()}}</span>&nbsp; <span class=\"small\"> elementi selezionati</span>\n } @else {\n <span class=\"bold\">{{(dialogData().canLookup ? total() : (filterText() ? filterMetadata.count : total())) ??\n 0}}</span>&nbsp; <span class=\"small\"> elementi</span>\n }\n </div>\n <div fxFlexAlign=\"center\">\n @if (canPaginate()) {\n <mat-paginator class=\"x-small\" #paginator [hidePageSize]=\"true\" [pageSize]=\"dialogData().pageSize\" [showFirstLastButtons]=\"true\"\n (page)=\"doLookupPage($event)\" [length]=\"total() ?? 0\"></mat-paginator>\n }\n </div>\n </div>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"okDisabled()\">\n <span>{{dialogData().mustSelect ? dialogData().okCaption : 'Chiudi'}}</span>\n </button>\n @if (dialogData().mustSelect) {\n <button mat-stroked-button mat-dialog-close>\n <span>Annulla</span>\n </button>\n }\n </div>\n </div>\n</mat-dialog-actions>",
652
+ styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.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}.fill{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;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!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:1.2!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 .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.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}}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}::ng-deep .mdc-list-item__primary-text,.mdc-list-item__content{white-space:normal!important}::ng-deep .mdc-list-item.mdc-list-item--with-one-line{height:unset!important;min-height:48px!important}.select-description{padding:0 24px 24px}.mat-mdc-form-field-icon-suffix{padding-right:8px!important}\n"],
653
+ dependencies: [
654
+ {
655
+ kind: "ngmodule",
656
+ type: FlexLayoutModule
657
+ },
658
+ {
659
+ kind: "directive",
660
+ type: i1.FxLayoutDirective,
661
+ 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] ",
662
+ inputs: [
663
+ "fxLayout",
664
+ "fxLayout.xs",
665
+ "fxLayout.sm",
666
+ "fxLayout.md",
667
+ "fxLayout.lg",
668
+ "fxLayout.xl",
669
+ "fxLayout.lt-sm",
670
+ "fxLayout.lt-md",
671
+ "fxLayout.lt-lg",
672
+ "fxLayout.lt-xl",
673
+ "fxLayout.gt-xs",
674
+ "fxLayout.gt-sm",
675
+ "fxLayout.gt-md",
676
+ "fxLayout.gt-lg"
677
+ ]
678
+ },
679
+ {
680
+ kind: "directive",
681
+ type: i1.FxFlexDirective,
682
+ 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] ",
683
+ inputs: [
684
+ "fxFlex",
685
+ "fxFlex.xs",
686
+ "fxFlex.sm",
687
+ "fxFlex.md",
688
+ "fxFlex.lg",
689
+ "fxFlex.xl",
690
+ "fxFlex.lt-sm",
691
+ "fxFlex.lt-md",
692
+ "fxFlex.lt-lg",
693
+ "fxFlex.lt-xl",
694
+ "fxFlex.gt-xs",
695
+ "fxFlex.gt-sm",
696
+ "fxFlex.gt-md",
697
+ "fxFlex.gt-lg"
698
+ ]
699
+ },
700
+ {
701
+ kind: "directive",
702
+ type: i1.FxShowHideDirective,
703
+ selector: " [fxShow], [fxHide], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg] ",
704
+ inputs: [
705
+ "fxShow",
706
+ "fxShow.xs",
707
+ "fxShow.sm",
708
+ "fxShow.md",
709
+ "fxShow.lg",
710
+ "fxShow.xl",
711
+ "fxShow.lt-sm",
712
+ "fxShow.lt-md",
713
+ "fxShow.lt-lg",
714
+ "fxShow.lt-xl",
715
+ "fxShow.gt-xs",
716
+ "fxShow.gt-sm",
717
+ "fxShow.gt-md",
718
+ "fxShow.gt-lg",
719
+ "fxHide",
720
+ "fxHide.xs",
721
+ "fxHide.sm",
722
+ "fxHide.md",
723
+ "fxHide.lg",
724
+ "fxHide.xl",
725
+ "fxHide.lt-sm",
726
+ "fxHide.lt-md",
727
+ "fxHide.lt-lg",
728
+ "fxHide.lt-xl",
729
+ "fxHide.gt-xs",
730
+ "fxHide.gt-sm",
731
+ "fxHide.gt-md",
732
+ "fxHide.gt-lg"
733
+ ]
734
+ },
735
+ {
736
+ kind: "directive",
737
+ type: i1.FxLayoutAlignDirective,
738
+ 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] ",
739
+ inputs: [
740
+ "fxLayoutAlign",
741
+ "fxLayoutAlign.xs",
742
+ "fxLayoutAlign.sm",
743
+ "fxLayoutAlign.md",
744
+ "fxLayoutAlign.lg",
745
+ "fxLayoutAlign.xl",
746
+ "fxLayoutAlign.lt-sm",
747
+ "fxLayoutAlign.lt-md",
748
+ "fxLayoutAlign.lt-lg",
749
+ "fxLayoutAlign.lt-xl",
750
+ "fxLayoutAlign.gt-xs",
751
+ "fxLayoutAlign.gt-sm",
752
+ "fxLayoutAlign.gt-md",
753
+ "fxLayoutAlign.gt-lg"
754
+ ]
755
+ },
756
+ {
757
+ kind: "directive",
758
+ type: i1.FxLayoutGapDirective,
759
+ 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] ",
760
+ inputs: [
761
+ "fxLayoutGap",
762
+ "fxLayoutGap.xs",
763
+ "fxLayoutGap.sm",
764
+ "fxLayoutGap.md",
765
+ "fxLayoutGap.lg",
766
+ "fxLayoutGap.xl",
767
+ "fxLayoutGap.lt-sm",
768
+ "fxLayoutGap.lt-md",
769
+ "fxLayoutGap.lt-lg",
770
+ "fxLayoutGap.lt-xl",
771
+ "fxLayoutGap.gt-xs",
772
+ "fxLayoutGap.gt-sm",
773
+ "fxLayoutGap.gt-md",
774
+ "fxLayoutGap.gt-lg"
775
+ ]
776
+ },
777
+ {
778
+ kind: "directive",
779
+ type: i1.FxFlexAlignDirective,
780
+ 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] ",
781
+ inputs: [
782
+ "fxFlexAlign",
783
+ "fxFlexAlign.xs",
784
+ "fxFlexAlign.sm",
785
+ "fxFlexAlign.md",
786
+ "fxFlexAlign.lg",
787
+ "fxFlexAlign.xl",
788
+ "fxFlexAlign.lt-sm",
789
+ "fxFlexAlign.lt-md",
790
+ "fxFlexAlign.lt-lg",
791
+ "fxFlexAlign.lt-xl",
792
+ "fxFlexAlign.gt-xs",
793
+ "fxFlexAlign.gt-sm",
794
+ "fxFlexAlign.gt-md",
795
+ "fxFlexAlign.gt-lg"
796
+ ]
797
+ },
798
+ {
799
+ kind: "directive",
800
+ type: i1.FxFlexFillDirective,
801
+ selector: " [fxFlexFill], [fxFill], [fxFlexFill.xs], [fxFlexFill.sm], [fxFlexFill.md], [fxFlexFill.lg], [fxFlexFill.xl], [fxFlexFill.lt-sm], [fxFlexFill.lt-md], [fxFlexFill.lt-lg], [fxFlexFill.lt-xl], [fxFlexFill.gt-xs], [fxFlexFill.gt-sm], [fxFlexFill.gt-md], [fxFlexFill.gt-lg] ",
802
+ inputs: [
803
+ "fxFlexFill",
804
+ "fxFill",
805
+ "fxFlexFill.xs",
806
+ "fxFlexFill.sm",
807
+ "fxFlexFill.md",
808
+ "fxFlexFill.lg",
809
+ "fxFlexFill.xl",
810
+ "fxFlexFill.lt-sm",
811
+ "fxFlexFill.lt-md",
812
+ "fxFlexFill.lt-lg",
813
+ "fxFlexFill.lt-xl",
814
+ "fxFlexFill.gt-xs",
815
+ "fxFlexFill.gt-sm",
816
+ "fxFlexFill.gt-md",
817
+ "fxFlexFill.gt-lg"
818
+ ]
819
+ },
820
+ {
821
+ kind: "directive",
822
+ type: MatDialogTitle,
823
+ selector: "[mat-dialog-title], [matDialogTitle]",
824
+ inputs: ["id"],
825
+ exportAs: ["matDialogTitle"]
826
+ },
827
+ {
828
+ kind: "ngmodule",
829
+ type: MatFormFieldModule
830
+ },
831
+ {
832
+ kind: "component",
833
+ type: i2.MatFormField,
834
+ selector: "mat-form-field",
835
+ inputs: [
836
+ "hideRequiredMarker",
837
+ "color",
838
+ "floatLabel",
839
+ "appearance",
840
+ "subscriptSizing",
841
+ "hintLabel"
842
+ ],
843
+ exportAs: ["matFormField"]
844
+ },
845
+ {
846
+ kind: "directive",
847
+ type: i2.MatLabel,
848
+ selector: "mat-label"
849
+ },
850
+ {
851
+ kind: "directive",
852
+ type: i2.MatSuffix,
853
+ selector: "[matSuffix], [matIconSuffix], [matTextSuffix]",
854
+ inputs: ["matTextSuffix"]
855
+ },
856
+ {
857
+ kind: "ngmodule",
858
+ type: MatInputModule
859
+ },
860
+ {
861
+ kind: "directive",
862
+ type: i3.MatInput,
863
+ selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",
864
+ inputs: [
865
+ "disabled",
866
+ "id",
867
+ "placeholder",
868
+ "name",
869
+ "required",
870
+ "type",
871
+ "errorStateMatcher",
872
+ "aria-describedby",
873
+ "value",
874
+ "readonly",
875
+ "disabledInteractive"
876
+ ],
877
+ exportAs: ["matInput"]
878
+ },
879
+ {
880
+ kind: "directive",
881
+ type: FormField,
882
+ selector: "[formField]",
883
+ inputs: ["formField"],
884
+ exportAs: ["formField"]
885
+ },
886
+ {
887
+ kind: "ngmodule",
888
+ type: MatButtonModule
889
+ },
890
+ {
891
+ kind: "component",
892
+ type: i4$1.MatButton,
893
+ 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] ",
894
+ inputs: ["matButton"],
895
+ exportAs: ["matButton", "matAnchor"]
896
+ },
897
+ {
898
+ kind: "component",
899
+ type: i4$1.MatIconButton,
900
+ selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]",
901
+ exportAs: ["matButton", "matAnchor"]
902
+ },
903
+ {
904
+ kind: "ngmodule",
905
+ type: MatIconModule
906
+ },
907
+ {
908
+ kind: "component",
909
+ type: i5.MatIcon,
910
+ selector: "mat-icon",
911
+ inputs: [
912
+ "color",
913
+ "inline",
914
+ "svgIcon",
915
+ "fontSet",
916
+ "fontIcon"
917
+ ],
918
+ exportAs: ["matIcon"]
919
+ },
920
+ {
921
+ kind: "ngmodule",
922
+ type: MatSelectModule
923
+ },
924
+ {
925
+ kind: "component",
926
+ type: i6.MatSelect,
927
+ selector: "mat-select",
928
+ inputs: [
929
+ "aria-describedby",
930
+ "panelClass",
931
+ "disabled",
932
+ "disableRipple",
933
+ "tabIndex",
934
+ "hideSingleSelectionIndicator",
935
+ "placeholder",
936
+ "required",
937
+ "multiple",
938
+ "disableOptionCentering",
939
+ "compareWith",
940
+ "value",
941
+ "aria-label",
942
+ "aria-labelledby",
943
+ "errorStateMatcher",
944
+ "typeaheadDebounceInterval",
945
+ "sortComparator",
946
+ "id",
947
+ "panelWidth",
948
+ "canSelectNullableOptions"
949
+ ],
950
+ outputs: [
951
+ "openedChange",
952
+ "opened",
953
+ "closed",
954
+ "selectionChange",
955
+ "valueChange"
956
+ ],
957
+ exportAs: ["matSelect"]
958
+ },
959
+ {
960
+ kind: "component",
961
+ type: i6.MatOption,
962
+ selector: "mat-option",
963
+ inputs: [
964
+ "value",
965
+ "id",
966
+ "disabled"
967
+ ],
968
+ outputs: ["onSelectionChange"],
969
+ exportAs: ["matOption"]
970
+ },
971
+ {
972
+ kind: "ngmodule",
973
+ type: MatOptionModule
974
+ },
975
+ {
976
+ kind: "ngmodule",
977
+ type: MatTooltipModule
978
+ },
979
+ {
980
+ kind: "directive",
981
+ type: i7$1.MatTooltip,
982
+ selector: "[matTooltip]",
983
+ inputs: [
984
+ "matTooltipPosition",
985
+ "matTooltipPositionAtOrigin",
986
+ "matTooltipDisabled",
987
+ "matTooltipShowDelay",
988
+ "matTooltipHideDelay",
989
+ "matTooltipTouchGestures",
990
+ "matTooltip",
991
+ "matTooltipClass"
992
+ ],
993
+ exportAs: ["matTooltip"]
994
+ },
995
+ {
996
+ kind: "ngmodule",
997
+ type: MatMenuModule
998
+ },
999
+ {
1000
+ kind: "component",
1001
+ type: i8.MatMenu,
1002
+ selector: "mat-menu",
1003
+ inputs: [
1004
+ "backdropClass",
1005
+ "aria-label",
1006
+ "aria-labelledby",
1007
+ "aria-describedby",
1008
+ "xPosition",
1009
+ "yPosition",
1010
+ "overlapTrigger",
1011
+ "hasBackdrop",
1012
+ "class",
1013
+ "classList"
1014
+ ],
1015
+ outputs: ["closed", "close"],
1016
+ exportAs: ["matMenu"]
1017
+ },
1018
+ {
1019
+ kind: "component",
1020
+ type: i8.MatMenuItem,
1021
+ selector: "[mat-menu-item]",
1022
+ inputs: [
1023
+ "role",
1024
+ "disabled",
1025
+ "disabledInteractive",
1026
+ "disableRipple"
1027
+ ],
1028
+ exportAs: ["matMenuItem"]
1029
+ },
1030
+ {
1031
+ kind: "directive",
1032
+ type: i8.MatMenuTrigger,
1033
+ selector: "[mat-menu-trigger-for], [matMenuTriggerFor]",
1034
+ inputs: [
1035
+ "mat-menu-trigger-for",
1036
+ "matMenuTriggerFor",
1037
+ "matMenuTriggerData",
1038
+ "matMenuTriggerRestoreFocus"
1039
+ ],
1040
+ outputs: [
1041
+ "menuOpened",
1042
+ "onMenuOpen",
1043
+ "menuClosed",
1044
+ "onMenuClose"
1045
+ ],
1046
+ exportAs: ["matMenuTrigger"]
1047
+ },
1048
+ {
1049
+ kind: "ngmodule",
1050
+ type: MatDividerModule
1051
+ },
1052
+ {
1053
+ kind: "component",
1054
+ type: i6$1.MatDivider,
1055
+ selector: "mat-divider",
1056
+ inputs: ["vertical", "inset"]
1057
+ },
1058
+ {
1059
+ kind: "ngmodule",
1060
+ type: MatCheckboxModule
1061
+ },
1062
+ {
1063
+ kind: "component",
1064
+ type: i10.MatCheckbox,
1065
+ selector: "mat-checkbox",
1066
+ inputs: [
1067
+ "aria-label",
1068
+ "aria-labelledby",
1069
+ "aria-describedby",
1070
+ "aria-expanded",
1071
+ "aria-controls",
1072
+ "aria-owns",
1073
+ "id",
1074
+ "required",
1075
+ "labelPosition",
1076
+ "name",
1077
+ "value",
1078
+ "disableRipple",
1079
+ "tabIndex",
1080
+ "color",
1081
+ "disabledInteractive",
1082
+ "checked",
1083
+ "disabled",
1084
+ "indeterminate"
1085
+ ],
1086
+ outputs: ["change", "indeterminateChange"],
1087
+ exportAs: ["matCheckbox"]
1088
+ },
1089
+ {
1090
+ kind: "directive",
1091
+ type: MatDialogContent,
1092
+ selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]"
1093
+ },
1094
+ {
1095
+ kind: "ngmodule",
1096
+ type: MatListModule
1097
+ },
1098
+ {
1099
+ kind: "component",
1100
+ type: i6$1.MatSelectionList,
1101
+ selector: "mat-selection-list",
1102
+ inputs: [
1103
+ "color",
1104
+ "compareWith",
1105
+ "multiple",
1106
+ "hideSingleSelectionIndicator",
1107
+ "disabled"
1108
+ ],
1109
+ outputs: ["selectionChange"],
1110
+ exportAs: ["matSelectionList"]
1111
+ },
1112
+ {
1113
+ kind: "component",
1114
+ type: i6$1.MatListOption,
1115
+ selector: "mat-list-option",
1116
+ inputs: [
1117
+ "togglePosition",
1118
+ "color",
1119
+ "value",
1120
+ "selected"
1121
+ ],
1122
+ outputs: ["selectedChange"],
1123
+ exportAs: ["matListOption"]
1124
+ },
1125
+ {
1126
+ kind: "directive",
1127
+ type: MatDialogActions,
1128
+ selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]",
1129
+ inputs: ["align"]
1130
+ },
1131
+ {
1132
+ kind: "directive",
1133
+ type: MatDialogClose,
1134
+ selector: "[mat-dialog-close], [matDialogClose]",
1135
+ inputs: [
1136
+ "aria-label",
1137
+ "type",
1138
+ "mat-dialog-close",
1139
+ "matDialogClose"
1140
+ ],
1141
+ exportAs: ["matDialogClose"]
1142
+ },
1143
+ {
1144
+ kind: "ngmodule",
1145
+ type: MatPaginatorModule
1146
+ },
1147
+ {
1148
+ kind: "component",
1149
+ type: i11.MatPaginator,
1150
+ selector: "mat-paginator",
1151
+ inputs: [
1152
+ "color",
1153
+ "pageIndex",
1154
+ "length",
1155
+ "pageSize",
1156
+ "pageSizeOptions",
1157
+ "hidePageSize",
1158
+ "showFirstLastButtons",
1159
+ "selectConfig",
1160
+ "disabled"
1161
+ ],
1162
+ outputs: ["page"],
1163
+ exportAs: ["matPaginator"]
1164
+ },
1165
+ {
1166
+ kind: "pipe",
1167
+ type: SearchFilterPipe,
1168
+ name: "search"
1169
+ },
1170
+ {
1171
+ kind: "pipe",
1172
+ type: SafeHtmlPipe,
1173
+ name: "safeHtml"
1174
+ }
1175
+ ],
1176
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
1177
+ });
1178
+ }
1179
+ };
1180
+ i0.ɵɵngDeclareClassMetadata({
1181
+ minVersion: "12.0.0",
1182
+ version: "22.2.1",
1183
+ ngImport: i0,
1184
+ type: SelectDialogComponent,
1185
+ decorators: [{
1186
+ type: Component,
1187
+ args: [{
1188
+ changeDetection: ChangeDetectionStrategy.OnPush,
1189
+ standalone: true,
1190
+ imports: [
1191
+ FlexLayoutModule,
1192
+ MatDialogTitle,
1193
+ MatFormFieldModule,
1194
+ MatInputModule,
1195
+ FormField,
1196
+ MatButtonModule,
1197
+ MatIconModule,
1198
+ MatSelectModule,
1199
+ MatOptionModule,
1200
+ MatTooltipModule,
1201
+ MatMenuModule,
1202
+ MatDividerModule,
1203
+ MatCheckboxModule,
1204
+ MatDialogContent,
1205
+ MatListModule,
1206
+ MatDialogActions,
1207
+ MatDialogClose,
1208
+ MatPaginatorModule,
1209
+ SearchFilterPipe,
1210
+ SafeHtmlPipe
1211
+ ],
1212
+ template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n<div style=\"padding: 0 24px\">\n @if (dialogData().description) {\n <div class=\"select-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n }\n <div>\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"space-between center\" fxFill>\n @if (!dialogData().canLookupWithOptions) {\n <div fxFlex>\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\n <mat-label>{{dialogData().searchLabel ?? 'Cerca...'}}</mat-label>\n <input type=\"text\" (keyup.enter)=\"$event.preventDefault(); $event.stopPropagation(); doFilter()\" matInput\n title=\"{{dialogData().canLookup ? 'Digita il testo e premi invio' : 'Digita il testo'}}\"\n [formField]=\"filterForm\">\n @if (filterText()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n @if (dialogData().canLookupWithInlineOptions) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Ricerca\"\n (click)=\"showFilterOptions()\" matTooltip=\"Opzioni di ricerca\">\n <mat-icon>tune</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n }\n @if (!dialogData().canLookupWithOptions && dialogData().canLookup && dialogData().lookupFields) {\n <div fxFlex fxHide.lt-md>\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\n <mat-label>Come...</mat-label>\n <mat-select [(value)]=\"lookupField\">\n @for (field of dialogData().lookupFields; track $index) {\n <mat-option [value]=\"field.value\">\n {{field.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n }\n @if (dialogData().canLookupWithOptions) {\n <div fxFlex fxHide.lt-md>\n <button fxFlexAlign=\"center\" type=\"button\" mat-button aria-label=\"Ricerca\" (click)=\"showFilterOptions()\">\n <mat-icon>search</mat-icon> {{this.dialogData().searchButtonLabel ?? 'Ricerca'}}\n </button>\n </div>\n }\n @if (dialogData().canLookup && dialogData().canFilter) {\n <div fxFlex fxHide.lt-md>\n <button type=\"button\" mat-button matTooltip=\"Filtra\" [attr.aria-label]=\"'Filtra'\"\n [matMenuTriggerFor]=\"menuFilter\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" >\n <div><mat-icon>filter_alt</mat-icon></div>\n <div>{{filterOptionsInfo()}}</div>\n <div><mat-icon class=\"icon-menu-drop-down\">\n arrow_drop_down</mat-icon></div>\n </div>\n </button>\n <mat-menu #menuFilter=\"matMenu\" class=\"mat-menu-300\">\n @for (f of filterOptions(); track $index) {\n @if (f.divider) {\n <mat-divider></mat-divider>\n }\n @if (f.groupName) {\n <span style='font-size:small; padding: 2px 4px;'><i><b>{{f.groupName}}</b></i></span>\n }\n @if (!f.groupName && !f.divider) {\n <button mat-menu-item (click)=\"doFilterByOptions(f, true)\" [attr.aria-label]=\"f.description\">\n @if (f.radio && f.value) {\n <span style=\"padding-left:40px\"></span>\n }\n <mat-icon>{{f.icon}}</mat-icon> {{f.title}}\n </button>\n }\n\n }\n </mat-menu>\n </div>\n }\n @if (canEdit() || canAppend() || canView() || canDelete()) {\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" >\n <div fxFlex fxHide.lt-md>\n @if (canAppend()) {\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\n </button>\n }\n @if (canEdit()) {\n <button type=\"button\" mat-icon-button (click)=\"doEdit()\">\n <mat-icon aria-label=\"Modifica\" matTooltip=\"Modifica\">edit</mat-icon>\n </button>\n }\n @if (canView()) {\n <button type=\"button\" mat-icon-button (click)=\"doView()\">\n <mat-icon aria-label=\"Mostra\" matTooltip=\"Mostra\">visibility</mat-icon>\n </button>\n }\n @if (canDelete()) {\n <button type=\"button\" mat-icon-button (click)=\"doDelete()\">\n <mat-icon aria-label=\"Elimina\" matTooltip=\"Elimina\">delete</mat-icon>\n </button>\n }\n </div>\n <div fxFlex fxHide.gt-sm>\n <button type=\"button\" mat-icon-button matTooltip=\"Azioni\" [attr.aria-label]=\"'Azioni'\"\n [matMenuTriggerFor]=\"menuActions\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menuActions=\"matMenu\" class=\"mat-menu-300\">\n @if (canAppend()) {\n <button mat-menu-item (click)=\"doAppend()\" [attr.aria-label]=\"'Aggiungi'\">\n <mat-icon>add</mat-icon> Aggiungi\n </button>\n }\n @if (canEdit()) {\n <button mat-menu-item (click)=\"doEdit()\" [attr.aria-label]=\"'Modifica'\">\n <mat-icon>edit</mat-icon> Modifica\n </button>\n }\n @if (canView()) {\n <button mat-menu-item (click)=\"doView()\" [attr.aria-label]=\"'Mostra'\">\n <mat-icon>visibility</mat-icon> Mostra\n </button>\n }\n @if (canDelete()) {\n <button mat-menu-item (click)=\"doDelete()\" [attr.aria-label]=\"'Elimina'\">\n <mat-icon>delete</mat-icon> Elimina\n </button>\n }\n </mat-menu>\n </div>\n </div>\n }\n </div>\n </div>\n @if ((dialogData().multipleSelection || dialogData().header) && dialogData().items?.length > 0) {\n <div>\n <div fxLayout=\"row\" fxFill style=\"padding-top: 10px;\">\n @if (dialogData().multipleSelection) {\n <div fxFlex=\"64px\" fxFlexAlign=\"center\" style=\"padding-left: 8px;\">\n <mat-checkbox (change)=\"$event ? masterSelectionToggle($event) : null\"\n [indeterminate]=\"selectionMasterIndeterminate()\" [checked]=\"selectionMasterChecked()\"\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\">\n </mat-checkbox>\n </div>\n }\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\n @if (dialogData().header) {\n <div class=\"text\" [innerHtml]=\"dialogData().header | safeHtml\"></div>\n }\n </div>\n </div>\n </div>\n }\n</div>\n<mat-dialog-content style=\"padding-top:0\">\n <div fxLayout=\"column\" fxFill>\n @if (dialogData().canLookup && (!dialogData().items || dialogData().items.length == 0)) {\n <div class=\"text message\"><i>\n @if (!dialogData().emptyMessage) {\n <span>Nessun elemento da visualizzare.<br>Esegui una nuova ricerca o modifica quella\n esistente.\n @if (dialogData().maxItems > 0) {\n <span>Saranno mostrati al massimo {{dialogData().maxItems}} elementi.</span>\n }\n </span>\n } @else {\n <span [innerHtml]=\"dialogData().emptyMessage | safeHtml\"></span>\n }\n </i>\n </div>\n }\n <mat-selection-list #selection (selectionChange)=\"select($event)\" dense hideSingleSelectionIndicator=\"true\"\n [multiple]=\"dialogData().multipleSelection\">\n @for (item of (dialogData().items | search: (!dialogData().canLookup ? filterText() : ''): filterMetadata); track\n $index) {\n <mat-list-option [value]=\"item\" [selected]=\"item.selected\" togglePosition=\"before\">\n <div [innerHtml]=\"item.template | safeHtml\"></div>\n </mat-list-option>\n }\n </mat-selection-list>\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"column\" fxFill>\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\n <div class=\"secondary\" style=\"padding-left:20px\">\n @if (selectionInfo()) {\n <span class=\"bold\">{{selectionInfo()}}</span>&nbsp; <span class=\"small\"> elementi selezionati</span>\n } @else {\n <span class=\"bold\">{{(dialogData().canLookup ? total() : (filterText() ? filterMetadata.count : total())) ??\n 0}}</span>&nbsp; <span class=\"small\"> elementi</span>\n }\n </div>\n <div fxFlexAlign=\"center\">\n @if (canPaginate()) {\n <mat-paginator class=\"x-small\" #paginator [hidePageSize]=\"true\" [pageSize]=\"dialogData().pageSize\" [showFirstLastButtons]=\"true\"\n (page)=\"doLookupPage($event)\" [length]=\"total() ?? 0\"></mat-paginator>\n }\n </div>\n </div>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"okDisabled()\">\n <span>{{dialogData().mustSelect ? dialogData().okCaption : 'Chiudi'}}</span>\n </button>\n @if (dialogData().mustSelect) {\n <button mat-stroked-button mat-dialog-close>\n <span>Annulla</span>\n </button>\n }\n </div>\n </div>\n</mat-dialog-actions>",
1213
+ styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.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}.fill{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;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!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:1.2!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 .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.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}}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}::ng-deep .mdc-list-item__primary-text,.mdc-list-item__content{white-space:normal!important}::ng-deep .mdc-list-item.mdc-list-item--with-one-line{height:unset!important;min-height:48px!important}.select-description{padding:0 24px 24px}.mat-mdc-form-field-icon-suffix{padding-right:8px!important}\n"]
1214
+ }]
1215
+ }],
1216
+ ctorParameters: () => [],
1217
+ propDecorators: {
1218
+ paginator: [{
1219
+ type: i0.ViewChild,
1220
+ args: ["paginator", { isSignal: true }]
1221
+ }],
1222
+ selection: [{
1223
+ type: i0.ViewChild,
1224
+ args: ["selection", { isSignal: true }]
1225
+ }],
1226
+ done: [{
1227
+ type: i0.Output,
1228
+ args: ["done"]
1229
+ }],
1230
+ edit: [{
1231
+ type: i0.Output,
1232
+ args: ["edit"]
1233
+ }],
1234
+ view: [{
1235
+ type: i0.Output,
1236
+ args: ["view"]
1237
+ }],
1238
+ append: [{
1239
+ type: i0.Output,
1240
+ args: ["append"]
1241
+ }],
1242
+ delete: [{
1243
+ type: i0.Output,
1244
+ args: ["delete"]
1245
+ }],
1246
+ lookup: [{
1247
+ type: i0.Output,
1248
+ args: ["lookup"]
1249
+ }],
1250
+ lookupOptions: [{
1251
+ type: i0.Output,
1252
+ args: ["lookupOptions"]
1253
+ }],
1254
+ filter: [{
1255
+ type: i0.Output,
1256
+ args: ["filter"]
1257
+ }]
1258
+ }
1259
+ });
1260
+ var TreeDataSource = class TreeDataSource {
1261
+ constructor() {
1262
+ this._dataChange = new BehaviorSubject([]);
1263
+ this.dataChange$ = this._dataChange.asObservable();
1264
+ }
1265
+ get data() {
1266
+ return this._dataChange.value;
1267
+ }
1268
+ ngOnDestroy() {
1269
+ this._dataChange.complete();
1270
+ }
1271
+ initialize(data) {
1272
+ this._dataChange.next(data);
1273
+ }
1274
+ findNode(node, id) {
1275
+ if (node) {
1276
+ if (node.id === id) return node;
1277
+ const children = node.children;
1278
+ if (children) {
1279
+ let _n;
1280
+ children.some((n) => {
1281
+ _n = this.findNode(n, id);
1282
+ return !!_n;
1283
+ });
1284
+ return _n;
1285
+ }
1286
+ return;
1287
+ }
1288
+ for (const root of this.data) {
1289
+ const found = this.findNode(root, id);
1290
+ if (found) return found;
1291
+ }
1292
+ }
1293
+ removeNode(id) {
1294
+ let n = this.findNode(null, id);
1295
+ if (!n) return;
1296
+ if (n.parent) {
1297
+ const siblings = n.parent.children ?? [];
1298
+ const p = siblings.findIndex((c) => c.id === id);
1299
+ if (p !== -1) {
1300
+ siblings.splice(p, 1);
1301
+ if ((n.parent.count ?? 0) > 0) n.parent.count--;
1302
+ }
1303
+ } else {
1304
+ const p = this.data.findIndex((n) => n.id === id);
1305
+ if (p !== -1) this.data.splice(p, 1);
1306
+ }
1307
+ this._dataChange.next(this.data);
1308
+ }
1309
+ insertNode(node) {
1310
+ if (node.parent) {
1311
+ (node.parent.children ??= []).unshift(node);
1312
+ node.parent.count = (node.parent.count ?? 0) + 1;
1313
+ } else this.data.unshift(node);
1314
+ this._dataChange.next(this.data);
1315
+ }
1316
+ renameNode(id, name) {
1317
+ const n = this.findNode(null, id);
1318
+ if (n) {
1319
+ n.name = name;
1320
+ this._dataChange.next(this.data);
1321
+ }
1322
+ return n;
1323
+ }
1324
+ update() {
1325
+ this._dataChange.next(this.data);
1326
+ }
1327
+ static {
1328
+ this.ɵfac = i0.ɵɵngDeclareFactory({
1329
+ minVersion: "12.0.0",
1330
+ version: "22.2.1",
1331
+ ngImport: i0,
1332
+ type: TreeDataSource,
1333
+ deps: [],
1334
+ target: i0.ɵɵFactoryTarget.Injectable
1335
+ });
1336
+ }
1337
+ static {
1338
+ this.ɵprov = i0.ɵɵngDeclareInjectable({
1339
+ minVersion: "12.0.0",
1340
+ version: "22.2.1",
1341
+ ngImport: i0,
1342
+ type: TreeDataSource
1343
+ });
1344
+ }
1345
+ };
1346
+ i0.ɵɵngDeclareClassMetadata({
1347
+ minVersion: "12.0.0",
1348
+ version: "22.2.1",
1349
+ ngImport: i0,
1350
+ type: TreeDataSource,
1351
+ decorators: [{ type: Injectable }]
1352
+ });
1353
+ var SelectTreeDialogComponent = class SelectTreeDialogComponent {
1354
+ constructor() {
1355
+ this.done = output();
1356
+ this.append = output();
1357
+ this.destroyRef = inject(DestroyRef);
1358
+ this.dialogRef = inject(MatDialogRef);
1359
+ this.dialogData = signal((() => {
1360
+ const data = inject(MAT_DIALOG_DATA) ?? {};
1361
+ return {
1362
+ ...data,
1363
+ title: data.title ?? "Seleziona",
1364
+ okCaption: data.okCaption ?? "OK"
1365
+ };
1366
+ })(), ...ngDevMode ? [{ debugName: "dialogData" }] : /* istanbul ignore next */ []);
1367
+ this.tree = inject(TreeDataSource);
1368
+ this._elRef = inject(ElementRef);
1369
+ this.matTree = viewChild(MatTree, ...ngDevMode ? [{ debugName: "matTree" }] : /* istanbul ignore next */ []);
1370
+ this.childrenAccessor = (node) => node.children ?? [];
1371
+ this.treeNodes = signal([], ...ngDevMode ? [{ debugName: "treeNodes" }] : /* istanbul ignore next */ []);
1372
+ this.currentNode = signal(void 0, ...ngDevMode ? [{ debugName: "currentNode" }] : /* istanbul ignore next */ []);
1373
+ this.filterText = signal("", ...ngDevMode ? [{ debugName: "filterText" }] : /* istanbul ignore next */ []);
1374
+ this.filterForm = form(this.filterText);
1375
+ this.filteredItems = signal([], ...ngDevMode ? [{ debugName: "filteredItems" }] : /* istanbul ignore next */ []);
1376
+ this.filterIndex = signal(-1, ...ngDevMode ? [{ debugName: "filterIndex" }] : /* istanbul ignore next */ []);
1377
+ this.filteredNode = computed(() => {
1378
+ const idx = this.filterIndex();
1379
+ return idx >= 0 ? this.filteredItems()[idx] ?? null : null;
1380
+ }, ...ngDevMode ? [{ debugName: "filteredNode" }] : /* istanbul ignore next */ []);
1381
+ this.canAppend = signal(this.dialogData().canAppend || false, ...ngDevMode ? [{ debugName: "canAppend" }] : /* istanbul ignore next */ []);
1382
+ this._nodeMap = computed(() => {
1383
+ const map = /* @__PURE__ */ new Map();
1384
+ const build = (nodes) => {
1385
+ for (const n of nodes) {
1386
+ map.set(n.id, n);
1387
+ if (n.children?.length) build(n.children);
1388
+ }
1389
+ };
1390
+ build(this.treeNodes());
1391
+ return map;
1392
+ }, ...ngDevMode ? [{ debugName: "_nodeMap" }] : /* istanbul ignore next */ []);
1393
+ this.hasChild = (_, node) => !!node.children?.length;
1394
+ this.tree.dataChange$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((data) => {
1395
+ this.treeNodes.set(data);
1396
+ setTimeout(() => {
1397
+ const current = this.currentNode();
1398
+ if (current) {
1399
+ const n = this.findInTree(data, current.id);
1400
+ if (n) {
1401
+ this.currentNode.set(n);
1402
+ this.expand(n);
1403
+ }
1404
+ }
1405
+ });
1406
+ });
1407
+ const data = this.dialogData();
1408
+ if (data.nodes) this.tree.initialize(data.nodes);
1409
+ if (data.initialFilter) {
1410
+ this.filterText.set(data.initialFilter);
1411
+ this.doFilter();
1412
+ }
1413
+ }
1414
+ ok() {
1415
+ const node = this.currentNode();
1416
+ if (node) this.done.emit({ selectedItems: [node] });
1417
+ setTimeout(() => {
1418
+ this.dialogRef.close();
1419
+ }, 500);
1420
+ }
1421
+ select(e, node) {
1422
+ if (e) e.stopPropagation();
1423
+ if (node) this.currentNode.set(node.id === this.currentNode()?.id ? void 0 : node);
1424
+ }
1425
+ clearFilter() {
1426
+ this.filterText.set("");
1427
+ this.filteredItems.set([]);
1428
+ this.filterIndex.set(-1);
1429
+ }
1430
+ doFilter() {
1431
+ const text = this.filterText().trim().toLowerCase();
1432
+ if (text.length < 3) {
1433
+ this.filteredItems.set([]);
1434
+ this.filterIndex.set(-1);
1435
+ return;
1436
+ }
1437
+ const matches = Array.from(this._nodeMap().values()).filter((n) => n.name?.toLowerCase().includes(text));
1438
+ this.filteredItems.set(matches);
1439
+ const idx = matches.length > 0 ? 0 : -1;
1440
+ this.filterIndex.set(idx);
1441
+ if (idx >= 0) this._scrollToFiltered(idx, matches);
1442
+ }
1443
+ nextFiltered() {
1444
+ const items = this.filteredItems();
1445
+ if (!items.length) return;
1446
+ const next = (this.filterIndex() + 1) % items.length;
1447
+ this.filterIndex.set(next);
1448
+ this._scrollToFiltered(next, items);
1449
+ }
1450
+ isFilteredNode(node) {
1451
+ return this.filteredNode()?.id === node.id;
1452
+ }
1453
+ _scrollToFiltered(index, items) {
1454
+ const node = items[index];
1455
+ if (!node) return;
1456
+ this.currentNode.set(node);
1457
+ this.expand(node);
1458
+ setTimeout(() => {
1459
+ this._elRef.nativeElement.querySelector(`[data-node-id="${node.id}"]`)?.scrollIntoView({
1460
+ block: "nearest",
1461
+ behavior: "smooth"
1462
+ });
1463
+ });
1464
+ }
1465
+ expand(node) {
1466
+ this.matTree()?.expand(node);
1467
+ let parent = node.parent;
1468
+ const visited = /* @__PURE__ */ new Set();
1469
+ while (parent && !visited.has(parent)) {
1470
+ visited.add(parent);
1471
+ this.matTree()?.expand(parent);
1472
+ parent = parent.parent;
1473
+ }
1474
+ return false;
1475
+ }
1476
+ findInTree(nodes, id) {
1477
+ for (const node of nodes) {
1478
+ if (node.id === id) return node;
1479
+ if (node.children?.length) {
1480
+ const found = this.findInTree(node.children, id);
1481
+ if (found) return found;
1482
+ }
1483
+ }
1484
+ }
1485
+ appendNode(node) {
1486
+ this.tree.insertNode(node);
1487
+ }
1488
+ collapseAll() {
1489
+ this.matTree()?.collapseAll();
1490
+ this.currentNode.set(void 0);
1491
+ }
1492
+ expandAll() {
1493
+ this.matTree()?.expandAll();
1494
+ const node = this.currentNode();
1495
+ if (node) setTimeout(() => {
1496
+ this._elRef.nativeElement.querySelector(`[data-node-id="${node.id}"]`)?.scrollIntoView({
1497
+ block: "nearest",
1498
+ behavior: "smooth"
1499
+ });
1500
+ });
1501
+ }
1502
+ doAppend() {
1503
+ this.append.emit({
1504
+ parent: this.currentNode(),
1505
+ owner: this
1506
+ });
1507
+ }
1508
+ static {
1509
+ this.ɵfac = i0.ɵɵngDeclareFactory({
1510
+ minVersion: "12.0.0",
1511
+ version: "22.2.1",
1512
+ ngImport: i0,
1513
+ type: SelectTreeDialogComponent,
1514
+ deps: [],
1515
+ target: i0.ɵɵFactoryTarget.Component
1516
+ });
1517
+ }
1518
+ static {
1519
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
1520
+ minVersion: "17.0.0",
1521
+ version: "22.2.1",
1522
+ type: SelectTreeDialogComponent,
1523
+ isStandalone: true,
1524
+ selector: "ng-component",
1525
+ outputs: {
1526
+ done: "done",
1527
+ append: "append"
1528
+ },
1529
+ providers: [TreeDataSource],
1530
+ viewQueries: [{
1531
+ propertyName: "matTree",
1532
+ first: true,
1533
+ predicate: MatTree,
1534
+ descendants: true,
1535
+ isSignal: true
1536
+ }],
1537
+ ngImport: i0,
1538
+ template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n<div style=\"padding: 0 24px\">\n @if (dialogData().description) {\n <div class=\"selecttree-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n }\n <div style=\"padding-bottom: 10px;\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex fxHide.xs>\n <mat-form-field style=\"width:100%\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Cerca...</mat-label>\n <input type=\"text\" (keyup)=\"doFilter()\" matInput title=\"Digita il testo'\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\" \n (keydown.arrowDown)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\"\n [formField]=\"filterForm\">\n @if (filterText()) {\n <button type=\"button\" type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n @if (filteredItems().length > 0) {\n <div fxFlex=\"50px\" fxHide.xs fxLayoutAlign=\"end center\">\n <div class=\"small\">{{filterIndex() + 1}} / {{filteredItems().length}}</div>\n </div>\n <div fxFlex=\"48px\" fxHide.xs fxLayoutAlign=\"end center\">\n <button type=\"button\" type=\"button\" mat-icon-button (click)=\"nextFiltered()\">\n <mat-icon aria-label=\"Vai al prossimo\" matTooltip=\"Vai al prossimo\">arrow_downward</mat-icon>\n </button>\n </div>\n }\n <div fxFlex=\"50\" fxLayoutAlign=\"end center\" style=\"white-space:nowrap\">\n <div>\n @if (canAppend()) {\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\n </button>\n }\n <button type=\"button\" mat-icon-button (click)=\"collapseAll()\">\n <mat-icon aria-label=\"Comprimi tutto\" matTooltip=\"Comprimi tutto\">unfold_less</mat-icon>\n </button>\n <button type=\"button\" mat-icon-button (click)=\"expandAll()\">\n <mat-icon aria-label=\"Espandi tutto\" matTooltip=\"Espandi tutto\">unfold_more</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n<mat-dialog-content>\n <div fxLayout=\"column\" fxFill>\n <mat-tree [dataSource]=\"treeNodes()\" [childrenAccessor]=\"childrenAccessor\" class=\"tree\">\n <mat-tree-node [attr.data-node-id]=\"node.id\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node\" (click)=\"select($event, node);\"\n [class.tree-node-activated]=\"currentNode()?.id === node.id\" [class.tree-node-filtered]=\"isFilteredNode(node)\">\n <div fxLayout=\"row\" fxFill>\n <button type=\"button\" mat-icon-button disabled class=\"small-icon-button\"></button>\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small\">\n {{node.name}}\n </div>\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\n @if (node.count > 0) {\n <span fxLayoutAlign=\"end\" class=\"small\">({{node.count}})</span>\n }\n </div>\n </div>\n </mat-tree-node>\n\n <mat-tree-node #treeNodeRef=\"matTreeNode\" [attr.data-node-id]=\"node.id\" *matTreeNodeDef=\"let node;when: hasChild\"\n matTreeNodePadding [matTreeNodePaddingIndent]=\"20\" class=\"tree-node\"\n [class.tree-node-activated]=\"currentNode()?.id === node.id\" [class.tree-node-filtered]=\"isFilteredNode(node)\"\n (click)=\"select($event, node);\">\n <div fxLayout=\"row\" fxFill>\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\n <button type=\"button\" mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Apri/chiudi ' + node.name\"\n class=\"small-icon-button\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{treeNodeRef.isExpanded ? 'expand_more' : 'chevron_right'}}\n </mat-icon>\n </button>\n </div>\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small\">\n {{node.name}}\n </div>\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\n @if (node.count > 0) {\n <div fxLayoutAlign=\"end\" class=\"small\">({{node.count}})</div>\n }\n </div>\n </div>\n </mat-tree-node>\n </mat-tree>\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!currentNode()\">{{dialogData().okCaption}}</button>\n <button mat-button mat-dialog-close>Annulla</button>\n </div>\n</mat-dialog-actions>",
1539
+ styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.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}.fill{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;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!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:1.2!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 .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.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}}.tree{background-color:transparent!important}.tree-node{min-height:36px!important;padding-right:12px;margin-right:0}.tree-node .small-icon-button{width:2rem!important;height:2rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.tree-node .small-icon-button .mat-mdc-button-touch-target{width:2rem!important;height:2rem!important}.tree-node:hover{cursor:pointer;background-color:var(--mat-menu-item-hover-state-layer-color, transparent);border-radius:24px}.tree-node-filtered ::ng-deep .mdc-label,.tree-node-filtered ::ng-deep .mat-mdc-checkbox label{font-weight:700;color:var(--ars-color-accent, #7894ae)!important}.tree-node-activated ::ng-deep .mdc-label,.tree-node-activated ::ng-deep .mat-mdc-checkbox label{font-weight:700;color:var(--ars-color-secondary, #4a635f)!important}.selecttree-description{padding:0 24px 24px}\n"],
1540
+ dependencies: [
1541
+ {
1542
+ kind: "directive",
1543
+ type: MatDialogTitle,
1544
+ selector: "[mat-dialog-title], [matDialogTitle]",
1545
+ inputs: ["id"],
1546
+ exportAs: ["matDialogTitle"]
1547
+ },
1548
+ {
1549
+ kind: "ngmodule",
1550
+ type: FlexLayoutModule
1551
+ },
1552
+ {
1553
+ kind: "directive",
1554
+ type: i1.FxLayoutDirective,
1555
+ 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] ",
1556
+ inputs: [
1557
+ "fxLayout",
1558
+ "fxLayout.xs",
1559
+ "fxLayout.sm",
1560
+ "fxLayout.md",
1561
+ "fxLayout.lg",
1562
+ "fxLayout.xl",
1563
+ "fxLayout.lt-sm",
1564
+ "fxLayout.lt-md",
1565
+ "fxLayout.lt-lg",
1566
+ "fxLayout.lt-xl",
1567
+ "fxLayout.gt-xs",
1568
+ "fxLayout.gt-sm",
1569
+ "fxLayout.gt-md",
1570
+ "fxLayout.gt-lg"
1571
+ ]
1572
+ },
1573
+ {
1574
+ kind: "directive",
1575
+ type: i1.FxFlexDirective,
1576
+ 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] ",
1577
+ inputs: [
1578
+ "fxFlex",
1579
+ "fxFlex.xs",
1580
+ "fxFlex.sm",
1581
+ "fxFlex.md",
1582
+ "fxFlex.lg",
1583
+ "fxFlex.xl",
1584
+ "fxFlex.lt-sm",
1585
+ "fxFlex.lt-md",
1586
+ "fxFlex.lt-lg",
1587
+ "fxFlex.lt-xl",
1588
+ "fxFlex.gt-xs",
1589
+ "fxFlex.gt-sm",
1590
+ "fxFlex.gt-md",
1591
+ "fxFlex.gt-lg"
1592
+ ]
1593
+ },
1594
+ {
1595
+ kind: "directive",
1596
+ type: i1.FxShowHideDirective,
1597
+ selector: " [fxShow], [fxHide], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg] ",
1598
+ inputs: [
1599
+ "fxShow",
1600
+ "fxShow.xs",
1601
+ "fxShow.sm",
1602
+ "fxShow.md",
1603
+ "fxShow.lg",
1604
+ "fxShow.xl",
1605
+ "fxShow.lt-sm",
1606
+ "fxShow.lt-md",
1607
+ "fxShow.lt-lg",
1608
+ "fxShow.lt-xl",
1609
+ "fxShow.gt-xs",
1610
+ "fxShow.gt-sm",
1611
+ "fxShow.gt-md",
1612
+ "fxShow.gt-lg",
1613
+ "fxHide",
1614
+ "fxHide.xs",
1615
+ "fxHide.sm",
1616
+ "fxHide.md",
1617
+ "fxHide.lg",
1618
+ "fxHide.xl",
1619
+ "fxHide.lt-sm",
1620
+ "fxHide.lt-md",
1621
+ "fxHide.lt-lg",
1622
+ "fxHide.lt-xl",
1623
+ "fxHide.gt-xs",
1624
+ "fxHide.gt-sm",
1625
+ "fxHide.gt-md",
1626
+ "fxHide.gt-lg"
1627
+ ]
1628
+ },
1629
+ {
1630
+ kind: "directive",
1631
+ type: i1.FxLayoutAlignDirective,
1632
+ 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] ",
1633
+ inputs: [
1634
+ "fxLayoutAlign",
1635
+ "fxLayoutAlign.xs",
1636
+ "fxLayoutAlign.sm",
1637
+ "fxLayoutAlign.md",
1638
+ "fxLayoutAlign.lg",
1639
+ "fxLayoutAlign.xl",
1640
+ "fxLayoutAlign.lt-sm",
1641
+ "fxLayoutAlign.lt-md",
1642
+ "fxLayoutAlign.lt-lg",
1643
+ "fxLayoutAlign.lt-xl",
1644
+ "fxLayoutAlign.gt-xs",
1645
+ "fxLayoutAlign.gt-sm",
1646
+ "fxLayoutAlign.gt-md",
1647
+ "fxLayoutAlign.gt-lg"
1648
+ ]
1649
+ },
1650
+ {
1651
+ kind: "directive",
1652
+ type: i1.FxLayoutGapDirective,
1653
+ 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] ",
1654
+ inputs: [
1655
+ "fxLayoutGap",
1656
+ "fxLayoutGap.xs",
1657
+ "fxLayoutGap.sm",
1658
+ "fxLayoutGap.md",
1659
+ "fxLayoutGap.lg",
1660
+ "fxLayoutGap.xl",
1661
+ "fxLayoutGap.lt-sm",
1662
+ "fxLayoutGap.lt-md",
1663
+ "fxLayoutGap.lt-lg",
1664
+ "fxLayoutGap.lt-xl",
1665
+ "fxLayoutGap.gt-xs",
1666
+ "fxLayoutGap.gt-sm",
1667
+ "fxLayoutGap.gt-md",
1668
+ "fxLayoutGap.gt-lg"
1669
+ ]
1670
+ },
1671
+ {
1672
+ kind: "directive",
1673
+ type: i1.FxFlexAlignDirective,
1674
+ 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] ",
1675
+ inputs: [
1676
+ "fxFlexAlign",
1677
+ "fxFlexAlign.xs",
1678
+ "fxFlexAlign.sm",
1679
+ "fxFlexAlign.md",
1680
+ "fxFlexAlign.lg",
1681
+ "fxFlexAlign.xl",
1682
+ "fxFlexAlign.lt-sm",
1683
+ "fxFlexAlign.lt-md",
1684
+ "fxFlexAlign.lt-lg",
1685
+ "fxFlexAlign.lt-xl",
1686
+ "fxFlexAlign.gt-xs",
1687
+ "fxFlexAlign.gt-sm",
1688
+ "fxFlexAlign.gt-md",
1689
+ "fxFlexAlign.gt-lg"
1690
+ ]
1691
+ },
1692
+ {
1693
+ kind: "directive",
1694
+ type: i1.FxFlexFillDirective,
1695
+ selector: " [fxFlexFill], [fxFill], [fxFlexFill.xs], [fxFlexFill.sm], [fxFlexFill.md], [fxFlexFill.lg], [fxFlexFill.xl], [fxFlexFill.lt-sm], [fxFlexFill.lt-md], [fxFlexFill.lt-lg], [fxFlexFill.lt-xl], [fxFlexFill.gt-xs], [fxFlexFill.gt-sm], [fxFlexFill.gt-md], [fxFlexFill.gt-lg] ",
1696
+ inputs: [
1697
+ "fxFlexFill",
1698
+ "fxFill",
1699
+ "fxFlexFill.xs",
1700
+ "fxFlexFill.sm",
1701
+ "fxFlexFill.md",
1702
+ "fxFlexFill.lg",
1703
+ "fxFlexFill.xl",
1704
+ "fxFlexFill.lt-sm",
1705
+ "fxFlexFill.lt-md",
1706
+ "fxFlexFill.lt-lg",
1707
+ "fxFlexFill.lt-xl",
1708
+ "fxFlexFill.gt-xs",
1709
+ "fxFlexFill.gt-sm",
1710
+ "fxFlexFill.gt-md",
1711
+ "fxFlexFill.gt-lg"
1712
+ ]
1713
+ },
1714
+ {
1715
+ kind: "ngmodule",
1716
+ type: MatFormFieldModule
1717
+ },
1718
+ {
1719
+ kind: "component",
1720
+ type: i2.MatFormField,
1721
+ selector: "mat-form-field",
1722
+ inputs: [
1723
+ "hideRequiredMarker",
1724
+ "color",
1725
+ "floatLabel",
1726
+ "appearance",
1727
+ "subscriptSizing",
1728
+ "hintLabel"
1729
+ ],
1730
+ exportAs: ["matFormField"]
1731
+ },
1732
+ {
1733
+ kind: "directive",
1734
+ type: i2.MatLabel,
1735
+ selector: "mat-label"
1736
+ },
1737
+ {
1738
+ kind: "directive",
1739
+ type: i2.MatSuffix,
1740
+ selector: "[matSuffix], [matIconSuffix], [matTextSuffix]",
1741
+ inputs: ["matTextSuffix"]
1742
+ },
1743
+ {
1744
+ kind: "ngmodule",
1745
+ type: MatInputModule
1746
+ },
1747
+ {
1748
+ kind: "directive",
1749
+ type: i3.MatInput,
1750
+ selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",
1751
+ inputs: [
1752
+ "disabled",
1753
+ "id",
1754
+ "placeholder",
1755
+ "name",
1756
+ "required",
1757
+ "type",
1758
+ "errorStateMatcher",
1759
+ "aria-describedby",
1760
+ "value",
1761
+ "readonly",
1762
+ "disabledInteractive"
1763
+ ],
1764
+ exportAs: ["matInput"]
1765
+ },
1766
+ {
1767
+ kind: "directive",
1768
+ type: FormField,
1769
+ selector: "[formField]",
1770
+ inputs: ["formField"],
1771
+ exportAs: ["formField"]
1772
+ },
1773
+ {
1774
+ kind: "ngmodule",
1775
+ type: MatButtonModule
1776
+ },
1777
+ {
1778
+ kind: "component",
1779
+ type: i4$1.MatButton,
1780
+ 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] ",
1781
+ inputs: ["matButton"],
1782
+ exportAs: ["matButton", "matAnchor"]
1783
+ },
1784
+ {
1785
+ kind: "component",
1786
+ type: i4$1.MatIconButton,
1787
+ selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]",
1788
+ exportAs: ["matButton", "matAnchor"]
1789
+ },
1790
+ {
1791
+ kind: "ngmodule",
1792
+ type: MatIconModule
1793
+ },
1794
+ {
1795
+ kind: "component",
1796
+ type: i5.MatIcon,
1797
+ selector: "mat-icon",
1798
+ inputs: [
1799
+ "color",
1800
+ "inline",
1801
+ "svgIcon",
1802
+ "fontSet",
1803
+ "fontIcon"
1804
+ ],
1805
+ exportAs: ["matIcon"]
1806
+ },
1807
+ {
1808
+ kind: "ngmodule",
1809
+ type: MatTooltipModule
1810
+ },
1811
+ {
1812
+ kind: "directive",
1813
+ type: i7$1.MatTooltip,
1814
+ selector: "[matTooltip]",
1815
+ inputs: [
1816
+ "matTooltipPosition",
1817
+ "matTooltipPositionAtOrigin",
1818
+ "matTooltipDisabled",
1819
+ "matTooltipShowDelay",
1820
+ "matTooltipHideDelay",
1821
+ "matTooltipTouchGestures",
1822
+ "matTooltip",
1823
+ "matTooltipClass"
1824
+ ],
1825
+ exportAs: ["matTooltip"]
1826
+ },
1827
+ {
1828
+ kind: "directive",
1829
+ type: MatDialogContent,
1830
+ selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]"
1831
+ },
1832
+ {
1833
+ kind: "ngmodule",
1834
+ type: MatTreeModule
1835
+ },
1836
+ {
1837
+ kind: "directive",
1838
+ type: i7.MatTreeNodeDef,
1839
+ selector: "[matTreeNodeDef]",
1840
+ inputs: ["matTreeNodeDefWhen", "matTreeNode"]
1841
+ },
1842
+ {
1843
+ kind: "directive",
1844
+ type: i7.MatTreeNodePadding,
1845
+ selector: "[matTreeNodePadding]",
1846
+ inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"]
1847
+ },
1848
+ {
1849
+ kind: "directive",
1850
+ type: i7.MatTreeNodeToggle,
1851
+ selector: "[matTreeNodeToggle]",
1852
+ inputs: ["matTreeNodeToggleRecursive"]
1853
+ },
1854
+ {
1855
+ kind: "component",
1856
+ type: i7.MatTree,
1857
+ selector: "mat-tree",
1858
+ exportAs: ["matTree"]
1859
+ },
1860
+ {
1861
+ kind: "directive",
1862
+ type: i7.MatTreeNode,
1863
+ selector: "mat-tree-node",
1864
+ inputs: ["tabIndex", "disabled"],
1865
+ outputs: ["activation", "expandedChange"],
1866
+ exportAs: ["matTreeNode"]
1867
+ },
1868
+ {
1869
+ kind: "directive",
1870
+ type: MatDialogActions,
1871
+ selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]",
1872
+ inputs: ["align"]
1873
+ },
1874
+ {
1875
+ kind: "directive",
1876
+ type: MatDialogClose,
1877
+ selector: "[mat-dialog-close], [matDialogClose]",
1878
+ inputs: [
1879
+ "aria-label",
1880
+ "type",
1881
+ "mat-dialog-close",
1882
+ "matDialogClose"
1883
+ ],
1884
+ exportAs: ["matDialogClose"]
1885
+ },
1886
+ {
1887
+ kind: "pipe",
1888
+ type: SafeHtmlPipe,
1889
+ name: "safeHtml"
1890
+ }
1891
+ ],
1892
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
1893
+ });
1894
+ }
1895
+ };
1896
+ i0.ɵɵngDeclareClassMetadata({
1897
+ minVersion: "12.0.0",
1898
+ version: "22.2.1",
1899
+ ngImport: i0,
1900
+ type: SelectTreeDialogComponent,
1901
+ decorators: [{
1902
+ type: Component,
1903
+ args: [{
1904
+ providers: [TreeDataSource],
1905
+ standalone: true,
1906
+ changeDetection: ChangeDetectionStrategy.OnPush,
1907
+ imports: [
1908
+ MatDialogTitle,
1909
+ FlexLayoutModule,
1910
+ MatFormFieldModule,
1911
+ MatInputModule,
1912
+ FormField,
1913
+ MatButtonModule,
1914
+ MatIconModule,
1915
+ MatTooltipModule,
1916
+ MatDialogContent,
1917
+ MatTreeModule,
1918
+ MatDialogActions,
1919
+ MatDialogClose,
1920
+ SafeHtmlPipe
1921
+ ],
1922
+ template: "<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n<div style=\"padding: 0 24px\">\n @if (dialogData().description) {\n <div class=\"selecttree-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n }\n <div style=\"padding-bottom: 10px;\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex fxHide.xs>\n <mat-form-field style=\"width:100%\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Cerca...</mat-label>\n <input type=\"text\" (keyup)=\"doFilter()\" matInput title=\"Digita il testo'\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\" \n (keydown.arrowDown)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\"\n [formField]=\"filterForm\">\n @if (filterText()) {\n <button type=\"button\" type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n @if (filteredItems().length > 0) {\n <div fxFlex=\"50px\" fxHide.xs fxLayoutAlign=\"end center\">\n <div class=\"small\">{{filterIndex() + 1}} / {{filteredItems().length}}</div>\n </div>\n <div fxFlex=\"48px\" fxHide.xs fxLayoutAlign=\"end center\">\n <button type=\"button\" type=\"button\" mat-icon-button (click)=\"nextFiltered()\">\n <mat-icon aria-label=\"Vai al prossimo\" matTooltip=\"Vai al prossimo\">arrow_downward</mat-icon>\n </button>\n </div>\n }\n <div fxFlex=\"50\" fxLayoutAlign=\"end center\" style=\"white-space:nowrap\">\n <div>\n @if (canAppend()) {\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\n </button>\n }\n <button type=\"button\" mat-icon-button (click)=\"collapseAll()\">\n <mat-icon aria-label=\"Comprimi tutto\" matTooltip=\"Comprimi tutto\">unfold_less</mat-icon>\n </button>\n <button type=\"button\" mat-icon-button (click)=\"expandAll()\">\n <mat-icon aria-label=\"Espandi tutto\" matTooltip=\"Espandi tutto\">unfold_more</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n<mat-dialog-content>\n <div fxLayout=\"column\" fxFill>\n <mat-tree [dataSource]=\"treeNodes()\" [childrenAccessor]=\"childrenAccessor\" class=\"tree\">\n <mat-tree-node [attr.data-node-id]=\"node.id\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node\" (click)=\"select($event, node);\"\n [class.tree-node-activated]=\"currentNode()?.id === node.id\" [class.tree-node-filtered]=\"isFilteredNode(node)\">\n <div fxLayout=\"row\" fxFill>\n <button type=\"button\" mat-icon-button disabled class=\"small-icon-button\"></button>\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small\">\n {{node.name}}\n </div>\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\n @if (node.count > 0) {\n <span fxLayoutAlign=\"end\" class=\"small\">({{node.count}})</span>\n }\n </div>\n </div>\n </mat-tree-node>\n\n <mat-tree-node #treeNodeRef=\"matTreeNode\" [attr.data-node-id]=\"node.id\" *matTreeNodeDef=\"let node;when: hasChild\"\n matTreeNodePadding [matTreeNodePaddingIndent]=\"20\" class=\"tree-node\"\n [class.tree-node-activated]=\"currentNode()?.id === node.id\" [class.tree-node-filtered]=\"isFilteredNode(node)\"\n (click)=\"select($event, node);\">\n <div fxLayout=\"row\" fxFill>\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\n <button type=\"button\" mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Apri/chiudi ' + node.name\"\n class=\"small-icon-button\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{treeNodeRef.isExpanded ? 'expand_more' : 'chevron_right'}}\n </mat-icon>\n </button>\n </div>\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small\">\n {{node.name}}\n </div>\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\n @if (node.count > 0) {\n <div fxLayoutAlign=\"end\" class=\"small\">({{node.count}})</div>\n }\n </div>\n </div>\n </mat-tree-node>\n </mat-tree>\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!currentNode()\">{{dialogData().okCaption}}</button>\n <button mat-button mat-dialog-close>Annulla</button>\n </div>\n</mat-dialog-actions>",
1923
+ styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.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}.fill{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;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!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:1.2!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 .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.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}}.tree{background-color:transparent!important}.tree-node{min-height:36px!important;padding-right:12px;margin-right:0}.tree-node .small-icon-button{width:2rem!important;height:2rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.tree-node .small-icon-button .mat-mdc-button-touch-target{width:2rem!important;height:2rem!important}.tree-node:hover{cursor:pointer;background-color:var(--mat-menu-item-hover-state-layer-color, transparent);border-radius:24px}.tree-node-filtered ::ng-deep .mdc-label,.tree-node-filtered ::ng-deep .mat-mdc-checkbox label{font-weight:700;color:var(--ars-color-accent, #7894ae)!important}.tree-node-activated ::ng-deep .mdc-label,.tree-node-activated ::ng-deep .mat-mdc-checkbox label{font-weight:700;color:var(--ars-color-secondary, #4a635f)!important}.selecttree-description{padding:0 24px 24px}\n"]
1924
+ }]
1925
+ }],
1926
+ ctorParameters: () => [],
1927
+ propDecorators: {
1928
+ done: [{
1929
+ type: i0.Output,
1930
+ args: ["done"]
1931
+ }],
1932
+ append: [{
1933
+ type: i0.Output,
1934
+ args: ["append"]
1935
+ }],
1936
+ matTree: [{
1937
+ type: i0.ViewChild,
1938
+ args: [i0.forwardRef(() => MatTree), { isSignal: true }]
1939
+ }]
1940
+ }
1941
+ });
1942
+ const _EMPTY_ITEM = {
1943
+ recipients: "",
1944
+ subject: "",
1945
+ text: ""
1946
+ };
1947
+ var SendToDialogComponent = class SendToDialogComponent {
1948
+ constructor() {
1949
+ this.getErrorMessage = SignalsUtils.getFieldErrorMessage;
1950
+ this.done = output();
1951
+ this.populate = output();
1952
+ this.dialogData = signal((() => {
1953
+ const data = inject(MAT_DIALOG_DATA) ?? {};
1954
+ const count = data.count ?? 0;
1955
+ const title = data.title || (count ? count === 1 ? "Invia documento a..." : `Invia ${count} documenti a...` : void 0);
1956
+ return {
1957
+ ...data,
1958
+ count,
1959
+ appearance: data.appearance ?? "fill",
1960
+ title
1961
+ };
1962
+ })(), ...ngDevMode ? [{ debugName: "dialogData" }] : /* istanbul ignore next */ []);
1963
+ this.model = signal(this.toForm(), ...ngDevMode ? [{ debugName: "model" }] : /* istanbul ignore next */ []);
1964
+ this.form = form(this.model, (p) => {
1965
+ required(p.recipients);
1966
+ notEmpty(p.recipients);
1967
+ maxLength(p.recipients, 1e3);
1968
+ emails(p.recipients);
1969
+ required(p.subject);
1970
+ notEmpty(p.subject);
1971
+ maxLength(p.subject, 200);
1972
+ required(p.text);
1973
+ notEmpty(p.text);
1974
+ maxLength(p.text, 1e3);
1975
+ });
1976
+ }
1977
+ toForm() {
1978
+ const data = this.dialogData();
1979
+ return DtoUtils.toForm(_EMPTY_ITEM, {
1980
+ subject: data.subject,
1981
+ text: data.text
1982
+ });
1983
+ }
1984
+ toPayload() {
1985
+ return {
1986
+ ...DtoUtils.toPayload(this.model()),
1987
+ options: this.dialogData().options
1988
+ };
1989
+ }
1990
+ ok() {
1991
+ this.done.emit(this.toPayload());
1992
+ }
1993
+ populateRecipients() {
1994
+ if (this.dialogData().canPopulate) this.populate.emit({
1995
+ item: this.toPayload(),
1996
+ source: this
1997
+ });
1998
+ }
1999
+ updateRecipients(recipients) {
2000
+ this.model.update((m) => ({
2001
+ ...m,
2002
+ recipients
2003
+ }));
2004
+ }
2005
+ static {
2006
+ this.ɵfac = i0.ɵɵngDeclareFactory({
2007
+ minVersion: "12.0.0",
2008
+ version: "22.2.1",
2009
+ ngImport: i0,
2010
+ type: SendToDialogComponent,
2011
+ deps: [],
2012
+ target: i0.ɵɵFactoryTarget.Component
2013
+ });
2014
+ }
2015
+ static {
2016
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
2017
+ minVersion: "17.0.0",
2018
+ version: "22.2.1",
2019
+ type: SendToDialogComponent,
2020
+ isStandalone: true,
2021
+ selector: "ng-component",
2022
+ outputs: {
2023
+ done: "done",
2024
+ populate: "populate"
2025
+ },
2026
+ ngImport: i0,
2027
+ template: "<div class=\"dialog-info\">\r\n @if (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 class=\"dialog-content\">\r\n <p>{{dialogData().info}}</p>\r\n <form [formRoot]=\"form\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Destinatari</mat-label>\r\n <textarea matInput [formField]=\"form.recipients\"\r\n cdkTextareaAutosize cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\"></textarea>\r\n @if (form.recipients().value()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"form.recipients().value.set('')\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (dialogData().canPopulate) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Popola\"\r\n (click)=\"populateRecipients()\" matTooltip=\"Popola\">\r\n <mat-icon>person</mat-icon>\r\n </button>\r\n }\r\n <mat-hint align=\"start\">Separati da punto e virgola</mat-hint>\r\n <mat-hint align=\"end\">{{form.recipients().value()?.length || 0}}/1000 </mat-hint>\r\n @if (form.recipients().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.recipients().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Oggetto</mat-label>\r\n <input matInput [formField]=\"form.subject\" />\r\n @if (form.subject().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.subject().errors()) }}</mat-error>\r\n }\r\n <mat-hint align=\"end\">{{form.subject().value()?.length || 0}}/200 </mat-hint>\r\n </mat-form-field>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Testo</mat-label>\r\n <textarea matInput [formField]=\"form.text\" cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\"></textarea>\r\n <mat-hint align=\"end\">{{form.text().value()?.length || 0}}/1000 </mat-hint>\r\n @if (form.text().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.text().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (dialogData().options) {\r\n <div style=\"padding-bottom: 24px;\">\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 </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">Invia</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n",
2028
+ styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.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}.fill{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;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!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:1.2!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 .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.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}\n"],
2029
+ dependencies: [
2030
+ {
2031
+ kind: "directive",
2032
+ type: MatDialogTitle,
2033
+ selector: "[mat-dialog-title], [matDialogTitle]",
2034
+ inputs: ["id"],
2035
+ exportAs: ["matDialogTitle"]
2036
+ },
2037
+ {
2038
+ kind: "directive",
2039
+ type: MatDialogContent,
2040
+ selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]"
2041
+ },
2042
+ {
2043
+ kind: "directive",
2044
+ type: FormField,
2045
+ selector: "[formField]",
2046
+ inputs: ["formField"],
2047
+ exportAs: ["formField"]
2048
+ },
2049
+ {
2050
+ kind: "directive",
2051
+ type: FormRoot,
2052
+ selector: "form[formRoot]",
2053
+ inputs: ["formRoot"]
2054
+ },
2055
+ {
2056
+ kind: "ngmodule",
2057
+ type: FlexLayoutModule
2058
+ },
2059
+ {
2060
+ kind: "directive",
2061
+ type: i1.FxLayoutDirective,
2062
+ 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] ",
2063
+ inputs: [
2064
+ "fxLayout",
2065
+ "fxLayout.xs",
2066
+ "fxLayout.sm",
2067
+ "fxLayout.md",
2068
+ "fxLayout.lg",
2069
+ "fxLayout.xl",
2070
+ "fxLayout.lt-sm",
2071
+ "fxLayout.lt-md",
2072
+ "fxLayout.lt-lg",
2073
+ "fxLayout.lt-xl",
2074
+ "fxLayout.gt-xs",
2075
+ "fxLayout.gt-sm",
2076
+ "fxLayout.gt-md",
2077
+ "fxLayout.gt-lg"
2078
+ ]
2079
+ },
2080
+ {
2081
+ kind: "directive",
2082
+ type: i1.FxFlexDirective,
2083
+ 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] ",
2084
+ inputs: [
2085
+ "fxFlex",
2086
+ "fxFlex.xs",
2087
+ "fxFlex.sm",
2088
+ "fxFlex.md",
2089
+ "fxFlex.lg",
2090
+ "fxFlex.xl",
2091
+ "fxFlex.lt-sm",
2092
+ "fxFlex.lt-md",
2093
+ "fxFlex.lt-lg",
2094
+ "fxFlex.lt-xl",
2095
+ "fxFlex.gt-xs",
2096
+ "fxFlex.gt-sm",
2097
+ "fxFlex.gt-md",
2098
+ "fxFlex.gt-lg"
2099
+ ]
2100
+ },
2101
+ {
2102
+ kind: "directive",
2103
+ type: i1.FxLayoutAlignDirective,
2104
+ 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] ",
2105
+ inputs: [
2106
+ "fxLayoutAlign",
2107
+ "fxLayoutAlign.xs",
2108
+ "fxLayoutAlign.sm",
2109
+ "fxLayoutAlign.md",
2110
+ "fxLayoutAlign.lg",
2111
+ "fxLayoutAlign.xl",
2112
+ "fxLayoutAlign.lt-sm",
2113
+ "fxLayoutAlign.lt-md",
2114
+ "fxLayoutAlign.lt-lg",
2115
+ "fxLayoutAlign.lt-xl",
2116
+ "fxLayoutAlign.gt-xs",
2117
+ "fxLayoutAlign.gt-sm",
2118
+ "fxLayoutAlign.gt-md",
2119
+ "fxLayoutAlign.gt-lg"
2120
+ ]
2121
+ },
2122
+ {
2123
+ kind: "directive",
2124
+ type: i1.FxLayoutGapDirective,
2125
+ 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] ",
2126
+ inputs: [
2127
+ "fxLayoutGap",
2128
+ "fxLayoutGap.xs",
2129
+ "fxLayoutGap.sm",
2130
+ "fxLayoutGap.md",
2131
+ "fxLayoutGap.lg",
2132
+ "fxLayoutGap.xl",
2133
+ "fxLayoutGap.lt-sm",
2134
+ "fxLayoutGap.lt-md",
2135
+ "fxLayoutGap.lt-lg",
2136
+ "fxLayoutGap.lt-xl",
2137
+ "fxLayoutGap.gt-xs",
2138
+ "fxLayoutGap.gt-sm",
2139
+ "fxLayoutGap.gt-md",
2140
+ "fxLayoutGap.gt-lg"
2141
+ ]
2142
+ },
2143
+ {
2144
+ kind: "directive",
2145
+ type: i1.FxFlexFillDirective,
2146
+ selector: " [fxFlexFill], [fxFill], [fxFlexFill.xs], [fxFlexFill.sm], [fxFlexFill.md], [fxFlexFill.lg], [fxFlexFill.xl], [fxFlexFill.lt-sm], [fxFlexFill.lt-md], [fxFlexFill.lt-lg], [fxFlexFill.lt-xl], [fxFlexFill.gt-xs], [fxFlexFill.gt-sm], [fxFlexFill.gt-md], [fxFlexFill.gt-lg] ",
2147
+ inputs: [
2148
+ "fxFlexFill",
2149
+ "fxFill",
2150
+ "fxFlexFill.xs",
2151
+ "fxFlexFill.sm",
2152
+ "fxFlexFill.md",
2153
+ "fxFlexFill.lg",
2154
+ "fxFlexFill.xl",
2155
+ "fxFlexFill.lt-sm",
2156
+ "fxFlexFill.lt-md",
2157
+ "fxFlexFill.lt-lg",
2158
+ "fxFlexFill.lt-xl",
2159
+ "fxFlexFill.gt-xs",
2160
+ "fxFlexFill.gt-sm",
2161
+ "fxFlexFill.gt-md",
2162
+ "fxFlexFill.gt-lg"
2163
+ ]
2164
+ },
2165
+ {
2166
+ kind: "ngmodule",
2167
+ type: MatFormFieldModule
2168
+ },
2169
+ {
2170
+ kind: "component",
2171
+ type: i2.MatFormField,
2172
+ selector: "mat-form-field",
2173
+ inputs: [
2174
+ "hideRequiredMarker",
2175
+ "color",
2176
+ "floatLabel",
2177
+ "appearance",
2178
+ "subscriptSizing",
2179
+ "hintLabel"
2180
+ ],
2181
+ exportAs: ["matFormField"]
2182
+ },
2183
+ {
2184
+ kind: "directive",
2185
+ type: i2.MatLabel,
2186
+ selector: "mat-label"
2187
+ },
2188
+ {
2189
+ kind: "directive",
2190
+ type: i2.MatHint,
2191
+ selector: "mat-hint",
2192
+ inputs: ["align", "id"]
2193
+ },
2194
+ {
2195
+ kind: "directive",
2196
+ type: i2.MatError,
2197
+ selector: "mat-error, [matError]",
2198
+ inputs: ["id"]
2199
+ },
2200
+ {
2201
+ kind: "directive",
2202
+ type: i2.MatSuffix,
2203
+ selector: "[matSuffix], [matIconSuffix], [matTextSuffix]",
2204
+ inputs: ["matTextSuffix"]
2205
+ },
2206
+ {
2207
+ kind: "ngmodule",
2208
+ type: MatInputModule
2209
+ },
2210
+ {
2211
+ kind: "directive",
2212
+ type: i3.MatInput,
2213
+ selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",
2214
+ inputs: [
2215
+ "disabled",
2216
+ "id",
2217
+ "placeholder",
2218
+ "name",
2219
+ "required",
2220
+ "type",
2221
+ "errorStateMatcher",
2222
+ "aria-describedby",
2223
+ "value",
2224
+ "readonly",
2225
+ "disabledInteractive"
2226
+ ],
2227
+ exportAs: ["matInput"]
2228
+ },
2229
+ {
2230
+ kind: "directive",
2231
+ type: i4.CdkTextareaAutosize,
2232
+ selector: "textarea[cdkTextareaAutosize]",
2233
+ inputs: [
2234
+ "cdkAutosizeMinRows",
2235
+ "cdkAutosizeMaxRows",
2236
+ "cdkTextareaAutosize",
2237
+ "placeholder"
2238
+ ],
2239
+ exportAs: ["cdkTextareaAutosize"]
2240
+ },
2241
+ {
2242
+ kind: "ngmodule",
2243
+ type: TextFieldModule
2244
+ },
2245
+ {
2246
+ kind: "ngmodule",
2247
+ type: MatButtonModule
2248
+ },
2249
+ {
2250
+ kind: "component",
2251
+ type: i4$1.MatButton,
2252
+ 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] ",
2253
+ inputs: ["matButton"],
2254
+ exportAs: ["matButton", "matAnchor"]
2255
+ },
2256
+ {
2257
+ kind: "component",
2258
+ type: i4$1.MatIconButton,
2259
+ selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]",
2260
+ exportAs: ["matButton", "matAnchor"]
2261
+ },
2262
+ {
2263
+ kind: "ngmodule",
2264
+ type: MatIconModule
2265
+ },
2266
+ {
2267
+ kind: "component",
2268
+ type: i5.MatIcon,
2269
+ selector: "mat-icon",
2270
+ inputs: [
2271
+ "color",
2272
+ "inline",
2273
+ "svgIcon",
2274
+ "fontSet",
2275
+ "fontIcon"
2276
+ ],
2277
+ exportAs: ["matIcon"]
2278
+ },
2279
+ {
2280
+ kind: "ngmodule",
2281
+ type: MatTooltipModule
2282
+ },
2283
+ {
2284
+ kind: "directive",
2285
+ type: i7$1.MatTooltip,
2286
+ selector: "[matTooltip]",
2287
+ inputs: [
2288
+ "matTooltipPosition",
2289
+ "matTooltipPositionAtOrigin",
2290
+ "matTooltipDisabled",
2291
+ "matTooltipShowDelay",
2292
+ "matTooltipHideDelay",
2293
+ "matTooltipTouchGestures",
2294
+ "matTooltip",
2295
+ "matTooltipClass"
2296
+ ],
2297
+ exportAs: ["matTooltip"]
2298
+ },
2299
+ {
2300
+ kind: "ngmodule",
2301
+ type: MatCheckboxModule
2302
+ },
2303
+ {
2304
+ kind: "component",
2305
+ type: i10.MatCheckbox,
2306
+ selector: "mat-checkbox",
2307
+ inputs: [
2308
+ "aria-label",
2309
+ "aria-labelledby",
2310
+ "aria-describedby",
2311
+ "aria-expanded",
2312
+ "aria-controls",
2313
+ "aria-owns",
2314
+ "id",
2315
+ "required",
2316
+ "labelPosition",
2317
+ "name",
2318
+ "value",
2319
+ "disableRipple",
2320
+ "tabIndex",
2321
+ "color",
2322
+ "disabledInteractive",
2323
+ "checked",
2324
+ "disabled",
2325
+ "indeterminate"
2326
+ ],
2327
+ outputs: ["change", "indeterminateChange"],
2328
+ exportAs: ["matCheckbox"]
2329
+ },
2330
+ {
2331
+ kind: "directive",
2332
+ type: MatDialogActions,
2333
+ selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]",
2334
+ inputs: ["align"]
2335
+ },
2336
+ {
2337
+ kind: "directive",
2338
+ type: MatDialogClose,
2339
+ selector: "[mat-dialog-close], [matDialogClose]",
2340
+ inputs: [
2341
+ "aria-label",
2342
+ "type",
2343
+ "mat-dialog-close",
2344
+ "matDialogClose"
2345
+ ],
2346
+ exportAs: ["matDialogClose"]
2347
+ },
2348
+ {
2349
+ kind: "pipe",
2350
+ type: SafeHtmlPipe,
2351
+ name: "safeHtml"
2352
+ }
2353
+ ],
2354
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
2355
+ });
2356
+ }
2357
+ };
2358
+ i0.ɵɵngDeclareClassMetadata({
2359
+ minVersion: "12.0.0",
2360
+ version: "22.2.1",
2361
+ ngImport: i0,
2362
+ type: SendToDialogComponent,
2363
+ decorators: [{
2364
+ type: Component,
2365
+ args: [{
2366
+ standalone: true,
2367
+ changeDetection: ChangeDetectionStrategy.OnPush,
2368
+ imports: [
2369
+ MatDialogTitle,
2370
+ MatDialogContent,
2371
+ FormField,
2372
+ FormRoot,
2373
+ FlexLayoutModule,
2374
+ MatFormFieldModule,
2375
+ MatInputModule,
2376
+ TextFieldModule,
2377
+ MatButtonModule,
2378
+ MatIconModule,
2379
+ MatTooltipModule,
2380
+ MatCheckboxModule,
2381
+ MatDialogActions,
2382
+ MatDialogClose,
2383
+ SafeHtmlPipe
2384
+ ],
2385
+ template: "<div class=\"dialog-info\">\r\n @if (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 class=\"dialog-content\">\r\n <p>{{dialogData().info}}</p>\r\n <form [formRoot]=\"form\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Destinatari</mat-label>\r\n <textarea matInput [formField]=\"form.recipients\"\r\n cdkTextareaAutosize cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\"></textarea>\r\n @if (form.recipients().value()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"form.recipients().value.set('')\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (dialogData().canPopulate) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Popola\"\r\n (click)=\"populateRecipients()\" matTooltip=\"Popola\">\r\n <mat-icon>person</mat-icon>\r\n </button>\r\n }\r\n <mat-hint align=\"start\">Separati da punto e virgola</mat-hint>\r\n <mat-hint align=\"end\">{{form.recipients().value()?.length || 0}}/1000 </mat-hint>\r\n @if (form.recipients().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.recipients().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Oggetto</mat-label>\r\n <input matInput [formField]=\"form.subject\" />\r\n @if (form.subject().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.subject().errors()) }}</mat-error>\r\n }\r\n <mat-hint align=\"end\">{{form.subject().value()?.length || 0}}/200 </mat-hint>\r\n </mat-form-field>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Testo</mat-label>\r\n <textarea matInput [formField]=\"form.text\" cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\"></textarea>\r\n <mat-hint align=\"end\">{{form.text().value()?.length || 0}}/1000 </mat-hint>\r\n @if (form.text().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.text().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (dialogData().options) {\r\n <div style=\"padding-bottom: 24px;\">\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 </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">Invia</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n",
2386
+ styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.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}.fill{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;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!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:1.2!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 .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.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}\n"]
2387
+ }]
2388
+ }],
2389
+ propDecorators: {
2390
+ done: [{
2391
+ type: i0.Output,
2392
+ args: ["done"]
2393
+ }],
2394
+ populate: [{
2395
+ type: i0.Output,
2396
+ args: ["populate"]
2397
+ }]
2398
+ }
2399
+ });
944
2400
  export { ListDialogComponent, SelectDialogComponent, SelectTreeDialogComponent, SendToDialogComponent, TreeDataSource };
945
- //# sourceMappingURL=arsedizioni-ars-utils-ui.dialogs.select.mjs.map
2401
+
2402
+ //# sourceMappingURL=arsedizioni-ars-utils-ui.dialogs.select.mjs.map