@yuuvis/client-framework 0.7.4 → 0.9.0

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 (98) hide show
  1. package/actions/lib/actions/delete-action/delete-action.d.ts +1 -0
  2. package/common/index.d.ts +1 -0
  3. package/common/lib/services/error-messages/error-messages.service.d.ts +7 -0
  4. package/common/lib/services/index.d.ts +1 -0
  5. package/esm2022/actions/lib/actions/delete-action/delete-action.mjs +4 -10
  6. package/esm2022/actions/lib/components/contextmenu/contextmenu.component.mjs +2 -2
  7. package/esm2022/common/index.mjs +2 -1
  8. package/esm2022/common/lib/directives/drag-select.directive.mjs +2 -2
  9. package/esm2022/common/lib/services/error-messages/error-messages.service.mjs +68 -0
  10. package/esm2022/common/lib/services/index.mjs +2 -0
  11. package/esm2022/forms/index.mjs +13 -8
  12. package/esm2022/forms/lib/elements/data-grid/data-grid/data-grid.component.mjs +172 -0
  13. package/esm2022/forms/lib/elements/data-grid/edit-table-data/edit-data.component.mjs +95 -0
  14. package/esm2022/forms/lib/elements/data-grid/model/data-grid.interface.mjs +9 -0
  15. package/esm2022/forms/lib/elements/datetime-range/datetime-range.component.mjs +32 -32
  16. package/esm2022/forms/lib/elements/index.mjs +11 -0
  17. package/esm2022/forms/lib/elements/number/number.component.mjs +3 -3
  18. package/esm2022/forms/lib/elements/number-range/number-range.component.mjs +3 -3
  19. package/esm2022/forms/lib/elements/organization/organization.component.mjs +47 -29
  20. package/esm2022/forms/lib/elements/range-select-date/date-range-picker/date-range-picker.component.mjs +38 -0
  21. package/esm2022/forms/lib/elements/range-select-date/range-select-date.component.mjs +181 -0
  22. package/esm2022/forms/lib/elements/range-select-date/range-select-date.interface.mjs +2 -0
  23. package/esm2022/forms/lib/elements/range-select-filesize/range-select-filesize.component.mjs +98 -0
  24. package/esm2022/forms/lib/elements/range-select-filesize/range-select-filesize.interface.mjs +2 -0
  25. package/esm2022/forms/lib/elements/string/string.component.mjs +10 -3
  26. package/esm2022/icons/lib/icons.mjs +3 -2
  27. package/esm2022/list/lib/list.component.mjs +6 -4
  28. package/esm2022/metadata-form/lib/metadata-default-templates/metadata-default-templates.component.mjs +5 -4
  29. package/esm2022/metadata-form/lib/metadata-form-element-registry.service.mjs +1 -1
  30. package/esm2022/metadata-form/lib/metadata-form-field/metadata-form-field.component.mjs +9 -52
  31. package/esm2022/object-details/index.mjs +2 -1
  32. package/esm2022/object-details/lib/object-audit/object-audit.component.mjs +3 -3
  33. package/esm2022/object-details/lib/object-metadata/object-metadata.component.mjs +5 -4
  34. package/esm2022/object-details/lib/retention-badge/retention-badge.component.mjs +27 -0
  35. package/esm2022/object-flavor/lib/object-flavor/object-flavor.component.mjs +2 -2
  36. package/esm2022/object-flavor/lib/object-flavor-picker/object-flavor-picker.component.mjs +2 -2
  37. package/esm2022/object-form/index.mjs +1 -1
  38. package/esm2022/object-form/lib/object-form.component.mjs +2 -1
  39. package/esm2022/object-form/lib/object-form.service.mjs +5 -2
  40. package/esm2022/object-summary/lib/object-summary/object-summary.component.mjs +15 -13
  41. package/esm2022/pagination/lib/pagination.component.mjs +4 -6
  42. package/esm2022/sequence-list/index.mjs +1 -3
  43. package/esm2022/sequence-list/lib/sequence-list.component.mjs +11 -16
  44. package/esm2022/sequence-list/lib/sequence-list.interface.mjs +1 -1
  45. package/esm2022/tile-list/lib/tile/tile.component.mjs +3 -3
  46. package/esm2022/tile-list/lib/tile-config/tile-config.component.mjs +2 -2
  47. package/esm2022/tile-list/lib/tile-extension/extensions/email.extension.mjs +1 -1
  48. package/fesm2022/yuuvis-client-framework-actions.mjs +4 -10
  49. package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
  50. package/fesm2022/yuuvis-client-framework-common.mjs +69 -4
  51. package/fesm2022/yuuvis-client-framework-common.mjs.map +1 -1
  52. package/fesm2022/yuuvis-client-framework-forms.mjs +1335 -755
  53. package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
  54. package/fesm2022/yuuvis-client-framework-icons.mjs +2 -1
  55. package/fesm2022/yuuvis-client-framework-icons.mjs.map +1 -1
  56. package/fesm2022/yuuvis-client-framework-list.mjs +5 -3
  57. package/fesm2022/yuuvis-client-framework-list.mjs.map +1 -1
  58. package/fesm2022/yuuvis-client-framework-metadata-form.mjs +12 -55
  59. package/fesm2022/yuuvis-client-framework-metadata-form.mjs.map +1 -1
  60. package/fesm2022/yuuvis-client-framework-object-details.mjs +28 -7
  61. package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
  62. package/fesm2022/yuuvis-client-framework-object-flavor.mjs +2 -2
  63. package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
  64. package/fesm2022/yuuvis-client-framework-object-form.mjs +5 -1
  65. package/fesm2022/yuuvis-client-framework-object-form.mjs.map +1 -1
  66. package/fesm2022/yuuvis-client-framework-object-summary.mjs +14 -12
  67. package/fesm2022/yuuvis-client-framework-object-summary.mjs.map +1 -1
  68. package/fesm2022/yuuvis-client-framework-pagination.mjs +3 -5
  69. package/fesm2022/yuuvis-client-framework-pagination.mjs.map +1 -1
  70. package/fesm2022/yuuvis-client-framework-sequence-list.mjs +17 -296
  71. package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
  72. package/fesm2022/yuuvis-client-framework-tile-list.mjs +3 -3
  73. package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
  74. package/forms/index.d.ts +5 -7
  75. package/forms/lib/elements/data-grid/data-grid/data-grid.component.d.ts +38 -0
  76. package/forms/lib/elements/data-grid/edit-table-data/edit-data.component.d.ts +21 -0
  77. package/forms/lib/elements/data-grid/model/data-grid.interface.d.ts +14 -0
  78. package/forms/lib/elements/datetime-range/datetime-range.component.d.ts +2 -1
  79. package/forms/lib/elements/index.d.ts +10 -0
  80. package/forms/lib/elements/organization/organization.component.d.ts +13 -4
  81. package/forms/lib/elements/range-select-date/date-range-picker/date-range-picker.component.d.ts +13 -0
  82. package/forms/lib/elements/range-select-date/range-select-date.component.d.ts +33 -0
  83. package/forms/lib/elements/range-select-date/range-select-date.interface.d.ts +5 -0
  84. package/forms/lib/elements/range-select-filesize/range-select-filesize.component.d.ts +28 -0
  85. package/forms/lib/elements/range-select-filesize/range-select-filesize.interface.d.ts +5 -0
  86. package/list/lib/list.component.d.ts +2 -1
  87. package/metadata-form/lib/metadata-form-field/metadata-form-field.component.d.ts +1 -1
  88. package/object-details/index.d.ts +1 -0
  89. package/object-details/lib/retention-badge/retention-badge.component.d.ts +12 -0
  90. package/package.json +10 -10
  91. package/sequence-list/index.d.ts +0 -2
  92. package/sequence-list/lib/sequence-list.component.d.ts +2 -2
  93. package/sequence-list/lib/sequence-list.interface.d.ts +5 -4
  94. package/styles/client-framework.scss +55 -18
  95. package/esm2022/sequence-list/lib/sequence-list-template-manage/sequence-list-template-manage.component.mjs +0 -183
  96. package/esm2022/sequence-list/lib/sequence-list-templates/sequence-list-templates.component.mjs +0 -114
  97. package/sequence-list/lib/sequence-list-template-manage/sequence-list-template-manage.component.d.ts +0 -52
  98. package/sequence-list/lib/sequence-list-templates/sequence-list-templates.component.d.ts +0 -36
@@ -1,17 +1,17 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import { Component, EventEmitter, forwardRef, HostBinding, HostListener, inject, input, Input, Output, ViewChild } from '@angular/core';
3
3
  import { FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
4
- import { Classification, SystemService, TranslateModule, UserService, YuvUser } from '@yuuvis/client-core';
4
+ import { Classification, SystemService, TranslateModule, TranslateService, UserService, YuvUser } from '@yuuvis/client-core';
5
5
  import { YUV_ICONS } from '@yuuvis/client-framework/icons';
6
6
  import { AutoComplete, YvcAutocompleteModule } from '@yuuvis/components/autocomplete';
7
7
  import { YvcIconModule } from '@yuuvis/components/icon';
8
8
  import { forkJoin, of } from 'rxjs';
9
- import { catchError } from 'rxjs/operators';
9
+ import { catchError, map } from 'rxjs/operators';
10
10
  import * as i0 from "@angular/core";
11
- import * as i1 from "@angular/forms";
12
- import * as i2 from "@yuuvis/components/autocomplete";
13
- import * as i3 from "@yuuvis/components/icon";
14
- import * as i4 from "@yuuvis/client-core";
11
+ import * as i1 from "@angular/common";
12
+ import * as i2 from "@angular/forms";
13
+ import * as i3 from "@yuuvis/components/autocomplete";
14
+ import * as i4 from "@yuuvis/components/icon";
15
15
  /**
16
16
  * Creates form input for organisation values.
17
17
  * Implements `ControlValueAccessor` so it can be used within Angular forms.
@@ -25,6 +25,7 @@ export class OrganizationComponent {
25
25
  constructor() {
26
26
  this.system = inject(SystemService);
27
27
  this.userService = inject(UserService);
28
+ this.translate = inject(TranslateService);
28
29
  this.minLength = 2;
29
30
  this.icons = {
30
31
  organizationMulti: YUV_ICONS['group'],
@@ -63,12 +64,12 @@ export class OrganizationComponent {
63
64
  */
64
65
  this.withMetadata = input(false);
65
66
  this.userSelect = new EventEmitter();
66
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
67
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
67
68
  this.propagateChange = (_) => { };
68
69
  }
69
70
  set innerValue(iv) {
70
71
  this._innerValue = iv || [];
71
- this.userSelect.emit(this._innerValue);
72
+ this.userSelect.emit(this._innerValue.map((v) => v.user));
72
73
  }
