@arsedizioni/ars-utils 18.1.74 → 18.1.76

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 (113) hide show
  1. package/clipper.common/common/common.module.d.ts +1 -2
  2. package/clipper.common/common/definitions.d.ts +317 -0
  3. package/clipper.common/common/interceptors/auth.interceptor.d.ts +2 -5
  4. package/clipper.common/common/messages.d.ts +4 -0
  5. package/clipper.common/common/services/clipper.service.d.ts +12 -36
  6. package/clipper.ui/{ui/document/documents.d.ts → documents.d.ts} +2 -6
  7. package/clipper.ui/public_api.d.ts +6 -5
  8. package/clipper.ui/ui/browser-dialog/browser-dialog.component.d.ts +30 -143
  9. package/clipper.ui/ui/clipper.scss +270 -106
  10. package/clipper.ui/ui/document/document.component.d.ts +64 -118
  11. package/clipper.ui/ui/document-index/document-index.component.d.ts +34 -0
  12. package/clipper.ui/ui/document-manager/document-manager.d.ts +126 -0
  13. package/clipper.ui/ui/document-menu/document-menu.component.d.ts +28 -0
  14. package/clipper.ui/ui/references/references.component.d.ts +39 -73
  15. package/clipper.ui/ui/search-calendar/search-calendar.component.d.ts +40 -0
  16. package/clipper.ui/ui/search-dialog/search-dialog.component.d.ts +37 -40
  17. package/clipper.ui/ui/search-facets/search-facets.component.d.ts +22 -70
  18. package/clipper.ui/ui/search-free-text-help/search-free-text-help.component.d.ts +0 -1
  19. package/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.d.ts +8 -12
  20. package/clipper.ui/ui/search-result-item/search-result-item.component.d.ts +6 -4
  21. package/clipper.ui/ui/search-result-manager/search-result-manager.d.ts +147 -0
  22. package/esm2022/clipper.common/common/common.module.mjs +2 -3
  23. package/esm2022/clipper.common/common/definitions.mjs +1536 -0
  24. package/esm2022/clipper.common/common/interceptors/auth.interceptor.mjs +15 -15
  25. package/esm2022/clipper.common/common/messages.mjs +6 -1
  26. package/esm2022/clipper.common/common/services/clipper.service.mjs +65 -65
  27. package/esm2022/clipper.ui/documents.mjs +51 -0
  28. package/esm2022/clipper.ui/public_api.mjs +7 -6
  29. package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +320 -785
  30. package/esm2022/clipper.ui/ui/document/document.component.mjs +213 -320
  31. package/esm2022/clipper.ui/ui/document-index/document-index.component.mjs +121 -0
  32. package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +431 -0
  33. package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +56 -0
  34. package/esm2022/clipper.ui/ui/references/references.component.mjs +244 -438
  35. package/esm2022/clipper.ui/ui/search-calendar/search-calendar.component.mjs +116 -0
  36. package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +216 -205
  37. package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +157 -209
  38. package/esm2022/clipper.ui/ui/search-free-text-help/search-free-text-help.component.mjs +7 -8
  39. package/esm2022/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.mjs +22 -23
  40. package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +12 -10
  41. package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +462 -0
  42. package/esm2022/help/components/help-viewer/help-viewer.component.mjs +25 -28
  43. package/esm2022/support.common/common/definitions.mjs +21 -0
  44. package/esm2022/support.common/common/services/support.service.mjs +9 -7
  45. package/esm2022/support.common/public_api.mjs +2 -2
  46. package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +3 -3
  47. package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +4 -5
  48. package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +3 -3
  49. package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +3 -3
  50. package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +3 -3
  51. package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +3 -3
  52. package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +3 -3
  53. package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +3 -3
  54. package/esm2022/ui.application/public_api.mjs +4 -1
  55. package/esm2022/ui.application/ui/components/button-selector/button-selector.component.mjs +163 -0
  56. package/esm2022/ui.application/ui/components/button-toggle/button-toggle.component.mjs +47 -0
  57. package/esm2022/ui.application/ui/components/chips-selector/chips-selector.component.mjs +239 -0
  58. package/esm2022/ui.application/ui/components/file-preview/file-preview.component.mjs +23 -24
  59. package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +3 -3
  60. package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +3 -3
  61. package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +3 -3
  62. package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +3 -3
  63. package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +3 -3
  64. package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +3 -3
  65. package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +3 -3
  66. package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +3 -3
  67. package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +3 -3
  68. package/esm2022/ui.application/ui/messages.mjs +3 -3
  69. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +1608 -1507
  70. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
  71. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +2283 -2407
  72. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
  73. package/fesm2022/arsedizioni-ars-utils-help.mjs +25 -28
  74. package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
  75. package/fesm2022/arsedizioni-ars-utils-support.common.mjs +8 -6
  76. package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
  77. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +5 -6
  78. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
  79. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +450 -47
  80. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
  81. package/fesm2022/arsedizioni-ars-utils-ui.mjs +12 -12
  82. package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
  83. package/help/components/help-viewer/help-viewer.component.d.ts +6 -10
  84. package/package.json +13 -13
  85. package/styles/ui.scss +140 -0
  86. package/support.common/common/services/support.service.d.ts +2 -2
  87. package/support.common/public_api.d.ts +1 -1
  88. package/ui.application/public_api.d.ts +3 -0
  89. package/ui.application/ui/components/button-selector/button-selector.component.d.ts +49 -0
  90. package/ui.application/ui/components/button-toggle/button-toggle.component.d.ts +26 -0
  91. package/ui.application/ui/components/chips-selector/chips-selector.component.d.ts +70 -0
  92. package/ui.application/ui/components/file-preview/file-preview.component.d.ts +4 -8
  93. package/ui.application/ui/messages.d.ts +2 -2
  94. package/clipper.common/common/clipper.d.ts +0 -119
  95. package/clipper.common/common/search.d.ts +0 -49
  96. package/clipper.ui/ui/document/base/document-base.component.d.ts +0 -38
  97. package/clipper.ui/ui/document/document-index/document-index.component.d.ts +0 -38
  98. package/clipper.ui/ui/document/document-menu/document-menu.component.d.ts +0 -30
  99. package/clipper.ui/ui/last-15-days/last-15-days.component.d.ts +0 -41
  100. package/esm2022/clipper.common/common/clipper.mjs +0 -1371
  101. package/esm2022/clipper.common/common/search.mjs +0 -69
  102. package/esm2022/clipper.ui/ui/document/base/document-base.component.mjs +0 -194
  103. package/esm2022/clipper.ui/ui/document/document-index/document-index.component.mjs +0 -121
  104. package/esm2022/clipper.ui/ui/document/document-menu/document-menu.component.mjs +0 -88
  105. package/esm2022/clipper.ui/ui/document/documents.mjs +0 -49
  106. package/esm2022/clipper.ui/ui/last-15-days/last-15-days.component.mjs +0 -107
  107. package/esm2022/help/components/help-search-query-builder/help-search-query-builder.component.mjs +0 -114
  108. package/esm2022/support.common/common/support.mjs +0 -21
  109. package/esm2022/ui.oauth/ui/components/login/loginOAuth.component.mjs +0 -198
  110. package/help/components/help-search-query-builder/help-search-query-builder.component.d.ts +0 -29
  111. package/help/help.scss +0 -72
  112. package/ui.oauth/ui/components/login/loginOAuth.component.d.ts +0 -38
  113. /package/support.common/common/{support.d.ts → definitions.d.ts} +0 -0
