@arsedizioni/ars-utils 18.2.364 → 18.2.370

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 (97) hide show
  1. package/clipper.ui/ui/document-menu/document-menu.component.d.ts +1 -1
  2. package/esm2022/clipper.common/common/common.module.mjs +4 -4
  3. package/esm2022/clipper.common/common/definitions.mjs +11 -11
  4. package/esm2022/clipper.common/common/interceptors/auth.interceptor.mjs +3 -3
  5. package/esm2022/clipper.common/common/services/clipper.service.mjs +17 -17
  6. package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +5 -5
  7. package/esm2022/clipper.ui/ui/document/document.component.mjs +3 -3
  8. package/esm2022/clipper.ui/ui/document-index/document-index.component.mjs +3 -3
  9. package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +3 -3
  10. package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +6 -6
  11. package/esm2022/clipper.ui/ui/references/references.component.mjs +5 -5
  12. package/esm2022/clipper.ui/ui/search-calendar/search-calendar.component.mjs +3 -3
  13. package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +5 -5
  14. package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +3 -3
  15. package/esm2022/clipper.ui/ui/search-free-text-help/search-free-text-help.component.mjs +3 -3
  16. package/esm2022/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.mjs +3 -3
  17. package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +4 -4
  18. package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +3 -3
  19. package/esm2022/core/core.module.mjs +8 -8
  20. package/esm2022/core/dateFnsAdapter.mjs +3 -3
  21. package/esm2022/core/directives/autoFocusDirective.mjs +3 -3
  22. package/esm2022/core/directives/changeDateIntervalDirective.mjs +3 -3
  23. package/esm2022/core/directives/copyClipboardDirective.mjs +4 -4
  24. package/esm2022/core/directives/validators.mjs +33 -33
  25. package/esm2022/core/pipes/format.pipe.mjs +4 -4
  26. package/esm2022/core/pipes/replace.pipe.mjs +4 -4
  27. package/esm2022/core/pipes/safe-html.pipe.mjs +4 -4
  28. package/esm2022/core/pipes/safe-url.pipe.mjs +4 -4
  29. package/esm2022/core/pipes/search-callback.pipe.mjs +3 -3
  30. package/esm2022/core/pipes/search-filter.pipe.mjs +4 -4
  31. package/esm2022/core/services/broadcast.service.mjs +3 -3
  32. package/esm2022/core/services/environment.service.mjs +3 -3
  33. package/esm2022/core/services/screen.service.mjs +3 -3
  34. package/esm2022/core/services/theme.service.mjs +3 -3
  35. package/esm2022/help/components/help-viewer/help-viewer.component.mjs +7 -7
  36. package/esm2022/help/help.module.mjs +4 -4
  37. package/esm2022/help/services/help.service.mjs +3 -3
  38. package/esm2022/support.common/common/common.module.mjs +4 -4
  39. package/esm2022/support.common/common/interceptors/auth.interceptor.mjs +41 -35
  40. package/esm2022/support.common/common/messages.mjs +2 -1
  41. package/esm2022/support.common/common/services/support.service.mjs +27 -69
  42. package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +3 -3
  43. package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +4 -4
  44. package/esm2022/tinymce/full-screen-editor/full-screen-editor.component.mjs +3 -3
  45. package/esm2022/tinymce/tinymce.module.mjs +4 -4
  46. package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +3 -3
  47. package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +4 -4
  48. package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +4 -4
  49. package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +3 -3
  50. package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +3 -3
  51. package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +3 -3
  52. package/esm2022/ui/ui/dialogs/toast/toast.component.mjs +3 -3
  53. package/esm2022/ui/ui/paginatorIntl.mjs +3 -3
  54. package/esm2022/ui/ui/services/dialog.service.mjs +3 -3
  55. package/esm2022/ui/ui/services/ui.service.mjs +3 -3
  56. package/esm2022/ui/ui/ui.module.mjs +4 -4
  57. package/esm2022/ui.application/ui/components/button-selector/button-selector.component.mjs +3 -3
  58. package/esm2022/ui.application/ui/components/button-toggle/button-toggle.component.mjs +3 -3
  59. package/esm2022/ui.application/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +3 -3
  60. package/esm2022/ui.application/ui/components/chips-selector/chips-selector.component.mjs +3 -3
  61. package/esm2022/ui.application/ui/components/file-input/file-input.component.mjs +3 -3
  62. package/esm2022/ui.application/ui/components/file-preview/file-preview.component.mjs +3 -3
  63. package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +3 -3
  64. package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +4 -4
  65. package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +4 -4
  66. package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +3 -3
  67. package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +4 -4
  68. package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +4 -4
  69. package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +4 -4
  70. package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +7 -7
  71. package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +4 -4
  72. package/esm2022/ui.application/ui/directives/resize-table-column.directive.mjs +3 -3
  73. package/esm2022/ui.application/ui/services/applicationDialog.service.mjs +3 -3
  74. package/esm2022/ui.application/ui/ui.module.mjs +4 -4
  75. package/esm2022/ui.oauth/ui/components/login/login-oauth.component.mjs +3 -3
  76. package/esm2022/ui.oauth/ui/ui.module.mjs +4 -4
  77. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +33 -33
  78. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
  79. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +44 -44
  80. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
  81. package/fesm2022/arsedizioni-ars-utils-core.mjs +89 -89
  82. package/fesm2022/arsedizioni-ars-utils-help.mjs +13 -13
  83. package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
  84. package/fesm2022/arsedizioni-ars-utils-support.common.mjs +68 -106
  85. package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
  86. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +6 -6
  87. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
  88. package/fesm2022/arsedizioni-ars-utils-tinymce.mjs +7 -7
  89. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +58 -58
  90. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
  91. package/fesm2022/arsedizioni-ars-utils-ui.mjs +34 -34
  92. package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
  93. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +7 -7
  94. package/package.json +7 -7
  95. package/support.common/common/interceptors/auth.interceptor.d.ts +8 -0
  96. package/support.common/common/messages.d.ts +1 -0
  97. package/support.common/common/services/support.service.d.ts +13 -24
@@ -1,20 +1,15 @@
1
1
  import { HttpClient, HttpHeaders } from '@angular/common/http';
2
2
  import { Injectable, inject, signal } from '@angular/core';
3
3
  import { BroadcastService, SystemUtils } from '@arsedizioni/ars-utils/core';
4
- import { EMPTY, of, throwError, timer } from 'rxjs';
5
- import { catchError, map, shareReplay, switchMap } from 'rxjs/operators';
4
+ import { of, throwError } from 'rxjs';
5
+ import { catchError, map } from 'rxjs/operators';
6
6
  import { SupportMessages } from '../messages';
7
7
  import { SupportProduct, SupportProductModule } from '../definitions';
8
8
  import * as i0 from "@angular/core";