73
74
  get innerValue() {
74
75
  return this._innerValue;
@@ -110,7 +111,7 @@ export class OrganizationComponent {
110
111
  registerOnChange(fn) {
111
112
  this.propagateChange = fn;
112
113
  }
113
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
114
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
114
115
  registerOnTouched(fn) { }
115
116
  propagate() {
116
117
  this.propagateChange(this.#getPropagateValue());
@@ -120,16 +121,16 @@ export class OrganizationComponent {
120
121
  ? this.withMetadata()
121
122
  ? this.value
122
123
  ? this._innerValue.map((v) => ({
123
- id: v.id,
124
- title: v.title
124
+ id: v.user.id,
125
+ title: v.user.title
125
126
  }))
126
127
  : this.value
127
128
  : this.value
128
129
  : this.withMetadata()
129
130
  ? this.value
130
131
  ? {
131
- id: this._innerValue[0].id,
132
- title: this._innerValue[0].title
132
+ id: this._innerValue[0].user.id,
133
+ title: this._innerValue[0].user.title
133
134
  }
134
135
  : this.value
135
136
  : this.value;
@@ -138,17 +139,29 @@ export class OrganizationComponent {
138
139
  this.autoCompleteInput.focusInput();
139
140
  }
140
141
  resolveFn(value) {
141
- const map = (value instanceof Array ? value : [value]).map((v) => {
142
- const match = this.innerValue.find((iv) => iv.id === v);
142
+ const obs = (value instanceof Array ? value : [value]).map((v) => {
143
+ const valueID = typeof v === 'string' ? v : v.id;
144
+ const match = this.innerValue.find((iv) => iv.user.id === valueID);
143
145
  return match
144
146
  ? of(match)
145
- : this.userService.getUserById(v).pipe(catchError(() => of(new YuvUser({
146
- id: v,
147
- title: v,
148
- image: null
149
- }, undefined))));
147
+ : this.userService.getUserById(valueID).pipe(map((res) => ({
148
+ user: res,
149
+ state: {}
150
+ })), catchError((e) => {
151
+ const user = new YuvUser({
152
+ id: typeof v === 'string' ? v : v.id
153
+ });
154
+ user.title = typeof v === 'string' ? v : v.title;
155
+ return of({
156
+ user,
157
+ state: {
158
+ notFound: e.status === 404
159
+ },
160
+ titleString: e.status === 404 ? this.translate.instant('yuv.form.element.organization.user.not-found') : undefined
161
+ });
162
+ }));
150
163
  });
151
- return forkJoin(map).subscribe((data) => {
164
+ return forkJoin(obs).subscribe((data) => {
152
165
  this.innerValue = data;
153
166
  // setTimeout(() => this.autoCompleteInput.cd.markForCheck());
154
167
  });
@@ -157,7 +170,12 @@ export class OrganizationComponent {
157
170
  if (query.length >= this.minLength) {
158
171
  this.userService.queryUser(query, this.excludeMe, this.filterRoles).subscribe({
159
172
  next: (users) => {
160
- this.autocompleteRes = users.filter((user) => !this.innerValue.some((value) => value.id === user.id));
173
+ this.autocompleteRes = users
174
+ .filter((user) => !this.innerValue.some((value) => value.user.id === user.id))
175
+ .map((user) => ({
176
+ user: user,
177
+ state: {}
178
+ }));
161
179
  this.propagateValidity(this.autocompleteRes.length > 0);
162
180
  },
163
181
  error: () => {
@@ -183,20 +201,20 @@ export class OrganizationComponent {
183
201
  // handle selection changes to the model
184
202
  onSelect() {
185
203
  if (this.multiselect) {
186
- this.value = this.innerValue.map((v) => v.id);
204
+ this.value = this.innerValue.map((v) => v.user.id);
187
205
  }
188
206
  else {
189
207
  // internal autocomplete control is always set to multiselect
190
208
  // so the resolved value is always an array
191
209
  this.innerValue = this.innerValue.slice(-1);
192
- this.value = this.innerValue[0].id;
210
+ this.value = this.innerValue[0].user.id;
193
211
  }
194
212
  this.propagate();
195
213
  }
196
214
  // handle selection changes to the model
197
215
  onUnselect(value) {
198
- this.innerValue = this.innerValue.filter((v) => v.id !== value.id);
199
- const _value = this.innerValue.map((v) => v.id);
216
+ this.innerValue = this.innerValue.filter((v) => v.user.id !== value.id);
217
+ const _value = this.innerValue.map((v) => v.user.id);
200
218
  this.value = this.multiselect ? _value : null;
201
219
  if (!this.multiselect) {
202
220
  this.clearInnerInput();
@@ -221,7 +239,7 @@ export class OrganizationComponent {
221
239
  useExisting: forwardRef(() => OrganizationComponent),
222
240
  multi: true
223
241
  }
224
- ], viewQueries: [{ propertyName: "autoCompleteInput", first: true, predicate: ["autocomplete"], descendants: true }], ngImport: i0, template: "<yvc-autocomplete\n [(ngModel)]=\"innerValue\"\n #autocomplete\n (suggestionSelect)=\"onSelect()\"\n [placeholder]=\"placeholder\"\n (suggestionUnselect)=\"onUnselect($event)\"\n (blur)=\"onAutoCompleteBlur()\"\n [disabled]=\"readonly\"\n [autocompleteValues]=\"autocompleteRes\"\n field=\"id\"\n [forceSelection]=\"true\"\n (autocompleteFnc)=\"autocompleteFn($event)\"\n [multiple]=\"true\"\n>\n <!-- template for item inside the dropdown -->\n <ng-template #autocompleteOptionTemplate let-item>\n <span class=\"chip\">{{ item.title }}</span>\n </ng-template>\n \n <!-- template for chip -->\n <ng-template #chipTemplate let-item>\n <span class=\"chip\">{{ item.title }}</span>\n </ng-template>\n</yvc-autocomplete>\n\n<yvc-icon\n class=\"classify\"\n [title]=\"'yuv.form.element.organization.classify.icon.title' | translate\"\n [svg]=\"multiselect ? icons.organizationMulti : icons.organization\"\n (click)=\"focusInput()\"\n></yvc-icon>\n", styles: [":host{display:flex;align-items:center}:host ::ng-deep .chip{--yvc-form-element-border-color: var(--text-color-hint)}:host yvc-autocomplete{flex:1;--yvc-form-element-focus-border-color: transparent;--yvc-form-element-focus-outline-color: transparent}:host yvc-icon.classify{width:18px;height:18px;padding:calc(var(--app-pane-padding) / 8);color:var(--text-color-hint)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: YvcAutocompleteModule }, { kind: "component", type: i2.AutoComplete, selector: "yvc-autocomplete", inputs: ["field", "placeholder", "minLength", "multiple", "typeahead", "distinctValues", "forceSelection", "autocompleteValues", "disabled"], outputs: ["autocompleteFnc", "blur", "focus", "suggestionUnselect", "suggestionSelect"] }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i3.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
242
+ ], viewQueries: [{ propertyName: "autoCompleteInput", first: true, predicate: ["autocomplete"], descendants: true }], ngImport: i0, template: "<yvc-autocomplete\n [(ngModel)]=\"innerValue\"\n #autocomplete\n (suggestionSelect)=\"onSelect()\"\n [placeholder]=\"placeholder\"\n (suggestionUnselect)=\"onUnselect($event)\"\n (blur)=\"onAutoCompleteBlur()\"\n [disabled]=\"readonly\"\n [autocompleteValues]=\"autocompleteRes\"\n field=\"id\"\n [forceSelection]=\"true\"\n (autocompleteFnc)=\"autocompleteFn($event)\"\n [multiple]=\"true\"\n>\n <!-- template for item inside the dropdown -->\n <ng-template #autocompleteOptionTemplate let-item>\n <span class=\"chip\">{{ item.user.title }}</span>\n </ng-template>\n\n <!-- template for chip -->\n <ng-template #chipTemplate let-item>\n <span class=\"chip\" [ngClass]=\"{ notFound: item.state.notFound }\" [title]=\"item.titleString\">\n {{ item.user.title }}\n </span>\n </ng-template>\n</yvc-autocomplete>\n\n<yvc-icon class=\"classify\" aria-hidden=\"true\" [svg]=\"multiselect ? icons.organizationMulti : icons.organization\" (click)=\"focusInput()\"></yvc-icon>\n", styles: [":host{display:flex;align-items:center}:host .chip.notFound{color:var(--color-error);text-decoration:line-through}:host .chip.notFound:before{content:\"!\";display:inline-block;background-color:var(--color-error);color:#fff;border-radius:2px;padding-inline:.3em;text-decoration:none;margin-inline-end:.75em}:host yvc-autocomplete{flex:1;--yvc-form-element-focus-border-color: transparent;--yvc-form-element-focus-outline-color: transparent}:host yvc-icon.classify{width:18px;height:18px;padding:calc(var(--app-pane-padding) / 8);color:var(--text-color-hint)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: YvcAutocompleteModule }, { kind: "component", type: i3.AutoComplete, selector: "yvc-autocomplete", inputs: ["field", "placeholder", "minLength", "multiple", "typeahead", "distinctValues", "forceSelection", "autocompleteValues", "disabled"], outputs: ["autocompleteFnc", "blur", "focus", "suggestionUnselect", "suggestionSelect"] }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i4.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }, { kind: "ngmodule", type: TranslateModule }] }); }
225
243
  }
226
244
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OrganizationComponent, decorators: [{
227
245
  type: Component,
@@ -236,7 +254,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
236
254
  useExisting: forwardRef(() => OrganizationComponent),
237
255
  multi: true
238
256
  }
239
- ], template: "<yvc-autocomplete\n [(ngModel)]=\"innerValue\"\n #autocomplete\n (suggestionSelect)=\"onSelect()\"\n [placeholder]=\"placeholder\"\n (suggestionUnselect)=\"onUnselect($event)\"\n (blur)=\"onAutoCompleteBlur()\"\n [disabled]=\"readonly\"\n [autocompleteValues]=\"autocompleteRes\"\n field=\"id\"\n [forceSelection]=\"true\"\n (autocompleteFnc)=\"autocompleteFn($event)\"\n [multiple]=\"true\"\n>\n <!-- template for item inside the dropdown -->\n <ng-template #autocompleteOptionTemplate let-item>\n <span class=\"chip\">{{ item.title }}</span>\n </ng-template>\n \n <!-- template for chip -->\n <ng-template #chipTemplate let-item>\n <span class=\"chip\">{{ item.title }}</span>\n </ng-template>\n</yvc-autocomplete>\n\n<yvc-icon\n class=\"classify\"\n [title]=\"'yuv.form.element.organization.classify.icon.title' | translate\"\n [svg]=\"multiselect ? icons.organizationMulti : icons.organization\"\n (click)=\"focusInput()\"\n></yvc-icon>\n", styles: [":host{display:flex;align-items:center}:host ::ng-deep .chip{--yvc-form-element-border-color: var(--text-color-hint)}:host yvc-autocomplete{flex:1;--yvc-form-element-focus-border-color: transparent;--yvc-form-element-focus-outline-color: transparent}:host yvc-icon.classify{width:18px;height:18px;padding:calc(var(--app-pane-padding) / 8);color:var(--text-color-hint)}\n"] }]
257
+ ], template: "<yvc-autocomplete\n [(ngModel)]=\"innerValue\"\n #autocomplete\n (suggestionSelect)=\"onSelect()\"\n [placeholder]=\"placeholder\"\n (suggestionUnselect)=\"onUnselect($event)\"\n (blur)=\"onAutoCompleteBlur()\"\n [disabled]=\"readonly\"\n [autocompleteValues]=\"autocompleteRes\"\n field=\"id\"\n [forceSelection]=\"true\"\n (autocompleteFnc)=\"autocompleteFn($event)\"\n [multiple]=\"true\"\n>\n <!-- template for item inside the dropdown -->\n <ng-template #autocompleteOptionTemplate let-item>\n <span class=\"chip\">{{ item.user.title }}</span>\n </ng-template>\n\n <!-- template for chip -->\n <ng-template #chipTemplate let-item>\n <span class=\"chip\" [ngClass]=\"{ notFound: item.state.notFound }\" [title]=\"item.titleString\">\n {{ item.user.title }}\n </span>\n </ng-template>\n</yvc-autocomplete>\n\n<yvc-icon class=\"classify\" aria-hidden=\"true\" [svg]=\"multiselect ? icons.organizationMulti : icons.organization\" (click)=\"focusInput()\"></yvc-icon>\n", styles: [":host{display:flex;align-items:center}:host .chip.notFound{color:var(--color-error);text-decoration:line-through}:host .chip.notFound:before{content:\"!\";display:inline-block;background-color:var(--color-error);color:#fff;border-radius:2px;padding-inline:.3em;text-decoration:none;margin-inline-end:.75em}:host yvc-autocomplete{flex:1;--yvc-form-element-focus-border-color: transparent;--yvc-form-element-focus-outline-color: transparent}:host yvc-icon.classify{width:18px;height:18px;padding:calc(var(--app-pane-padding) / 8);color:var(--text-color-hint)}\n"] }]
240
258
  }], propDecorators: { autoCompleteInput: [{
241
259
  type: ViewChild,
242
260
  args: ['autocomplete']
@@ -265,4 +283,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
265
283
  }], userSelect: [{
266
284
  type: Output
267
285
  }] } });
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9vcmdhbml6YXRpb24vb3JnYW5pemF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9vcmdhbml6YXRpb24vb3JnYW5pemF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hJLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0csT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7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S0FBSztnQkFJRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtPLGVBQWU7c0JBQTNCLEtBQUs7Z0JBbUJHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTUcsU0FBUztzQkFBakIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBUUksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBpbnB1dCwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDbGFzc2lmaWNhdGlvbiwgU3lzdGVtU2VydmljZSwgVHJhbnNsYXRlTW9kdWxlLCBVc2VyU2VydmljZSwgWXV2VXNlciB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgWVVWX0lDT05TIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL2ljb25zJztcbmltcG9ydCB7IEF1dG9Db21wbGV0ZSwgWXZjQXV0b2NvbXBsZXRlTW9kdWxlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBZdmNJY29uTW9kdWxlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIENyZWF0ZXMgZm9ybSBpbnB1dCBmb3Igb3JnYW5pc2F0aW9uIHZhbHVlcy5cbiAqIEltcGxlbWVudHMgYENvbnRyb2xWYWx1ZUFjY2Vzc29yYCBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoaW4gQW5ndWxhciBmb3Jtcy5cbiAqXG4gKiBbU2NyZWVuc2hvdF0oLi4vYXNzZXRzL2ltYWdlcy95dXYtb3JnYW5pemF0aW9uLmdpZilcbiAqXG4gKiBAZXhhbXBsZVxuICogPHl1di1vcmdhbml6YXRpb24gW211bHRpc2VsZWN0XT1cInRydWVcIj48L3l1di1vcmdhbml6YXRpb24+XG4gKi9cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneXV2LW9yZ2FuaXphdGlvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBZdmNBdXRvY29tcGxldGVNb2R1bGUsIFl2Y0ljb25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9vcmdhbml6YXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vcmdhbml6YXRpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBPcmdhbml6YXRpb25Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBPcmdhbml6YXRpb25Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgT3JnYW5pemF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XG4gIHByaXZhdGUgc3lzdGVtID0gaW5qZWN0KFN5c3RlbVNlcnZpY2UpO1xuICBwcml2YXRlIHVzZXJTZXJ2aWNlID0gaW5qZWN0KFVzZXJTZXJ2aWNlKTtcblxuICBAVmlld0NoaWxkKCdhdXRvY29tcGxldGUnKSBhdXRvQ29tcGxldGVJbnB1dCE6IEF1dG9Db21wbGV0ZTtcbiAgbWluTGVuZ3RoID0gMjtcblxuICBpY29ucyA9IHtcbiAgICBvcmdhbml6YXRpb25NdWx0aTogWVVWX0lDT05TWydncm91cCddLFxuICAgIG9yZ2FuaXphdGlvbjogWVVWX0lDT05TWyd1c2VyJ11cbiAgfTtcblxuICBwcml2YXRlIGlzVmFsaWRJbnB1dCA9IHRydWU7XG4gIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuICBfaW5uZXJWYWx1ZTogWXV2VXNlcltdID0gW107XG4gIHNldCBpbm5lclZhbHVlKGl2OiBZdXZVc2VyW10pIHtcbiAgICB0aGlzLl9pbm5lclZhbHVlID0gaXYgfHwgW107XG4gICAgdGhpcy51c2VyU2VsZWN0LmVtaXQodGhpcy5faW5uZXJWYWx1ZSk7XG4gIH1cbiAgZ2V0IGlubmVyVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lubmVyVmFsdWU7XG4gIH1cbiAgYXV0b2NvbXBsZXRlUmVzOiBZdXZVc2VyW10gPSBbXTtcbiAgcHJpdmF0ZSBmaWx0ZXJSb2xlczogc3RyaW5nW10gPSBbXTtcblxuICAvLyBwcmV2ZW50IEVOVEVSIGZyb20gYmVpbmcgcHJvcGFnYXRlZCwgYmVjYXVzZSB0aGUgY29tcG9uZW50IGNvdWxkIGJlIGxvY2F0ZWRcbiAgLy8gaW5zaWRlIHNvbWUgb3RoZXIgY29tcG9uZW50IHRoYXQgYWxzbyByZWx5cyBvbiBFTlRFUlxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVudGVyJywgWyckZXZlbnQnXSlcbiAgb25LZXlkb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pbnB1dERpc2FibGVkJykgZ2V0IF9pbnB1dERpc2FibGVkKCkge1xuICAgIHJldHVybiAhdGhpcy5tdWx0aXNlbGVjdCAmJiB0aGlzLmlubmVyVmFsdWU/Lmxlbmd0aCA9PT0gMTtcbiAgfVxuICAvLyBASG9zdEJpbmRpbmcoJ2NsYXNzLmlucHV0RGlydHknKSBnZXQgX2lucHV0RGlydHkoKSB7XG4gIC8vICAgcmV0dXJuIHRoaXMuYXV0b0NvbXBsZXRlSW5wdXQ/Lm11bHRpSW5wdXRFTD8ubmF0aXZlRWxlbWVudD8udmFsdWU7XG4gIC8vIH1cblxuICBASW5wdXQoKSBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgLyoqXG4gICAqIFBvc3NpYmxlcyB2YWx1ZXMgYXJlIGBFRElUYCAoZGVmYXVsdCksYFNFQVJDSGAsYENSRUFURWAuIEluIHNlYXJjaCBzaXR1YXRpb24gdmFsaWRhdGlvbiBvZiB0aGUgZm9ybSBlbGVtZW50IHdpbGwgYmUgdHVybmVkIG9mZiwgc28geW91IGFyZSBhYmxlIHRvIGVudGVyIHNlYXJjaCB0ZXJtcyB0aGF0IGRvIG5vdCBtZWV0IHRoZSBlbGVtZW50cyB2YWxpZGF0b3JzLlxuICAgKi9cbiAgQElucHV0KCkgc2l0dWF0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogSW5kaWNhdG9yIHRoYXQgbXVsdGlwbGUgc3RyaW5ncyBjb3VsZCBiZSBpbnNlcnRlZCwgdGhleSB3aWxsIGJlIHJlbmRlcmVkIGFzIGNoaXBzIChkZWZhdWx0OiBmYWxzZSkuXG4gICAqL1xuICBASW5wdXQoKSBtdWx0aXNlbGVjdCA9IGZhbHNlO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBzZW1hbnRpY3MgZm9yIHRoZSBmb3JtIGVsZW1lbnQuXG4gICAqL1xuICBwcml2YXRlIF9jbGFzc2lmaWNhdGlvbnM/OiBzdHJpbmdbXTtcbiAgQElucHV0KCkgc2V0IGNsYXNzaWZpY2F0aW9ucyhjOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NsYXNzaWZpY2F0aW9ucyA9IGM7XG4gICAgaWYgKGM/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgY2xhc3NpZmljYXRpb25zID0gdGhpcy5zeXN0ZW0uZ2V0Q2xhc3NpZmljYXRpb25zKGMpO1xuICAgICAgaWYgKGNsYXNzaWZpY2F0aW9ucy5oYXMoQ2xhc3NpZmljYXRpb24uU1RSSU5HX09SR0FOSVpBVElPTikpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNsYXNzaWZpY2F0aW9ucy5nZXQoQ2xhc3NpZmljYXRpb24uU1RSSU5HX09SR0FOSVpBVElPTikhLm9wdGlvbnM7XG4gICAgICAgIHRoaXMuZmlsdGVyUm9sZXMgPSBvcHRpb25zO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlclJvbGVzID0gW107XG4gICAgfVxuICB9XG4gIGdldCBjbGFzc2lmaWNhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsYXNzaWZpY2F0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIHByZXZlbnQgdGhlIGlucHV0IGZyb20gYmVpbmcgY2hhbmdlZCAoZGVmYXVsdDogZmFsc2UpXG4gICAqL1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICAvKipcbiAgICogU2V0IHRoaXMgdG8gdHJ1ZSBhbmQgdGhlIGNvbXBvbmVudCB3aWxsIHRyeSB0byBnYWluIGZvY3VzIG9uY2UgaXQgaGFzIGJlZW4gcmVuZGVyZWQuXG4gICAqIE5vdGljZSB0aGF0IHRoaXMgaXMgbm90IHJlbGlhYmxlLiBJZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbXBvbmVudHMgdGhhdCBhcmUgcmVuZGVyZWRcbiAgICogbGF0ZXIgYW5kIGFsc28gdHJ5IHRvIGJlIGZvY3VzZWQsIHRoZXkgd2lsbCAnd2luJywgYmVjYXVzZSB0aGVyZSBjYW4gb25seSBiZSBvbmUgZm9jdXMuXG4gICAqL1xuICBASW5wdXQoKSBhdXRvZm9jdXMgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2lsbCBhdHRjaCB0aGUgb3ZlcmxheSB0byB0aGlzIEhUTUxlbGVtZW50XG4gICAqL1xuICBASW5wdXQoKSBhcHBlbmRUbyA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGV4Y2x1ZGUgdGhlIGN1cnJlbnQgdXNlciBmcm9tIGF1dG9jb21wbGV0ZSByZXN1bHRcbiAgICovXG4gIEBJbnB1dCgpIGV4Y2x1ZGVNZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgZW1pdHRlZCB2YWx1ZSBzaG91bGQgYmUgYW4gb2JqZWN0IGNvbnRhaW5pbmcgaWQgYW5kIHRpdGxlXG4gICAqIG9yLCBpZiBzZXQgdG8gZmFsc2Ugb25seSB0aGUgSURcbiAgICovXG4gIHdpdGhNZXRhZGF0YSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBAT3V0cHV0KCkgdXNlclNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8WXV2VXNlcltdPigpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnJlc29sdmVGbih2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgdGhpcy5pbm5lclZhbHVlID0gW107XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge31cblxuICBwcml2YXRlIHByb3BhZ2F0ZSgpIHtcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLiNnZXRQcm9wYWdhdGVWYWx1ZSgpKTtcbiAgfVxuXG4gICNnZXRQcm9wYWdhdGVWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXNlbGVjdFxuICAgICAgPyB0aGlzLndpdGhNZXRhZGF0YSgpXG4gICAgICAgID8gdGhpcy52YWx1ZVxuICAgICAgICAgID8gdGhpcy5faW5uZXJWYWx1ZS5tYXAoKHYpID0+ICh7XG4gICAgICAgICAgICAgIGlkOiB2LmlkLFxuICAgICAgICAgICAgICB0aXRsZTogdi50aXRsZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgOiB0aGlzLndpdGhNZXRhZGF0YSgpXG4gICAgICAgID8gdGhpcy52YWx1ZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBpZDogdGhpcy5faW5uZXJWYWx1ZVswXS5pZCxcbiAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuX2lubmVyVmFsdWVbMF0udGl0bGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgICAgOiB0aGlzLnZhbHVlO1xuICB9XG5cbiAgZm9jdXNJbnB1dCgpIHtcbiAgICB0aGlzLmF1dG9Db21wbGV0ZUlucHV0LmZvY3VzSW5wdXQoKTtcbiAgfVxuXG4gIHJlc29sdmVGbih2YWx1ZTogYW55KSB7XG4gICAgY29uc3QgbWFwID0gKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgPyB2YWx1ZSA6IFt2YWx1ZV0pLm1hcCgodikgPT4ge1xuICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLmlubmVyVmFsdWUuZmluZCgoaXYpID0+IGl2LmlkID09PSB2KTtcbiAgICAgIHJldHVybiBtYXRjaFxuICAgICAgICA/IG9mKG1hdGNoKVxuICAgICAgICA6IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckJ5SWQodikucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT5cbiAgICAgICAgICAgICAgb2YoXG4gICAgICAgICAgICAgICAgbmV3IFl1dlVzZXIoXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB2LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdixcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IG51bGxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgIH0pO1xuICAgIHJldHVybiBmb3JrSm9pbihtYXApLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5pbm5lclZhbHVlID0gZGF0YTtcbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdXRvQ29tcGxldGVJbnB1dC5jZC5tYXJrRm9yQ2hlY2soKSk7XG4gICAgfSk7XG4gIH1cblxuICBhdXRvY29tcGxldGVGbihxdWVyeTogc3RyaW5nKSB7XG4gICAgaWYgKHF1ZXJ5Lmxlbmd0aCA+PSB0aGlzLm1pbkxlbmd0aCkge1xuICAgICAgdGhpcy51c2VyU2VydmljZS5xdWVyeVVzZXIocXVlcnksIHRoaXMuZXhjbHVkZU1lLCB0aGlzLmZpbHRlclJvbGVzKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAodXNlcnM6IFl1dlVzZXJbXSkgPT4ge1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlUmVzID0gdXNlcnMuZmlsdGVyKCh1c2VyKSA9PiAhdGhpcy5pbm5lclZhbHVlLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZS5pZCA9PT0gdXNlci5pZCkpO1xuICAgICAgICAgIHRoaXMucHJvcGFnYXRlVmFsaWRpdHkodGhpcy5hdXRvY29tcGxldGVSZXMubGVuZ3RoID4gMCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVSZXMgPSBbXTtcbiAgICAgICAgICB0aGlzLnByb3BhZ2F0ZVZhbGlkaXR5KHRoaXMuYXV0b2NvbXBsZXRlUmVzLmxlbmd0aCA+IDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVSZXMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvLyByZXR1cm5zIG51bGwgd2hlbiB2YWxpZCBlbHNlIHRoZSB2YWxpZGF0aW9uIG9iamVjdFxuICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZElucHV0ID8gbnVsbCA6IHsgZW1wdHk6IHsgdmFsaWQ6IGZhbHNlIH0gfTtcbiAgfVxuXG4gIHByb3BhZ2F0ZVZhbGlkaXR5KHZhbGlkID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLmlzVmFsaWRJbnB1dCAhPT0gdmFsaWQpIHtcbiAgICAgIHRoaXMuaXNWYWxpZElucHV0ID0gdmFsaWQ7XG4gICAgICB0aGlzLnByb3BhZ2F0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGhhbmRsZSBzZWxlY3Rpb24gY2hhbmdlcyB0byB0aGUgbW9kZWxcbiAgb25TZWxlY3QoKSB7XG4gICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlubmVyVmFsdWUubWFwKCh2KSA9PiB2LmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW50ZXJuYWwgYXV0b2NvbXBsZXRlIGNvbnRyb2wgaXMgYWx3YXlzIHNldCB0byBtdWx0aXNlbGVjdFxuICAgICAgLy8gc28gdGhlIHJlc29sdmVkIHZhbHVlIGlzIGFsd2F5cyBhbiBhcnJheVxuICAgICAgdGhpcy5pbm5lclZhbHVlID0gdGhpcy5pbm5lclZhbHVlLnNsaWNlKC0xKTtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlubmVyVmFsdWVbMF0uaWQ7XG4gICAgfVxuICAgIHRoaXMucHJvcGFnYXRlKCk7XG4gIH1cblxuICAvLyBoYW5kbGUgc2VsZWN0aW9uIGNoYW5nZXMgdG8gdGhlIG1vZGVsXG4gIG9uVW5zZWxlY3QodmFsdWU6IGFueSkge1xuICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHRoaXMuaW5uZXJWYWx1ZS5maWx0ZXIoKHYpID0+IHYuaWQgIT09IHZhbHVlLmlkKTtcbiAgICBjb25zdCBfdmFsdWUgPSB0aGlzLmlubmVyVmFsdWUubWFwKCh2KSA9PiB2LmlkKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5tdWx0aXNlbGVjdCA/IF92YWx1ZSA6IG51bGw7XG4gICAgaWYgKCF0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICB0aGlzLmNsZWFySW5uZXJJbnB1dCgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BhZ2F0ZSgpO1xuICB9XG5cbiAgb25BdXRvQ29tcGxldGVCbHVyKCkge1xuICAgIHRoaXMuY2xlYXJJbm5lcklucHV0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFySW5uZXJJbnB1dCgpIHtcbiAgICB0aGlzLmF1dG9Db21wbGV0ZUlucHV0LmNsZWFySW5wdXQoKTtcbiAgfVxufVxuIiwiPHl2Yy1hdXRvY29tcGxldGVcbiAgWyhuZ01vZGVsKV09XCJpbm5lclZhbHVlXCJcbiAgI2F1dG9jb21wbGV0ZVxuICAoc3VnZ2VzdGlvblNlbGVjdCk9XCJvblNlbGVjdCgpXCJcbiAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgKHN1Z2dlc3Rpb25VbnNlbGVjdCk9XCJvblVuc2VsZWN0KCRldmVudClcIlxuICAoYmx1cik9XCJvbkF1dG9Db21wbGV0ZUJsdXIoKVwiXG4gIFtkaXNhYmxlZF09XCJyZWFkb25seVwiXG4gIFthdXRvY29tcGxldGVWYWx1ZXNdPVwiYXV0b2NvbXBsZXRlUmVzXCJcbiAgZmllbGQ9XCJpZFwiXG4gIFtmb3JjZVNlbGVjdGlvbl09XCJ0cnVlXCJcbiAgKGF1dG9jb21wbGV0ZUZuYyk9XCJhdXRvY29tcGxldGVGbigkZXZlbnQpXCJcbiAgW211bHRpcGxlXT1cInRydWVcIlxuPlxuICA8IS0tIHRlbXBsYXRlIGZvciBpdGVtIGluc2lkZSB0aGUgZHJvcGRvd24gLS0+XG4gIDxuZy10ZW1wbGF0ZSAjYXV0b2NvbXBsZXRlT3B0aW9uVGVtcGxhdGUgbGV0LWl0ZW0+XG4gICAgPHNwYW4gY2xhc3M9XCJjaGlwXCI+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgXG4gIDwhLS0gdGVtcGxhdGUgZm9yIGNoaXAgLS0+XG4gIDxuZy10ZW1wbGF0ZSAjY2hpcFRlbXBsYXRlIGxldC1pdGVtPlxuICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gIDwvbmctdGVtcGxhdGU+XG48L3l2Yy1hdXRvY29tcGxldGU+XG5cbjx5dmMtaWNvblxuICBjbGFzcz1cImNsYXNzaWZ5XCJcbiAgW3RpdGxlXT1cIid5dXYuZm9ybS5lbGVtZW50Lm9yZ2FuaXphdGlvbi5jbGFzc2lmeS5pY29uLnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gIFtzdmddPVwibXVsdGlzZWxlY3QgPyBpY29ucy5vcmdhbml6YXRpb25NdWx0aSA6IGljb25zLm9yZ2FuaXphdGlvblwiXG4gIChjbGljayk9XCJmb2N1c0lucHV0KClcIlxuPjwveXZjLWljb24+XG4iXX0=
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9vcmdhbml6YXRpb24vb3JnYW5pemF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9vcmdhbml6YXRpb24vb3JnYW5pemF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hJLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVB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U0FBUztzQkFBakIsS0FBSztnQkFJRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtPLGVBQWU7c0JBQTNCLEtBQUs7Z0JBbUJHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTUcsU0FBUztzQkFBakIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBUUksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBpbmplY3QsIGlucHV0LCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENsYXNzaWZpY2F0aW9uLCBTeXN0ZW1TZXJ2aWNlLCBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UsIFVzZXJTZXJ2aWNlLCBZdXZVc2VyIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBZVVZfSUNPTlMgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvaWNvbnMnO1xuaW1wb3J0IHsgQXV0b0NvbXBsZXRlLCBZdmNBdXRvY29tcGxldGVNb2R1bGUgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IFl2Y0ljb25Nb2R1bGUgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvaWNvbic7XG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW50ZXJmYWNlIFVzZXJOb2RlIHtcbiAgdXNlcjogWXV2VXNlcjtcbiAgc3RhdGU6IHtcbiAgICBub3RGb3VuZD86IGJvb2xlYW47XG4gIH07XG4gIHRpdGxlU3RyaW5nPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgZm9ybSBpbnB1dCBmb3Igb3JnYW5pc2F0aW9uIHZhbHVlcy5cbiAqIEltcGxlbWVudHMgYENvbnRyb2xWYWx1ZUFjY2Vzc29yYCBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoaW4gQW5ndWxhciBmb3Jtcy5cbiAqXG4gKiBbU2NyZWVuc2hvdF0oLi4vYXNzZXRzL2ltYWdlcy95dXYtb3JnYW5pemF0aW9uLmdpZilcbiAqXG4gKiBAZXhhbXBsZVxuICogPHl1di1vcmdhbml6YXRpb24gW211bHRpc2VsZWN0XT1cInRydWVcIj48L3l1di1vcmdhbml6YXRpb24+XG4gKi9cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneXV2LW9yZ2FuaXphdGlvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBZdmNBdXRvY29tcGxldGVNb2R1bGUsIFl2Y0ljb25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9vcmdhbml6YXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vcmdhbml6YXRpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBPcmdhbml6YXRpb25Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBPcmdhbml6YXRpb25Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgT3JnYW5pemF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XG4gIHByaXZhdGUgc3lzdGVtID0gaW5qZWN0KFN5c3RlbVNlcnZpY2UpO1xuICBwcml2YXRlIHVzZXJTZXJ2aWNlID0gaW5qZWN0KFVzZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgQFZpZXdDaGlsZCgnYXV0b2NvbXBsZXRlJykgYXV0b0NvbXBsZXRlSW5wdXQhOiBBdXRvQ29tcGxldGU7XG4gIG1pbkxlbmd0aCA9IDI7XG5cbiAgaWNvbnMgPSB7XG4gICAgb3JnYW5pemF0aW9uTXVsdGk6IFlVVl9JQ09OU1snZ3JvdXAnXSxcbiAgICBvcmdhbml6YXRpb246IFlVVl9JQ09OU1sndXNlciddXG4gIH07XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkSW5wdXQgPSB0cnVlO1xuICB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsID0gbnVsbDtcbiAgX2lubmVyVmFsdWU6IFVzZXJOb2RlW10gPSBbXTtcbiAgc2V0IGlubmVyVmFsdWUoaXY6IFVzZXJOb2RlW10pIHtcbiAgICB0aGlzLl9pbm5lclZhbHVlID0gaXYgfHwgW107XG4gICAgdGhpcy51c2VyU2VsZWN0LmVtaXQodGhpcy5faW5uZXJWYWx1ZS5tYXAoKHYpID0+IHYudXNlcikpO1xuICB9XG4gIGdldCBpbm5lclZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbm5lclZhbHVlO1xuICB9XG4gIGF1dG9jb21wbGV0ZVJlczogVXNlck5vZGVbXSA9IFtdO1xuICBwcml2YXRlIGZpbHRlclJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIHByZXZlbnQgRU5URVIgZnJvbSBiZWluZyBwcm9wYWdhdGVkLCBiZWNhdXNlIHRoZSBjb21wb25lbnQgY291bGQgYmUgbG9jYXRlZFxuICAvLyBpbnNpZGUgc29tZSBvdGhlciBjb21wb25lbnQgdGhhdCBhbHNvIHJlbHlzIG9uIEVOVEVSXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxuICBvbktleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlucHV0RGlzYWJsZWQnKSBnZXQgX2lucHV0RGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuICF0aGlzLm11bHRpc2VsZWN0ICYmIHRoaXMuaW5uZXJWYWx1ZT8ubGVuZ3RoID09PSAxO1xuICB9XG4gIC8vIEBIb3N0QmluZGluZygnY2xhc3MuaW5wdXREaXJ0eScpIGdldCBfaW5wdXREaXJ0eSgpIHtcbiAgLy8gICByZXR1cm4gdGhpcy5hdXRvQ29tcGxldGVJbnB1dD8ubXVsdGlJbnB1dEVMPy5uYXRpdmVFbGVtZW50Py52YWx1ZTtcbiAgLy8gfVxuXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogUG9zc2libGVzIHZhbHVlcyBhcmUgYEVESVRgIChkZWZhdWx0KSxgU0VBUkNIYCxgQ1JFQVRFYC4gSW4gc2VhcmNoIHNpdHVhdGlvbiB2YWxpZGF0aW9uIG9mIHRoZSBmb3JtIGVsZW1lbnQgd2lsbCBiZSB0dXJuZWQgb2ZmLCBzbyB5b3UgYXJlIGFibGUgdG8gZW50ZXIgc2VhcmNoIHRlcm1zIHRoYXQgZG8gbm90IG1lZXQgdGhlIGVsZW1lbnRzIHZhbGlkYXRvcnMuXG4gICAqL1xuICBASW5wdXQoKSBzaXR1YXRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbmRpY2F0b3IgdGhhdCBtdWx0aXBsZSBzdHJpbmdzIGNvdWxkIGJlIGluc2VydGVkLCB0aGV5IHdpbGwgYmUgcmVuZGVyZWQgYXMgY2hpcHMgKGRlZmF1bHQ6IGZhbHNlKS5cbiAgICovXG4gIEBJbnB1dCgpIG11bHRpc2VsZWN0ID0gZmFsc2U7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHNlbWFudGljcyBmb3IgdGhlIGZvcm0gZWxlbWVudC5cbiAgICovXG4gIHByaXZhdGUgX2NsYXNzaWZpY2F0aW9ucz86IHN0cmluZ1tdO1xuICBASW5wdXQoKSBzZXQgY2xhc3NpZmljYXRpb25zKGM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY2xhc3NpZmljYXRpb25zID0gYztcbiAgICBpZiAoYz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjbGFzc2lmaWNhdGlvbnMgPSB0aGlzLnN5c3RlbS5nZXRDbGFzc2lmaWNhdGlvbnMoYyk7XG4gICAgICBpZiAoY2xhc3NpZmljYXRpb25zLmhhcyhDbGFzc2lmaWNhdGlvbi5TVFJJTkdfT1JHQU5JWkFUSU9OKSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gY2xhc3NpZmljYXRpb25zLmdldChDbGFzc2lmaWNhdGlvbi5TVFJJTkdfT1JHQU5JWkFUSU9OKSEub3B0aW9ucztcbiAgICAgICAgdGhpcy5maWx0ZXJSb2xlcyA9IG9wdGlvbnM7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyUm9sZXMgPSBbXTtcbiAgICB9XG4gIH1cbiAgZ2V0IGNsYXNzaWZpY2F0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xhc3NpZmljYXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFdpbGwgcHJldmVudCB0aGUgaW5wdXQgZnJvbSBiZWluZyBjaGFuZ2VkIChkZWZhdWx0OiBmYWxzZSlcbiAgICovXG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gIC8qKlxuICAgKiBTZXQgdGhpcyB0byB0cnVlIGFuZCB0aGUgY29tcG9uZW50IHdpbGwgdHJ5IHRvIGdhaW4gZm9jdXMgb25jZSBpdCBoYXMgYmVlbiByZW5kZXJlZC5cbiAgICogTm90aWNlIHRoYXQgdGhpcyBpcyBub3QgcmVsaWFibGUuIElmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29tcG9uZW50cyB0aGF0IGFyZSByZW5kZXJlZFxuICAgKiBsYXRlciBhbmQgYWxzbyB0cnkgdG8gYmUgZm9jdXNlZCwgdGhleSB3aWxsICd3aW4nLCBiZWNhdXNlIHRoZXJlIGNhbiBvbmx5IGJlIG9uZSBmb2N1cy5cbiAgICovXG4gIEBJbnB1dCgpIGF1dG9mb2N1cyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaWxsIGF0dGNoIHRoZSBvdmVybGF5IHRvIHRoaXMgSFRNTGVsZW1lbnRcbiAgICovXG4gIEBJbnB1dCgpIGFwcGVuZFRvID0gbnVsbDtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gZXhjbHVkZSB0aGUgY3VycmVudCB1c2VyIGZyb20gYXV0b2NvbXBsZXRlIHJlc3VsdFxuICAgKi9cbiAgQElucHV0KCkgZXhjbHVkZU1lID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZSBlbWl0dGVkIHZhbHVlIHNob3VsZCBiZSBhbiBvYmplY3QgY29udGFpbmluZyBpZCBhbmQgdGl0bGVcbiAgICogb3IsIGlmIHNldCB0byBmYWxzZSBvbmx5IHRoZSBJRFxuICAgKi9cbiAgd2l0aE1ldGFkYXRhID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIEBPdXRwdXQoKSB1c2VyU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxZdXZVc2VyW10+KCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMucmVzb2x2ZUZuKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICB0aGlzLmlubmVyVmFsdWUgPSBbXTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7fVxuXG4gIHByaXZhdGUgcHJvcGFnYXRlKCkge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuI2dldFByb3BhZ2F0ZVZhbHVlKCkpO1xuICB9XG5cbiAgI2dldFByb3BhZ2F0ZVZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLm11bHRpc2VsZWN0XG4gICAgICA/IHRoaXMud2l0aE1ldGFkYXRhKClcbiAgICAgICAgPyB0aGlzLnZhbHVlXG4gICAgICAgICAgPyB0aGlzLl9pbm5lclZhbHVlLm1hcCgodikgPT4gKHtcbiAgICAgICAgICAgICAgaWQ6IHYudXNlci5pZCxcbiAgICAgICAgICAgICAgdGl0bGU6IHYudXNlci50aXRsZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgOiB0aGlzLndpdGhNZXRhZGF0YSgpXG4gICAgICAgID8gdGhpcy52YWx1ZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBpZDogdGhpcy5faW5uZXJWYWx1ZVswXS51c2VyLmlkLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5faW5uZXJWYWx1ZVswXS51c2VyLnRpdGxlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICAgIDogdGhpcy52YWx1ZTtcbiAgfVxuXG4gIGZvY3VzSW5wdXQoKSB7XG4gICAgdGhpcy5hdXRvQ29tcGxldGVJbnB1dC5mb2N1c0lucHV0KCk7XG4gIH1cblxuICByZXNvbHZlRm4odmFsdWU6IGFueSkge1xuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxVc2VyTm9kZT5bXSA9ICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5ID8gdmFsdWUgOiBbdmFsdWVdKS5tYXAoKHYpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlSUQgPSB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyB2IDogdi5pZDtcblxuICAgICAgY29uc3QgbWF0Y2g6IFVzZXJOb2RlIHwgdW5kZWZpbmVkID0gdGhpcy5pbm5lclZhbHVlLmZpbmQoKGl2KSA9PiBpdi51c2VyLmlkID09PSB2YWx1ZUlEKTtcbiAgICAgIHJldHVybiBtYXRjaFxuICAgICAgICA/IG9mKG1hdGNoKVxuICAgICAgICA6IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckJ5SWQodmFsdWVJRCkucGlwZShcbiAgICAgICAgICAgIG1hcCgocmVzOiBZdXZVc2VyKSA9PiAoe1xuICAgICAgICAgICAgICB1c2VyOiByZXMsXG4gICAgICAgICAgICAgIHN0YXRlOiB7fVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdXNlciA9IG5ldyBZdXZVc2VyKHtcbiAgICAgICAgICAgICAgICBpZDogdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gdiA6IHYuaWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHVzZXIudGl0bGUgPSB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyB2IDogdi50aXRsZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgICAgICAgICBub3RGb3VuZDogZS5zdGF0dXMgPT09IDQwNFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGl0bGVTdHJpbmc6IGUuc3RhdHVzID09PSA0MDQgPyB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuZm9ybS5lbGVtZW50Lm9yZ2FuaXphdGlvbi51c2VyLm5vdC1mb3VuZCcpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgIH0pO1xuICAgIHJldHVybiBmb3JrSm9pbihvYnMpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5pbm5lclZhbHVlID0gZGF0YTtcbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdXRvQ29tcGxldGVJbnB1dC5jZC5tYXJrRm9yQ2hlY2soKSk7XG4gICAgfSk7XG4gIH1cblxuICBhdXRvY29tcGxldGVGbihxdWVyeTogc3RyaW5nKSB7XG4gICAgaWYgKHF1ZXJ5Lmxlbmd0aCA+PSB0aGlzLm1pbkxlbmd0aCkge1xuICAgICAgdGhpcy51c2VyU2VydmljZS5xdWVyeVVzZXIocXVlcnksIHRoaXMuZXhjbHVkZU1lLCB0aGlzLmZpbHRlclJvbGVzKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAodXNlcnM6IFl1dlVzZXJbXSkgPT4ge1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlUmVzID0gdXNlcnNcbiAgICAgICAgICAgIC5maWx0ZXIoKHVzZXIpID0+ICF0aGlzLmlubmVyVmFsdWUuc29tZSgodmFsdWUpID0+IHZhbHVlLnVzZXIuaWQgPT09IHVzZXIuaWQpKVxuICAgICAgICAgICAgLm1hcCgodXNlcikgPT4gKHtcbiAgICAgICAgICAgICAgdXNlcjogdXNlcixcbiAgICAgICAgICAgICAgc3RhdGU6IHt9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgdGhpcy5wcm9wYWdhdGVWYWxpZGl0eSh0aGlzLmF1dG9jb21wbGV0ZVJlcy5sZW5ndGggPiAwKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVJlcyA9IFtdO1xuICAgICAgICAgIHRoaXMucHJvcGFnYXRlVmFsaWRpdHkodGhpcy5hdXRvY29tcGxldGVSZXMubGVuZ3RoID4gMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVJlcyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJldHVybnMgbnVsbCB3aGVuIHZhbGlkIGVsc2UgdGhlIHZhbGlkYXRpb24gb2JqZWN0XG4gIHB1YmxpYyB2YWxpZGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkSW5wdXQgPyBudWxsIDogeyBlbXB0eTogeyB2YWxpZDogZmFsc2UgfSB9O1xuICB9XG5cbiAgcHJvcGFnYXRlVmFsaWRpdHkodmFsaWQgPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZElucHV0ICE9PSB2YWxpZCkge1xuICAgICAgdGhpcy5pc1ZhbGlkSW5wdXQgPSB2YWxpZDtcbiAgICAgIHRoaXMucHJvcGFnYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gaGFuZGxlIHNlbGVjdGlvbiBjaGFuZ2VzIHRvIHRoZSBtb2RlbFxuICBvblNlbGVjdCgpIHtcbiAgICBpZiAodGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5uZXJWYWx1ZS5tYXAoKHYpID0+IHYudXNlci5pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGludGVybmFsIGF1dG9jb21wbGV0ZSBjb250cm9sIGlzIGFsd2F5cyBzZXQgdG8gbXVsdGlzZWxlY3RcbiAgICAgIC8vIHNvIHRoZSByZXNvbHZlZCB2YWx1ZSBpcyBhbHdheXMgYW4gYXJyYXlcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHRoaXMuaW5uZXJWYWx1ZS5zbGljZSgtMSk7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5pbm5lclZhbHVlWzBdLnVzZXIuaWQ7XG4gICAgfVxuICAgIHRoaXMucHJvcGFnYXRlKCk7XG4gIH1cblxuICAvLyBoYW5kbGUgc2VsZWN0aW9uIGNoYW5nZXMgdG8gdGhlIG1vZGVsXG4gIG9uVW5zZWxlY3QodmFsdWU6IGFueSkge1xuICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHRoaXMuaW5uZXJWYWx1ZS5maWx0ZXIoKHYpID0+IHYudXNlci5pZCAhPT0gdmFsdWUuaWQpO1xuICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMuaW5uZXJWYWx1ZS5tYXAoKHYpID0+IHYudXNlci5pZCk7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubXVsdGlzZWxlY3QgPyBfdmFsdWUgOiBudWxsO1xuICAgIGlmICghdGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgdGhpcy5jbGVhcklubmVySW5wdXQoKTtcbiAgICB9XG4gICAgdGhpcy5wcm9wYWdhdGUoKTtcbiAgfVxuXG4gIG9uQXV0b0NvbXBsZXRlQmx1cigpIHtcbiAgICB0aGlzLmNsZWFySW5uZXJJbnB1dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhcklubmVySW5wdXQoKSB7XG4gICAgdGhpcy5hdXRvQ29tcGxldGVJbnB1dC5jbGVhcklucHV0KCk7XG4gIH1cbn1cbiIsIjx5dmMtYXV0b2NvbXBsZXRlXG4gIFsobmdNb2RlbCldPVwiaW5uZXJWYWx1ZVwiXG4gICNhdXRvY29tcGxldGVcbiAgKHN1Z2dlc3Rpb25TZWxlY3QpPVwib25TZWxlY3QoKVwiXG4gIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gIChzdWdnZXN0aW9uVW5zZWxlY3QpPVwib25VbnNlbGVjdCgkZXZlbnQpXCJcbiAgKGJsdXIpPVwib25BdXRvQ29tcGxldGVCbHVyKClcIlxuICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICBbYXV0b2NvbXBsZXRlVmFsdWVzXT1cImF1dG9jb21wbGV0ZVJlc1wiXG4gIGZpZWxkPVwiaWRcIlxuICBbZm9yY2VTZWxlY3Rpb25dPVwidHJ1ZVwiXG4gIChhdXRvY29tcGxldGVGbmMpPVwiYXV0b2NvbXBsZXRlRm4oJGV2ZW50KVwiXG4gIFttdWx0aXBsZV09XCJ0cnVlXCJcbj5cbiAgPCEtLSB0ZW1wbGF0ZSBmb3IgaXRlbSBpbnNpZGUgdGhlIGRyb3Bkb3duIC0tPlxuICA8bmctdGVtcGxhdGUgI2F1dG9jb21wbGV0ZU9wdGlvblRlbXBsYXRlIGxldC1pdGVtPlxuICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPnt7IGl0ZW0udXNlci50aXRsZSB9fTwvc3Bhbj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8IS0tIHRlbXBsYXRlIGZvciBjaGlwIC0tPlxuICA8bmctdGVtcGxhdGUgI2NoaXBUZW1wbGF0ZSBsZXQtaXRlbT5cbiAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiBbbmdDbGFzc109XCJ7IG5vdEZvdW5kOiBpdGVtLnN0YXRlLm5vdEZvdW5kIH1cIiBbdGl0bGVdPVwiaXRlbS50aXRsZVN0cmluZ1wiPlxuICAgICAge3sgaXRlbS51c2VyLnRpdGxlIH19XG4gICAgPC9zcGFuPlxuICA8L25nLXRlbXBsYXRlPlxuPC95dmMtYXV0b2NvbXBsZXRlPlxuXG48eXZjLWljb24gY2xhc3M9XCJjbGFzc2lmeVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzdmddPVwibXVsdGlzZWxlY3QgPyBpY29ucy5vcmdhbml6YXRpb25NdWx0aSA6IGljb25zLm9yZ2FuaXphdGlvblwiIChjbGljayk9XCJmb2N1c0lucHV0KClcIj48L3l2Yy1pY29uPlxuIl19
@@ -0,0 +1,38 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, effect, inject, input, output } from '@angular/core';
3
+ import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';
4
+ import { TranslateModule } from '@yuuvis/client-core';
5
+ import { YvcOverlayRef } from '@yuuvis/components/overlay';
6
+ import { DatetimeRangeComponent } from '../../datetime-range/datetime-range.component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/forms";
9
+ import * as i2 from "@yuuvis/client-core";
10
+ export class DateRangePickerComponent {
11
+ constructor() {
12
+ this.#oRef = inject(YvcOverlayRef);
13
+ this.#fb = inject(FormBuilder);
14
+ this.form = this.#fb.group({
15
+ range: this.#fb.control(this.#oRef.data.range, Validators.required)
16
+ });
17
+ this.range = input(this.#oRef.data.range);
18
+ this.rangeChange = output();
19
+ this.#rangeEffect = effect(() => {
20
+ const range = this.range();
21
+ this.form.patchValue({ range });
22
+ });
23
+ }
24
+ #oRef;
25
+ #fb;
26
+ #rangeEffect;
27
+ apply() {
28
+ this.rangeChange.emit(this.form.value.range || undefined);
29
+ this.#oRef?.close(this.form.value.range);
30
+ }
31
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
32
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: DateRangePickerComponent, isStandalone: true, selector: "yuv-date-range-picker", inputs: { range: { classPropertyName: "range", publicName: "range", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rangeChange: "rangeChange" }, ngImport: i0, template: "<form [formGroup]=\"form\" (ngSubmit)=\"apply()\">\n <h2>{{ 'yuv.form.element.range-select-date.custom.overlay.title' | translate }}</h2>\n <yuv-datetime-range [withTime]=\"false\" formControlName=\"range\"></yuv-datetime-range>\n <button class=\"primary\" [disabled]=\"form.invalid\">{{ 'yuv.form.element.range-select-date.custom.overlay.button.apply' | translate }}</button>\n</form>\n", styles: [":host{--form-element-border-color: transparent;--yvc-form-element-border-color: transparent}:host form{display:grid;grid-template-columns:1fr auto;grid-template-rows:repeat(3,auto);grid-template-areas:\"title title\" \"input input\" \". button\";gap:var(--app-pane-padding);padding:var(--app-pane-padding)}:host form h2{grid-area:title;margin:0}:host form yuv-datetime-range{grid-area:input;border:1px solid var(--text-color-hint);padding:1px 2px;border-radius:2px}:host form button{grid-area:button}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: DatetimeRangeComponent, selector: "yuv-datetime-range", inputs: ["withTime", "readonly", "operator", "situation"] }] }); }
33
+ }
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateRangePickerComponent, decorators: [{
35
+ type: Component,
36
+ args: [{ selector: 'yuv-date-range-picker', standalone: true, imports: [CommonModule, ReactiveFormsModule, TranslateModule, DatetimeRangeComponent], template: "<form [formGroup]=\"form\" (ngSubmit)=\"apply()\">\n <h2>{{ 'yuv.form.element.range-select-date.custom.overlay.title' | translate }}</h2>\n <yuv-datetime-range [withTime]=\"false\" formControlName=\"range\"></yuv-datetime-range>\n <button class=\"primary\" [disabled]=\"form.invalid\">{{ 'yuv.form.element.range-select-date.custom.overlay.button.apply' | translate }}</button>\n</form>\n", styles: [":host{--form-element-border-color: transparent;--yvc-form-element-border-color: transparent}:host form{display:grid;grid-template-columns:1fr auto;grid-template-rows:repeat(3,auto);grid-template-areas:\"title title\" \"input input\" \". button\";gap:var(--app-pane-padding);padding:var(--app-pane-padding)}:host form h2{grid-area:title;margin:0}:host form yuv-datetime-range{grid-area:input;border:1px solid var(--text-color-hint);padding:1px 2px;border-radius:2px}:host form button{grid-area:button}\n"] }]
37
+ }] });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWZyYW1ld29yay9mb3Jtcy9zcmMvbGliL2VsZW1lbnRzL3JhbmdlLXNlbGVjdC1kYXRlL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9yYW5nZS1zZWxlY3QtZGF0ZS9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQWMsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7O0FBU3ZGLE1BQU0sT0FBTyx3QkFBd0I7SUFQckM7UUFRRSxVQUFLLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlCLFFBQUcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFMUIsU0FBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBeUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7U0FDNUYsQ0FBQyxDQUFDO1FBRUgsVUFBSyxHQUFHLEtBQUssQ0FBeUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsZ0JBQVcsR0FBRyxNQUFNLEVBQTBCLENBQUM7UUFDL0MsaUJBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7S0FNSjtJQWxCQyxLQUFLLENBQXlCO0lBQzlCLEdBQUcsQ0FBdUI7SUFRMUIsWUFBWSxDQUdUO0lBRUgsS0FBSztRQUNILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDOytHQWxCVSx3QkFBd0I7bUdBQXhCLHdCQUF3Qiw4UENkckMsd1lBS0EsK2lCREtZLFlBQVksOEJBQUUsbUJBQW1CLDRyQkFBRSxlQUFlLDRGQUFFLHNCQUFzQjs7NEZBSXpFLHdCQUF3QjtrQkFQcEMsU0FBUzsrQkFDRSx1QkFBdUIsY0FDckIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJhbmdlVmFsdWUsIFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgWXZjT3ZlcmxheVJlZiB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9vdmVybGF5JztcbmltcG9ydCB7IERhdGV0aW1lUmFuZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kYXRldGltZS1yYW5nZS9kYXRldGltZS1yYW5nZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd5dXYtZGF0ZS1yYW5nZS1waWNrZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIERhdGV0aW1lUmFuZ2VDb21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCB7XG4gICNvUmVmID0gaW5qZWN0KFl2Y092ZXJsYXlSZWYpO1xuICAjZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuXG4gIGZvcm0gPSB0aGlzLiNmYi5ncm91cCh7XG4gICAgcmFuZ2U6IHRoaXMuI2ZiLmNvbnRyb2w8UmFuZ2VWYWx1ZSB8IHVuZGVmaW5lZD4odGhpcy4jb1JlZi5kYXRhLnJhbmdlLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxuICB9KTtcblxuICByYW5nZSA9IGlucHV0PFJhbmdlVmFsdWUgfCB1bmRlZmluZWQ+KHRoaXMuI29SZWYuZGF0YS5yYW5nZSk7XG4gIHJhbmdlQ2hhbmdlID0gb3V0cHV0PFJhbmdlVmFsdWUgfCB1bmRlZmluZWQ+KCk7XG4gICNyYW5nZUVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcmFuZ2UgPSB0aGlzLnJhbmdlKCk7XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyByYW5nZSB9KTtcbiAgfSk7XG5cbiAgYXBwbHkoKSB7XG4gICAgdGhpcy5yYW5nZUNoYW5nZS5lbWl0KHRoaXMuZm9ybS52YWx1ZS5yYW5nZSB8fCB1bmRlZmluZWQpO1xuICAgIHRoaXMuI29SZWY/LmNsb3NlKHRoaXMuZm9ybS52YWx1ZS5yYW5nZSk7XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChuZ1N1Ym1pdCk9XCJhcHBseSgpXCI+XG4gIDxoMj57eyAneXV2LmZvcm0uZWxlbWVudC5yYW5nZS1zZWxlY3QtZGF0ZS5jdXN0b20ub3ZlcmxheS50aXRsZScgfCB0cmFuc2xhdGUgfX08L2gyPlxuICA8eXV2LWRhdGV0aW1lLXJhbmdlIFt3aXRoVGltZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cInJhbmdlXCI+PC95dXYtZGF0ZXRpbWUtcmFuZ2U+XG4gIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiPnt7ICd5dXYuZm9ybS5lbGVtZW50LnJhbmdlLXNlbGVjdC1kYXRlLmN1c3RvbS5vdmVybGF5LmJ1dHRvbi5hcHBseScgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cbjwvZm9ybT5cbiJdfQ==
@@ -0,0 +1,181 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, forwardRef, inject, input, signal } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { FormBuilder, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
5
+ import { marker } from '@colsen1991/ngx-translate-extract-marker';
6
+ import { LocaleDatePipe, Operator, OperatorLabel, SearchUtils, TranslateService } from '@yuuvis/client-core';
7
+ import { YvcDropdownModule } from '@yuuvis/components/dropdown';
8
+ import { YvcOverlayService } from '@yuuvis/components/overlay';
9
+ import { DateRangePickerComponent } from './date-range-picker/date-range-picker.component';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@yuuvis/components/dropdown";
12
+ import * as i2 from "@angular/forms";
13
+ // marker for extracting translations for the available date range options
14
+ marker('yuv.form.element.range-select-date.option.any');
15
+ marker('yuv.form.element.range-select-date.option.today');
16
+ marker('yuv.form.element.range-select-date.option.yesterday');
17
+ marker('yuv.form.element.range-select-date.option.thisWeek');
18
+ marker('yuv.form.element.range-select-date.option.lastWeek');
19
+ marker('yuv.form.element.range-select-date.option.thisMonth');
20
+ marker('yuv.form.element.range-select-date.option.lastMonth');
21
+ marker('yuv.form.element.range-select-date.option.thisYear');
22
+ marker('yuv.form.element.range-select-date.option.lastYear');
23
+ marker('yuv.form.element.range-select-date.option.custom');
24
+ /**
25
+ * Component for selecting a date range based on pre-defined ranges like
26
+ * 'today', 'this week', 'this month', etc.
27
+ * It also allows to pick a custom date range.
28
+ */
29
+ export class RangeSelectDateComponent {
30
+ #overlay;
31
+ #fb;
32
+ #ANY_OPTION;
33
+ #CUSTOM_OPTION;
34
+ #customDateRange;
35
+ constructor() {
36
+ this.translate = inject(TranslateService);
37
+ this.#overlay = inject(YvcOverlayService);
38
+ this.#fb = inject(FormBuilder);
39
+ this.#ANY_OPTION = 'any';
40
+ this.#CUSTOM_OPTION = 'custom';
41
+ this.dateOptions = signal([]);
42
+ this.innerForm = this.#fb.nonNullable.group({
43
+ range: [this.#ANY_OPTION]
44
+ });
45
+ /**
46
+ * Range values to be used in the dropdown.
47
+ */
48
+ this.ranges = input(['today', 'yesterday', 'thisWeek', 'thisMonth', 'thisYear']);
49
+ /**
50
+ * Whether to show the custom date range option.
51
+ */
52
+ this.customRange = input(true);
53
+ // ControlValueAccessor implementation
54
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
55
+ this.propagateChange = (_) => { };
56
+ this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((_) => this.#setupOptions());
57
+ this.#setupOptions();
58
+ this.innerForm.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => this.#onFormValueChange(v));
59
+ }
60
+ #onFormValueChange(v) {
61
+ if (v.range === this.#CUSTOM_OPTION) {
62
+ if (!this.#customDateRange || this.dateOptions().find((o) => o.value === this.#CUSTOM_OPTION)?.label === this.#customDateRangeToString())
63
+ this.#openCustomRangeDialog();
64
+ else
65
+ this.propagateChange({
66
+ rangeValue: this.#customDateRange,
67
+ label: this.#customDateRangeToString()
68
+ });
69
+ }
70
+ else {
71
+ const { start, end } = SearchUtils.dateRangeStartEnd(v.range);
72
+ this.propagateChange(v.range !== this.#ANY_OPTION
73
+ ? {
74
+ rangeValue: { operator: Operator.INTERVAL_INCLUDE_BOTH, firstValue: start, secondValue: end },
75
+ label: this.translate.instant(`yuv.form.element.range-select-date.option.${v.range}`)
76
+ }
77
+ : undefined);
78
+ this.#customDateRange = undefined;
79
+ this.#setupOptions();
80
+ }
81
+ }
82
+ #openCustomRangeDialog() {
83
+ // open date range picker
84
+ const o = this.#overlay.open(DateRangePickerComponent, {
85
+ range: this.#customDateRange
86
+ });
87
+ o.afterClosed$.subscribe((res) => {
88
+ this.#customDateRange = res.data;
89
+ if (!res.data) {
90
+ this.innerForm.patchValue({ range: this.#ANY_OPTION });
91
+ this.#setupOptions();
92
+ }
93
+ else {
94
+ this.#onFormValueChange(this.innerForm.value);
95
+ this.#setupOptions(this.#customDateRangeToString());
96
+ setTimeout(() => {
97
+ this.innerForm.patchValue({ range: this.#CUSTOM_OPTION }, {
98
+ emitEvent: false
99
+ });
100
+ });
101
+ }
102
+ });
103
+ }
104
+ #setupOptions(custom) {
105
+ const options = this.ranges().map((value) => ({
106
+ label: this.translate.instant(`yuv.form.element.range-select-date.option.${value}`),
107
+ value
108
+ }));
109
+ if (this.customRange())
110
+ options.push({
111
+ label: custom || this.translate.instant('yuv.form.element.range-select-date.option.custom'),
112
+ value: this.#CUSTOM_OPTION
113
+ });
114
+ this.dateOptions.set([
115
+ {
116
+ label: this.translate.instant('yuv.form.element.range-select-date.option.any'),
117
+ value: this.#ANY_OPTION
118
+ },
119
+ ...options
120
+ ]);
121
+ }
122
+ #customDateRangeToString() {
123
+ if (!this.#customDateRange)
124
+ return undefined;
125
+ const dp = new LocaleDatePipe(this.translate);
126
+ switch (this.#customDateRange.operator) {
127
+ case Operator.EQUAL: {
128
+ return dp.transform(this.#customDateRange.firstValue, 'shortDate');
129
+ }
130
+ case Operator.GREATER_OR_EQUAL: {
131
+ return `${OperatorLabel.GREATER_OR_EQUAL} ${dp.transform(this.#customDateRange.firstValue, 'shortDate')}`;
132
+ }
133
+ case Operator.LESS_OR_EQUAL: {
134
+ return `${OperatorLabel.LESS_OR_EQUAL} ${dp.transform(this.#customDateRange.firstValue, 'shortDate')}`;
135
+ }
136
+ case Operator.INTERVAL_INCLUDE_BOTH: {
137
+ return `${dp.transform(this.#customDateRange.firstValue, 'shortDate')} ${OperatorLabel.INTERVAL_INCLUDE_BOTH} ${dp.transform(this.#customDateRange.secondValue, 'shortDate')}`;
138
+ }
139
+ }
140
+ return undefined;
141
+ }
142
+ writeValue(value) {
143
+ if (value?.rangeValue?.operator && value?.rangeValue?.firstValue) {
144
+ const dr = SearchUtils.getMatchingDateRange(value.rangeValue);
145
+ if (dr) {
146
+ this.innerForm.patchValue({ range: dr });
147
+ }
148
+ else {
149
+ this.#customDateRange = value.rangeValue;
150
+ this.innerForm.patchValue({ range: this.#CUSTOM_OPTION });
151
+ }
152
+ }
153
+ else {
154
+ this.innerForm.patchValue({ range: this.#ANY_OPTION });
155
+ }
156
+ }
157
+ registerOnChange(fn) {
158
+ this.propagateChange = fn;
159
+ }
160
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
161
+ registerOnTouched(fn) { }
162
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RangeSelectDateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
163
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: RangeSelectDateComponent, isStandalone: true, selector: "yuv-range-select-date", inputs: { ranges: { classPropertyName: "ranges", publicName: "ranges", isSignal: true, isRequired: false, transformFunction: null }, customRange: { classPropertyName: "customRange", publicName: "customRange", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
164
+ {
165
+ provide: NG_VALUE_ACCESSOR,
166
+ useExisting: forwardRef(() => RangeSelectDateComponent),
167
+ multi: true
168
+ }
169
+ ], ngImport: i0, template: "<form [formGroup]=\"innerForm\">\n <yvc-dropdown formControlName=\"range\" [options]=\"dateOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n</form>", styles: [":host form{display:flex}:host form yvc-dropdown{flex:1;outline-offset:0px;color:currentColor}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: YvcDropdownModule }, { kind: "component", type: i1.Dropdown, selector: "yvc-dropdown", inputs: ["options", "filter", "disabled", "multiple", "disableClearButton"], outputs: ["onDropdownOptionsClose"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
170
+ }
171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RangeSelectDateComponent, decorators: [{
172
+ type: Component,
173
+ args: [{ selector: 'yuv-range-select-date', standalone: true, imports: [CommonModule, YvcDropdownModule, ReactiveFormsModule], providers: [
174
+ {
175
+ provide: NG_VALUE_ACCESSOR,
176
+ useExisting: forwardRef(() => RangeSelectDateComponent),
177
+ multi: true
178
+ }
179
+ ], template: "<form [formGroup]=\"innerForm\">\n <yvc-dropdown formControlName=\"range\" [options]=\"dateOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n</form>", styles: [":host form{display:flex}:host form yvc-dropdown{flex:1;outline-offset:0px;color:currentColor}\n"] }]
180
+ }], ctorParameters: () => [] });
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2VsZWN0LWRhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWZyYW1ld29yay9mb3Jtcy9zcmMvbGliL2VsZW1lbnRzL3JhbmdlLXNlbGVjdC1kYXRlL3JhbmdlLXNlbGVjdC1kYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9yYW5nZS1zZWxlY3QtZGF0ZS9yYW5nZS1zZWxlY3QtZGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbEUsT0FBTyxFQUFhLGNBQWMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFjLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BJLE9BQU8sRUFBa0IsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRixPQUFPLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7Ozs7QUFHM0YsMEVBQTBFO0FBQzFFLE1BQU0sQ0FBQywr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T0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUseUJBQXlCLENBQUM7NEJBQ3ZELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgaW5qZWN0LCBpbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUJ1aWxkZXIsIE5HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgbWFya2VyIH0gZnJvbSAnQGNvbHNlbjE5OTEvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XG5pbXBvcnQgeyBEYXRlUmFuZ2UsIExvY2FsZURhdGVQaXBlLCBPcGVyYXRvciwgT3BlcmF0b3JMYWJlbCwgUmFuZ2VWYWx1ZSwgU2VhcmNoVXRpbHMsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9uLCBZdmNEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBPdmVybGF5Q2xvc2VFdmVudCwgWXZjT3ZlcmxheVNlcnZpY2UgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvb3ZlcmxheSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSYW5nZVNlbGVjdERhdGVWYWx1ZSB9IGZyb20gJy4vcmFuZ2Utc2VsZWN0LWRhdGUuaW50ZXJmYWNlJztcblxuLy8gbWFya2VyIGZvciBleHRyYWN0aW5nIHRyYW5zbGF0aW9ucyBmb3IgdGhlIGF2YWlsYWJsZSBkYXRlIHJhbmdlIG9wdGlvbnNcbm1hcmtlcigneXV2LmZvcm0uZWxlbWVudC5yYW5nZS1zZWxlY3QtZGF0ZS5vcHRpb24uYW55Jyk7XG5tYXJrZXIoJ3l1di5mb3JtLmVsZW1lbnQucmFuZ2Utc2VsZWN0LWRhdGUub3B0aW9uLnRvZGF5Jyk7XG5tYXJrZXIoJ3l1di5mb3JtLmVsZW1lbnQucmFuZ2Utc2VsZWN0LWRhdGUub3B0aW9uLnllc3RlcmRheScpO1xubWFya2VyKCd5dXYuZm9ybS5lbGVtZW50LnJhbmdlLXNlbGVjdC1kYXRlLm9wdGlvbi50aGlzV2VlaycpO1xubWFya2VyKCd5dXYuZm9ybS5lbGVtZW50LnJhbmdlLXNlbGVjdC1kYXRlLm9wdGlvbi5sYXN0V2VlaycpO1xubWFya2VyKCd5dXYuZm9ybS5lbGVtZW50LnJhbmdlLXNlbGVjdC1kYXRlLm9wdGlvbi50aGlzTW9udGgnKTtcbm1hcmtlcigneXV2LmZvcm0uZWxlbWVudC5yYW5nZS1zZWxlY3QtZGF0ZS5vcHRpb24ubGFzdE1vbnRoJyk7XG5tYXJrZXIoJ3l1di5mb3JtLmVsZW1lbnQucmFuZ2Utc2VsZWN0LWRhdGUub3B0aW9uLnRoaXNZZWFyJyk7XG5tYXJrZXIoJ3l1di5mb3JtLmVsZW1lbnQucmFuZ2Utc2VsZWN0LWRhdGUub3B0aW9uLmxhc3RZZWFyJyk7XG5tYXJrZXIoJ3l1di5mb3JtLmVsZW1lbnQucmFuZ2Utc2VsZWN0LWRhdGUub3B0aW9uLmN1c3RvbScpO1xuXG4vKipcbiAqIENvbXBvbmVudCBmb3Igc2VsZWN0aW5nIGEgZGF0ZSByYW5nZSBiYXNlZCBvbiBwcmUtZGVmaW5lZCByYW5nZXMgbGlrZVxuICogJ3RvZGF5JywgJ3RoaXMgd2VlaycsICd0aGlzIG1vbnRoJywgZXRjLlxuICogSXQgYWxzbyBhbGxvd3MgdG8gcGljayBhIGN1c3RvbSBkYXRlIHJhbmdlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd5dXYtcmFuZ2Utc2VsZWN0LWRhdGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBZdmNEcm9wZG93bk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9yYW5nZS1zZWxlY3QtZGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9yYW5nZS1zZWxlY3QtZGF0ZS5jb21wb25lbnQuc2NzcycsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmFuZ2VTZWxlY3REYXRlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFJhbmdlU2VsZWN0RGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gICNvdmVybGF5ID0gaW5qZWN0KFl2Y092ZXJsYXlTZXJ2aWNlKTtcbiAgI2ZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcblxuICAjQU5ZX09QVElPTiA9ICdhbnknO1xuICAjQ1VTVE9NX09QVElPTiA9ICdjdXN0b20nO1xuXG4gIGRhdGVPcHRpb25zID0gc2lnbmFsPERyb3Bkb3duT3B0aW9uW10+KFtdKTtcbiAgI2N1c3RvbURhdGVSYW5nZT86IFJhbmdlVmFsdWU7XG5cbiAgaW5uZXJGb3JtID0gdGhpcy4jZmIubm9uTnVsbGFibGUuZ3JvdXAoe1xuICAgIHJhbmdlOiBbdGhpcy4jQU5ZX09QVElPTl1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIFJhbmdlIHZhbHVlcyB0byBiZSB1c2VkIGluIHRoZSBkcm9wZG93bi5cbiAgICovXG4gIHJhbmdlcyA9IGlucHV0PERhdGVSYW5nZVtdPihbJ3RvZGF5JywgJ3llc3RlcmRheScsICd0aGlzV2VlaycsICd0aGlzTW9udGgnLCAndGhpc1llYXInXSk7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIGN1c3RvbSBkYXRlIHJhbmdlIG9wdGlvbi5cbiAgICovXG4gIGN1c3RvbVJhbmdlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoXykgPT4gdGhpcy4jc2V0dXBPcHRpb25zKCkpO1xuICAgIHRoaXMuI3NldHVwT3B0aW9ucygpO1xuICAgIHRoaXMuaW5uZXJGb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKHYpID0+IHRoaXMuI29uRm9ybVZhbHVlQ2hhbmdlKHYpKTtcbiAgfVxuXG4gICNvbkZvcm1WYWx1ZUNoYW5nZSh2OiBhbnkpIHtcbiAgICBpZiAodi5yYW5nZSA9PT0gdGhpcy4jQ1VTVE9NX09QVElPTikge1xuICAgICAgaWYgKCF0aGlzLiNjdXN0b21EYXRlUmFuZ2UgfHwgdGhpcy5kYXRlT3B0aW9ucygpLmZpbmQoKG8pID0+IG8udmFsdWUgPT09IHRoaXMuI0NVU1RPTV9PUFRJT04pPy5sYWJlbCA9PT0gdGhpcy4jY3VzdG9tRGF0ZVJhbmdlVG9TdHJpbmcoKSlcbiAgICAgICAgdGhpcy4jb3BlbkN1c3RvbVJhbmdlRGlhbG9nKCk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHtcbiAgICAgICAgICByYW5nZVZhbHVlOiB0aGlzLiNjdXN0b21EYXRlUmFuZ2UsXG4gICAgICAgICAgbGFiZWw6IHRoaXMuI2N1c3RvbURhdGVSYW5nZVRvU3RyaW5nKClcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gU2VhcmNoVXRpbHMuZGF0ZVJhbmdlU3RhcnRFbmQodi5yYW5nZSBhcyBEYXRlUmFuZ2UpO1xuICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UoXG4gICAgICAgIHYucmFuZ2UgIT09IHRoaXMuI0FOWV9PUFRJT05cbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcmFuZ2VWYWx1ZTogeyBvcGVyYXRvcjogT3BlcmF0b3IuSU5URVJWQUxfSU5DTFVERV9CT1RILCBmaXJzdFZhbHVlOiBzdGFydCwgc2Vjb25kVmFsdWU6IGVuZCB9LFxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgeXV2LmZvcm0uZWxlbWVudC5yYW5nZS1zZWxlY3QtZGF0ZS5vcHRpb24uJHt2LnJhbmdlfWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuI2N1c3RvbURhdGVSYW5nZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuI3NldHVwT3B0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gICNvcGVuQ3VzdG9tUmFuZ2VEaWFsb2coKSB7XG4gICAgLy8gb3BlbiBkYXRlIHJhbmdlIHBpY2tlclxuICAgIGNvbnN0IG8gPSB0aGlzLiNvdmVybGF5Lm9wZW4oRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50LCB7XG4gICAgICByYW5nZTogdGhpcy4jY3VzdG9tRGF0ZVJhbmdlXG4gICAgfSk7XG4gICAgby5hZnRlckNsb3NlZCQuc3Vic2NyaWJlKChyZXM6IE92ZXJsYXlDbG9zZUV2ZW50PFJhbmdlVmFsdWU+KSA9PiB7XG4gICAgICB0aGlzLiNjdXN0b21EYXRlUmFuZ2UgPSByZXMuZGF0YTtcblxuICAgICAgaWYgKCFyZXMuZGF0YSkge1xuICAgICAgICB0aGlzLmlubmVyRm9ybS5wYXRjaFZhbHVlKHsgcmFuZ2U6IHRoaXMuI0FOWV9PUFRJT04gfSk7XG4gICAgICAgIHRoaXMuI3NldHVwT3B0aW9ucygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jb25Gb3JtVmFsdWVDaGFuZ2UodGhpcy5pbm5lckZvcm0udmFsdWUpO1xuICAgICAgICB0aGlzLiNzZXR1cE9wdGlvbnModGhpcy4jY3VzdG9tRGF0ZVJhbmdlVG9TdHJpbmcoKSk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbm5lckZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgIHsgcmFuZ2U6IHRoaXMuI0NVU1RPTV9PUFRJT04gfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgI3NldHVwT3B0aW9ucyhjdXN0b20/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yYW5nZXMoKS5tYXAoKHZhbHVlKSA9PiAoe1xuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYHl1di5mb3JtLmVsZW1lbnQucmFuZ2Utc2VsZWN0LWRhdGUub3B0aW9uLiR7dmFsdWV9YCksXG4gICAgICB2YWx1ZVxuICAgIH0pKTtcbiAgICBpZiAodGhpcy5jdXN0b21SYW5nZSgpKVxuICAgICAgb3B0aW9ucy5wdXNoKHtcbiAgICAgICAgbGFiZWw6IGN1c3RvbSB8fCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuZm9ybS5lbGVtZW50LnJhbmdlLXNlbGVjdC1kYXRlLm9wdGlvbi5jdXN0b20nKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuI0NVU1RPTV9PUFRJT04gYXMgRGF0ZVJhbmdlXG4gICAgICB9KTtcblxuICAgIHRoaXMuZGF0ZU9wdGlvbnMuc2V0KFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5mb3JtLmVsZW1lbnQucmFuZ2Utc2VsZWN0LWRhdGUub3B0aW9uLmFueScpLFxuICAgICAgICB2YWx1ZTogdGhpcy4jQU5ZX09QVElPTlxuICAgICAgfSxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICBdKTtcbiAgfVxuXG4gICNjdXN0b21EYXRlUmFuZ2VUb1N0cmluZygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy4jY3VzdG9tRGF0ZVJhbmdlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRwID0gbmV3IExvY2FsZURhdGVQaXBlKHRoaXMudHJhbnNsYXRlKTtcbiAgICBzd2l0Y2ggKHRoaXMuI2N1c3RvbURhdGVSYW5nZS5vcGVyYXRvcikge1xuICAgICAgY2FzZSBPcGVyYXRvci5FUVVBTDoge1xuICAgICAgICByZXR1cm4gZHAudHJhbnNmb3JtKHRoaXMuI2N1c3RvbURhdGVSYW5nZS5maXJzdFZhbHVlIGFzIERhdGUsICdzaG9ydERhdGUnKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuR1JFQVRFUl9PUl9FUVVBTDoge1xuICAgICAgICByZXR1cm4gYCR7T3BlcmF0b3JMYWJlbC5HUkVBVEVSX09SX0VRVUFMfSAke2RwLnRyYW5zZm9ybSh0aGlzLiNjdXN0b21EYXRlUmFuZ2UuZmlyc3RWYWx1ZSBhcyBEYXRlLCAnc2hvcnREYXRlJyl9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuTEVTU19PUl9FUVVBTDoge1xuICAgICAgICByZXR1cm4gYCR7T3BlcmF0b3JMYWJlbC5MRVNTX09SX0VRVUFMfSAke2RwLnRyYW5zZm9ybSh0aGlzLiNjdXN0b21EYXRlUmFuZ2UuZmlyc3RWYWx1ZSBhcyBEYXRlLCAnc2hvcnREYXRlJyl9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuSU5URVJWQUxfSU5DTFVERV9CT1RIOiB7XG4gICAgICAgIHJldHVybiBgJHtkcC50cmFuc2Zvcm0odGhpcy4jY3VzdG9tRGF0ZVJhbmdlLmZpcnN0VmFsdWUgYXMgRGF0ZSwgJ3Nob3J0RGF0ZScpfSAke09wZXJhdG9yTGFiZWwuSU5URVJWQUxfSU5DTFVERV9CT1RIfSAke2RwLnRyYW5zZm9ybSh0aGlzLiNjdXN0b21EYXRlUmFuZ2Uuc2Vjb25kVmFsdWUgYXMgRGF0ZSwgJ3Nob3J0RGF0ZScpfWA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbXBsZW1lbnRhdGlvblxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZT86IFJhbmdlU2VsZWN0RGF0ZVZhbHVlKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlPy5yYW5nZVZhbHVlPy5vcGVyYXRvciAmJiB2YWx1ZT8ucmFuZ2VWYWx1ZT8uZmlyc3RWYWx1ZSkge1xuICAgICAgY29uc3QgZHI6IERhdGVSYW5nZSB8IHVuZGVmaW5lZCA9IFNlYXJjaFV0aWxzLmdldE1hdGNoaW5nRGF0ZVJhbmdlKHZhbHVlLnJhbmdlVmFsdWUpO1xuICAgICAgaWYgKGRyKSB7XG4gICAgICAgIHRoaXMuaW5uZXJGb3JtLnBhdGNoVmFsdWUoeyByYW5nZTogZHIgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNjdXN0b21EYXRlUmFuZ2UgPSB2YWx1ZS5yYW5nZVZhbHVlO1xuICAgICAgICB0aGlzLmlubmVyRm9ybS5wYXRjaFZhbHVlKHsgcmFuZ2U6IHRoaXMuI0NVU1RPTV9PUFRJT04gfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5uZXJGb3JtLnBhdGNoVmFsdWUoeyByYW5nZTogdGhpcy4jQU5ZX09QVElPTiB9KTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHt9XG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImlubmVyRm9ybVwiPlxuICAgIDx5dmMtZHJvcGRvd24gZm9ybUNvbnRyb2xOYW1lPVwicmFuZ2VcIiBbb3B0aW9uc109XCJkYXRlT3B0aW9ucygpXCIgW2Rpc2FibGVDbGVhckJ1dHRvbl09XCJ0cnVlXCI+PC95dmMtZHJvcGRvd24+XG48L2Zvcm0+Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2VsZWN0LWRhdGUuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWZyYW1ld29yay9mb3Jtcy9zcmMvbGliL2VsZW1lbnRzL3JhbmdlLXNlbGVjdC1kYXRlL3JhbmdlLXNlbGVjdC1kYXRlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmFuZ2VWYWx1ZSB9IGZyb20gXCJAeXV1dmlzL2NsaWVudC1jb3JlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmFuZ2VTZWxlY3REYXRlVmFsdWUge1xuICAgIHJhbmdlVmFsdWU6IFJhbmdlVmFsdWU7XG4gICAgbGFiZWw/OiBzdHJpbmc7XG59Il19