@@ -0,0 +1,239 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { NgClass, NgStyle } from '@angular/common';
3
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Input, Optional, Output, Renderer2, Self, computed, inject, input, signal } from '@angular/core';
4
+ import { FormsModule } from '@angular/forms';
5
+ import { MatBadgeModule } from '@angular/material/badge';
6
+ import { MatButtonModule } from '@angular/material/button';
7
+ import { MatChipsModule } from '@angular/material/chips';
8
+ import { MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';
9
+ import { MatIconModule } from '@angular/material/icon';
10
+ import { MatSelectModule } from '@angular/material/select';
11
+ import { BroadcastService, SystemUtils } from '@arsedizioni/ars-utils/core';
12
+ import { ExtendedModule, FlexModule } from '@ngbracket/ngx-layout';
13
+ import { Subject, takeUntil } from 'rxjs';
14
+ import { ArsUIApplicationMessages } from '../../messages';
15
+ import { ButtonSelectorComponent } from '../button-selector/button-selector.component';
16
+ import * as i0 from "@angular/core";
17
+ import * as i1 from "@angular/forms";
18
+ import * as i2 from "@ngbracket/ngx-layout/extended";
19
+ import * as i3 from "@angular/material/form-field";
20
+ import * as i4 from "@angular/material/select";
21
+ import * as i5 from "@angular/material/core";
22
+ import * as i6 from "@angular/material/chips";
23
+ import * as i7 from "@angular/material/icon";
24
+ import * as i8 from "@angular/material/button";
25
+ import * as i9 from "@angular/material/badge";
26
+ export class ChipsSelectorComponent {
27
+ set value(value) {
28
+ let v1 = 0;
29
+ let v2 = 0;
30
+ if (this._value?.length > 0) {
31
+ this._value.forEach((n) => v1 += n.value);
32
+ }
33
+ if (value && !Array.isArray(value)) {
34
+ v2 = value.value;
35
+ this._value = [value];
36
+ }
37
+ else {
38
+ if (value?.length > 0) {
39
+ value.forEach((n) => v2 += n.value);
40
+ }
41
+ this._value = value;
42
+ }
43
+ this.propagateChange(this._value);
44
+ this.stateChanges.next();
45
+ if (v2 !== v1) {
46
+ this.changed.emit(this._value);
47
+ }
48
+ }
49
+ get value() {
50
+ return this._value;
51
+ }
52
+ get empty() {
53
+ return !this._value || this._value?.length === 0;
54
+ }
55
+ get errorState() {
56
+ return this.ngControl.errors != null && this.ngControl.touched;
57
+ }
58
+ get required() {
59
+ return this._required;
60
+ }
61
+ set required(value) {
62
+ this._required = coerceBooleanProperty(value);
63
+ this.stateChanges.next();
64
+ }
65
+ get disabled() {
66
+ if (this.ngControl && this.ngControl.disabled != null) {
67
+ return this.ngControl.disabled;
68
+ }
69
+ return this._disabled;
70
+ }
71
+ set disabled(value) {
72
+ this._disabled = coerceBooleanProperty(value);
73
+ if (this.focused) {
74
+ this.focused = false;
75
+ this.stateChanges.next();
76
+ }
77
+ }
78
+ get placeholder() {
79
+ return this._placeholder;
80
+ }
81
+ set placeholder(value) {
82
+ this._placeholder = value;
83
+ this.stateChanges.next();
84
+ }
85
+ get shouldLabelFloat() {
86
+ return this.focused || !this.empty;
87
+ }
88
+ constructor(ngControl) {
89
+ this.ngControl = ngControl;
90
+ this.changed = new EventEmitter();
91
+ this.containerId = `chips-selector-container--${SystemUtils.generateUUID()}`;
92
+ this.containerWidth = signal(-6);
93
+ this.stateChanges = new Subject();
94
+ this.focused = false;
95
+ this.unsubscribe = new Subject();
96
+ this.changeDetector = inject(ChangeDetectorRef);
97
+ this.broadcastService = inject(BroadcastService);
98
+ this.options = input();
99
+ this.collapsedWidth = input(-1);
100
+ this.collapseAt = input(-1);
101
+ this.collapseAtContainer = input(false);
102
+ this.collapseDisplayMode = input('dropdown');
103
+ this.label = input();
104
+ this.multiple = input(false);
105
+ this.mode = input('dinamyc');
106
+ this.collapsed = computed(() => {
107
+ const cw = this.containerWidth();
108
+ const mw = this.collapseAt();
109
+ return this.mode() === 'collapsed' || (mw === -1 || (cw > 0 && mw > 0 && cw < mw));
110
+ });
111
+ this._value = [];
112
+ this._required = false;
113
+ this._disabled = false;
114
+ this._placeholder = '';
115
+ this.propagateChange = (_) => { };
116
+ this.propagateTouched = () => { };
117
+ this.id = `chips-selector--${SystemUtils.generateUUID()}`;
118
+ this.describedBy = '';
119
+ this.renderer = inject(Renderer2);
120
+ if (this.ngControl != null) {
121
+ this.ngControl.valueAccessor = this;
122
+ }
123
+ }
124
+ ngOnInit() {
125
+ // React to message broadcasting
126
+ this.broadcastService.getMessage()
127
+ .pipe(takeUntil(this.unsubscribe))
128
+ .subscribe((message) => {
129
+ if (message.id === ArsUIApplicationMessages.UI_LAYOUT_CHANGED) {
130
+ if (this.collapseAt() > 0) {
131
+ // Close the options menu if open
132
+ this.updateContainerWidth();
133
+ }
134
+ }
135
+ });
136
+ }
137
+ ngOnDestroy() {
138
+ this.unsubscribe.next();
139
+ this.unsubscribe.complete();
140
+ this.stateChanges.complete();
141
+ }
142
+ ngAfterContentInit() {
143
+ setTimeout(() => {
144
+ this.updateContainerWidth();
145
+ this.changeDetector.markForCheck();
146
+ }, 250);
147
+ }
148
+ /**
149
+ * Update container width
150
+ */
151
+ updateContainerWidth() {
152
+ const elem = document.getElementById(this.containerId);
153
+ if (elem && elem.clientWidth > 0) {
154
+ this.containerWidth.set(this.collapseAtContainer()
155
+ ? (elem?.clientWidth ?? -1)
156
+ : (window.innerWidth ?? -1));
157
+ }
158
+ }
159
+ writeValue(value) {
160
+ if (this.value !== value) {
161
+ this.value = value;
162
+ }
163
+ }
164
+ registerOnChange(fn) {
165
+ this.propagateChange = fn;
166
+ }
167
+ registerOnTouched(fn) {
168
+ this.propagateTouched = fn;
169
+ }
170
+ setDescribedByIds(ids) {
171
+ this.describedBy = ids.join(' ');
172
+ }
173
+ setDisabledState(isDisabled) {
174
+ if (!SystemUtils.isBrowser())
175
+ return;
176
+ let elem = document.getElementById(this.id);
177
+ if (elem) {
178
+ this.renderer.setProperty(elem, 'disabled', isDisabled);
179
+ }
180
+ }
181
+ onContainerClick() {
182
+ if (!this.focused) {
183
+ if (!SystemUtils.isBrowser())
184
+ return;
185
+ let elem = document.getElementById(this.id);
186
+ if (elem) {
187
+ elem.focus();
188
+ this.propagateTouched();
189
+ }
190
+ }
191
+ }
192
+ /**
193
+ * Clear selection
194
+ * @param e : the click event
195
+ */
196
+ clear(e) {
197
+ this.value = [];
198
+ e.stopPropagation();
199
+ }
200
+ /**
201
+ * Select single element
202
+ * @param item : the item to select
203
+ */
204
+ select(item) {
205
+ if (item) {
206
+ this.value = [item];
207
+ }
208
+ }
209
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ChipsSelectorComponent, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
210
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: ChipsSelectorComponent, isStandalone: true, selector: "chips-selector", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, collapsedWidth: { classPropertyName: "collapsedWidth", publicName: "collapsedWidth", isSignal: true, isRequired: false, transformFunction: null }, collapseAt: { classPropertyName: "collapseAt", publicName: "collapseAt", isSignal: true, isRequired: false, transformFunction: null }, collapseAtContainer: { classPropertyName: "collapseAtContainer", publicName: "collapseAtContainer", isSignal: true, isRequired: false, transformFunction: null }, collapseDisplayMode: { classPropertyName: "collapseDisplayMode", publicName: "collapseDisplayMode", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { changed: "changed" }, host: { properties: { "id": "this.id", "class.floating": "this.shouldLabelFloat", "attr.aria-describedBy": "this.describedBy" } }, providers: [{ provide: MatFormFieldControl, useExisting: ChipsSelectorComponent }], ngImport: i0, template: "<div [id]=\"containerId\" class=\"chips-container\">\r\n @if(containerWidth() > 0) {\r\n @if(collapsed()) {\r\n @if(collapseDisplayMode() === 'dropdown') {\r\n <mat-form-field [ngStyle]=\"{'min-width': collapsedWidth() > 0 ? collapsedWidth()+'.px' : '100%'}\"\r\n subscriptSizing=\"dynamic\">\r\n @if(label()) {\r\n <mat-label>{{label()}}</mat-label>\r\n }\r\n <mat-select [(ngModel)]=\"value\" name=\"value\" [multiple]=\"multiple()\">\r\n <mat-select-trigger>\r\n @if (value && (value.length || 0) > 0) {\r\n {{value[0].shortName ?? value[0].name}}\r\n }\r\n @if (value && (value.length || 0) > 1) {\r\n <span class=\"collapsed-additional-selection\">\r\n (+{{(value.length || 0) - 1}} {{value.length === 2 ? 'altro' : 'altri'}})\r\n </span>\r\n }\r\n </mat-select-trigger>\r\n @for (o of options(); track o.value) {\r\n <mat-option [value]=\"o\">\r\n {{o.name}} \r\n @if(o.bag) {\r\n &nbsp; ({{o.bag}});\r\n }\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (value && (value.length || 0) > 0) {\r\n <button matSuffix tabindex=\"-1\" mat-icon-button aria-label=\"Pulisci\" (click)=\"clear($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n\r\n <button-selector [label]=\"label()\" [options]=\"options()\" [width]=\"collapsedWidth()\" [(ngModel)]=\"value\"\r\n name=\"value\"></button-selector>\r\n\r\n }\r\n } @else {\r\n <mat-chip-listbox [multiple]=\"multiple()\" [(ngModel)]=\"value\" name=\"value\">\r\n @for (o of options(); track o.value) {\r\n <mat-chip-option [matBadge]=\"o.bag\" [value]=\"o\">{{o.shortName ?? o.name}}</mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n }\r\n }\r\n</div>", styles: [".chips-container{width:100%}.collapsed-additional-selection{opacity:.75;font-size:.75em}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FlexModule }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: i2.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: MatSelectModule }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i4.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i6.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i6.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i9.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: ButtonSelectorComponent, selector: "button-selector", inputs: ["disabled", "width", "border", "borderRadius", "label", "labelSelected", "options", "autoSelect"], outputs: ["changed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
211
+ }
212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ChipsSelectorComponent, decorators: [{
213
+ type: Component,
214
+ args: [{ selector: 'chips-selector', standalone: true, imports: [NgStyle, NgClass, FlexModule, ExtendedModule, FormsModule, MatFormFieldModule, MatSelectModule,
215
+ MatChipsModule, MatIconModule, MatButtonModule, MatBadgeModule,
216
+ ButtonSelectorComponent
217
+ ], providers: [{ provide: MatFormFieldControl, useExisting: ChipsSelectorComponent }], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [id]=\"containerId\" class=\"chips-container\">\r\n @if(containerWidth() > 0) {\r\n @if(collapsed()) {\r\n @if(collapseDisplayMode() === 'dropdown') {\r\n <mat-form-field [ngStyle]=\"{'min-width': collapsedWidth() > 0 ? collapsedWidth()+'.px' : '100%'}\"\r\n subscriptSizing=\"dynamic\">\r\n @if(label()) {\r\n <mat-label>{{label()}}</mat-label>\r\n }\r\n <mat-select [(ngModel)]=\"value\" name=\"value\" [multiple]=\"multiple()\">\r\n <mat-select-trigger>\r\n @if (value && (value.length || 0) > 0) {\r\n {{value[0].shortName ?? value[0].name}}\r\n }\r\n @if (value && (value.length || 0) > 1) {\r\n <span class=\"collapsed-additional-selection\">\r\n (+{{(value.length || 0) - 1}} {{value.length === 2 ? 'altro' : 'altri'}})\r\n </span>\r\n }\r\n </mat-select-trigger>\r\n @for (o of options(); track o.value) {\r\n <mat-option [value]=\"o\">\r\n {{o.name}} \r\n @if(o.bag) {\r\n &nbsp; ({{o.bag}});\r\n }\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (value && (value.length || 0) > 0) {\r\n <button matSuffix tabindex=\"-1\" mat-icon-button aria-label=\"Pulisci\" (click)=\"clear($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n\r\n <button-selector [label]=\"label()\" [options]=\"options()\" [width]=\"collapsedWidth()\" [(ngModel)]=\"value\"\r\n name=\"value\"></button-selector>\r\n\r\n }\r\n } @else {\r\n <mat-chip-listbox [multiple]=\"multiple()\" [(ngModel)]=\"value\" name=\"value\">\r\n @for (o of options(); track o.value) {\r\n <mat-chip-option [matBadge]=\"o.bag\" [value]=\"o\">{{o.shortName ?? o.name}}</mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n }\r\n }\r\n</div>", styles: [".chips-container{width:100%}.collapsed-additional-selection{opacity:.75;font-size:.75em}\n"] }]
218
+ }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
219
+ type: Optional
220
+ }, {
221
+ type: Self
222
+ }] }], propDecorators: { changed: [{
223
+ type: Output
224
+ }], required: [{
225
+ type: Input
226
+ }], disabled: [{
227
+ type: Input
228
+ }], placeholder: [{
229
+ type: Input
230
+ }], id: [{
231
+ type: HostBinding
232
+ }], shouldLabelFloat: [{
233
+ type: HostBinding,
234
+ args: ['class.floating']
235
+ }], describedBy: [{
236
+ type: HostBinding,
237
+ args: ['attr.aria-describedBy']
238
+ }] } });
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL3VpLmFwcGxpY2F0aW9uL3VpL2NvbXBvbmVudHMvY2hpcHMtc2VsZWN0b3IvY2hpcHMtc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL3VpLmFwcGxpY2F0aW9uL3VpL2NvbXBvbmVudHMvY2hpcHMtc2VsZWN0b3IvY2hpcHMtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQW9CLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6TyxPQUFPLEVBQXdCLFdBQVcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxF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MEJBK0c1QyxRQUFROzswQkFBSSxJQUFJO3lDQTNHVCxPQUFPO3NCQUFoQixNQUFNO2dCQTRESCxRQUFRO3NCQURYLEtBQUs7Z0JBV0YsUUFBUTtzQkFEWCxLQUFLO2dCQWdCRixXQUFXO3NCQURkLEtBQUs7Z0JBYVMsRUFBRTtzQkFBaEIsV0FBVztnQkFFUixnQkFBZ0I7c0JBRG5CLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQUlTLFdBQVc7c0JBQWhELFdBQVc7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgTmdDbGFzcywgTmdTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFJlbmRlcmVyMiwgU2VsZiwgU2lnbmFsLCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRCYWRnZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JhZGdlJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Q2hpcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wsIE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IEJyb2FkY2FzdFNlcnZpY2UsIE5hbWVWYWx1ZUl0ZW0sIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgRXh0ZW5kZWRNb2R1bGUsIEZsZXhNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXJzVUlBcHBsaWNhdGlvbk1lc3NhZ2VzIH0gZnJvbSAnLi4vLi4vbWVzc2FnZXMnO1xyXG5pbXBvcnQgeyBCdXR0b25TZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uL2J1dHRvbi1zZWxlY3Rvci9idXR0b24tc2VsZWN0b3IuY29tcG9uZW50JztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NoaXBzLXNlbGVjdG9yJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtOZ1N0eWxlLCBOZ0NsYXNzLCBGbGV4TW9kdWxlLCBFeHRlbmRlZE1vZHVsZSwgRm9ybXNNb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTWF0Q2hpcHNNb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0QmFkZ2VNb2R1bGUsXHJcbiAgICBCdXR0b25TZWxlY3RvckNvbXBvbmVudFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogQ2hpcHNTZWxlY3RvckNvbXBvbmVudCB9XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2hpcHMtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jaGlwcy1zZWxlY3Rvci5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGlwc1NlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgQE91dHB1dCgpIGNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5hbWVWYWx1ZUl0ZW08YW55PltdPigpO1xyXG5cclxuICBwcm90ZWN0ZWQgY29udGFpbmVySWQ6IHN0cmluZyA9IGBjaGlwcy1zZWxlY3Rvci1jb250YWluZXItLSR7U3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCl9YDtcclxuICBwcm90ZWN0ZWQgY29udGFpbmVyV2lkdGggPSBzaWduYWwoLTYpO1xyXG4gIHByaXZhdGUgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIGZvY3VzZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIHVuc3Vic2NyaWJlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIGNoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICBwcml2YXRlIGJyb2FkY2FzdFNlcnZpY2UgPSBpbmplY3QoQnJvYWRjYXN0U2VydmljZSk7XHJcblxyXG4gIG9wdGlvbnMgPSBpbnB1dDxOYW1lVmFsdWVJdGVtPGFueT5bXT4oKTtcclxuICBjb2xsYXBzZWRXaWR0aCA9IGlucHV0PG51bWJlcj4oLTEpO1xyXG4gIGNvbGxhcHNlQXQgPSBpbnB1dDxudW1iZXI+KC0xKTtcclxuICBjb2xsYXBzZUF0Q29udGFpbmVyID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNvbGxhcHNlRGlzcGxheU1vZGUgPSBpbnB1dDwnZHJvcGRvd24nIHwgJ2J1dHRvbic+KCdkcm9wZG93bicpO1xyXG4gIGxhYmVsID0gaW5wdXQ8c3RyaW5nPigpO1xyXG4gIG11bHRpcGxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIG1vZGUgPSBpbnB1dDwnY29sbGFwc2VkJyB8ICdkaW5hbXljJz4oJ2RpbmFteWMnKTtcclxuICBjb2xsYXBzZWQ6IFNpZ25hbDxib29sZWFuPiA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IGN3ID0gdGhpcy5jb250YWluZXJXaWR0aCgpO1xyXG4gICAgY29uc3QgbXcgPSB0aGlzLmNvbGxhcHNlQXQoKTtcclxuICAgIHJldHVybiB0aGlzLm1vZGUoKSA9PT0gJ2NvbGxhcHNlZCcgfHwgKG13ID09PSAtMSB8fCAoY3cgPiAwICYmIG13ID4gMCAmJiBjdyA8IG13KSk7XHJcbiAgfSlcclxuXHJcblxyXG5cclxuICBwcml2YXRlIF92YWx1ZTogTmFtZVZhbHVlSXRlbTxhbnk+W10gfCBhbnkgfCBudWxsID0gW11cclxuICBzZXQgdmFsdWUodmFsdWU6IE5hbWVWYWx1ZUl0ZW08YW55PltdIHwgYW55IHwgbnVsbCkge1xyXG4gICAgbGV0IHYxID0gMDtcclxuICAgIGxldCB2MiA9IDA7XHJcbiAgICBpZiAodGhpcy5fdmFsdWU/Lmxlbmd0aCA+IDApe1xyXG4gICAgICB0aGlzLl92YWx1ZS5mb3JFYWNoKChuOiBOYW1lVmFsdWVJdGVtPGFueT4pID0+IHYxICs9IG4udmFsdWUpO1xyXG4gICAgfSAgICBcclxuICAgIGlmICh2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgdjIgPSB2YWx1ZS52YWx1ZTtcclxuICAgICAgdGhpcy5fdmFsdWUgPSBbdmFsdWVdXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodmFsdWU/Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgIHZhbHVlLmZvckVhY2goKG46IE5hbWVWYWx1ZUl0ZW08YW55PikgPT4gdjIgKz0gbi52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIGlmICh2MiAhPT0gdjEpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VkLmVtaXQodGhpcy5fdmFsdWUpOyAgICAgIFxyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgdmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgfVxyXG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5fdmFsdWUgfHwgdGhpcy5fdmFsdWU/Lmxlbmd0aCA9PT0gMDtcclxuICB9XHJcbiAgZ2V0IGVycm9yU3RhdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZ0NvbnRyb2wuZXJyb3JzICE9IG51bGwgJiYgdGhpcy5uZ0NvbnRyb2wudG91Y2hlZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBnZXQgcmVxdWlyZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XHJcbiAgfVxyXG4gIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGdldCBkaXNhYmxlZCgpIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAmJiB0aGlzLm5nQ29udHJvbC5kaXNhYmxlZCAhPSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm5nQ29udHJvbC5kaXNhYmxlZDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICBpZiAodGhpcy5mb2N1c2VkKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKVxyXG4gIGdldCBwbGFjZWhvbGRlcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcclxuICB9XHJcbiAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdmFsdWU7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBwcm9wYWdhdGVDaGFuZ2U6IChfOiBhbnkpID0+IHZvaWQgPSAoXzogYW55KSA9PiB7IH07XHJcbiAgcHJpdmF0ZSBwcm9wYWdhdGVUb3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4geyB9O1xyXG5cclxuICBASG9zdEJpbmRpbmcoKSBpZCA9IGBjaGlwcy1zZWxlY3Rvci0tJHtTeXN0ZW1VdGlscy5nZW5lcmF0ZVVVSUQoKX1gO1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZmxvYXRpbmcnKVxyXG4gIGdldCBzaG91bGRMYWJlbEZsb2F0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCB8fCAhdGhpcy5lbXB0eTtcclxuICB9XHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkQnknKSBkZXNjcmliZWRCeSA9ICcnO1xyXG5cclxuICBwcml2YXRlIHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gUmVhY3QgdG8gbWVzc2FnZSBicm9hZGNhc3RpbmdcclxuICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5nZXRNZXNzYWdlKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKChtZXNzYWdlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gQXJzVUlBcHBsaWNhdGlvbk1lc3NhZ2VzLlVJX0xBWU9VVF9DSEFOR0VEKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb2xsYXBzZUF0KCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIENsb3NlIHRoZSBvcHRpb25zIG1lbnUgaWYgb3BlblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnRhaW5lcldpZHRoKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlQ29udGFpbmVyV2lkdGgoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0sIDI1MCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgY29udGFpbmVyIHdpZHRoXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVDb250YWluZXJXaWR0aCgpIHtcclxuICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmNvbnRhaW5lcklkKTtcclxuICAgIGlmIChlbGVtICYmIGVsZW0uY2xpZW50V2lkdGggPiAwKSB7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyV2lkdGguc2V0KFxyXG4gICAgICAgIHRoaXMuY29sbGFwc2VBdENvbnRhaW5lcigpXHJcbiAgICAgICAgICA/IChlbGVtPy5jbGllbnRXaWR0aCA/PyAtMSlcclxuICAgICAgICAgIDogKHdpbmRvdy5pbm5lcldpZHRoID8/IC0xKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy52YWx1ZSAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wYWdhdGVUb3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICB0aGlzLmRlc2NyaWJlZEJ5ID0gaWRzLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIGlmICghU3lzdGVtVXRpbHMuaXNCcm93c2VyKCkpIHJldHVybjtcclxuICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5pZCk7XHJcbiAgICBpZiAoZWxlbSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KGVsZW0sICdkaXNhYmxlZCcsIGlzRGlzYWJsZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Db250YWluZXJDbGljaygpIHtcclxuICAgIGlmICghdGhpcy5mb2N1c2VkKSB7XHJcbiAgICAgIGlmICghU3lzdGVtVXRpbHMuaXNCcm93c2VyKCkpIHJldHVybjtcclxuICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmlkKTtcclxuICAgICAgaWYgKGVsZW0pIHtcclxuICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVUb3VjaGVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHNlbGVjdGlvblxyXG4gICAqIEBwYXJhbSBlIDogdGhlIGNsaWNrIGV2ZW50XHJcbiAgICovXHJcbiAgY2xlYXIoZTogRXZlbnQpIHtcclxuICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3Qgc2luZ2xlIGVsZW1lbnRcclxuICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIHNlbGVjdFxyXG4gICAqL1xyXG4gIHNlbGVjdChpdGVtOiBOYW1lVmFsdWVJdGVtPGFueT4gfCBudWxsKSB7XHJcbiAgICBpZiAoaXRlbSkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gW2l0ZW1dO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBbaWRdPVwiY29udGFpbmVySWRcIiBjbGFzcz1cImNoaXBzLWNvbnRhaW5lclwiPlxyXG4gICAgQGlmKGNvbnRhaW5lcldpZHRoKCkgPiAwKSB7XHJcbiAgICBAaWYoY29sbGFwc2VkKCkpIHtcclxuICAgIEBpZihjb2xsYXBzZURpc3BsYXlNb2RlKCkgPT09ICdkcm9wZG93bicpIHtcclxuICAgIDxtYXQtZm9ybS1maWVsZCBbbmdTdHlsZV09XCJ7J21pbi13aWR0aCc6IGNvbGxhcHNlZFdpZHRoKCkgPiAwID8gY29sbGFwc2VkV2lkdGgoKSsnLnB4JyA6ICcxMDAlJ31cIlxyXG4gICAgICAgIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cclxuICAgICAgICBAaWYobGFiZWwoKSkge1xyXG4gICAgICAgIDxtYXQtbGFiZWw+e3tsYWJlbCgpfX08L21hdC1sYWJlbD5cclxuICAgICAgICB9XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIG5hbWU9XCJ2YWx1ZVwiIFttdWx0aXBsZV09XCJtdWx0aXBsZSgpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICBAaWYgKHZhbHVlICYmICh2YWx1ZS5sZW5ndGggfHwgMCkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB7e3ZhbHVlWzBdLnNob3J0TmFtZSA/PyB2YWx1ZVswXS5uYW1lfX1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBpZiAodmFsdWUgJiYgKHZhbHVlLmxlbmd0aCB8fCAwKSA+IDEpIHtcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sbGFwc2VkLWFkZGl0aW9uYWwtc2VsZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgKCt7eyh2YWx1ZS5sZW5ndGggfHwgMCkgLSAxfX0ge3t2YWx1ZS5sZW5ndGggPT09IDIgPyAnYWx0cm8nIDogJ2FsdHJpJ319KVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICAgICAgQGZvciAobyBvZiBvcHRpb25zKCk7IHRyYWNrIG8udmFsdWUpIHtcclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm9cIj5cclxuICAgICAgICAgICAgICAgIHt7by5uYW1lfX0gXHJcbiAgICAgICAgICAgICAgICBAaWYoby5iYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICAmbmJzcDsgKHt7by5iYWd9fSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICBAaWYgKHZhbHVlICYmICh2YWx1ZS5sZW5ndGggfHwgMCkgPiAwKSB7XHJcbiAgICAgICAgPGJ1dHRvbiBtYXRTdWZmaXggdGFiaW5kZXg9XCItMVwiIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiIChjbGljayk9XCJjbGVhcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfVxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH0gQGVsc2Uge1xyXG5cclxuICAgIDxidXR0b24tc2VsZWN0b3IgW2xhYmVsXT1cImxhYmVsKClcIiBbb3B0aW9uc109XCJvcHRpb25zKClcIiBbd2lkdGhdPVwiY29sbGFwc2VkV2lkdGgoKVwiIFsobmdNb2RlbCldPVwidmFsdWVcIlxyXG4gICAgICAgIG5hbWU9XCJ2YWx1ZVwiPjwvYnV0dG9uLXNlbGVjdG9yPlxyXG5cclxuICAgIH1cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgPG1hdC1jaGlwLWxpc3Rib3ggW211bHRpcGxlXT1cIm11bHRpcGxlKClcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgbmFtZT1cInZhbHVlXCI+XHJcbiAgICAgICAgQGZvciAobyBvZiBvcHRpb25zKCk7IHRyYWNrIG8udmFsdWUpIHtcclxuICAgICAgICA8bWF0LWNoaXAtb3B0aW9uIFttYXRCYWRnZV09XCJvLmJhZ1wiIFt2YWx1ZV09XCJvXCI+e3tvLnNob3J0TmFtZSA/PyBvLm5hbWV9fTwvbWF0LWNoaXAtb3B0aW9uPlxyXG4gICAgICAgIH1cclxuICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cclxuICAgIH1cclxuICAgIH1cclxuPC9kaXY+Il19
@@ -10,18 +10,17 @@ import { ExtendedModule } from '@ngbracket/ngx-layout/extended';
10
10
  import { NgStyle } from '@angular/common';
11
11
  import { DialogService } from '@arsedizioni/ars-utils/ui';
12
12
  import * as i0 from "@angular/core";
13
- import * as i1 from "@ngbracket/ngx-layout/extended";
14
- import * as i2 from "@ngbracket/ngx-layout/flex";
15
- import * as i3 from "@angular/material/button";
16
- import * as i4 from "@angular/material/tooltip";
13
+ import * as i1 from "@ngbracket/ngx-layout/flex";
14
+ import * as i2 from "@angular/material/button";
15
+ import * as i3 from "@angular/material/tooltip";
17
16
  export class FilePreviewComponent {
18
17
  constructor() {
18
+ this.height = -1;
19
19
  this.unsubscribe = new Subject();
20
20
  this.httpClient = inject(HttpClient);
21
21
  this.dialogService = inject(DialogService);
22
22
  this.dialogData = inject(MAT_DIALOG_DATA);
23
23
  this.url = signal(null);
24
- this.height = signal(0);
25
24
  }
26
25
  ngOnInit() {
27
26
  if (this.dialogData) {
@@ -44,9 +43,8 @@ export class FilePreviewComponent {
44
43
  .pipe(takeUntil(this.unsubscribe), debounceTime(500))
45
44
  .subscribe(() => {
46
45
  // Update view
47
- this.updateView();
46
+ this.resize();
48
47
  });
49
- this.adjustView();
50
48
  }
51
49
  ngOnDestroy() {
52
50
  this.unsubscribe.next();
@@ -54,23 +52,24 @@ export class FilePreviewComponent {
54
52
  this.url.set(null);
55
53
  }
56
54
  /**
57
- * Adjust view
58
- */
59
- adjustView() {
55
+ * Resize
56
+ */
57
+ resize() {
60
58
  setTimeout(() => {
61
- this.updateView();
59
+ let elem = document.getElementById('filepreview-scrollable');
60
+ if (elem) {
61
+ const height = this.dialogService.getCurrentDialogScrollableHeight(['filepreview-fixed'], window.innerHeight);
62
+ if (height != this.height) {
63
+ elem.setAttribute('style', 'height:' + height + 'px !important;max-height:' + height + 'px !important');
64
+ this.height = height;
65
+ this.resize();
66
+ }
67
+ }
68
+ else {
69
+ this.resize();
70
+ }
62
71
  }, 100);
63
72
  }
64
- /**
65
- * Update view
66
- */
67
- updateView() {
68
- // Update router height
69
- let a = window.innerHeight;
70
- if (!a || a === 0)
71
- this.adjustView();
72
- this.height.set(a - 62);
73
- }
74
73
  /**
75
74
  * Download manually
76
75
  */
@@ -92,11 +91,11 @@ export class FilePreviewComponent {
92
91
  "<p class='small' style='padding-left:10px'>Fate riferimento alla documentazione specifica del vostro browser.</p>", "Problemi con lee anteprime dei file PDF?");
93
92
  }
94
93
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: FilePreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
95
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: FilePreviewComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<div mat-dialog-content class=\"filepreview\" [ngStyle]=\"{'max-height.px': height()}\">\r\n <div class=\"content\">\r\n @if (!url) {\r\n <div class=\"loading\" [ngStyle]=\"{'height.px': height()}\">Caricamento in corso...</div>\r\n }\r\n @if (url) {\r\n <iframe class=\"iframe\" onload=\"scrollTo(0,0)\" [src]=\"url() | safeUrl\"\r\n [ngStyle]=\"{'height.px': height()}\">\r\n </iframe>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"50\" fxLayoutAlign=\"start\">\r\n <button mat-button color=\"primary\" (click)=\"troubles()\"\r\n matTooltip=\"Fai click se non riesci a visualizzare l'anteprima dei file PDF\">Problemi con i PDF?</button>\r\n </div>\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\r\n <button mat-button color=\"primary\" (click)=\"download()\">Scarica</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</div>", styles: [".filepreview{padding:0}.filepreview .content{height:100%;width:100%;overflow:hidden;background-color:var(--ars-filepreview-content-background-color, aliceblue)}.filepreview .content .loading{padding:20px}.filepreview .content .iframe{width:100%;border:0}@media (prefers-color-scheme: dark){.filepreview .content{background-color:var(--ars-filepreview-content-background-color, aliceblue)}}\n"], dependencies: [{ kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: i1.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { 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: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "pipe", type: SafeUrlPipe, name: "safeUrl" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
94
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: FilePreviewComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<div mat-dialog-content class=\"filepreview\" id=\"filepreview-scrollable\">\r\n <div class=\"content\">\r\n @if (!url) {\r\n <div class=\"loading\">Caricamento in corso...</div>\r\n } @else {\r\n <iframe class=\"iframe\" onload=\"scrollTo(0,0)\" [src]=\"url() | safeUrl\"></iframe>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-actions id=\"filepreview-fixed\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"50\">\r\n <button mat-button color=\"primary\" (click)=\"troubles()\"\r\n matTooltip=\"Fai click se non riesci a visualizzare l'anteprima dei file PDF\">Problemi con i PDF?</button>\r\n </div>\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\r\n <button mat-button color=\"primary\" (click)=\"download()\">Scarica</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</div>", styles: [".filepreview{padding:0}.filepreview .content{height:100%;width:100%;overflow:hidden;background-color:var(--ars-filepreview-content-background-color, aliceblue)}.filepreview .content .loading{width:100%;height:100%;padding:20px}.filepreview .content .iframe{width:100%;height:100%;border:0}@media (prefers-color-scheme: dark){.filepreview .content{background-color:var(--ars-filepreview-content-background-color, aliceblue)}}\n"], dependencies: [{ kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "pipe", type: SafeUrlPipe, name: "safeUrl" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
96
95
  }
97
96
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: FilePreviewComponent, decorators: [{
98
97
  type: Component,
99
98
  args: [{ standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatDialogContent, NgStyle, ExtendedModule, MatDialogActions, FlexModule, MatButtonModule, MatTooltipModule,
100
- MatDialogClose, SafeUrlPipe], template: "<div mat-dialog-content class=\"filepreview\" [ngStyle]=\"{'max-height.px': height()}\">\r\n <div class=\"content\">\r\n @if (!url) {\r\n <div class=\"loading\" [ngStyle]=\"{'height.px': height()}\">Caricamento in corso...</div>\r\n }\r\n @if (url) {\r\n <iframe class=\"iframe\" onload=\"scrollTo(0,0)\" [src]=\"url() | safeUrl\"\r\n [ngStyle]=\"{'height.px': height()}\">\r\n </iframe>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"50\" fxLayoutAlign=\"start\">\r\n <button mat-button color=\"primary\" (click)=\"troubles()\"\r\n matTooltip=\"Fai click se non riesci a visualizzare l'anteprima dei file PDF\">Problemi con i PDF?</button>\r\n </div>\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\r\n <button mat-button color=\"primary\" (click)=\"download()\">Scarica</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</div>", styles: [".filepreview{padding:0}.filepreview .content{height:100%;width:100%;overflow:hidden;background-color:var(--ars-filepreview-content-background-color, aliceblue)}.filepreview .content .loading{padding:20px}.filepreview .content .iframe{width:100%;border:0}@media (prefers-color-scheme: dark){.filepreview .content{background-color:var(--ars-filepreview-content-background-color, aliceblue)}}\n"] }]
99
+ MatDialogClose, SafeUrlPipe], template: "<div mat-dialog-content class=\"filepreview\" id=\"filepreview-scrollable\">\r\n <div class=\"content\">\r\n @if (!url) {\r\n <div class=\"loading\">Caricamento in corso...</div>\r\n } @else {\r\n <iframe class=\"iframe\" onload=\"scrollTo(0,0)\" [src]=\"url() | safeUrl\"></iframe>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-actions id=\"filepreview-fixed\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"50\">\r\n <button mat-button color=\"primary\" (click)=\"troubles()\"\r\n matTooltip=\"Fai click se non riesci a visualizzare l'anteprima dei file PDF\">Problemi con i PDF?</button>\r\n </div>\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\r\n <button mat-button color=\"primary\" (click)=\"download()\">Scarica</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</div>", styles: [".filepreview{padding:0}.filepreview .content{height:100%;width:100%;overflow:hidden;background-color:var(--ars-filepreview-content-background-color, aliceblue)}.filepreview .content .loading{width:100%;height:100%;padding:20px}.filepreview .content .iframe{width:100%;height:100%;border:0}@media (prefers-color-scheme: dark){.filepreview .content{background-color:var(--ars-filepreview-content-background-color, aliceblue)}}\n"] }]
101
100
  }] });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy91aS5hcHBsaWNhdGlvbi91aS9jb21wb25lbnRzL2ZpbGUtcHJldmlldy9maWxlLXByZXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL3VpLmFwcGxpY2F0aW9uL3VpL2NvbXBvbmVudHMvZmlsZS1wcmV2aWV3L2ZpbGUtcHJldmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQXFCLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7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LElBQUksQ0FDckIsNEhBQTRIO1lBQzVILDhCQUE4QjtZQUM5Qiw4SEFBOEg7WUFDOUgsaUNBQWlDO1lBQ2pDLG1IQUFtSDtZQUNuSCxnQ0FBZ0M7WUFDaEMsOEZBQThGO1lBQzlGLDBCQUEwQjtZQUMxQixtSEFBbUgsRUFDbkgsMENBQTBDLENBQzNDLENBQUE7SUFDSCxDQUFDOzhHQTFGVSxvQkFBb0I7a0dBQXBCLG9CQUFvQix3RUMzQmpDLG1oQ0F1Qk0saWNEQ1EsZ0JBQWdCLHlHQUFFLE9BQU8sMEVBQUUsY0FBYyxtaUJBQUcsZ0JBQWdCLDJIQUFFLFVBQVUsdTZFQUFFLGVBQWUsMk5BQUUsZ0JBQWdCLDZUQUNuSCxjQUFjLGdMQUFFLFdBQVc7OzJGQUVwQixvQkFBb0I7a0JBUmhDLFNBQVM7aUNBR00sSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGdCQUFnQjt3QkFDbkgsY0FBYyxFQUFFLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dDb250ZW50LCBNYXREaWFsb2dBY3Rpb25zLCBNYXREaWFsb2dDbG9zZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IGZyb21FdmVudCwgdGFrZVVudGlsLCBTdWJqZWN0LCBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2FmZVVybFBpcGUgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IEZsZXhNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQvZmxleCc7XHJcbmltcG9ydCB7IEV4dGVuZGVkTW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2V4dGVuZGVkJztcclxuaW1wb3J0IHsgTmdTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVByZXZpZXdEaWFsb2dEYXRhIHtcclxuICB1cmw/OiBzdHJpbmcgfCBudWxsO1xyXG4gIGVtYmVkPzogYm9vbGVhbiB8IG51bGw7XHJcbiAgYXV0aFRva2VuPzogc3RyaW5nIHwgbnVsbDtcclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtcHJldmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9maWxlLXByZXZpZXcuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIGltcG9ydHM6IFtNYXREaWFsb2dDb250ZW50LCBOZ1N0eWxlLCBFeHRlbmRlZE1vZHVsZSwgIE1hdERpYWxvZ0FjdGlvbnMsIEZsZXhNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0VG9vbHRpcE1vZHVsZSwgXHJcbiAgICAgIE1hdERpYWxvZ0Nsb3NlLCBTYWZlVXJsUGlwZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbGVQcmV2aWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBwcml2YXRlIHVuc3Vic2NyaWJlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIGh0dHBDbGllbnQgPSBpbmplY3QoSHR0cENsaWVudCk7XHJcbiAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCBkaWFsb2dEYXRhIDogRmlsZVByZXZpZXdEaWFsb2dEYXRhID0gaW5qZWN0KE1BVF9ESUFMT0dfREFUQSk7ICBcclxuICBwcm90ZWN0ZWQgdXJsID0gc2lnbmFsKG51bGwpO1xyXG4gIHByb3RlY3RlZCBoZWlnaHQgPSBzaWduYWw8bnVtYmVyPigwKTtcclxuXHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKHRoaXMuZGlhbG9nRGF0YSkge1xyXG4gICAgICBpZiAoIXRoaXMuZGlhbG9nRGF0YS5lbWJlZCkge1xyXG4gICAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGEudXJsLCAgICAgICAgXHJcbiAgICAgICAgICB7IFxyXG4gICAgICAgICAgICBoZWFkZXJzOlxyXG4gICAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YS5hdXRoVG9rZW5cclxuICAgICAgICAgICAgICA/IG5ldyBIdHRwSGVhZGVycygpLnNldChcIkF1dGhvcml6YXRpb25cIiwgdGhpcy5kaWFsb2dEYXRhLmF1dGhUb2tlbilcclxuICAgICAgICAgICAgICA6IG5ldyBIdHRwSGVhZGVycygpLCAgXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNldChVUkwuY3JlYXRlT2JqZWN0VVJMKHJlcykpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51cmwuc2V0KCdodHRwczovL3ZpZXcub2ZmaWNlYXBwcy5saXZlLmNvbS9vcC9lbWJlZC5hc3B4P3NyYz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZGlhbG9nRGF0YS51cmwpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlYWN0IHRvIHdpbmRvdyBzaXplIGNoYW5nZVxyXG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSwgZGVib3VuY2VUaW1lKDUwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIC8vIFVwZGF0ZSB2aWV3XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5hZGp1c3RWaWV3KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgIHRoaXMudXJsLnNldChudWxsKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogQWRqdXN0IHZpZXdcclxuICAqL1xyXG4gIGFkanVzdFZpZXcoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHZpZXdcclxuICAgKi9cclxuICB1cGRhdGVWaWV3KCkge1xyXG4gICAgLy8gVXBkYXRlIHJvdXRlciBoZWlnaHRcclxuICAgIGxldCBhID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgaWYgKCFhIHx8IGEgPT09IDApIHRoaXMuYWRqdXN0VmlldygpO1xyXG4gICAgdGhpcy5oZWlnaHQuc2V0KGEgLSA2Mik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEb3dubG9hZCBtYW51YWxseVxyXG4gICAqL1xyXG4gIGRvd25sb2FkKCkge1xyXG4gICAgd2luZG93Lm9wZW4odGhpcy51cmwoKSwgJ19ibGFuaycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJvdWJsZXMgd2l0aCBwZGY/XHJcbiAgICovXHJcbiAgdHJvdWJsZXMoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mbyhcclxuICAgICAgXCI8cD5TZSBub24gcmllc2NpIGEgdmlzdWFsaXp6YXJlIGwnYW50ZXByaW1hIGRlaSBmaWxlIFBERiBwcm9iYWJpbG1lbnRlIGRldmkgYWJpbGl0YXJlIHVuJ2ltcG9zdGF6aW9uZSBkZWwgdHVvIGJyb3dzZXIuPC9wPlwiICsgXHJcbiAgICAgIFwiPGI+UGVyIEdvb2dsZSBDaHJvbWU8L2I+PGJyPlwiICtcclxuICAgICAgXCI8cCBjbGFzcz0nc21hbGwnIHN0eWxlPSdwYWRkaW5nLWxlZnQ6MTBweCc+PGk+aW1wb3N0YXppb25pID4gcHJpdmFjeSBlIHNpY3VyZXp6YSA+IGltcG9zdGF6aW9uaSBzaXRvID4gZG9jdW1lbnRpIFBERjwvaT48L3A+XCIgK1xyXG4gICAgICBcIjxiPlBlciBNaWNyb3NvZnQgQ2hyb21lPC9iPjxicj5cIiArXHJcbiAgICAgIFwiPHAgY2xhc3M9J3NtYWxsJyBzdHlsZT0ncGFkZGluZy1sZWZ0OjEwcHgnPjxpPmltcG9zdGF6aW9uaSA+IGNvb2tpZSBlIGF1dG9yaXp6YXppb25pIHNpdG8gPiBkb2N1bWVudGkgUERGPC9pPjwvcD5cIiArXHJcbiAgICAgIFwiPGI+UGVyIE1vemlsbGEgRmlyZWZveDwvYj48YnI+XCIgK1xyXG4gICAgICBcIjxwIGNsYXNzPSdzbWFsbCcgc3R5bGU9J3BhZGRpbmctbGVmdDoxMHB4Jz48aT5pbXBvc3RhemlvbmkgPiBnZW5lcmFsZSA+IGFwcGxpY2F6aW9uaTwvaT48L3A+XCIgKyBcclxuICAgICAgXCI8Yj5BbHRyaSBicm93c2VyPC9iPjxicj5cIiArXHJcbiAgICAgIFwiPHAgY2xhc3M9J3NtYWxsJyBzdHlsZT0ncGFkZGluZy1sZWZ0OjEwcHgnPkZhdGUgcmlmZXJpbWVudG8gYWxsYSBkb2N1bWVudGF6aW9uZSBzcGVjaWZpY2EgZGVsIHZvc3RybyBicm93c2VyLjwvcD5cIixcclxuICAgICAgXCJQcm9ibGVtaSBjb24gbGVlIGFudGVwcmltZSBkZWkgZmlsZSBQREY/XCJcclxuICAgIClcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuIiwiPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJmaWxlcHJldmlld1wiIFtuZ1N0eWxlXT1cInsnbWF4LWhlaWdodC5weCc6IGhlaWdodCgpfVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICBAaWYgKCF1cmwpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nXCIgW25nU3R5bGVdPVwieydoZWlnaHQucHgnOiBoZWlnaHQoKX1cIj5DYXJpY2FtZW50byBpbiBjb3Jzby4uLjwvZGl2PlxyXG4gICAgfVxyXG4gICAgQGlmICh1cmwpIHtcclxuICAgIDxpZnJhbWUgY2xhc3M9XCJpZnJhbWVcIiBvbmxvYWQ9XCJzY3JvbGxUbygwLDApXCIgIFtzcmNdPVwidXJsKCkgfCBzYWZlVXJsXCJcclxuICAgICAgW25nU3R5bGVdPVwieydoZWlnaHQucHgnOiBoZWlnaHQoKX1cIj5cclxuICAgIDwvaWZyYW1lPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnM+XHJcbiAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4RmlsbD5cclxuICAgIDxkaXYgZnhGbGV4PVwiNTBcIiBmeExheW91dEFsaWduPVwic3RhcnRcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJ0cm91YmxlcygpXCJcclxuICAgICAgICBtYXRUb29sdGlwPVwiRmFpIGNsaWNrIHNlIG5vbiByaWVzY2kgYSB2aXN1YWxpenphcmUgbCdhbnRlcHJpbWEgZGVpIGZpbGUgUERGXCI+UHJvYmxlbWkgY29uIGkgUERGPzwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGZ4RmxleD1cIjUwXCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImRvd25sb2FkKClcIj5TY2FyaWNhPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJ0cnVlXCIgY29sb3I9XCJwcmltYXJ5XCI+Q2hpdWRpPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy91aS5hcHBsaWNhdGlvbi91aS9jb21wb25lbnRzL2ZpbGUtcHJldmlldy9maWxlLXByZXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL3VpLmFwcGxpY2F0aW9uL3VpL2NvbXBvbmVudHMvZmlsZS1wcmV2aWV3L2ZpbGUtcHJldmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQXFCLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7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Q0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsNEhBQTRIO1lBQzVILDhCQUE4QjtZQUM5Qiw4SEFBOEg7WUFDOUgsaUNBQWlDO1lBQ2pDLG1IQUFtSDtZQUNuSCxnQ0FBZ0M7WUFDaEMsOEZBQThGO1lBQzlGLDBCQUEwQjtZQUMxQixtSEFBbUgsRUFDbkgsMENBQTBDLENBQzNDLENBQUE7SUFDSCxDQUFDOzhHQTlGVSxvQkFBb0I7a0dBQXBCLG9CQUFvQix3RUMzQmpDLGc4QkFvQk0sb2VESU0sZ0JBQWdCLHdHQUFXLGNBQWMsK0JBQUUsZ0JBQWdCLDJIQUFFLFVBQVUsdTZFQUFFLGVBQWUsMk5BQUUsZ0JBQWdCLDZUQUNsSCxjQUFjLGdMQUFFLFdBQVc7OzJGQUVsQixvQkFBb0I7a0JBUmhDLFNBQVM7aUNBR0ksSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGdCQUFnQjt3QkFDbEgsY0FBYyxFQUFFLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dDb250ZW50LCBNYXREaWFsb2dBY3Rpb25zLCBNYXREaWFsb2dDbG9zZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IGZyb21FdmVudCwgdGFrZVVudGlsLCBTdWJqZWN0LCBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2FmZVVybFBpcGUgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IEZsZXhNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQvZmxleCc7XHJcbmltcG9ydCB7IEV4dGVuZGVkTW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2V4dGVuZGVkJztcclxuaW1wb3J0IHsgTmdTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVByZXZpZXdEaWFsb2dEYXRhIHtcclxuICB1cmw/OiBzdHJpbmcgfCBudWxsO1xyXG4gIGVtYmVkPzogYm9vbGVhbiB8IG51bGw7XHJcbiAgYXV0aFRva2VuPzogc3RyaW5nIHwgbnVsbDtcclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLXByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZpbGUtcHJldmlldy5jb21wb25lbnQuc2NzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgaW1wb3J0czogW01hdERpYWxvZ0NvbnRlbnQsIE5nU3R5bGUsIEV4dGVuZGVkTW9kdWxlLCBNYXREaWFsb2dBY3Rpb25zLCBGbGV4TW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBNYXREaWFsb2dDbG9zZSwgU2FmZVVybFBpcGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlUHJldmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgcHJpdmF0ZSBoZWlnaHQ6IG51bWJlciA9IC0xO1xyXG4gIHByaXZhdGUgdW5zdWJzY3JpYmU6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgaHR0cENsaWVudCA9IGluamVjdChIdHRwQ2xpZW50KTtcclxuICBwcml2YXRlIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XHJcbiAgcHJvdGVjdGVkIGRpYWxvZ0RhdGE6IEZpbGVQcmV2aWV3RGlhbG9nRGF0YSA9IGluamVjdChNQVRfRElBTE9HX0RBVEEpO1xyXG4gIHByb3RlY3RlZCB1cmwgPSBzaWduYWwobnVsbCk7XHJcblxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEpIHtcclxuICAgICAgaWYgKCF0aGlzLmRpYWxvZ0RhdGEuZW1iZWQpIHtcclxuICAgICAgICB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dEYXRhLnVybCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaGVhZGVyczpcclxuICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGEuYXV0aFRva2VuXHJcbiAgICAgICAgICAgICAgICA/IG5ldyBIdHRwSGVhZGVycygpLnNldChcIkF1dGhvcml6YXRpb25cIiwgdGhpcy5kaWFsb2dEYXRhLmF1dGhUb2tlbilcclxuICAgICAgICAgICAgICAgIDogbmV3IEh0dHBIZWFkZXJzKCksXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cmwuc2V0KFVSTC5jcmVhdGVPYmplY3RVUkwocmVzKSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVybC5zZXQoJ2h0dHBzOi8vdmlldy5vZmZpY2VhcHBzLmxpdmUuY29tL29wL2VtYmVkLmFzcHg/c3JjPScgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5kaWFsb2dEYXRhLnVybCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVhY3QgdG8gd2luZG93IHNpemUgY2hhbmdlXHJcbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpLCBkZWJvdW5jZVRpbWUoNTAwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgLy8gVXBkYXRlIHZpZXdcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgIHRoaXMudXJsLnNldChudWxsKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICogUmVzaXplIFxyXG4gKi9cclxuICBwcml2YXRlIHJlc2l6ZSgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlcHJldmlldy1zY3JvbGxhYmxlJyk7XHJcbiAgICAgIGlmIChlbGVtKSB7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmdldEN1cnJlbnREaWFsb2dTY3JvbGxhYmxlSGVpZ2h0KFxyXG4gICAgICAgICAgWydmaWxlcHJldmlldy1maXhlZCddLFxyXG4gICAgICAgICAgd2luZG93LmlubmVySGVpZ2h0XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaGVpZ2h0ICE9IHRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnaGVpZ2h0OicgKyBoZWlnaHQgKyAncHggIWltcG9ydGFudDttYXgtaGVpZ2h0OicgKyBoZWlnaHQgKyAncHggIWltcG9ydGFudCcpO1xyXG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRG93bmxvYWQgbWFudWFsbHlcclxuICAgKi9cclxuICBkb3dubG9hZCgpIHtcclxuICAgIHdpbmRvdy5vcGVuKHRoaXMudXJsKCksICdfYmxhbmsnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyb3VibGVzIHdpdGggcGRmP1xyXG4gICAqL1xyXG4gIHRyb3VibGVzKCkge1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmluZm8oXHJcbiAgICAgIFwiPHA+U2Ugbm9uIHJpZXNjaSBhIHZpc3VhbGl6emFyZSBsJ2FudGVwcmltYSBkZWkgZmlsZSBQREYgcHJvYmFiaWxtZW50ZSBkZXZpIGFiaWxpdGFyZSB1bidpbXBvc3RhemlvbmUgZGVsIHR1byBicm93c2VyLjwvcD5cIiArXHJcbiAgICAgIFwiPGI+UGVyIEdvb2dsZSBDaHJvbWU8L2I+PGJyPlwiICtcclxuICAgICAgXCI8cCBjbGFzcz0nc21hbGwnIHN0eWxlPSdwYWRkaW5nLWxlZnQ6MTBweCc+PGk+aW1wb3N0YXppb25pID4gcHJpdmFjeSBlIHNpY3VyZXp6YSA+IGltcG9zdGF6aW9uaSBzaXRvID4gZG9jdW1lbnRpIFBERjwvaT48L3A+XCIgK1xyXG4gICAgICBcIjxiPlBlciBNaWNyb3NvZnQgQ2hyb21lPC9iPjxicj5cIiArXHJcbiAgICAgIFwiPHAgY2xhc3M9J3NtYWxsJyBzdHlsZT0ncGFkZGluZy1sZWZ0OjEwcHgnPjxpPmltcG9zdGF6aW9uaSA+IGNvb2tpZSBlIGF1dG9yaXp6YXppb25pIHNpdG8gPiBkb2N1bWVudGkgUERGPC9pPjwvcD5cIiArXHJcbiAgICAgIFwiPGI+UGVyIE1vemlsbGEgRmlyZWZveDwvYj48YnI+XCIgK1xyXG4gICAgICBcIjxwIGNsYXNzPSdzbWFsbCcgc3R5bGU9J3BhZGRpbmctbGVmdDoxMHB4Jz48aT5pbXBvc3RhemlvbmkgPiBnZW5lcmFsZSA+IGFwcGxpY2F6aW9uaTwvaT48L3A+XCIgK1xyXG4gICAgICBcIjxiPkFsdHJpIGJyb3dzZXI8L2I+PGJyPlwiICtcclxuICAgICAgXCI8cCBjbGFzcz0nc21hbGwnIHN0eWxlPSdwYWRkaW5nLWxlZnQ6MTBweCc+RmF0ZSByaWZlcmltZW50byBhbGxhIGRvY3VtZW50YXppb25lIHNwZWNpZmljYSBkZWwgdm9zdHJvIGJyb3dzZXIuPC9wPlwiLFxyXG4gICAgICBcIlByb2JsZW1pIGNvbiBsZWUgYW50ZXByaW1lIGRlaSBmaWxlIFBERj9cIlxyXG4gICAgKVxyXG4gIH1cclxufVxyXG5cclxuXHJcblxyXG4iLCI8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBjbGFzcz1cImZpbGVwcmV2aWV3XCIgIGlkPVwiZmlsZXByZXZpZXctc2Nyb2xsYWJsZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICBAaWYgKCF1cmwpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nXCI+Q2FyaWNhbWVudG8gaW4gY29yc28uLi48L2Rpdj5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgPGlmcmFtZSBjbGFzcz1cImlmcmFtZVwiIG9ubG9hZD1cInNjcm9sbFRvKDAsMClcIiAgW3NyY109XCJ1cmwoKSB8IHNhZmVVcmxcIj48L2lmcmFtZT5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGlkPVwiZmlsZXByZXZpZXctZml4ZWRcIj5cclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4RmlsbD5cclxuICAgIDxkaXYgZnhGbGV4PVwiNTBcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJ0cm91YmxlcygpXCJcclxuICAgICAgICBtYXRUb29sdGlwPVwiRmFpIGNsaWNrIHNlIG5vbiByaWVzY2kgYSB2aXN1YWxpenphcmUgbCdhbnRlcHJpbWEgZGVpIGZpbGUgUERGXCI+UHJvYmxlbWkgY29uIGkgUERGPzwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGZ4RmxleD1cIjUwXCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImRvd25sb2FkKClcIj5TY2FyaWNhPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJ0cnVlXCIgY29sb3I9XCJwcmltYXJ5XCI+Q2hpdWRpPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19