9
9
  export class SupportService {
10
10
  constructor() {
11
- this.REFRESH_INTERVAL = 60000 * 50; //50 min
12
11
  this.httpClient = inject(HttpClient);
13
12
  this.broadcastService = inject(BroadcastService);
14
- this.refreshing = false;
15
- this.tokenRefreshInterval = this.REFRESH_INTERVAL;
16
- this.tokenRefreshTimer = null;
17
- this.tokenRefreshTimerSubscription = null;
18
13
  this.broadcastServiceSubscription = null;
19
14
  this._loginInfo = null;
20
15
  this._serviceUri = "https://support.arsedizioni.it";
@@ -34,9 +29,6 @@ export class SupportService {
34
29
  }
35
30
  ngOnDestroy() {
36
31
  // Clean-up
37
- if (this.tokenRefreshTimerSubscription) {
38
- this.tokenRefreshTimerSubscription.unsubscribe();
39
- }
40
32
  if (this.broadcastServiceSubscription) {
41
33
  this.broadcastServiceSubscription.unsubscribe();
42
34
  }
@@ -44,25 +36,23 @@ export class SupportService {
44
36
  /**
45
37
  * Initialize service
46
38
  * @param serviceUri : the service uri
47
- * @param tokenRefreshInterval : the token refresh interval
48
39
  * @param products: the supported products
49
40
  * @param products: the supported products
50
41
  */
51
- initialize(serviceUri = null, tokenRefreshInterval = this.REFRESH_INTERVAL, products = SupportProduct.None, productModules = SupportProductModule.None) {
42
+ initialize(serviceUri = null, products = SupportProduct.None, productModules = SupportProductModule.None) {
52
43
  // Create unique client id
53
44
  if (!localStorage.getItem('support_client_id'))
54
45
  localStorage.setItem('support_client_id', SystemUtils.generateUUID());
55
46
  // Initialize
56
47
  this._serviceUri = serviceUri;
57
- this.tokenRefreshInterval = tokenRefreshInterval;
58
48
  this.products = products;
59
49
  this.productModules = productModules;
60
50
  // React to message broadcasting
61
51
  if (!this.broadcastServiceSubscription) {
62
- this.broadcastServiceSubscription = this.broadcastService.getMessage().subscribe(message => {
52
+ this.broadcastServiceSubscription = this.broadcastService.getMessage().subscribe((message) => {
63
53
  if (message.id === SupportMessages.LOGIN_CHANGED) {
64
54
  setTimeout(() => {
65
- this.login(message.data.email, message.data.oauth, message.data.oauthAccessToken).subscribe(r => {
55
+ this.login(message.data.email, message.data.oauth, message.data.oauthAccessToken).subscribe((r) => {
66
56
  if (r.success) {
67
57
  this.countUnreadNotifications();
68
58
  }
@@ -91,52 +81,26 @@ export class SupportService {
91
81
  if (!this.loggedIn() && this.getToken()) {
92
82
  // Auto login
93
83
  this.loggedIn.set(true);
94
- // Start refresh timer
95
- this.enableTokenRefresh();
96
84
  }
97
85
  }
98
86
  /**
99
87
  * Set JWT token
100
- * @param token : The token to store
88
+ * @param value : the login result
101
89
  */
102
- setToken(token) {
103
- sessionStorage.setItem('support_jwt', token);
104
- if (token) {
105
- this.enableTokenRefresh();
106
- }
107
- }
108
- /**
109
- * Enable JWT token auto refresh
110
- */
111
- enableTokenRefresh() {
112
- if (!this.tokenRefreshTimerSubscription) {
113
- this.tokenRefreshTimer =
114
- timer(this.tokenRefreshInterval, this.tokenRefreshInterval)
115
- .pipe(switchMap(() => {
116
- if (this.refreshing || !this.loggedIn())
117
- return EMPTY;
118
- this.refreshing = true;
119
- this.refresh().subscribe({
120
- error: () => { this.refreshing = false; },
121
- complete: () => { this.refreshing = false; }
122
- });
123
- return EMPTY;
124
- }), shareReplay(1));
125
- this.tokenRefreshTimerSubscription = this.tokenRefreshTimer.subscribe();
126
- }
90
+ setToken(value) {
91
+ sessionStorage.setItem('support_jwt', value.token);
92
+ sessionStorage.setItem('support_jwt_refresh', value.refreshToken);
127
93
  }
128
94
  /**
129
95
  * Return current JWT token
130
- * @returns: the string JWT token or string empty if none
96
+ * @param refresh: true to get the refresh token. Default is false.
131
97
  */
132
- getToken() {
133
- let token = sessionStorage.getItem('support_jwt');
134
- if (token) {
135
- if (token[0] === '"')
136
- token = token.substring(1, token.length - 1);
137
- return token;
98
+ getToken(refresh = false) {
99
+ let token = sessionStorage.getItem(refresh ? 'support_jwt_refresh' : 'support_jwt');
100
+ if (token && token[0] === '"') {
101
+ return token.substring(1, token.length - 1);
138
102
  }
139
- return '';
103
+ return token ?? '';
140
104
  }
141
105
  /**
142
106
  * Perform login
@@ -162,10 +126,10 @@ export class SupportService {
162
126
  .pipe(catchError(err => {
163
127
  this.loggingIn.set(false);
164
128
  return throwError(() => err);
165
- }), map(r => {
129
+ }), map((r) => {
166
130
  this.loggingIn.set(false);
167
131
  if (r.success) {
168
- this.setToken(r.value.token);
132
+ this.setToken(r.value);
169
133
  this._loginInfo = r.value.context;
170
134
  this.loggedIn.set(true);
171
135
  }
@@ -186,12 +150,6 @@ export class SupportService {
186
150
  * Reset login refresh timer and logins state
187
151
  */
188
152
  reset() {
189
- // Clear subscriptions
190
- if (this.tokenRefreshTimerSubscription) {
191
- this.tokenRefreshTimerSubscription.unsubscribe();
192
- this.tokenRefreshTimerSubscription = null;
193
- }
194
- this.tokenRefreshTimer = null;
195
153
  // Clear login info
196
154
  this._loginInfo = null;
197
155
  this.loggedIn.set(false);
@@ -204,15 +162,15 @@ export class SupportService {
204
162
  this.reset();
205
163
  // Clear local storage
206
164
  sessionStorage.removeItem('support_jwt');
165
+ sessionStorage.removeItem('support_jwt_refresh');
207
166
  }
208
167
  /**
209
- * Perform token refresh
210
- */
168
+ * Perform token refresh
169
+ */
211
170
  refresh() {
212
- return this.httpClient.post(this._serviceUri + '/refresh', {}).pipe(map(r => {
171
+ return this.httpClient.get(this._serviceUri + '/refresh2/?token=' + this.getToken(true)).pipe(map((r) => {
213
172
  // Update token
214
- this.setToken(r.value.token);
215
- //console.log("token-refreshed: " + r.value.token);
173
+ this.setToken(r.value);
216
174
  }));
217
175
  }
218
176
  /**
@@ -231,7 +189,7 @@ export class SupportService {
231
189
  * Count unread notifications
232
190
  */
233
191
  countUnreadNotifications() {
234
- this.httpClient.get(this._serviceUri + '/notifications/count-unread/?products=' + (this.products ?? 0) + "&modules=" + (this.productModules ?? 0)).subscribe(r => {
192
+ this.httpClient.get(this._serviceUri + '/notifications/count-unread/?products=' + (this.products ?? 0) + "&modules=" + (this.productModules ?? 0)).subscribe((r) => {
235
193
  if (r.success) {
236
194
  this.unreadNotifications.set(r.value > 0 ? r.value : null);
237
195
  }
@@ -269,13 +227,13 @@ export class SupportService {
269
227
  dowloadNotificationDocument(documentId) {
270
228
  return this.httpClient.get(this._serviceUri + '/documents/download/' + documentId, { responseType: 'blob' });
271
229
  }
272
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: SupportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
273
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: SupportService, providedIn: 'root' }); }
230
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: SupportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
231
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: SupportService, providedIn: 'root' }); }
274
232
  }
275
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: SupportService, decorators: [{
233
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: SupportService, decorators: [{
276
234
  type: Injectable,
277
235
  args: [{
278
236
  providedIn: 'root',
279
237
  }]
280
238
  }] });
281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL3N1cHBvcnQuY29tbW9uL2NvbW1vbi9zZXJ2aWNlcy9zdXBwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFhLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFnQixVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBbUosY0FBYyxFQUFFLG9CQUFvQixFQUFtQixNQUFNLGdCQUFnQixDQUFDOztBQU14TyxNQUFNLE9BQU8sY0FBYztJQUgzQjtRQUttQixxQkFBZ0IsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUTtRQUVoRCxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIseUJBQW9CLEdBQVcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3JELHNCQUFpQixHQUFzQyxJQUFJLENBQUM7UUFDNUQsa0NBQTZCLEdBQXlCLElBQUksQ0FBQztRQUMzRCxpQ0FBNEIsR0FBeUIsSUFB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QztRQUNqRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLGdCQUFnQixFQUNuQyxNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlLENBQUMsRUFBVTtRQUN4QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUN4QixJQUFJLENBQUMsV0FBVztZQUNoQixpQkFBaUI7WUFDakIsRUFBRSxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsTUFBc0M7UUFDdEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxxQkFBcUIsRUFDeEMsTUFBTSxDQUNQLENBQUM7SUFDSixDQUFDO0lBRUQ7OztLQUdDO0lBQ0QsMkJBQTJCLENBQUMsVUFBa0I7UUFDNUMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxzQkFBc0IsR0FBRyxVQUFVLEVBQ3RELEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUN6QixDQUFDO0lBQ0osQ0FBQzs4R0FqVVUsY0FBYztrSEFBZCxjQUFjLGNBRmIsTUFBTTs7MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBcGlSZXN1bHQsIEJyb2FkY2FzdFNlcnZpY2UsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24sIHRocm93RXJyb3IsIHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU3VwcG9ydE1lc3NhZ2VzIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xyXG5pbXBvcnQgeyBTdXBwb3J0TG9naW5SZXN1bHQsIFN1cHBvcnROb3RpZmljYXRpb25JbmZvLCBTdXBwb3J0Tm90aWZpY2F0aW9uc01hcmtQYXJhbXMsIFN1cHBvcnROb3RpZmljYXRpb25zU2VhcmNoUGFyYW1zLCBTdXBwb3J0Tm90aWZpY2F0aW9uc1NlYXJjaFJlc3VsdCwgU3VwcG9ydFByb2R1Y3QsIFN1cHBvcnRQcm9kdWN0TW9kdWxlLCBTdXBwb3J0VXNlckluZm8gfSBmcm9tICcuLi9kZWZpbml0aW9ucyc7XHJcblxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFN1cHBvcnRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBSRUZSRVNIX0lOVEVSVkFMID0gNjAwMDAgKiA1MDsgLy81MCBtaW5cclxuXHJcbiAgcHJpdmF0ZSBodHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG4gIHByaXZhdGUgYnJvYWRjYXN0U2VydmljZSA9IGluamVjdChCcm9hZGNhc3RTZXJ2aWNlKTtcclxuICBwcml2YXRlIHJlZnJlc2hpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHRva2VuUmVmcmVzaEludGVydmFsOiBudW1iZXIgPSB0aGlzLlJFRlJFU0hfSU5URVJWQUw7XHJcbiAgcHJpdmF0ZSB0b2tlblJlZnJlc2hUaW1lcj86IE9ic2VydmFibGU8bnVtYmVyIHwgdm9pZD4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHRva2VuUmVmcmVzaFRpbWVyU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBicm9hZGNhc3RTZXJ2aWNlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cclxuICBwcml2YXRlIF9sb2dpbkluZm86IFN1cHBvcnRVc2VySW5mbyA9IG51bGw7XHJcbiAgZ2V0IGxvZ2luSW5mbygpOiBTdXBwb3J0VXNlckluZm8geyByZXR1cm4gdGhpcy5fbG9naW5JbmZvIH07XHJcbiAgc2V0IGxvZ2luSW5mbyh2YWx1ZTogU3VwcG9ydFVzZXJJbmZvKSB7XHJcbiAgICB0aGlzLl9sb2dpbkluZm8gPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlcnZpY2VVcmk6IHN0cmluZyA9IFwiaHR0cHM6Ly9zdXBwb3J0LmFyc2VkaXppb25pLml0XCJcclxuICBnZXQgc2VydmljZVVyaSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VVcmk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHJvZHVjdHM6IFN1cHBvcnRQcm9kdWN0ID0gU3VwcG9ydFByb2R1Y3QuTm9uZTtcclxuICBwdWJsaWMgcHJvZHVjdE1vZHVsZXM6IFN1cHBvcnRQcm9kdWN0TW9kdWxlID0gU3VwcG9ydFByb2R1Y3RNb2R1bGUuTm9uZTtcclxuXHJcbiAgcHVibGljIHJlYWRvbmx5IHVucmVhZE5vdGlmaWNhdGlvbnMgPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGxvZ2dlZEluID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgbG9nZ2luZ0luID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAvLyBDbGVhbi11cFxyXG4gICAgaWYgKHRoaXMudG9rZW5SZWZyZXNoVGltZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy50b2tlblJlZnJlc2hUaW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgc2VydmljZVxyXG4gICAqIEBwYXJhbSBzZXJ2aWNlVXJpIDogdGhlIHNlcnZpY2UgdXJpXHJcbiAgICogQHBhcmFtIHRva2VuUmVmcmVzaEludGVydmFsIDogdGhlIHRva2VuIHJlZnJlc2ggaW50ZXJ2YWxcclxuICAgKiBAcGFyYW0gcHJvZHVjdHM6IHRoZSBzdXBwb3J0ZWQgcHJvZHVjdHNcclxuICAqIEBwYXJhbSBwcm9kdWN0czogdGhlIHN1cHBvcnRlZCBwcm9kdWN0c1xyXG4gICAqL1xyXG4gIGluaXRpYWxpemUoXHJcbiAgICBzZXJ2aWNlVXJpOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgdG9rZW5SZWZyZXNoSW50ZXJ2YWw6IG51bWJlciA9IHRoaXMuUkVGUkVTSF9JTlRFUlZBTCxcclxuICAgIHByb2R1Y3RzOiBTdXBwb3J0UHJvZHVjdCA9IFN1cHBvcnRQcm9kdWN0Lk5vbmUsXHJcbiAgICBwcm9kdWN0TW9kdWxlczogU3VwcG9ydFByb2R1Y3RNb2R1bGUgPSBTdXBwb3J0UHJvZHVjdE1vZHVsZS5Ob25lKSB7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHVuaXF1ZSBjbGllbnQgaWRcclxuICAgIGlmICghbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N1cHBvcnRfY2xpZW50X2lkJykpXHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzdXBwb3J0X2NsaWVudF9pZCcsIFN5c3RlbVV0aWxzLmdlbmVyYXRlVVVJRCgpKTtcclxuXHJcbiAgICAvLyBJbml0aWFsaXplXHJcbiAgICB0aGlzLl9zZXJ2aWNlVXJpID0gc2VydmljZVVyaTtcclxuICAgIHRoaXMudG9rZW5SZWZyZXNoSW50ZXJ2YWwgPSB0b2tlblJlZnJlc2hJbnRlcnZhbDtcclxuICAgIHRoaXMucHJvZHVjdHMgPSBwcm9kdWN0cztcclxuICAgIHRoaXMucHJvZHVjdE1vZHVsZXMgPSBwcm9kdWN0TW9kdWxlcztcclxuXHJcbiAgICAvLyBSZWFjdCB0byBtZXNzYWdlIGJyb2FkY2FzdGluZ1xyXG4gICAgaWYgKCF0aGlzLmJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlU3Vic2NyaXB0aW9uID0gdGhpcy5icm9hZGNhc3RTZXJ2aWNlLmdldE1lc3NhZ2UoKS5zdWJzY3JpYmUobWVzc2FnZSA9PiB7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IFN1cHBvcnRNZXNzYWdlcy5MT0dJTl9DSEFOR0VEKSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2dpbihtZXNzYWdlLmRhdGEuZW1haWwsIG1lc3NhZ2UuZGF0YS5vYXV0aCwgbWVzc2FnZS5kYXRhLm9hdXRoQWNjZXNzVG9rZW4pLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50VW5yZWFkTm90aWZpY2F0aW9ucygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pZCA9PT0gU3VwcG9ydE1lc3NhZ2VzLkxPR09VVF9DT01QTEVURUQgfHxcclxuICAgICAgICAgIG1lc3NhZ2UuaWQgPT09IFN1cHBvcnRNZXNzYWdlcy5MT0dJTl9ESVNDT05ORUNURUQpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5sb2dnZWRJbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nb3V0KCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmlkID09PSBTdXBwb3J0TWVzc2FnZXMuTk9USUZJQ0FUSU9OX1JFQUQpIHtcclxuICAgICAgICAgIHRoaXMuY291bnRVbnJlYWROb3RpZmljYXRpb25zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFdmVsdWF0ZSBjdXJyZW50IHNlc3Npb24gc3RvcmFnZSBpbiBjYXNlIG9mIHBhZ2UgcmVmcmVzaCAoRjUpXHJcbiAgICBpZiAoIXRoaXMubG9nZ2VkSW4oKSAmJiB0aGlzLmdldFRva2VuKCkpIHtcclxuICAgICAgLy8gQXV0byBsb2dpblxyXG4gICAgICB0aGlzLmxvZ2dlZEluLnNldCh0cnVlKTtcclxuXHJcbiAgICAgIC8vIFN0YXJ0IHJlZnJlc2ggdGltZXJcclxuICAgICAgdGhpcy5lbmFibGVUb2tlblJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBTZXQgSldUIHRva2VuXHJcbiAqIEBwYXJhbSB0b2tlbiA6IFRoZSB0b2tlbiAgdG8gc3RvcmVcclxuICovXHJcbiAgcHJpdmF0ZSBzZXRUb2tlbih0b2tlbjogc3RyaW5nKSB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdzdXBwb3J0X2p3dCcsIHRva2VuKTtcclxuICAgIGlmICh0b2tlbikge1xyXG4gICAgICB0aGlzLmVuYWJsZVRva2VuUmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW5hYmxlIEpXVCB0b2tlbiBhdXRvIHJlZnJlc2hcclxuICAgKi9cclxuICBwcml2YXRlIGVuYWJsZVRva2VuUmVmcmVzaCgpIHtcclxuICAgIGlmICghdGhpcy50b2tlblJlZnJlc2hUaW1lclN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnRva2VuUmVmcmVzaFRpbWVyID1cclxuICAgICAgICB0aW1lcih0aGlzLnRva2VuUmVmcmVzaEludGVydmFsLCB0aGlzLnRva2VuUmVmcmVzaEludGVydmFsKVxyXG4gICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMucmVmcmVzaGluZyB8fCAhdGhpcy5sb2dnZWRJbigpKSByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLnJlZnJlc2goKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7IHRoaXMucmVmcmVzaGluZyA9IGZhbHNlOyB9LFxyXG4gICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB0aGlzLnJlZnJlc2hpbmcgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSkpO1xyXG4gICAgICB0aGlzLnRva2VuUmVmcmVzaFRpbWVyU3Vic2NyaXB0aW9uID0gdGhpcy50b2tlblJlZnJlc2hUaW1lci5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBjdXJyZW50IEpXVCB0b2tlblxyXG4gICAqIEByZXR1cm5zOiB0aGUgc3RyaW5nIEpXVCB0b2tlbiBvciBzdHJpbmcgZW1wdHkgaWYgbm9uZVxyXG4gICAqL1xyXG4gIGdldFRva2VuKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdzdXBwb3J0X2p3dCcpO1xyXG4gICAgaWYgKHRva2VuKSB7XHJcbiAgICAgIGlmICh0b2tlblswXSA9PT0gJ1wiJykgdG9rZW4gPSB0b2tlbi5zdWJzdHJpbmcoMSwgdG9rZW4ubGVuZ3RoIC0gMSk7XHJcbiAgICAgIHJldHVybiB0b2tlbjtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuKiBQZXJmb3JtIGxvZ2luICAgXHJcbiogQHBhcmFtIGVtYWlsOiB0aGUgZ3Vlc3QgZW1haWxcclxuKiBAcGFyYW0gb2F1dGg6IHRoZSBvcHRpb25hbCBvcGVuIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnRlZFxyXG4qIEBwYXJhbSBvYXV0aEFjY2Vzc1Rva2VuOiB0aGUgb3B0aW9uYWwgb2F1dGgyIGFjY2VzcyB0b2tlblxyXG4qIEByZXR1cm5zOiB0aGUgbG9naW4gcmVzdWx0XHJcbiovXHJcbiAgbG9naW4oZW1haWw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgb2F1dGg6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgb2F1dGhBY2Nlc3NUb2tlbjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwpIHtcclxuICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIHRoaXMubG9nZ2luZ0luLnNldCh0cnVlKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnBvc3Q8QXBpUmVzdWx0PFN1cHBvcnRMb2dpblJlc3VsdD4+KFxyXG4gICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2xvZ2luJyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB1c2VyOiBvYXV0aCA+IDAgPyBudWxsIDogZW1haWwsXHJcbiAgICAgICAgICBjbGllbnRJZDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJzdXBwb3J0X2NsaWVudF9pZFwiKSxcclxuICAgICAgICAgIE9BVVRIOiBvYXV0aFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczpcclxuICAgICAgICAgICAgIW9hdXRoXHJcbiAgICAgICAgICAgICAgPyBuZXcgSHR0cEhlYWRlcnMoKVxyXG4gICAgICAgICAgICAgIDogbmV3IEh0dHBIZWFkZXJzKClcclxuICAgICAgICAgICAgICAgIC5zZXQoXCJBdXRob3JpemF0aW9uXCIsIG9hdXRoQWNjZXNzVG9rZW4pXHJcbiAgICAgICAgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2dnaW5nSW4uc2V0KGZhbHNlKTtcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgbWFwKHIgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2dnaW5nSW4uc2V0KGZhbHNlKTtcclxuICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRUb2tlbihyLnZhbHVlLnRva2VuKTtcclxuICAgICAgICAgICAgdGhpcy5fbG9naW5JbmZvID0gci52YWx1ZS5jb250ZXh0O1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlZEluLnNldCh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBsb2dvdXRcclxuICAgKi9cclxuICBsb2dvdXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PGFueT4odGhpcy5fc2VydmljZVVyaSArICcvbG9nb3V0Jywge30pLnBpcGUoXHJcbiAgICAgICAgbWFwKHIgPT4geyByZXR1cm4gcjsgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoX2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IGxvZ2luIHJlZnJlc2ggdGltZXIgYW5kIGxvZ2lucyBzdGF0ZVxyXG4gICAqL1xyXG4gIHJlc2V0KCkge1xyXG4gICAgLy8gQ2xlYXIgc3Vic2NyaXB0aW9uc1xyXG4gICAgaWYgKHRoaXMudG9rZW5SZWZyZXNoVGltZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy50b2tlblJlZnJlc2hUaW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLnRva2VuUmVmcmVzaFRpbWVyU3Vic2NyaXB0aW9uID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMudG9rZW5SZWZyZXNoVGltZXIgPSBudWxsO1xyXG5cclxuICAgIC8vIENsZWFyIGxvZ2luIGluZm9cclxuICAgIHRoaXMuX2xvZ2luSW5mbyA9IG51bGw7XHJcbiAgICB0aGlzLmxvZ2dlZEluLnNldChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBsb2dpbiBkYXRhXHJcbiAgICovXHJcbiAgY2xlYXIoKSB7XHJcbiAgICAvLyBSZXNldCBsb2dpblxyXG4gICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgIC8vIENsZWFyIGxvY2FsIHN0b3JhZ2VcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3N1cHBvcnRfand0Jyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJmb3JtIHRva2VuIHJlZnJlc2hcclxuICAgKi9cclxuICBwcml2YXRlIHJlZnJlc2goKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PFN1cHBvcnRMb2dpblJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9yZWZyZXNoJywge31cclxuICAgICkucGlwZShtYXAociA9PiB7XHJcbiAgICAgIC8vIFVwZGF0ZSB0b2tlblxyXG4gICAgICB0aGlzLnNldFRva2VuKHIudmFsdWUudG9rZW4pO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKFwidG9rZW4tcmVmcmVzaGVkOiBcIiArIHIudmFsdWUudG9rZW4pO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTmF2aWdhdGUgdG8gc3VwcG9ydCBzZXJ2aWNlXHJcbiAgICovXHJcbiAgb3BlbigpIHtcclxuICAgIGxldCB1cmkgPSB0aGlzLnNlcnZpY2VVcmkgPz8gJyc7XHJcbiAgICBpZiAodXJpLmVuZHNXaXRoKCcvYXBpJykpXHJcbiAgICAgIHVyaSA9IHVyaS5zdWJzdHJpbmcoMCwgdXJpLmxlbmd0aCAtIDQpXHJcbiAgICB3aW5kb3cub3Blbih1cmkpO1xyXG4gIH1cclxuXHJcbiAgLy8vL1xyXG4gIC8vIE5PVElGSUNBVElPTlNcclxuICAvLy8vXHJcblxyXG4gIC8qKlxyXG4gICAqIENvdW50IHVucmVhZCBub3RpZmljYXRpb25zXHJcbiAgICovXHJcbiAgY291bnRVbnJlYWROb3RpZmljYXRpb25zKCkge1xyXG4gICAgdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL25vdGlmaWNhdGlvbnMvY291bnQtdW5yZWFkLz9wcm9kdWN0cz0nICsgKHRoaXMucHJvZHVjdHMgPz8gMCkgKyBcIiZtb2R1bGVzPVwiICsgKHRoaXMucHJvZHVjdE1vZHVsZXMgPz8gMClcclxuICAgICkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgdGhpcy51bnJlYWROb3RpZmljYXRpb25zLnNldChyLnZhbHVlID4gMCA/IHIudmFsdWUgOiBudWxsKVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFF1ZXJ5IG5vdGlmaWNhdGlvbnNcclxuICAgKiBAcGFyYW0gcGFyYW1zOiBxdWVyeSBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgcXVlcnlOb3RpZmljYXRpb25zKHBhcmFtczogU3VwcG9ydE5vdGlmaWNhdGlvbnNTZWFyY2hQYXJhbXMpIHtcclxuICAgIHBhcmFtcy5wcm9kdWN0cyA9IHRoaXMucHJvZHVjdHMgPz8gMDtcclxuICAgIHBhcmFtcy5wcm9kdWN0TW9kdWxlcyA9IHRoaXMucHJvZHVjdE1vZHVsZXMgPz8gMDtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8U3VwcG9ydE5vdGlmaWNhdGlvbnNTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvbm90aWZpY2F0aW9ucycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIGEgbm90aWZpY2F0aW9uXHJcbiAgICogQHBhcmFtIGlkOiB0aGUgbm90aWZpY2F0aW9uIGlkXHJcbiAgICovXHJcbiAgZ2V0Tm90aWZpY2F0aW9uKGlkOiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxTdXBwb3J0Tm90aWZpY2F0aW9uSW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICtcclxuICAgICAgJy9ub3RpZmljYXRpb25zLycgK1xyXG4gICAgICBpZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcmsgYSBncm91cCBvZiBub3RpZmljYXRpb25zIGFzIHJlYWRcclxuICAgKiBAcGFyYW0gaWRzOiB0aGUgYXJyYXkgb2Ygbm90aWZpY2F0aW9uJ3MgaWRzIHRvIHNldCBhcyByZWFkXHJcbiAgICovXHJcbiAgbWFya05vdGlmaWNhdGlvbnMocGFyYW1zOiBTdXBwb3J0Tm90aWZpY2F0aW9uc01hcmtQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Ym9vbGVhbj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9ub3RpZmljYXRpb25zL21hcmsnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogRG93bmxvYWQgYSBub3RpZmljYXRpb24gZG9jdW1lbnRcclxuICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgbm90aWZpY2F0aW9uIGRvY3VtZW50IGlkXHJcbiAqL1xyXG4gIGRvd2xvYWROb3RpZmljYXRpb25Eb2N1bWVudChkb2N1bWVudElkOiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvZG93bmxvYWQvJyArIGRvY3VtZW50SWQsXHJcbiAgICAgIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL3N1cHBvcnQuY29tbW9uL2NvbW1vbi9zZXJ2aWNlcy9zdXBwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFtQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RyxPQUFPLEVBQUUsRUFBRSxFQUFnQixVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBbUosY0FBYyxFQUFFLG9CQUFvQixFQUFtQixNQUFNLGdCQUFnQixDQUFDOztBQU14TyxNQUFNLE9BQU8sY0FBYztJQUgzQjtRQU1VLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsaUNBQTRCLEdBQXlCLElBQUksQ0FBQztRQUMxRCxlQUFVLEdBQW9CLElBQUksQ0FBQztRQU1uQyxnQkFBVyxHQUFXLGdDQUFnQyxDQUFBO1FBS3ZELGFBQVEsR0FBbUIsY0FBYyxDQUFDLElBQUksQ0FBQztRQUMvQyxtQkFBYyxHQUF5QixvQkFBb0IsQ0FBQyxJQUFJLENBQUM7UUFFeEQsd0JBQW1CLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUNsRCxhQUFRLEdBQUcsTUFBTSxDQUFVLEtB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O0lBQ0gsaUJBQWlCLENBQUMsTUFBc0M7UUFDdEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxxQkFBcUIsRUFDeEMsTUFBTSxDQUNQLENBQUM7SUFDSixDQUFDO0lBRUQ7OztLQUdDO0lBQ0QsMkJBQTJCLENBQUMsVUFBa0I7UUFDNUMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxzQkFBc0IsR0FBRyxVQUFVLEVBQ3RELEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUN6QixDQUFDO0lBQ0osQ0FBQzs4R0FqUlUsY0FBYztrSEFBZCxjQUFjLGNBRmIsTUFBTTs7MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBcGlSZXN1bHQsIEJyb2FkY2FzdE1lc3NhZ2VJbmZvLCBCcm9hZGNhc3RTZXJ2aWNlLCBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IG9mLCBTdWJzY3JpcHRpb24sIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTdXBwb3J0TWVzc2FnZXMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XHJcbmltcG9ydCB7IFN1cHBvcnRMb2dpblJlc3VsdCwgU3VwcG9ydE5vdGlmaWNhdGlvbkluZm8sIFN1cHBvcnROb3RpZmljYXRpb25zTWFya1BhcmFtcywgU3VwcG9ydE5vdGlmaWNhdGlvbnNTZWFyY2hQYXJhbXMsIFN1cHBvcnROb3RpZmljYXRpb25zU2VhcmNoUmVzdWx0LCBTdXBwb3J0UHJvZHVjdCwgU3VwcG9ydFByb2R1Y3RNb2R1bGUsIFN1cHBvcnRVc2VySW5mbyB9IGZyb20gJy4uL2RlZmluaXRpb25zJztcclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3VwcG9ydFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuXHJcbiAgcHJpdmF0ZSBodHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG4gIHByaXZhdGUgYnJvYWRjYXN0U2VydmljZSA9IGluamVjdChCcm9hZGNhc3RTZXJ2aWNlKTtcclxuICBwcml2YXRlIGJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9sb2dpbkluZm86IFN1cHBvcnRVc2VySW5mbyA9IG51bGw7XHJcbiAgZ2V0IGxvZ2luSW5mbygpOiBTdXBwb3J0VXNlckluZm8geyByZXR1cm4gdGhpcy5fbG9naW5JbmZvIH07XHJcbiAgc2V0IGxvZ2luSW5mbyh2YWx1ZTogU3VwcG9ydFVzZXJJbmZvKSB7XHJcbiAgICB0aGlzLl9sb2dpbkluZm8gPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlcnZpY2VVcmk6IHN0cmluZyA9IFwiaHR0cHM6Ly9zdXBwb3J0LmFyc2VkaXppb25pLml0XCJcclxuICBnZXQgc2VydmljZVVyaSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VVcmk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHJvZHVjdHM6IFN1cHBvcnRQcm9kdWN0ID0gU3VwcG9ydFByb2R1Y3QuTm9uZTtcclxuICBwdWJsaWMgcHJvZHVjdE1vZHVsZXM6IFN1cHBvcnRQcm9kdWN0TW9kdWxlID0gU3VwcG9ydFByb2R1Y3RNb2R1bGUuTm9uZTtcclxuXHJcbiAgcHVibGljIHJlYWRvbmx5IHVucmVhZE5vdGlmaWNhdGlvbnMgPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGxvZ2dlZEluID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgbG9nZ2luZ0luID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAvLyBDbGVhbi11cFxyXG4gICAgaWYgKHRoaXMuYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgc2VydmljZVxyXG4gICAqIEBwYXJhbSBzZXJ2aWNlVXJpIDogdGhlIHNlcnZpY2UgdXJpXHJcbiAgICogQHBhcmFtIHByb2R1Y3RzOiB0aGUgc3VwcG9ydGVkIHByb2R1Y3RzXHJcbiAgKiBAcGFyYW0gcHJvZHVjdHM6IHRoZSBzdXBwb3J0ZWQgcHJvZHVjdHNcclxuICAgKi9cclxuICBpbml0aWFsaXplKFxyXG4gICAgc2VydmljZVVyaTogc3RyaW5nID0gbnVsbCxcclxuICAgIHByb2R1Y3RzOiBTdXBwb3J0UHJvZHVjdCA9IFN1cHBvcnRQcm9kdWN0Lk5vbmUsXHJcbiAgICBwcm9kdWN0TW9kdWxlczogU3VwcG9ydFByb2R1Y3RNb2R1bGUgPSBTdXBwb3J0UHJvZHVjdE1vZHVsZS5Ob25lKSB7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHVuaXF1ZSBjbGllbnQgaWRcclxuICAgIGlmICghbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N1cHBvcnRfY2xpZW50X2lkJykpXHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzdXBwb3J0X2NsaWVudF9pZCcsIFN5c3RlbVV0aWxzLmdlbmVyYXRlVVVJRCgpKTtcclxuXHJcbiAgICAvLyBJbml0aWFsaXplXHJcbiAgICB0aGlzLl9zZXJ2aWNlVXJpID0gc2VydmljZVVyaTtcclxuICAgIHRoaXMucHJvZHVjdHMgPSBwcm9kdWN0cztcclxuICAgIHRoaXMucHJvZHVjdE1vZHVsZXMgPSBwcm9kdWN0TW9kdWxlcztcclxuXHJcbiAgICAvLyBSZWFjdCB0byBtZXNzYWdlIGJyb2FkY2FzdGluZ1xyXG4gICAgaWYgKCF0aGlzLmJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlU3Vic2NyaXB0aW9uID0gdGhpcy5icm9hZGNhc3RTZXJ2aWNlLmdldE1lc3NhZ2UoKS5zdWJzY3JpYmUoKG1lc3NhZ2U6IEJyb2FkY2FzdE1lc3NhZ2VJbmZvKSA9PiB7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IFN1cHBvcnRNZXNzYWdlcy5MT0dJTl9DSEFOR0VEKSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2dpbihtZXNzYWdlLmRhdGEuZW1haWwsIG1lc3NhZ2UuZGF0YS5vYXV0aCwgbWVzc2FnZS5kYXRhLm9hdXRoQWNjZXNzVG9rZW4pLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PFN1cHBvcnRMb2dpblJlc3VsdD4pID0+IHtcclxuICAgICAgICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50VW5yZWFkTm90aWZpY2F0aW9ucygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pZCA9PT0gU3VwcG9ydE1lc3NhZ2VzLkxPR09VVF9DT01QTEVURUQgfHxcclxuICAgICAgICAgIG1lc3NhZ2UuaWQgPT09IFN1cHBvcnRNZXNzYWdlcy5MT0dJTl9ESVNDT05ORUNURUQpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5sb2dnZWRJbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nb3V0KCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmlkID09PSBTdXBwb3J0TWVzc2FnZXMuTk9USUZJQ0FUSU9OX1JFQUQpIHtcclxuICAgICAgICAgIHRoaXMuY291bnRVbnJlYWROb3RpZmljYXRpb25zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFdmVsdWF0ZSBjdXJyZW50IHNlc3Npb24gc3RvcmFnZSBpbiBjYXNlIG9mIHBhZ2UgcmVmcmVzaCAoRjUpXHJcbiAgICBpZiAoIXRoaXMubG9nZ2VkSW4oKSAmJiB0aGlzLmdldFRva2VuKCkpIHtcclxuICAgICAgLy8gQXV0byBsb2dpblxyXG4gICAgICB0aGlzLmxvZ2dlZEluLnNldCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBTZXQgSldUIHRva2VuXHJcbiAqIEBwYXJhbSB2YWx1ZSA6IHRoZSBsb2dpbiByZXN1bHRcclxuICovXHJcbiAgcHJpdmF0ZSBzZXRUb2tlbih2YWx1ZTogU3VwcG9ydExvZ2luUmVzdWx0KSB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdzdXBwb3J0X2p3dCcsIHZhbHVlLnRva2VuKTtcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3N1cHBvcnRfand0X3JlZnJlc2gnLCB2YWx1ZS5yZWZyZXNoVG9rZW4pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBjdXJyZW50IEpXVCB0b2tlblxyXG4gICAqIEBwYXJhbSByZWZyZXNoOiB0cnVlIHRvIGdldCB0aGUgcmVmcmVzaCB0b2tlbi4gRGVmYXVsdCBpcyBmYWxzZS5cclxuICAgKi9cclxuICBnZXRUb2tlbihyZWZyZXNoOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShyZWZyZXNoID8gJ3N1cHBvcnRfand0X3JlZnJlc2gnIDogJ3N1cHBvcnRfand0Jyk7XHJcbiAgICBpZiAodG9rZW4gJiYgdG9rZW5bMF0gPT09ICdcIicpIHtcclxuICAgICAgcmV0dXJuIHRva2VuLnN1YnN0cmluZygxLCB0b2tlbi5sZW5ndGggLSAxKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0b2tlbiA/PyAnJztcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuKiBQZXJmb3JtIGxvZ2luICAgXHJcbiogQHBhcmFtIGVtYWlsOiB0aGUgZ3Vlc3QgZW1haWxcclxuKiBAcGFyYW0gb2F1dGg6IHRoZSBvcHRpb25hbCBvcGVuIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnRlZFxyXG4qIEBwYXJhbSBvYXV0aEFjY2Vzc1Rva2VuOiB0aGUgb3B0aW9uYWwgb2F1dGgyIGFjY2VzcyB0b2tlblxyXG4qIEByZXR1cm5zOiB0aGUgbG9naW4gcmVzdWx0XHJcbiovXHJcbiAgbG9naW4oZW1haWw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgb2F1dGg6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgb2F1dGhBY2Nlc3NUb2tlbjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwpIHtcclxuICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIHRoaXMubG9nZ2luZ0luLnNldCh0cnVlKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnBvc3Q8QXBpUmVzdWx0PFN1cHBvcnRMb2dpblJlc3VsdD4+KFxyXG4gICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2xvZ2luJyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB1c2VyOiBvYXV0aCA+IDAgPyBudWxsIDogZW1haWwsXHJcbiAgICAgICAgICBjbGllbnRJZDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJzdXBwb3J0X2NsaWVudF9pZFwiKSxcclxuICAgICAgICAgIE9BVVRIOiBvYXV0aFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczpcclxuICAgICAgICAgICAgIW9hdXRoXHJcbiAgICAgICAgICAgICAgPyBuZXcgSHR0cEhlYWRlcnMoKVxyXG4gICAgICAgICAgICAgIDogbmV3IEh0dHBIZWFkZXJzKClcclxuICAgICAgICAgICAgICAgIC5zZXQoXCJBdXRob3JpemF0aW9uXCIsIG9hdXRoQWNjZXNzVG9rZW4pXHJcbiAgICAgICAgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2dnaW5nSW4uc2V0KGZhbHNlKTtcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgbWFwKChyOiBBcGlSZXN1bHQ8U3VwcG9ydExvZ2luUmVzdWx0PikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2dnaW5nSW4uc2V0KGZhbHNlKTtcclxuICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRUb2tlbihyLnZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5fbG9naW5JbmZvID0gci52YWx1ZS5jb250ZXh0O1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlZEluLnNldCh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBsb2dvdXRcclxuICAgKi9cclxuICBsb2dvdXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PGFueT4odGhpcy5fc2VydmljZVVyaSArICcvbG9nb3V0Jywge30pLnBpcGUoXHJcbiAgICAgICAgbWFwKHIgPT4geyByZXR1cm4gcjsgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoX2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IGxvZ2luIHJlZnJlc2ggdGltZXIgYW5kIGxvZ2lucyBzdGF0ZVxyXG4gICAqL1xyXG4gIHJlc2V0KCkge1xyXG4gICAgLy8gQ2xlYXIgbG9naW4gaW5mb1xyXG4gICAgdGhpcy5fbG9naW5JbmZvID0gbnVsbDtcclxuICAgIHRoaXMubG9nZ2VkSW4uc2V0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGxvZ2luIGRhdGFcclxuICAgKi9cclxuICBjbGVhcigpIHtcclxuICAgIC8vIFJlc2V0IGxvZ2luXHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgLy8gQ2xlYXIgbG9jYWwgc3RvcmFnZVxyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnc3VwcG9ydF9qd3QnKTtcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3N1cHBvcnRfand0X3JlZnJlc2gnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBQZXJmb3JtIHRva2VuIHJlZnJlc2hcclxuICovXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxTdXBwb3J0TG9naW5SZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvcmVmcmVzaDIvP3Rva2VuPScgKyB0aGlzLmdldFRva2VuKHRydWUpXHJcbiAgICApLnBpcGUobWFwKChyOiBBcGlSZXN1bHQ8U3VwcG9ydExvZ2luUmVzdWx0PikgPT4ge1xyXG4gICAgICAvLyBVcGRhdGUgdG9rZW5cclxuICAgICAgdGhpcy5zZXRUb2tlbihyLnZhbHVlKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5hdmlnYXRlIHRvIHN1cHBvcnQgc2VydmljZVxyXG4gICAqL1xyXG4gIG9wZW4oKSB7XHJcbiAgICBsZXQgdXJpID0gdGhpcy5zZXJ2aWNlVXJpID8/ICcnO1xyXG4gICAgaWYgKHVyaS5lbmRzV2l0aCgnL2FwaScpKVxyXG4gICAgICB1cmkgPSB1cmkuc3Vic3RyaW5nKDAsIHVyaS5sZW5ndGggLSA0KVxyXG4gICAgd2luZG93Lm9wZW4odXJpKTtcclxuICB9XHJcblxyXG4gIC8vLy9cclxuICAvLyBOT1RJRklDQVRJT05TXHJcbiAgLy8vL1xyXG5cclxuICAvKipcclxuICAgKiBDb3VudCB1bnJlYWQgbm90aWZpY2F0aW9uc1xyXG4gICAqL1xyXG4gIGNvdW50VW5yZWFkTm90aWZpY2F0aW9ucygpIHtcclxuICAgIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9ub3RpZmljYXRpb25zL2NvdW50LXVucmVhZC8/cHJvZHVjdHM9JyArICh0aGlzLnByb2R1Y3RzID8/IDApICsgXCImbW9kdWxlcz1cIiArICh0aGlzLnByb2R1Y3RNb2R1bGVzID8/IDApXHJcbiAgICApLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PG51bWJlcj4pID0+IHtcclxuICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgIHRoaXMudW5yZWFkTm90aWZpY2F0aW9ucy5zZXQoci52YWx1ZSA+IDAgPyByLnZhbHVlIDogbnVsbClcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBRdWVyeSBub3RpZmljYXRpb25zXHJcbiAgICogQHBhcmFtIHBhcmFtczogcXVlcnkgcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHF1ZXJ5Tm90aWZpY2F0aW9ucyhwYXJhbXM6IFN1cHBvcnROb3RpZmljYXRpb25zU2VhcmNoUGFyYW1zKSB7XHJcbiAgICBwYXJhbXMucHJvZHVjdHMgPSB0aGlzLnByb2R1Y3RzID8/IDA7XHJcbiAgICBwYXJhbXMucHJvZHVjdE1vZHVsZXMgPSB0aGlzLnByb2R1Y3RNb2R1bGVzID8/IDA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PFN1cHBvcnROb3RpZmljYXRpb25zU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL25vdGlmaWNhdGlvbnMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBhIG5vdGlmaWNhdGlvblxyXG4gICAqIEBwYXJhbSBpZDogdGhlIG5vdGlmaWNhdGlvbiBpZFxyXG4gICAqL1xyXG4gIGdldE5vdGlmaWNhdGlvbihpZDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8U3VwcG9ydE5vdGlmaWNhdGlvbkluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArXHJcbiAgICAgICcvbm90aWZpY2F0aW9ucy8nICtcclxuICAgICAgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYXJrIGEgZ3JvdXAgb2Ygbm90aWZpY2F0aW9ucyBhcyByZWFkXHJcbiAgICogQHBhcmFtIGlkczogdGhlIGFycmF5IG9mIG5vdGlmaWNhdGlvbidzIGlkcyB0byBzZXQgYXMgcmVhZFxyXG4gICAqL1xyXG4gIG1hcmtOb3RpZmljYXRpb25zKHBhcmFtczogU3VwcG9ydE5vdGlmaWNhdGlvbnNNYXJrUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PGJvb2xlYW4+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvbm90aWZpY2F0aW9ucy9tYXJrJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIERvd25sb2FkIGEgbm90aWZpY2F0aW9uIGRvY3VtZW50XHJcbiAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIG5vdGlmaWNhdGlvbiBkb2N1bWVudCBpZFxyXG4gKi9cclxuICBkb3dsb2FkTm90aWZpY2F0aW9uRG9jdW1lbnQoZG9jdW1lbnRJZDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2Rvd25sb2FkLycgKyBkb2N1bWVudElkLFxyXG4gICAgICB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH1cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -94,10 +94,10 @@ export class SupportNotificationComponent {
94
94
  else
95
95
  window.open(item.url, '_blank');
96
96
  }
97
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: SupportNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
98
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: SupportNotificationComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, ngImport: i0, template: "<div class=\"support-notification-fixed\">\r\n <div class=\"support-notification-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill >\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{item?.title}}</h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" [mat-dialog-close]=\"true\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"notification-scrollable\">\r\n <div id=\"notification-scroller\">\r\n <div [innerHtml]=\"(item?.text ?? 'Caricamento in corso...') | safeHtml\"></div>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions class=\"notification-fixed\">\r\n <div style=\"padding: 10px 0\">\r\n @if (item?.documents && item?.documents.length > 0) {\r\n <button type=\"button\" mat-button [attr.aria-label]=\"'Documenti scaricabili'\" [matMenuTriggerFor]=\"documentsMenu\"\r\n color=\"primary\">\r\n {{item?.documents.length}} @if (item?.documents.length === 1) {\r\n <span>Documento scaricabile</span>\r\n }\r\n @if (item?.documents.length !== 1) {\r\n <span>Documenti scaricabili</span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">arrow_drop_down</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #documentsMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n @for (doc of item?.documents; track doc) {\r\n <button mat-menu-item (click)=\"downloadDocument(doc)\">\r\n @if (doc.isBinary) {\r\n <mat-icon>attach_file</mat-icon>\r\n }\r\n @if (!doc.isBinary) {\r\n <mat-icon>link</mat-icon>\r\n }\r\n {{doc.name}}\r\n </button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n</div>", 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:10px;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%}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.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}.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,.drawer-small{min-width:420px!important;max-width:420px!important;padding:20px 0 0}.drawer .title-container,.drawer-small .title-container{padding:20px 10px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 10px 20px}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:200px;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:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-bottom:20px!important}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.drawer-small{min-width:360px!important;max-width:360px!important}.drawer-small .title{min-width:150px;width:100%}@media screen and (min-width: 0px) and (max-width: 359px){.drawer{min-width:360px!important;max-width:360px!important}.drawer .title{min-width:150px}}.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: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "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: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { 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: "component", type: i2.MatIconButton, selector: "button[mat-icon-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: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
97
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: SupportNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
98
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: SupportNotificationComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, ngImport: i0, template: "<div class=\"support-notification-fixed\">\r\n <div class=\"support-notification-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill >\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{item?.title}}</h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" [mat-dialog-close]=\"true\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"notification-scrollable\">\r\n <div id=\"notification-scroller\">\r\n <div [innerHtml]=\"(item?.text ?? 'Caricamento in corso...') | safeHtml\"></div>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions class=\"notification-fixed\">\r\n <div style=\"padding: 10px 0\">\r\n @if (item?.documents && item?.documents.length > 0) {\r\n <button type=\"button\" mat-button [attr.aria-label]=\"'Documenti scaricabili'\" [matMenuTriggerFor]=\"documentsMenu\"\r\n color=\"primary\">\r\n {{item?.documents.length}} @if (item?.documents.length === 1) {\r\n <span>Documento scaricabile</span>\r\n }\r\n @if (item?.documents.length !== 1) {\r\n <span>Documenti scaricabili</span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">arrow_drop_down</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #documentsMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n @for (doc of item?.documents; track doc) {\r\n <button mat-menu-item (click)=\"downloadDocument(doc)\">\r\n @if (doc.isBinary) {\r\n <mat-icon>attach_file</mat-icon>\r\n }\r\n @if (!doc.isBinary) {\r\n <mat-icon>link</mat-icon>\r\n }\r\n {{doc.name}}\r\n </button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n</div>", 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:10px;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%}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.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}.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,.drawer-small{min-width:420px!important;max-width:420px!important;padding:20px 0 0}.drawer .title-container,.drawer-small .title-container{padding:20px 10px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 10px 20px}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:200px;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:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-bottom:20px!important}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.drawer-small{min-width:360px!important;max-width:360px!important}.drawer-small .title{min-width:150px;width:100%}@media screen and (min-width: 0px) and (max-width: 359px){.drawer{min-width:360px!important;max-width:360px!important}.drawer .title{min-width:150px}}.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: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "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: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { 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: "component", type: i2.MatIconButton, selector: "button[mat-icon-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: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
99
99
  }
100
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: SupportNotificationComponent, decorators: [{
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: SupportNotificationComponent, decorators: [{
101
101
  type: Component,
102
102
  args: [{ host: { 'Bind': SystemUtils.generateUUID() }, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [FlexModule, MatDialogTitle, MatButtonModule, MatTooltipModule, MatDialogClose, MatIconModule, MatDialogContent,
103
103
  MatDialogActions, MatMenuModule, SafeHtmlPipe], template: "<div class=\"support-notification-fixed\">\r\n <div class=\"support-notification-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill >\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{item?.title}}</h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" [mat-dialog-close]=\"true\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"notification-scrollable\">\r\n <div id=\"notification-scroller\">\r\n <div [innerHtml]=\"(item?.text ?? 'Caricamento in corso...') | safeHtml\"></div>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions class=\"notification-fixed\">\r\n <div style=\"padding: 10px 0\">\r\n @if (item?.documents && item?.documents.length > 0) {\r\n <button type=\"button\" mat-button [attr.aria-label]=\"'Documenti scaricabili'\" [matMenuTriggerFor]=\"documentsMenu\"\r\n color=\"primary\">\r\n {{item?.documents.length}} @if (item?.documents.length === 1) {\r\n <span>Documento scaricabile</span>\r\n }\r\n @if (item?.documents.length !== 1) {\r\n <span>Documenti scaricabili</span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">arrow_drop_down</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #documentsMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n @for (doc of item?.documents; track doc) {\r\n <button mat-menu-item (click)=\"downloadDocument(doc)\">\r\n @if (doc.isBinary) {\r\n <mat-icon>attach_file</mat-icon>\r\n }\r\n @if (!doc.isBinary) {\r\n <mat-icon>link</mat-icon>\r\n }\r\n {{doc.name}}\r\n </button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n</div>", 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:10px;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%}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.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}.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,.drawer-small{min-width:420px!important;max-width:420px!important;padding:20px 0 0}.drawer .title-container,.drawer-small .title-container{padding:20px 10px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 10px 20px}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:200px;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:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-bottom:20px!important}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.drawer-small{min-width:360px!important;max-width:360px!important}.drawer-small .title{min-width:150px;width:100%}@media screen and (min-width: 0px) and (max-width: 359px){.drawer{min-width:360px!important;max-width:360px!important}.drawer .title{min-width:150px}}.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"] }]