@arsedizioni/ars-utils 18.5.61 → 19.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +14 -12
  2. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
  3. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +41 -41
  4. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
  5. package/fesm2022/arsedizioni-ars-utils-core.mjs +99 -99
  6. package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
  7. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +15 -13
  8. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
  9. package/fesm2022/arsedizioni-ars-utils-help.mjs +13 -13
  10. package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
  11. package/fesm2022/arsedizioni-ars-utils-support.common.mjs +14 -12
  12. package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
  13. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +6 -6
  14. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
  15. package/fesm2022/arsedizioni-ars-utils-tinymce.mjs +7 -7
  16. package/fesm2022/arsedizioni-ars-utils-tinymce.mjs.map +1 -1
  17. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +58 -58
  18. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
  19. package/fesm2022/arsedizioni-ars-utils-ui.mjs +34 -34
  20. package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
  21. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +7 -7
  22. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs.map +1 -1
  23. package/fesm2022/arsedizioni-ars-utils.mjs.map +1 -1
  24. package/package.json +9 -33
  25. package/clipper.ui/ui/clipper.scss +0 -530
  26. package/esm2022/arsedizioni-ars-utils.mjs +0 -5
  27. package/esm2022/clipper.common/arsedizioni-ars-utils-clipper.common.mjs +0 -5
  28. package/esm2022/clipper.common/common/common.module.mjs +0 -16
  29. package/esm2022/clipper.common/common/definitions.mjs +0 -2041
  30. package/esm2022/clipper.common/common/interceptors/auth.interceptor.mjs +0 -100
  31. package/esm2022/clipper.common/common/messages.mjs +0 -36
  32. package/esm2022/clipper.common/common/services/clipper.service.mjs +0 -1009
  33. package/esm2022/clipper.common/public_api.mjs +0 -5
  34. package/esm2022/clipper.ui/arsedizioni-ars-utils-clipper.ui.mjs +0 -5
  35. package/esm2022/clipper.ui/documents.mjs +0 -50
  36. package/esm2022/clipper.ui/public_api.mjs +0 -18
  37. package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +0 -766
  38. package/esm2022/clipper.ui/ui/document/document.component.mjs +0 -688
  39. package/esm2022/clipper.ui/ui/document-index/document-index.component.mjs +0 -118
  40. package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +0 -441
  41. package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +0 -217
  42. package/esm2022/clipper.ui/ui/references/references.component.mjs +0 -380
  43. package/esm2022/clipper.ui/ui/search-calendar/search-calendar.component.mjs +0 -116
  44. package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +0 -339
  45. package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +0 -251
  46. package/esm2022/clipper.ui/ui/search-free-text-help/search-free-text-help.component.mjs +0 -17
  47. package/esm2022/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.mjs +0 -106
  48. package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +0 -120
  49. package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +0 -531
  50. package/esm2022/core/arsedizioni-ars-utils-core.mjs +0 -5
  51. package/esm2022/core/core.module.mjs +0 -151
  52. package/esm2022/core/dateFnsAdapter.mjs +0 -203
  53. package/esm2022/core/definitions.mjs +0 -47
  54. package/esm2022/core/directives/autoFocusDirective.mjs +0 -22
  55. package/esm2022/core/directives/changeDateIntervalDirective.mjs +0 -48
  56. package/esm2022/core/directives/copyClipboardDirective.mjs +0 -46
  57. package/esm2022/core/directives/validators.mjs +0 -502
  58. package/esm2022/core/pipes/format.pipe.mjs +0 -53
  59. package/esm2022/core/pipes/replace.pipe.mjs +0 -29
  60. package/esm2022/core/pipes/safe-html.pipe.mjs +0 -24
  61. package/esm2022/core/pipes/safe-url.pipe.mjs +0 -24
  62. package/esm2022/core/pipes/search-callback.pipe.mjs +0 -21
  63. package/esm2022/core/pipes/search-filter.pipe.mjs +0 -50
  64. package/esm2022/core/public_api.mjs +0 -22
  65. package/esm2022/core/selectable.mjs +0 -131
  66. package/esm2022/core/services/broadcast.service.mjs +0 -35
  67. package/esm2022/core/services/broadcastChannelManager.mjs +0 -80
  68. package/esm2022/core/services/environment.service.mjs +0 -29
  69. package/esm2022/core/services/screen.service.mjs +0 -23
  70. package/esm2022/core/services/theme.service.mjs +0 -140
  71. package/esm2022/core/system.mjs +0 -664
  72. package/esm2022/evolution.common/arsedizioni-ars-utils-evolution.common.mjs +0 -5
  73. package/esm2022/evolution.common/common/common.module.mjs +0 -16
  74. package/esm2022/evolution.common/common/definitions.mjs +0 -454
  75. package/esm2022/evolution.common/common/interceptors/auth.interceptor.mjs +0 -100
  76. package/esm2022/evolution.common/common/messages.mjs +0 -8
  77. package/esm2022/evolution.common/common/services/evolution.service.mjs +0 -488
  78. package/esm2022/evolution.common/public_api.mjs +0 -5
  79. package/esm2022/help/arsedizioni-ars-utils-help.mjs +0 -5
  80. package/esm2022/help/components/help-viewer/help-viewer.component.mjs +0 -442
  81. package/esm2022/help/definitions.mjs +0 -2
  82. package/esm2022/help/help.module.mjs +0 -12
  83. package/esm2022/help/public_api.mjs +0 -7
  84. package/esm2022/help/services/help.service.mjs +0 -77
  85. package/esm2022/public_api.mjs +0 -15
  86. package/esm2022/support.common/arsedizioni-ars-utils-support.common.mjs +0 -5
  87. package/esm2022/support.common/common/common.module.mjs +0 -16
  88. package/esm2022/support.common/common/definitions.mjs +0 -29
  89. package/esm2022/support.common/common/interceptors/auth.interceptor.mjs +0 -100
  90. package/esm2022/support.common/common/messages.mjs +0 -13
  91. package/esm2022/support.common/common/services/support.service.mjs +0 -287
  92. package/esm2022/support.common/public_api.mjs +0 -8
  93. package/esm2022/support.ui/arsedizioni-ars-utils-support.ui.mjs +0 -5
  94. package/esm2022/support.ui/public_api.mjs +0 -5
  95. package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +0 -80
  96. package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +0 -233
  97. package/esm2022/tinymce/arsedizioni-ars-utils-tinymce.mjs +0 -5
  98. package/esm2022/tinymce/full-screen-editor/full-screen-editor.component.mjs +0 -48
  99. package/esm2022/tinymce/public_api.mjs +0 -7
  100. package/esm2022/tinymce/tinymce.module.mjs +0 -19
  101. package/esm2022/tinymce/utils.mjs +0 -150
  102. package/esm2022/ui/arsedizioni-ars-utils-ui.mjs +0 -5
  103. package/esm2022/ui/public_api.mjs +0 -12
  104. package/esm2022/ui/ui/components/button-selector/button-selector.component.mjs +0 -150
  105. package/esm2022/ui/ui/components/button-toggle/button-toggle.component.mjs +0 -51
  106. package/esm2022/ui/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +0 -30
  107. package/esm2022/ui/ui/components/chips-selector/chips-selector.component.mjs +0 -272
  108. package/esm2022/ui/ui/components/file-input/file-input.component.mjs +0 -264
  109. package/esm2022/ui/ui/components/file-preview/file-preview.component.mjs +0 -73
  110. package/esm2022/ui/ui/components/filter-bar/filter-bar.component.mjs +0 -356
  111. package/esm2022/ui/ui/definitions.mjs +0 -2
  112. package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +0 -47
  113. package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +0 -101
  114. package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +0 -86
  115. package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +0 -51
  116. package/esm2022/ui/ui/dialogs/prompt/prompt-dialog.component.mjs +0 -77
  117. package/esm2022/ui/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +0 -79
  118. package/esm2022/ui/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +0 -72
  119. package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +0 -49
  120. package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +0 -89
  121. package/esm2022/ui/ui/dialogs/select/select-dialog.component.mjs +0 -374
  122. package/esm2022/ui/ui/dialogs/select-file/select-file-dialog.component.mjs +0 -106
  123. package/esm2022/ui/ui/dialogs/select-picture/select-picture-dialog.component.mjs +0 -62
  124. package/esm2022/ui/ui/dialogs/select-tree/select-tree-dialog.component.mjs +0 -277
  125. package/esm2022/ui/ui/dialogs/send-to/send-to-dialog.component.mjs +0 -90
  126. package/esm2022/ui/ui/dialogs/toast/toast.component.mjs +0 -32
  127. package/esm2022/ui/ui/directives/resize-table-column.directive.mjs +0 -63
  128. package/esm2022/ui/ui/filters.mjs +0 -43
  129. package/esm2022/ui/ui/paginatorIntl.mjs +0 -34
  130. package/esm2022/ui/ui/services/dialog.service.mjs +0 -417
  131. package/esm2022/ui/ui/services/ui.service.mjs +0 -21
  132. package/esm2022/ui/ui/ui.module.mjs +0 -21
  133. package/esm2022/ui.application/arsedizioni-ars-utils-ui.application.mjs +0 -5
  134. package/esm2022/ui.application/public_api.mjs +0 -21
  135. package/esm2022/ui.application/ui/components/button-selector/button-selector.component.mjs +0 -150
  136. package/esm2022/ui.application/ui/components/button-toggle/button-toggle.component.mjs +0 -51
  137. package/esm2022/ui.application/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +0 -30
  138. package/esm2022/ui.application/ui/components/chips-selector/chips-selector.component.mjs +0 -272
  139. package/esm2022/ui.application/ui/components/file-input/file-input.component.mjs +0 -264
  140. package/esm2022/ui.application/ui/components/file-preview/file-preview.component.mjs +0 -73
  141. package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +0 -356
  142. package/esm2022/ui.application/ui/definitions.mjs +0 -31
  143. package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +0 -77
  144. package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +0 -79
  145. package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +0 -72
  146. package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +0 -374
  147. package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +0 -106
  148. package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +0 -62
  149. package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +0 -277
  150. package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +0 -90
  151. package/esm2022/ui.application/ui/directives/resize-table-column.directive.mjs +0 -63
  152. package/esm2022/ui.application/ui/filters.mjs +0 -43
  153. package/esm2022/ui.application/ui/services/applicationDialog.service.mjs +0 -304
  154. package/esm2022/ui.application/ui/ui.module.mjs +0 -30
  155. package/esm2022/ui.oauth/arsedizioni-ars-utils-ui.oauth.mjs +0 -5
  156. package/esm2022/ui.oauth/public_api.mjs +0 -6
  157. package/esm2022/ui.oauth/ui/components/login/login-oauth.component.mjs +0 -199
  158. package/esm2022/ui.oauth/ui/definitions.mjs +0 -7
  159. package/esm2022/ui.oauth/ui/ui.module.mjs +0 -13
  160. package/styles/ui.colors.scss +0 -77
  161. package/styles/ui.scss +0 -318
  162. package/ui/ui/components/button-selector/button-selector.component.d.ts +0 -52
  163. package/ui/ui/components/button-toggle/button-toggle.component.d.ts +0 -28
  164. package/ui/ui/components/calendar-empty-header/calendar-empy-header.component.d.ts +0 -11
  165. package/ui/ui/components/chips-selector/chips-selector.component.d.ts +0 -82
  166. package/ui/ui/components/file-input/file-input.component.d.ts +0 -88
  167. package/ui/ui/components/file-preview/file-preview.component.d.ts +0 -26
  168. package/ui/ui/components/filter-bar/filter-bar.component.d.ts +0 -83
  169. package/ui/ui/dialogs/prompt/prompt-dialog.component.d.ts +0 -18
  170. package/ui/ui/dialogs/prompt-date/prompt-date-dialog.component.d.ts +0 -18
  171. package/ui/ui/dialogs/prompt-time/prompt-time-dialog.component.d.ts +0 -18
  172. package/ui/ui/dialogs/select/select-dialog.component.d.ts +0 -122
  173. package/ui/ui/dialogs/select-file/select-file-dialog.component.d.ts +0 -36
  174. package/ui/ui/dialogs/select-picture/select-picture-dialog.component.d.ts +0 -26
  175. package/ui/ui/dialogs/select-tree/select-tree-dialog.component.d.ts +0 -98
  176. package/ui/ui/dialogs/send-to/send-to-dialog.component.d.ts +0 -28
  177. package/ui/ui/directives/resize-table-column.directive.d.ts +0 -19
  178. package/ui/ui/filters.d.ts +0 -57
@@ -1,277 +0,0 @@
1
- import { FlatTreeControl } from '@angular/cdk/tree';
2
- import { NgClass } from '@angular/common';
3
- import { ChangeDetectionStrategy, Component, EventEmitter, Injectable, Output, inject } from '@angular/core';
4
- import { FormsModule } from '@angular/forms';
5
- import { MatButtonModule } from '@angular/material/button';
6
- import { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';
7
- import { MatFormFieldModule } from '@angular/material/form-field';
8
- import { MatIconModule } from '@angular/material/icon';
9
- import { MatInputModule } from '@angular/material/input';
10
- import { MatTooltipModule } from '@angular/material/tooltip';
11
- import { MatTreeFlatDataSource, MatTreeFlattener, MatTreeModule } from '@angular/material/tree';
12
- import { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';
13
- import { BehaviorSubject, Subject, of as observableOf } from 'rxjs';
14
- import { takeUntil } from 'rxjs/operators';
15
- import { SelectableNode } from '../../definitions';
16
- import { FlexLayoutModule } from '@ngbracket/ngx-layout';
17
- import * as i0 from "@angular/core";
18
- import * as i1 from "@ngbracket/ngx-layout/flex";
19
- import * as i2 from "@ngbracket/ngx-layout/extended";
20
- import * as i3 from "@angular/material/form-field";
21
- import * as i4 from "@angular/material/input";
22
- import * as i5 from "@angular/forms";
23
- import * as i6 from "@angular/material/button";
24
- import * as i7 from "@angular/material/icon";
25
- import * as i8 from "@angular/material/tooltip";
26
- import * as i9 from "@angular/material/tree";
27
- export class TreeDataSource {
28
- constructor() {
29
- this.dataChange = new BehaviorSubject([]);
30
- }
31
- get data() {
32
- return this.dataChange.value;
33
- }
34
- ngOnDestroy() {
35
- this.dataChange.unsubscribe();
36
- }
37
- /**
38
- * Initialzie the data source
39
- * @param data : data
40
- */
41
- initialize(data) {
42
- this.dataChange.next(data);
43
- }
44
- /**
45
- * Find a node by id recursively
46
- * @param node: the source node
47
- * @param id : the id to search for
48
- */
49
- findNode(node, id) {
50
- let children;
51
- if (node && node.id === id)
52
- return node;
53
- if (node)
54
- children = node.children;
55
- else if (this.data && this.data.length > 0)
56
- children = this.data[0].children;
57
- if (children) {
58
- let _n = null;
59
- children.some(n => {
60
- if (n.id === id) {
61
- _n = n;
62
- return true;
63
- }
64
- _n = this.findNode(n, id);
65
- if (_n)
66
- return true;
67
- return false;
68
- });
69
- return _n;
70
- }
71
- return null;
72
- }
73
- /**
74
- * Remove a node
75
- * @param id : the node id to remove
76
- */
77
- removeNode(id) {
78
- let n = this.findNode(null, id);
79
- if (!n)
80
- return;
81
- if (n.parent) {
82
- const p = n.parent.children.findIndex(n => n.id === id);
83
- if (p != -1) {
84
- n.parent.children.splice(p, 1);
85
- if (n.parent.count > 0)
86
- n.parent.count--;
87
- }
88
- }
89
- else {
90
- const p = this.data.findIndex(n => n.id === id);
91
- if (p != -1) {
92
- this.data.splice(p, 1);
93
- }
94
- }
95
- this.dataChange.next(this.data);
96
- }
97
- /**
98
- * Insert a new node
99
- * @param node : the new node
100
- */
101
- insertNode(node) {
102
- if (node.parent) {
103
- node.parent.children.unshift(node);
104
- node.parent.count++;
105
- }
106
- else
107
- this.data.unshift(node);
108
- this.dataChange.next(this.data);
109
- }
110
- /**
111
- * Rename a node
112
- * @param id : the node id
113
- * @param name : the new node name
114
- */
115
- renameNode(id, name) {
116
- let n = this.findNode(null, id);
117
- if (n) {
118
- n.name = name;
119
- this.dataChange.next(this.data);
120
- }
121
- return n;
122
- }
123
- /**
124
- * Update data
125
- */
126
- update() {
127
- this.dataChange.next(this.data);
128
- }
129
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: TreeDataSource, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
130
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: TreeDataSource }); }
131
- }
132
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: TreeDataSource, decorators: [{
133
- type: Injectable
134
- }] });
135
- export class SelectTreeDialogComponent {
136
- constructor() {
137
- this.done = new EventEmitter();
138
- this.unsubscribe = new Subject();
139
- this.dialogRef = inject((MatDialogRef));
140
- this.dialogData = inject(MAT_DIALOG_DATA);
141
- this.tree = inject(TreeDataSource);
142
- // Used for array filtering
143
- this.filterText = '';
144
- this.filteredItems = [];
145
- this.filterIndex = -1;
146
- /**
147
- * Manage flat tree view
148
- */
149
- this.getChildren = (node) => observableOf(node.children);
150
- this.getLevel = (node) => node.level;
151
- this.isExpandable = (node) => node.expandable;
152
- this.hasChild = (_, _node) => _node.expandable;
153
- this.transformer = (item, level) => {
154
- return new SelectableNode(item, level);
155
- };
156
- }
157
- ngOnInit() {
158
- this.dialogData = this.dialogData || { appearance: 'outline', title: 'Seleziona', okCaption: 'Ok' };
159
- this.treeFlattener = new MatTreeFlattener(this.transformer, this.getLevel, this.isExpandable, this.getChildren);
160
- this.treeControl = new FlatTreeControl(this.getLevel, this.isExpandable);
161
- this.treeData = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
162
- this.tree.dataChange
163
- .pipe(takeUntil(this.unsubscribe))
164
- .subscribe(data => (this.treeData.data = data));
165
- if (this.dialogData.nodes) {
166
- this.tree.initialize(this.dialogData.nodes);
167
- }
168
- if (!this.dialogData.title) {
169
- this.dialogData.title = 'Seleziona';
170
- }
171
- if (!this.dialogData.okCaption) {
172
- this.dialogData.okCaption = 'OK';
173
- }
174
- if (this.dialogData.initialFilter) {
175
- this.doFilter(this.dialogData.initialFilter);
176
- }
177
- }
178
- ngOnDestroy() {
179
- this.unsubscribe.next();
180
- this.unsubscribe.complete();
181
- }
182
- /**
183
- * Submit selection
184
- */
185
- ok() {
186
- this.dialogRef.close();
187
- setTimeout(() => {
188
- this.done.emit({ selectedItems: [this.currentNode] });
189
- }, 500);
190
- }
191
- /**
192
- * Select a node
193
- * @param e : the event
194
- * @param node : the
195
- */
196
- select(e, node) {
197
- if (e)
198
- e.stopPropagation();
199
- if (node) {
200
- this.currentNode = node;
201
- }
202
- }
203
- /**
204
- * Clear filter
205
- */
206
- clearFilter() {
207
- this.filterText = '';
208
- }
209
- /**
210
- * Apply filter
211
- * @param text : the text to filter
212
- */
213
- doFilter(text = null) {
214
- if (text)
215
- this.filterText = text;
216
- this.filteredItems = [];
217
- this.filterIndex = -1;
218
- if (this.filterText) {
219
- this.treeControl.dataNodes.forEach(n => {
220
- if (n.name.indexOf(this.filterText) != -1) {
221
- this.filteredItems.push(n);
222
- }
223
- });
224
- if (this.filteredItems.length > 0) {
225
- this.nextFiltered();
226
- }
227
- }
228
- }
229
- /**
230
- * Goto next filtered item
231
- */
232
- nextFiltered() {
233
- if (!SystemUtils.isBrowser())
234
- return;
235
- if (this.filteredItems.length === 0)
236
- return;
237
- this.filterIndex++;
238
- if (this.filterIndex === this.filteredItems.length)
239
- this.filterIndex = 0;
240
- let node = this.filteredItems[this.filterIndex];
241
- this.currentNode = node;
242
- this.expand(node);
243
- let elem = document.getElementById(node.id);
244
- if (elem)
245
- elem.scrollIntoView();
246
- }
247
- /**
248
- * Expand a node and all its parents
249
- * @param node : the selectable node to expand
250
- */
251
- expand(node) {
252
- this.treeControl.expand(node);
253
- let _n = node.parent;
254
- while (_n) {
255
- this.treeControl.dataNodes.some(n => {
256
- if (n.id === _n.id) {
257
- this.treeControl.expand(n);
258
- _n = _n.parent;
259
- return true;
260
- }
261
- return false;
262
- });
263
- }
264
- return false;
265
- }
266
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: SelectTreeDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
267
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: SelectTreeDialogComponent, isStandalone: true, selector: "ng-component", outputs: { done: "done" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, providers: [TreeDataSource], ngImport: i0, template: "<h2 mat-dialog-title (keyup.ArrowDown)=\"nextFiltered()\">{{dialogData.title}}</h2>\r\n<div style=\"padding: 0 24px\">\r\n @if (dialogData.description) {\r\n <div [innerHtml]=\"dialogData.description | safeHtml\"></div>\r\n }\r\n <div style=\"padding-bottom: 10px;\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"50\">\r\n <mat-form-field style=\"width:100%\" [appearance]=\"dialogData.appearance\" subscriptSizing=\"dynamic\" >\r\n <mat-label>Cerca...</mat-label>\r\n <input type=\"text\" cdkFocusInitial (keyup)=\"doFilter()\" matInput title=\"Digita il testo'\"\r\n [(ngModel)]=\"filterText\">\r\n @if (filterText) {\r\n <button type=\"button\" type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\"\r\n (click)=\"clearFilter()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (filteredItems.length > 0) {\r\n <div fxFlex=\"50px\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\" class=\"small\">{{filterIndex + 1}} / {{filteredItems.length}}</div>\r\n </div>\r\n }\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\" style=\"white-space:nowrap\">\r\n <div fxFlexAlign=\"center\">\r\n @if (filteredItems.length > 0) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"nextFiltered()\">\r\n <mat-icon aria-label=\"Vai al prossimo\" matTooltip=\"Vai al prossimo\">arrow_downward</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"treeControl.collapseAll()\">\r\n <mat-icon aria-label=\"Comprimi tutto\" matTooltip=\"Comprimi tutto\">unfold_less</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"treeControl.expandAll()\">\r\n <mat-icon aria-label=\"Espandi tutto\" matTooltip=\"Espandi tutto\">unfold_more</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content>\r\n <div fxLayout=\"column\" fxFill>\r\n <mat-tree [dataSource]=\"treeData\" [treeControl]=\"treeControl\">\r\n <mat-tree-node [id]=\"node.id\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple\" (click)=\"select($event, node);\"\r\n [ngClass]=\"{'tree-node-activated': currentNode && currentNode.id === node.id}\" >\r\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxFill class=\"small\">\r\n <button type=\"button\" mat-icon-button disabled class=\"small-icon-button\"></button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"uppercase \">\r\n {{node.name}}\r\n </div>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n @if (node.count > 0) {\r\n <span fxLayoutAlign=\"end\">({{node.count}})</span>\r\n }\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n\r\n <mat-tree-node [id]=\"node.id\" *matTreeNodeDef=\"let node;when: hasChild\" matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple\"\r\n [ngClass]=\"{'tree-node-activated': currentNode && currentNode.id === node.id }\" (click)=\"select($event, node);\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxFill class=\"small\">\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Apri/chiudi ' + node.name\"\r\n class=\"small-icon-button\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"uppercase truncated\">\r\n <div>\r\n {{node.name}}\r\n </div>\r\n </div>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n @if (node.count > 0) {\r\n <div fxLayoutAlign=\"end\">({{node.count}})</div>\r\n }\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button color=\"primary\" (click)=\"ok()\" \r\n [disabled]=\"!currentNode\">{{dialogData.okCaption}}</button>\r\n <button mat-button mat-dialog-close cdkFocusInitial \r\n color=\"primary\">Annulla</button>\r\n </div>\r\n</mat-dialog-actions>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-close{margin-right:5px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important;line-height:16px}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px}.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}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 10px 20px 0}.drawer .title,.drawer-small .title{font-size:1.2em!important;font-weight:600;padding-left:20px;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}}@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{font-weight:600}}.tree{overflow-x:hidden}.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-simple,.tree-node-simple>div{min-height:36px!important}.tree-node-activated,.tree-node-activated>div{min-height:36px!important;font-weight:700!important;color:var(--ars-color-accent, #7894ae)!important}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i2.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.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: i9.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i9.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i9.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i9.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i9.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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 }); }
268
- }
269
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: SelectTreeDialogComponent, decorators: [{
270
- type: Component,
271
- args: [{ host: { 'Bind': SystemUtils.generateUUID() }, providers: [TreeDataSource], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatDialogTitle, FlexLayoutModule, MatFormFieldModule, MatInputModule, FormsModule, MatButtonModule,
272
- MatIconModule, MatTooltipModule, MatDialogContent, MatTreeModule, NgClass, MatDialogActions,
273
- MatDialogClose, SafeHtmlPipe], template: "<h2 mat-dialog-title (keyup.ArrowDown)=\"nextFiltered()\">{{dialogData.title}}</h2>\r\n<div style=\"padding: 0 24px\">\r\n @if (dialogData.description) {\r\n <div [innerHtml]=\"dialogData.description | safeHtml\"></div>\r\n }\r\n <div style=\"padding-bottom: 10px;\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"50\">\r\n <mat-form-field style=\"width:100%\" [appearance]=\"dialogData.appearance\" subscriptSizing=\"dynamic\" >\r\n <mat-label>Cerca...</mat-label>\r\n <input type=\"text\" cdkFocusInitial (keyup)=\"doFilter()\" matInput title=\"Digita il testo'\"\r\n [(ngModel)]=\"filterText\">\r\n @if (filterText) {\r\n <button type=\"button\" type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\"\r\n (click)=\"clearFilter()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (filteredItems.length > 0) {\r\n <div fxFlex=\"50px\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\" class=\"small\">{{filterIndex + 1}} / {{filteredItems.length}}</div>\r\n </div>\r\n }\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\" style=\"white-space:nowrap\">\r\n <div fxFlexAlign=\"center\">\r\n @if (filteredItems.length > 0) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"nextFiltered()\">\r\n <mat-icon aria-label=\"Vai al prossimo\" matTooltip=\"Vai al prossimo\">arrow_downward</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"treeControl.collapseAll()\">\r\n <mat-icon aria-label=\"Comprimi tutto\" matTooltip=\"Comprimi tutto\">unfold_less</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"treeControl.expandAll()\">\r\n <mat-icon aria-label=\"Espandi tutto\" matTooltip=\"Espandi tutto\">unfold_more</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content>\r\n <div fxLayout=\"column\" fxFill>\r\n <mat-tree [dataSource]=\"treeData\" [treeControl]=\"treeControl\">\r\n <mat-tree-node [id]=\"node.id\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple\" (click)=\"select($event, node);\"\r\n [ngClass]=\"{'tree-node-activated': currentNode && currentNode.id === node.id}\" >\r\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxFill class=\"small\">\r\n <button type=\"button\" mat-icon-button disabled class=\"small-icon-button\"></button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"uppercase \">\r\n {{node.name}}\r\n </div>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n @if (node.count > 0) {\r\n <span fxLayoutAlign=\"end\">({{node.count}})</span>\r\n }\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n\r\n <mat-tree-node [id]=\"node.id\" *matTreeNodeDef=\"let node;when: hasChild\" matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple\"\r\n [ngClass]=\"{'tree-node-activated': currentNode && currentNode.id === node.id }\" (click)=\"select($event, node);\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxFill class=\"small\">\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Apri/chiudi ' + node.name\"\r\n class=\"small-icon-button\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"uppercase truncated\">\r\n <div>\r\n {{node.name}}\r\n </div>\r\n </div>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n @if (node.count > 0) {\r\n <div fxLayoutAlign=\"end\">({{node.count}})</div>\r\n }\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button color=\"primary\" (click)=\"ok()\" \r\n [disabled]=\"!currentNode\">{{dialogData.okCaption}}</button>\r\n <button mat-button mat-dialog-close cdkFocusInitial \r\n color=\"primary\">Annulla</button>\r\n </div>\r\n</mat-dialog-actions>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-close{margin-right:5px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important;line-height:16px}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px}.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}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 10px 20px 0}.drawer .title,.drawer-small .title{font-size:1.2em!important;font-weight:600;padding-left:20px;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}}@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{font-weight:600}}.tree{overflow-x:hidden}.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-simple,.tree-node-simple>div{min-height:36px!important}.tree-node-activated,.tree-node-activated>div{min-height:36px!important;font-weight:700!important;color:var(--ars-color-accent, #7894ae)!important}\n"] }]
274
- }], propDecorators: { done: [{
275
- type: Output
276
- }] } });
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXRyZWUtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy91aS5hcHBsaWNhdGlvbi91aS9kaWFsb2dzL3NlbGVjdC10cmVlL3NlbGVjdC10cmVlLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvdWkuYXBwbGljYXRpb24vdWkvZGlhbG9ncy9zZWxlY3QtdHJlZS9zZWxlY3QtdHJlZS1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQUUsVUFBVSxFQUd4QixNQUFNLEVBQ04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdJLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdC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QVcsRUFBRSxlQUFlO3dCQUMxRyxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0I7d0JBQzNGLGNBQWMsRUFBRSxZQUFZLENBQUM7OEJBR3JCLElBQUk7c0JBQWIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBpbmplY3RcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1JlZiwgTWF0RGlhbG9nVGl0bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXRUcmVlRmxhdERhdGFTb3VyY2UsIE1hdFRyZWVGbGF0dGVuZXIsIE1hdFRyZWVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgU2FmZUh0bWxQaXBlLCBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgb2YgYXMgb2JzZXJ2YWJsZU9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSXRlbU5vZGUsIFNlbGVjdERpYWxvZ1Jlc3VsdCwgU2VsZWN0VHJlZURpYWxvZ0RhdGEsIFNlbGVjdGFibGVOb2RlIH0gZnJvbSAnLi4vLi4vZGVmaW5pdGlvbnMnO1xyXG5pbXBvcnQgeyBGbGV4TGF5b3V0TW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0JztcclxuXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBUcmVlRGF0YVNvdXJjZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgZGF0YUNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SXRlbU5vZGVbXT4oW10pO1xyXG5cclxuICBnZXQgZGF0YSgpOiBJdGVtTm9kZVtdIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFDaGFuZ2UudmFsdWU7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZGF0YUNoYW5nZS51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbHppZSB0aGUgZGF0YSBzb3VyY2VcclxuICAgKiBAcGFyYW0gZGF0YSA6IGRhdGFcclxuICAgKi9cclxuICBpbml0aWFsaXplKGRhdGE6IEl0ZW1Ob2RlW10pIHtcclxuICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmluZCBhIG5vZGUgYnkgaWQgcmVjdXJzaXZlbHlcclxuICAgKiBAcGFyYW0gbm9kZTogdGhlIHNvdXJjZSBub2RlXHJcbiAgICogQHBhcmFtIGlkIDogdGhlIGlkIHRvIHNlYXJjaCBmb3JcclxuICAgKi9cclxuICBmaW5kTm9kZShub2RlOiBJdGVtTm9kZSwgaWQ6IHN0cmluZyk6IEl0ZW1Ob2RlIHtcclxuICAgIGxldCBjaGlsZHJlbjtcclxuICAgIGlmIChub2RlICYmIG5vZGUuaWQgPT09IGlkKSByZXR1cm4gbm9kZTtcclxuICAgIGlmIChub2RlKSBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XHJcbiAgICBlbHNlIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmxlbmd0aCA+IDApXHJcbiAgICAgIGNoaWxkcmVuID0gdGhpcy5kYXRhWzBdLmNoaWxkcmVuO1xyXG4gICAgaWYgKGNoaWxkcmVuKSB7XHJcbiAgICAgIGxldCBfbiA9IG51bGw7XHJcbiAgICAgIGNoaWxkcmVuLnNvbWUobiA9PiB7XHJcbiAgICAgICAgaWYgKG4uaWQgPT09IGlkKSB7XHJcbiAgICAgICAgICBfbiA9IG47XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgX24gPSB0aGlzLmZpbmROb2RlKG4sIGlkKTtcclxuICAgICAgICBpZiAoX24pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBfbjtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZW1vdmUgYSBub2RlXHJcbiAgICogQHBhcmFtIGlkIDogdGhlIG5vZGUgaWQgdG8gcmVtb3ZlXHJcbiAgICovXHJcbiAgcmVtb3ZlTm9kZShpZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuZmluZE5vZGUobnVsbCwgaWQpO1xyXG4gICAgaWYgKCFuKSByZXR1cm47XHJcbiAgICBpZiAobi5wYXJlbnQpIHtcclxuICAgICAgY29uc3QgcCA9IG4ucGFyZW50LmNoaWxkcmVuLmZpbmRJbmRleChuID0+IG4uaWQgPT09IGlkKTtcclxuICAgICAgaWYgKHAgIT0gLTEpIHtcclxuICAgICAgICBuLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UocCwgMSk7XHJcbiAgICAgICAgaWYgKG4ucGFyZW50LmNvdW50ID4gMCkgbi5wYXJlbnQuY291bnQtLTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcCA9IHRoaXMuZGF0YS5maW5kSW5kZXgobiA9PiBuLmlkID09PSBpZCk7XHJcbiAgICAgIGlmIChwICE9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhLnNwbGljZShwLCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KHRoaXMuZGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnNlcnQgYSBuZXcgbm9kZVxyXG4gICAqIEBwYXJhbSBub2RlIDogdGhlIG5ldyBub2RlXHJcbiAgICovXHJcbiAgaW5zZXJ0Tm9kZShub2RlOiBJdGVtTm9kZSkge1xyXG4gICAgaWYgKG5vZGUucGFyZW50KSB7XHJcbiAgICAgIG5vZGUucGFyZW50LmNoaWxkcmVuLnVuc2hpZnQobm9kZSk7XHJcbiAgICAgIG5vZGUucGFyZW50LmNvdW50Kys7XHJcbiAgICB9IGVsc2UgdGhpcy5kYXRhLnVuc2hpZnQobm9kZSk7XHJcblxyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbmFtZSBhIG5vZGVcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgbm9kZSBpZFxyXG4gICAqIEBwYXJhbSBuYW1lIDogdGhlIG5ldyBub2RlIG5hbWVcclxuICAgKi9cclxuICByZW5hbWVOb2RlKGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IEl0ZW1Ob2RlIHtcclxuICAgIGxldCBuID0gdGhpcy5maW5kTm9kZShudWxsLCBpZCk7XHJcbiAgICBpZiAobikge1xyXG4gICAgICBuLm5hbWUgPSBuYW1lO1xyXG4gICAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dCh0aGlzLmRhdGEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgZGF0YVxyXG4gICAqL1xyXG4gIHVwZGF0ZSgpIHtcclxuICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KHRoaXMuZGF0YSk7XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBob3N0OiB7ICdCaW5kJzogU3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCkgfSxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LXRyZWUtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QtdHJlZS1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtUcmVlRGF0YVNvdXJjZV0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBpbXBvcnRzOiBbTWF0RGlhbG9nVGl0bGUsIEZsZXhMYXlvdXRNb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0SW5wdXRNb2R1bGUsIEZvcm1zTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIFxyXG4gICAgTWF0SWNvbk1vZHVsZSwgTWF0VG9vbHRpcE1vZHVsZSwgTWF0RGlhbG9nQ29udGVudCwgTWF0VHJlZU1vZHVsZSwgTmdDbGFzcywgTWF0RGlhbG9nQWN0aW9ucywgXHJcbiAgICBNYXREaWFsb2dDbG9zZSwgU2FmZUh0bWxQaXBlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VsZWN0VHJlZURpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAT3V0cHV0KCkgZG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0RGlhbG9nUmVzdWx0PigpO1xyXG5cclxuICBwcml2YXRlIHVuc3Vic2NyaWJlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIGRpYWxvZ1JlZiA9IGluamVjdChNYXREaWFsb2dSZWY8U2VsZWN0VHJlZURpYWxvZ0NvbXBvbmVudD4pO1xyXG4gIHByb3RlY3RlZCBkaWFsb2dEYXRhOiBTZWxlY3RUcmVlRGlhbG9nRGF0YSA9IGluamVjdChNQVRfRElBTE9HX0RBVEEpO1xyXG4gIHByaXZhdGUgdHJlZSA9IGluamVjdChUcmVlRGF0YVNvdXJjZSk7XHJcbiAgcHJpdmF0ZSB0cmVlRmxhdHRlbmVyOiBNYXRUcmVlRmxhdHRlbmVyPEl0ZW1Ob2RlLCBTZWxlY3RhYmxlTm9kZT47XHJcbiAgcHJvdGVjdGVkIHRyZWVDb250cm9sOiBGbGF0VHJlZUNvbnRyb2w8U2VsZWN0YWJsZU5vZGU+O1xyXG4gIHByb3RlY3RlZCB0cmVlRGF0YTogTWF0VHJlZUZsYXREYXRhU291cmNlPEl0ZW1Ob2RlLCBTZWxlY3RhYmxlTm9kZT47XHJcbiAgcHJvdGVjdGVkIGN1cnJlbnROb2RlOiBJdGVtTm9kZTtcclxuXHJcbiAgLy8gVXNlZCBmb3IgYXJyYXkgZmlsdGVyaW5nXHJcbiAgcHJvdGVjdGVkIGZpbHRlclRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHByb3RlY3RlZCBmaWx0ZXJlZEl0ZW1zOiBTZWxlY3RhYmxlTm9kZVtdID0gW107XHJcbiAgcHJvdGVjdGVkIGZpbHRlckluZGV4OiBudW1iZXIgPSAtMTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWFuYWdlIGZsYXQgdHJlZSB2aWV3XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRDaGlsZHJlbiA9IChub2RlOiBJdGVtTm9kZSk6IE9ic2VydmFibGU8SXRlbU5vZGVbXT4gPT5cclxuICAgIG9ic2VydmFibGVPZihub2RlLmNoaWxkcmVuKTtcclxuICBwcml2YXRlIGdldExldmVsID0gKG5vZGU6IFNlbGVjdGFibGVOb2RlKSA9PiBub2RlLmxldmVsO1xyXG4gIHByaXZhdGUgaXNFeHBhbmRhYmxlID0gKG5vZGU6IFNlbGVjdGFibGVOb2RlKSA9PiBub2RlLmV4cGFuZGFibGU7XHJcbiAgcHJvdGVjdGVkIGhhc0NoaWxkID0gKF86IG51bWJlciwgX25vZGU6IFNlbGVjdGFibGVOb2RlKSA9PiBfbm9kZS5leHBhbmRhYmxlO1xyXG4gIHByb3RlY3RlZCB0cmFuc2Zvcm1lciA9IChpdGVtOiBJdGVtTm9kZSwgbGV2ZWw6IG51bWJlcikgPT4ge1xyXG4gICAgcmV0dXJuIG5ldyBTZWxlY3RhYmxlTm9kZShpdGVtLCBsZXZlbCk7XHJcbiAgfTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0RhdGEgPSB0aGlzLmRpYWxvZ0RhdGEgfHwgeyBhcHBlYXJhbmNlOiAnb3V0bGluZScsIHRpdGxlOiAnU2VsZXppb25hJywgb2tDYXB0aW9uOiAnT2snIH07XHJcbiAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSBuZXcgTWF0VHJlZUZsYXR0ZW5lcihcclxuICAgICAgdGhpcy50cmFuc2Zvcm1lcixcclxuICAgICAgdGhpcy5nZXRMZXZlbCxcclxuICAgICAgdGhpcy5pc0V4cGFuZGFibGUsXHJcbiAgICAgIHRoaXMuZ2V0Q2hpbGRyZW5cclxuICAgICk7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxTZWxlY3RhYmxlTm9kZT4oXHJcbiAgICAgIHRoaXMuZ2V0TGV2ZWwsXHJcbiAgICAgIHRoaXMuaXNFeHBhbmRhYmxlXHJcbiAgICApO1xyXG4gICAgdGhpcy50cmVlRGF0YSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UoXHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wsXHJcbiAgICAgIHRoaXMudHJlZUZsYXR0ZW5lclxyXG4gICAgKTtcclxuICAgIHRoaXMudHJlZS5kYXRhQ2hhbmdlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZShkYXRhID0+ICh0aGlzLnRyZWVEYXRhLmRhdGEgPSBkYXRhKSk7XHJcbiAgICBpZiAodGhpcy5kaWFsb2dEYXRhLm5vZGVzKSB7XHJcbiAgICAgIHRoaXMudHJlZS5pbml0aWFsaXplKHRoaXMuZGlhbG9nRGF0YS5ub2Rlcyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGlhbG9nRGF0YS50aXRsZSkge1xyXG4gICAgICB0aGlzLmRpYWxvZ0RhdGEudGl0bGUgPSAnU2VsZXppb25hJztcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5kaWFsb2dEYXRhLm9rQ2FwdGlvbikge1xyXG4gICAgICB0aGlzLmRpYWxvZ0RhdGEub2tDYXB0aW9uID0gJ09LJztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEuaW5pdGlhbEZpbHRlcikge1xyXG4gICAgICB0aGlzLmRvRmlsdGVyKHRoaXMuZGlhbG9nRGF0YS5pbml0aWFsRmlsdGVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWJtaXQgc2VsZWN0aW9uXHJcbiAgICovXHJcbiAgb2soKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZG9uZS5lbWl0KHsgc2VsZWN0ZWRJdGVtczogW3RoaXMuY3VycmVudE5vZGVdIH0pO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCAgYSBub2RlXHJcbiAgICogQHBhcmFtIGUgOiB0aGUgZXZlbnRcclxuICAgKiBAcGFyYW0gbm9kZSA6IHRoZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzZWxlY3QoZTogYW55LCBub2RlOiBTZWxlY3RhYmxlTm9kZSkge1xyXG4gICAgaWYgKGUpIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZiAobm9kZSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnROb2RlID0gbm9kZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGZpbHRlclxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBjbGVhckZpbHRlcigpIHtcclxuICAgIHRoaXMuZmlsdGVyVGV4dCA9ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgZmlsdGVyXHJcbiAgICogQHBhcmFtIHRleHQgOiB0aGUgdGV4dCB0byBmaWx0ZXJcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZG9GaWx0ZXIodGV4dDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgaWYgKHRleHQpIHRoaXMuZmlsdGVyVGV4dCA9IHRleHQ7XHJcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBbXTtcclxuICAgIHRoaXMuZmlsdGVySW5kZXggPSAtMTtcclxuICAgIGlmICh0aGlzLmZpbHRlclRleHQpIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZm9yRWFjaChuID0+IHtcclxuICAgICAgICBpZiAobi5uYW1lLmluZGV4T2YodGhpcy5maWx0ZXJUZXh0KSAhPSAtMSkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zLnB1c2gobik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMubmV4dEZpbHRlcmVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvdG8gbmV4dCBmaWx0ZXJlZCBpdGVtXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG5leHRGaWx0ZXJlZCgpIHtcclxuICAgIGlmICghU3lzdGVtVXRpbHMuaXNCcm93c2VyKCkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgICB0aGlzLmZpbHRlckluZGV4Kys7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJJbmRleCA9PT0gdGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCkgdGhpcy5maWx0ZXJJbmRleCA9IDA7XHJcbiAgICBsZXQgbm9kZSA9IHRoaXMuZmlsdGVyZWRJdGVtc1t0aGlzLmZpbHRlckluZGV4XTtcclxuICAgIHRoaXMuY3VycmVudE5vZGUgPSBub2RlO1xyXG4gICAgdGhpcy5leHBhbmQobm9kZSk7XHJcbiAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5vZGUuaWQpO1xyXG4gICAgaWYgKGVsZW0pIGVsZW0uc2Nyb2xsSW50b1ZpZXcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cGFuZCBhIG5vZGUgYW5kIGFsbCBpdHMgcGFyZW50c1xyXG4gICAqIEBwYXJhbSBub2RlIDogdGhlIHNlbGVjdGFibGUgbm9kZSB0byBleHBhbmRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZXhwYW5kKG5vZGU6IFNlbGVjdGFibGVOb2RlKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcclxuICAgIGxldCBfbiA9IG5vZGUucGFyZW50O1xyXG4gICAgd2hpbGUgKF9uKSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLnNvbWUobiA9PiB7XHJcbiAgICAgICAgaWYgKG4uaWQgPT09IF9uLmlkKSB7XHJcbiAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChuKTtcclxuICAgICAgICAgIF9uID0gX24ucGFyZW50O1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG4iLCI8aDIgbWF0LWRpYWxvZy10aXRsZSAoa2V5dXAuQXJyb3dEb3duKT1cIm5leHRGaWx0ZXJlZCgpXCI+e3tkaWFsb2dEYXRhLnRpdGxlfX08L2gyPlxyXG48ZGl2IHN0eWxlPVwicGFkZGluZzogMCAyNHB4XCI+XHJcbiAgQGlmIChkaWFsb2dEYXRhLmRlc2NyaXB0aW9uKSB7XHJcbiAgPGRpdiBbaW5uZXJIdG1sXT1cImRpYWxvZ0RhdGEuZGVzY3JpcHRpb24gfCBzYWZlSHRtbFwiPjwvZGl2PlxyXG4gIH1cclxuICA8ZGl2IHN0eWxlPVwicGFkZGluZy1ib3R0b206IDEwcHg7XCI+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhGaWxsPlxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIjUwXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwid2lkdGg6MTAwJVwiIFthcHBlYXJhbmNlXT1cImRpYWxvZ0RhdGEuYXBwZWFyYW5jZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiA+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPkNlcmNhLi4uPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjZGtGb2N1c0luaXRpYWwgKGtleXVwKT1cImRvRmlsdGVyKClcIiBtYXRJbnB1dCB0aXRsZT1cIkRpZ2l0YSBpbCB0ZXN0bydcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlclRleHRcIj5cclxuICAgICAgICAgIEBpZiAoZmlsdGVyVGV4dCkge1xyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGVhckZpbHRlcigpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgQGlmIChmaWx0ZXJlZEl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgPGRpdiBmeEZsZXg9XCI1MHB4XCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgIDxkaXYgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInNtYWxsXCI+e3tmaWx0ZXJJbmRleCArIDF9fSAvIHt7ZmlsdGVyZWRJdGVtcy5sZW5ndGh9fTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIjUwXCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiIHN0eWxlPVwid2hpdGUtc3BhY2U6bm93cmFwXCI+XHJcbiAgICAgICAgPGRpdiBmeEZsZXhBbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICAgICAgQGlmIChmaWx0ZXJlZEl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uICAoY2xpY2spPVwibmV4dEZpbHRlcmVkKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGFyaWEtbGFiZWw9XCJWYWkgYWwgcHJvc3NpbW9cIiBtYXRUb29sdGlwPVwiVmFpIGFsIHByb3NzaW1vXCI+YXJyb3dfZG93bndhcmQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAgKGNsaWNrKT1cInRyZWVDb250cm9sLmNvbGxhcHNlQWxsKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGFyaWEtbGFiZWw9XCJDb21wcmltaSB0dXR0b1wiIG1hdFRvb2x0aXA9XCJDb21wcmltaSB0dXR0b1wiPnVuZm9sZF9sZXNzPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gIChjbGljayk9XCJ0cmVlQ29udHJvbC5leHBhbmRBbGwoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gYXJpYS1sYWJlbD1cIkVzcGFuZGkgdHV0dG9cIiBtYXRUb29sdGlwPVwiRXNwYW5kaSB0dXR0b1wiPnVuZm9sZF9tb3JlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPG1hdC1kaWFsb2ctY29udGVudD5cclxuICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGaWxsPlxyXG4gICAgPG1hdC10cmVlIFtkYXRhU291cmNlXT1cInRyZWVEYXRhXCIgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sXCI+XHJcbiAgICAgIDxtYXQtdHJlZS1ub2RlIFtpZF09XCJub2RlLmlkXCIgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIiBtYXRUcmVlTm9kZVRvZ2dsZSBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgICBbbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50XT1cIjIwXCIgY2xhc3M9XCJ0cmVlLW5vZGUgdHJlZS1ub2RlLXNpbXBsZVwiIChjbGljayk9XCJzZWxlY3QoJGV2ZW50LCBub2RlKTtcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsndHJlZS1ub2RlLWFjdGl2YXRlZCc6IGN1cnJlbnROb2RlICYmIGN1cnJlbnROb2RlLmlkID09PSBub2RlLmlkfVwiID5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCI1cHhcIiBmeEZpbGwgY2xhc3M9XCJzbWFsbFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIGRpc2FibGVkIGNsYXNzPVwic21hbGwtaWNvbi1idXR0b25cIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ1cHBlcmNhc2UgXCI+XHJcbiAgICAgICAgICAgIHt7bm9kZS5uYW1lfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeEZsZXg9XCIzMHB4XCIgZnhGbGV4QWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICAgICAgQGlmIChub2RlLmNvdW50ID4gMCkge1xyXG4gICAgICAgICAgICA8c3BhbiBmeExheW91dEFsaWduPVwiZW5kXCI+KHt7bm9kZS5jb3VudH19KTwvc3Bhbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuXHJcbiAgICAgIDxtYXQtdHJlZS1ub2RlIFtpZF09XCJub2RlLmlkXCIgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGU7d2hlbjogaGFzQ2hpbGRcIiBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgICBbbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50XT1cIjIwXCIgY2xhc3M9XCJ0cmVlLW5vZGUgdHJlZS1ub2RlLXNpbXBsZVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyd0cmVlLW5vZGUtYWN0aXZhdGVkJzogY3VycmVudE5vZGUgJiYgY3VycmVudE5vZGUuaWQgPT09IG5vZGUuaWQgfVwiIChjbGljayk9XCJzZWxlY3QoJGV2ZW50LCBub2RlKTtcIj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCI1cHhcIiBmeEZpbGwgY2xhc3M9XCJzbWFsbFwiPlxyXG4gICAgICAgICAgPGRpdiBmeEZsZXg9XCIzMHB4XCIgZnhGbGV4QWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRyZWVOb2RlVG9nZ2xlIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FwcmkvY2hpdWRpICcgKyBub2RlLm5hbWVcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwic21hbGwtaWNvbi1idXR0b25cIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+XHJcbiAgICAgICAgICAgICAgICB7e3RyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnZXhwYW5kX21vcmUnIDogJ2NoZXZyb25fcmlnaHQnfX1cclxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInVwcGVyY2FzZSB0cnVuY2F0ZWRcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICB7e25vZGUubmFtZX19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjMwcHhcIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICAgICAgICBAaWYgKG5vZGUuY291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImVuZFwiPih7e25vZGUuY291bnR9fSk8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuICAgIDwvbWF0LXRyZWU+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG48bWF0LWRpYWxvZy1hY3Rpb25zPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiZW5kXCIgZnhGaWxsPlxyXG4gICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9rKClcIiBcclxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50Tm9kZVwiPnt7ZGlhbG9nRGF0YS5va0NhcHRpb259fTwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIG1hdC1kaWFsb2ctY2xvc2UgY2RrRm9jdXNJbml0aWFsIFxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIj5Bbm51bGxhPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LWRpYWxvZy1hY3Rpb25zPiJdfQ==
@@ -1,90 +0,0 @@
1
- import { TextFieldModule } from "@angular/cdk/text-field";
2
- import { ChangeDetectionStrategy, Component, EventEmitter, Output, inject } from "@angular/core";
3
- import { FormsModule } from "@angular/forms";
4
- import { MatButtonModule } from "@angular/material/button";
5
- import { MatCheckboxModule } from "@angular/material/checkbox";
6
- import { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from "@angular/material/dialog";
7
- import { MatFormFieldModule } from "@angular/material/form-field";
8
- import { MatIconModule } from "@angular/material/icon";
9
- import { MatInputModule } from "@angular/material/input";
10
- import { MatTooltipModule } from "@angular/material/tooltip";
11
- import { EmailsValidatorDirective, SystemUtils } from '@arsedizioni/ars-utils/core';
12
- import { FlexModule } from "@ngbracket/ngx-layout/flex";
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "@angular/forms";
15
- import * as i2 from "@ngbracket/ngx-layout/flex";
16
- import * as i3 from "@angular/material/form-field";
17
- import * as i4 from "@angular/material/input";
18
- import * as i5 from "@angular/cdk/text-field";
19
- import * as i6 from "@angular/material/button";
20
- import * as i7 from "@angular/material/icon";
21
- import * as i8 from "@angular/material/tooltip";
22
- import * as i9 from "@angular/material/checkbox";
23
- export class SendToDialogComponent {
24
- constructor() {
25
- this.done = new EventEmitter();
26
- this.populate = new EventEmitter();
27
- this.dialogData = inject(MAT_DIALOG_DATA);
28
- this.item = {
29
- recipients: null,
30
- subject: null,
31
- text: null,
32
- options: null
33
- };
34
- }
35
- ngOnInit() {
36
- this.dialogData = this.dialogData || { count: 0, appearance: 'fill' };
37
- if (!this.dialogData.appearance) {
38
- this.dialogData.appearance = 'fill';
39
- }
40
- if (!this.dialogData.count) {
41
- this.dialogData.count = 0;
42
- }
43
- if (!this.dialogData.title && this.dialogData.count) {
44
- this.dialogData.title =
45
- this.dialogData.count === 1
46
- ? "Invia documento a..."
47
- : "Invia " + this.dialogData.count + " documenti a...";
48
- }
49
- }
50
- /**
51
- * Submit
52
- */
53
- ok() {
54
- // Add selected options
55
- this.item.options = this.dialogData.options;
56
- this.done.emit(this.item);
57
- }
58
- /**
59
- * Populate recipients
60
- */
61
- populateRecipients() {
62
- this.populate.emit(this.item);
63
- }
64
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: SendToDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
65
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: SendToDialogComponent, isStandalone: true, selector: "ng-component", outputs: { done: "done", populate: "populate" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, ngImport: i0, template: "<div class=\"dialog-info\">\r\n @if (f.form.invalid) {\r\n<span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\r\n} @else {\r\n<span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\r\n}\r\n</div>\r\n<h2 mat-dialog-title>{{dialogData.title}}</h2>\r\n<mat-dialog-content>\r\n <p>{{dialogData.info}}</p>\r\n <form name=\"form\" #f=\"ngForm\" 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\r\n [(ngModel)]=\"item.recipients\" name=\"recipients\" maxlength=\"1024\" #recipients=\"ngModel\" cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\" emails required></textarea>\r\n @if (item.recipients) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix\r\n aria-label=\"Azzera\" (click)=\"item.recipients = null;\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n @if (dialogData.allowPopulate) {\r\n<button type=\"button\" type=\"button\" tabindex=\"-1\" mat-icon-button\r\n matSuffix aria-label=\"Popola\" (click)=\"populateRecipients()\" matTooltip=\"Popola\">\r\n <mat-icon>search</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\">{{recipients.value?.length || 0}}/1024 </mat-hint>\r\n @if (recipients.invalid) {\r\n<mat-error>Non valido.</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\r\n name=\"subject\" [(ngModel)]=\"item.subject\" #subject=\"ngModel\" maxlength=\"200\" required />\r\n @if (subject.invalid) {\r\n<mat-error>Obbligatorio.</mat-error>\r\n}\r\n <mat-hint align=\"end\">{{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 \r\n [(ngModel)]=\"item.text\" name=\"text\" maxlength=\"1000\" #text=\"ngModel\" cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\" required></textarea>\r\n <mat-hint align=\"end\">{{text.value?.length || 0}}/1024 </mat-hint>\r\n @if (subject.invalid) {\r\n<mat-error>Obbligatorio.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n @if (dialogData.options) {\r\n<div>\r\n @for (o of dialogData.options; track $index; let i = $index) {\r\n <div>\r\n <mat-checkbox [(ngModel)]=\"o.value\" 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 color=\"primary\" [disabled]=\"f.form.invalid\" (click)=\"ok()\">Invia</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" color=\"primary\">Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-close{margin-right:5px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important;line-height:16px}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px}.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}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 10px 20px 0}.drawer .title,.drawer-small .title{font-size:1.2em!important;font-weight:600;padding-left:20px;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}}@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{font-weight:600}}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i2.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i5.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "ngmodule", type: TextFieldModule }, { kind: "directive", type: EmailsValidatorDirective, selector: "[emails]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i9.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
66
- }
67
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: SendToDialogComponent, decorators: [{
68
- type: Component,
69
- args: [{ host: { 'Bind': SystemUtils.generateUUID() }, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
70
- MatDialogTitle,
71
- MatDialogContent,
72
- FormsModule,
73
- FlexModule,
74
- MatFormFieldModule,
75
- MatInputModule,
76
- TextFieldModule,
77
- EmailsValidatorDirective,
78
- MatButtonModule,
79
- MatIconModule,
80
- MatTooltipModule,
81
- MatCheckboxModule,
82
- MatDialogActions,
83
- MatDialogClose,
84
- ], template: "<div class=\"dialog-info\">\r\n @if (f.form.invalid) {\r\n<span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\r\n} @else {\r\n<span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\r\n}\r\n</div>\r\n<h2 mat-dialog-title>{{dialogData.title}}</h2>\r\n<mat-dialog-content>\r\n <p>{{dialogData.info}}</p>\r\n <form name=\"form\" #f=\"ngForm\" 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\r\n [(ngModel)]=\"item.recipients\" name=\"recipients\" maxlength=\"1024\" #recipients=\"ngModel\" cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\" emails required></textarea>\r\n @if (item.recipients) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix\r\n aria-label=\"Azzera\" (click)=\"item.recipients = null;\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n @if (dialogData.allowPopulate) {\r\n<button type=\"button\" type=\"button\" tabindex=\"-1\" mat-icon-button\r\n matSuffix aria-label=\"Popola\" (click)=\"populateRecipients()\" matTooltip=\"Popola\">\r\n <mat-icon>search</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\">{{recipients.value?.length || 0}}/1024 </mat-hint>\r\n @if (recipients.invalid) {\r\n<mat-error>Non valido.</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\r\n name=\"subject\" [(ngModel)]=\"item.subject\" #subject=\"ngModel\" maxlength=\"200\" required />\r\n @if (subject.invalid) {\r\n<mat-error>Obbligatorio.</mat-error>\r\n}\r\n <mat-hint align=\"end\">{{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 \r\n [(ngModel)]=\"item.text\" name=\"text\" maxlength=\"1000\" #text=\"ngModel\" cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\" required></textarea>\r\n <mat-hint align=\"end\">{{text.value?.length || 0}}/1024 </mat-hint>\r\n @if (subject.invalid) {\r\n<mat-error>Obbligatorio.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n @if (dialogData.options) {\r\n<div>\r\n @for (o of dialogData.options; track $index; let i = $index) {\r\n <div>\r\n <mat-checkbox [(ngModel)]=\"o.value\" 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 color=\"primary\" [disabled]=\"f.form.invalid\" (click)=\"ok()\">Invia</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" color=\"primary\">Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-close{margin-right:5px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important;line-height:16px}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px}.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}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 10px 20px 0}.drawer .title,.drawer-small .title{font-size:1.2em!important;font-weight:600;padding-left:20px;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}}@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{font-weight:600}}\n"] }]
85
- }], propDecorators: { done: [{
86
- type: Output
87
- }], populate: [{
88
- type: Output
89
- }] } });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC10by1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL3VpLmFwcGxpY2F0aW9uL3VpL2RpYWxvZ3Mvc2VuZC10by9zZW5kLXRvLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvdWkuYXBwbGljYXRpb24vdWkvZGlhbG9ncy9zZW5kLXRvL3NlbmQtdG8tZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0gsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDcEYsT0FBTyxFQUFF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YXIvY2RrL3RleHQtZmllbGRcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE91dHB1dCwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvblwiO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveFwiO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ0FjdGlvbnMsIE1hdERpYWxvZ0Nsb3NlLCBNYXREaWFsb2dDb250ZW50LCBNYXREaWFsb2dUaXRsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGRcIjtcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pY29uXCI7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2lucHV0XCI7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcFwiO1xyXG5pbXBvcnQgeyBFbWFpbHNWYWxpZGF0b3JEaXJlY3RpdmUsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgRmxleE1vZHVsZSB9IGZyb20gXCJAbmdicmFja2V0L25neC1sYXlvdXQvZmxleFwiO1xyXG5pbXBvcnQgeyBTZW5kVG9EaWFsb2dSZXN1bHQgfSBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbnNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VuZFRvRGlhbG9nRGF0YSB7XHJcbiAgY291bnQ6IG51bWJlcjtcclxuICB0aXRsZT86IHN0cmluZyB8IG51bGw7XHJcbiAgaW5mbz86IHN0cmluZ3wgbnVsbDtcclxuICBhcHBlYXJhbmNlPzogc3RyaW5nfCBudWxsO1xyXG4gIGFsbG93UG9wdWxhdGU/OiBib29sZWFufCBudWxsO1xyXG4gIG9wdGlvbnM/OiBhbnl8IG51bGw7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIGhvc3Q6IHsgJ0JpbmQnOiBTeXN0ZW1VdGlscy5nZW5lcmF0ZVVVSUQoKSB9LFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vc2VuZC10by1kaWFsb2cuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vc2VuZC10by1kaWFsb2cuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBNYXREaWFsb2dUaXRsZSxcclxuICAgIE1hdERpYWxvZ0NvbnRlbnQsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIEZsZXhNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIFRleHRGaWVsZE1vZHVsZSxcclxuICAgIEVtYWlsc1ZhbGlkYXRvckRpcmVjdGl2ZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXHJcbiAgICBNYXREaWFsb2dBY3Rpb25zLFxyXG4gICAgTWF0RGlhbG9nQ2xvc2UsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNlbmRUb0RpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQE91dHB1dCgpIGRvbmUgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbmRUb0RpYWxvZ1Jlc3VsdD4oKTtcclxuICBAT3V0cHV0KCkgcG9wdWxhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbmRUb0RpYWxvZ1Jlc3VsdD4oKTtcclxuXHJcbiAgcHJvdGVjdGVkIGRpYWxvZ0RhdGE6IFNlbmRUb0RpYWxvZ0RhdGEgPSBpbmplY3QoTUFUX0RJQUxPR19EQVRBKTtcclxuICBwcm90ZWN0ZWQgaXRlbTogU2VuZFRvRGlhbG9nUmVzdWx0ID0ge1xyXG4gICAgcmVjaXBpZW50czogbnVsbCxcclxuICAgIHN1YmplY3Q6IG51bGwsXHJcbiAgICB0ZXh0OiBudWxsLFxyXG4gICAgb3B0aW9uczogbnVsbFxyXG4gIH07XHJcblxyXG4gbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgdGhpcy5kaWFsb2dEYXRhID0gdGhpcy5kaWFsb2dEYXRhIHx8IHsgY291bnQ6IDAsIGFwcGVhcmFuY2U6ICdmaWxsJyB9O1xyXG4gIGlmICghdGhpcy5kaWFsb2dEYXRhLmFwcGVhcmFuY2UpIHtcclxuICAgIHRoaXMuZGlhbG9nRGF0YS5hcHBlYXJhbmNlID0gJ2ZpbGwnO1xyXG4gIH1cclxuICBpZiAoIXRoaXMuZGlhbG9nRGF0YS5jb3VudCkge1xyXG4gICAgdGhpcy5kaWFsb2dEYXRhLmNvdW50ID0gMDtcclxuICB9XHJcbiAgaWYgKCF0aGlzLmRpYWxvZ0RhdGEudGl0bGUgJiYgdGhpcy5kaWFsb2dEYXRhLmNvdW50KSB7XHJcbiAgICB0aGlzLmRpYWxvZ0RhdGEudGl0bGUgPVxyXG4gICAgICB0aGlzLmRpYWxvZ0RhdGEuY291bnQgPT09IDFcclxuICAgICAgICA/IFwiSW52aWEgZG9jdW1lbnRvIGEuLi5cIlxyXG4gICAgICAgIDogXCJJbnZpYSBcIiArIHRoaXMuZGlhbG9nRGF0YS5jb3VudCArIFwiIGRvY3VtZW50aSBhLi4uXCI7XHJcbiAgfVxyXG4gfVxyXG5cclxuICAvKipcclxuICAgKiBTdWJtaXRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgb2soKSB7XHJcbiAgICAvLyBBZGQgc2VsZWN0ZWQgb3B0aW9uc1xyXG4gICAgdGhpcy5pdGVtLm9wdGlvbnMgPSB0aGlzLmRpYWxvZ0RhdGEub3B0aW9ucztcclxuICAgIHRoaXMuZG9uZS5lbWl0KHRoaXMuaXRlbSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQb3B1bGF0ZSByZWNpcGllbnRzXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHBvcHVsYXRlUmVjaXBpZW50cygpIHtcclxuICAgIHRoaXMucG9wdWxhdGUuZW1pdCh0aGlzLml0ZW0pO1xyXG4gIH1cclxufSIsIjxkaXYgY2xhc3M9XCJkaWFsb2ctaW5mb1wiPlxyXG4gIEBpZiAoZi5mb3JtLmludmFsaWQpIHtcclxuPHNwYW4gY2xhc3M9XCJkaWFsb2ctaW5mby1lcnJvclwiPkNpIHNvbm8gYW5jb3JhIGRlaSBjYW1waSBvYmJsaWdhdG9yaSAoKikgbm9uIGNvbXBpbGF0aS48L3NwYW4+XHJcbn0gQGVsc2Uge1xyXG48c3BhbiBjbGFzcz1cImRpYWxvZy1pbmZvLW9rXCI+VHV0dGkgaSBjYW1waSBvYmJsaWdhdG9yaSAoKikgc29ubyBjb21waWxhdGkuPC9zcGFuPlxyXG59XHJcbjwvZGl2PlxyXG48aDIgbWF0LWRpYWxvZy10aXRsZT57e2RpYWxvZ0RhdGEudGl0bGV9fTwvaDI+XHJcbjxtYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgPHA+e3tkaWFsb2dEYXRhLmluZm99fTwvcD5cclxuICA8Zm9ybSBuYW1lPVwiZm9ybVwiICNmPVwibmdGb3JtXCIgbm92YWxpZGF0ZT5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEdhcD1cIjMycHhcIiBmeEZpbGw+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGaWxsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCAgW2FwcGVhcmFuY2VdPVwiZGlhbG9nRGF0YS5hcHBlYXJhbmNlXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsID5EZXN0aW5hdGFyaTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0XHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5yZWNpcGllbnRzXCIgbmFtZT1cInJlY2lwaWVudHNcIiBtYXhsZW5ndGg9XCIxMDI0XCIgI3JlY2lwaWVudHM9XCJuZ01vZGVsXCIgY2RrVGV4dGFyZWFBdXRvc2l6ZVxyXG4gICAgICAgICAgICBjZGtBdXRvc2l6ZU1pblJvd3M9XCIxXCIgY2RrQXV0b3NpemVNYXhSb3dzPVwiMTBcIiBlbWFpbHMgcmVxdWlyZWQ+PC90ZXh0YXJlYT5cclxuICAgICAgICAgIEBpZiAoaXRlbS5yZWNpcGllbnRzKSB7XHJcbjxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXQtaWNvbi1idXR0b24gIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQXp6ZXJhXCIgKGNsaWNrKT1cIml0ZW0ucmVjaXBpZW50cyA9IG51bGw7XCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxufVxyXG4gICAgICAgICAgQGlmIChkaWFsb2dEYXRhLmFsbG93UG9wdWxhdGUpIHtcclxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgIG1hdFN1ZmZpeCBhcmlhLWxhYmVsPVwiUG9wb2xhXCIgKGNsaWNrKT1cInBvcHVsYXRlUmVjaXBpZW50cygpXCIgbWF0VG9vbHRpcD1cIlBvcG9sYVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG59XHJcbiAgICAgICAgICA8bWF0LWhpbnQgYWxpZ249XCJzdGFydFwiPlNlcGFyYXRpIGRhIHB1bnRvIGUgdmlyZ29sYTwvbWF0LWhpbnQ+XHJcbiAgICAgICAgICA8bWF0LWhpbnQgYWxpZ249XCJlbmRcIj57e3JlY2lwaWVudHMudmFsdWU/Lmxlbmd0aCB8fCAwfX0vMTAyNCA8L21hdC1oaW50PlxyXG4gICAgICAgICAgQGlmIChyZWNpcGllbnRzLmludmFsaWQpIHtcclxuPG1hdC1lcnJvcj5Ob24gdmFsaWRvLjwvbWF0LWVycm9yPlxyXG59XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgIFthcHBlYXJhbmNlXT1cImRpYWxvZ0RhdGEuYXBwZWFyYW5jZVwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbCA+T2dnZXR0bzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IG1hdElucHV0XHJcbiAgICAgICAgICAgIG5hbWU9XCJzdWJqZWN0XCIgWyhuZ01vZGVsKV09XCJpdGVtLnN1YmplY3RcIiAjc3ViamVjdD1cIm5nTW9kZWxcIiBtYXhsZW5ndGg9XCIyMDBcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgICAgQGlmIChzdWJqZWN0LmludmFsaWQpIHtcclxuPG1hdC1lcnJvcj5PYmJsaWdhdG9yaW8uPC9tYXQtZXJyb3I+XHJcbn1cclxuICAgICAgICAgIDxtYXQtaGludCBhbGlnbj1cImVuZFwiPnt7c3ViamVjdC52YWx1ZT8ubGVuZ3RoIHx8IDB9fS8yMDAgPC9tYXQtaGludD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBbYXBwZWFyYW5jZV09XCJkaWFsb2dEYXRhLmFwcGVhcmFuY2VcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWwgPlRlc3RvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS50ZXh0XCIgbmFtZT1cInRleHRcIiBtYXhsZW5ndGg9XCIxMDAwXCIgI3RleHQ9XCJuZ01vZGVsXCIgY2RrVGV4dGFyZWFBdXRvc2l6ZVxyXG4gICAgICAgICAgICBjZGtBdXRvc2l6ZU1pblJvd3M9XCIxXCIgY2RrQXV0b3NpemVNYXhSb3dzPVwiMTBcIiByZXF1aXJlZD48L3RleHRhcmVhPlxyXG4gICAgICAgICAgPG1hdC1oaW50IGFsaWduPVwiZW5kXCI+e3t0ZXh0LnZhbHVlPy5sZW5ndGggfHwgMH19LzEwMjQgPC9tYXQtaGludD5cclxuICAgICAgICAgIEBpZiAoc3ViamVjdC5pbnZhbGlkKSB7XHJcbjxtYXQtZXJyb3I+T2JibGlnYXRvcmlvLjwvbWF0LWVycm9yPlxyXG59XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIEBpZiAoZGlhbG9nRGF0YS5vcHRpb25zKSB7XHJcbjxkaXY+XHJcbiAgICAgICAgQGZvciAobyBvZiBkaWFsb2dEYXRhLm9wdGlvbnM7IHRyYWNrICRpbmRleDsgbGV0IGkgPSAkaW5kZXgpIHtcclxuICA8ZGl2PlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCAgWyhuZ01vZGVsKV09XCJvLnZhbHVlXCIgbmFtZT1cIm9wdF97e2l9fVwiPlxyXG4gICAgICAgICAgICB7e28uZGVzY3JpcHRpb259fVxyXG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbn1cclxuICAgICAgPC9kaXY+XHJcbn1cclxuICAgIDwvZGl2PlxyXG4gIDwvZm9ybT5cclxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbjxtYXQtZGlhbG9nLWFjdGlvbnM+XHJcbiAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4RmlsbD5cclxuICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImVuZFwiIGZ4RmlsbCA+XHJcbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFtkaXNhYmxlZF09XCJmLmZvcm0uaW52YWxpZFwiIChjbGljayk9XCJvaygpXCI+SW52aWE8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwidHJ1ZVwiIGNvbG9yPVwicHJpbWFyeVwiPkFubnVsbGE8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuIl19