@recursyve/nice-ui-kit.v2 15.0.0-beta.119 → 15.0.0-beta.121

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 (54) hide show
  1. package/esm2020/lib/components/assets-carousel/assets-carousel.component.mjs +48 -25
  2. package/esm2020/lib/components/date-range-picker/date-range-picker.component.mjs +33 -12
  3. package/esm2020/lib/components/export-bottom-sheet/export-bottom-sheet.component.mjs +3 -3
  4. package/esm2020/lib/components/loading-toast/index.mjs +2 -0
  5. package/esm2020/lib/components/loading-toast/loading-toast.component.mjs +38 -0
  6. package/esm2020/lib/components/loading-toast/loading-toast.constant.mjs +3 -0
  7. package/esm2020/lib/components/loading-toast/loading-toast.directive.mjs +64 -0
  8. package/esm2020/lib/components/loading-toast/loading-toast.module.mjs +62 -0
  9. package/esm2020/lib/components/loading-toast/loading-toast.service.mjs +47 -0
  10. package/esm2020/lib/components/loading-toast/public-api.mjs +6 -0
  11. package/esm2020/lib/components/loading-toast/rxjs/show-loading-toast.operator.mjs +12 -0
  12. package/esm2020/lib/components/public-api.mjs +2 -1
  13. package/esm2020/lib/components/toast/public-api.mjs +3 -1
  14. package/esm2020/lib/components/toast/rxjs/show-success-or-error-toast.operator.mjs +22 -0
  15. package/esm2020/lib/components/toast/rxjs/show-toast.operator.mjs +22 -0
  16. package/esm2020/lib/components/translation-form/components/textarea/translation-form-textarea.component.mjs +4 -3
  17. package/esm2020/lib/components/translation-form/components/textfield/translation-form-textfield.component.mjs +4 -3
  18. package/esm2020/lib/components/translation-form/components/translation-form.component.mjs +8 -7
  19. package/esm2020/lib/components/translation-form/decorators/translation-form-group.decorator.mjs +4 -0
  20. package/esm2020/lib/components/translation-form/directives/translation-context.directive.mjs +11 -5
  21. package/esm2020/lib/components/translation-form/providers/nice-translation-form.service.mjs +59 -0
  22. package/esm2020/lib/components/translation-form/public-api.mjs +7 -7
  23. package/esm2020/lib/components/translation-form/toggle/translation-toggle.component.mjs +5 -5
  24. package/esm2020/lib/components/translation-form/validators/require-for-languages.validator.mjs +22 -21
  25. package/fesm2015/recursyve-nice-ui-kit.v2.mjs +512 -208
  26. package/fesm2015/recursyve-nice-ui-kit.v2.mjs.map +1 -1
  27. package/fesm2020/recursyve-nice-ui-kit.v2.mjs +504 -208
  28. package/fesm2020/recursyve-nice-ui-kit.v2.mjs.map +1 -1
  29. package/lib/components/assets-carousel/assets-carousel.component.d.ts +8 -4
  30. package/lib/components/date-range-picker/date-range-picker.component.d.ts +1 -2
  31. package/lib/components/loading-toast/index.d.ts +1 -0
  32. package/lib/components/loading-toast/loading-toast.component.d.ts +19 -0
  33. package/lib/components/loading-toast/loading-toast.constant.d.ts +2 -0
  34. package/lib/components/loading-toast/loading-toast.directive.d.ts +18 -0
  35. package/lib/components/loading-toast/loading-toast.module.d.ts +16 -0
  36. package/lib/components/loading-toast/loading-toast.service.d.ts +20 -0
  37. package/lib/components/loading-toast/public-api.d.ts +5 -0
  38. package/lib/components/loading-toast/rxjs/show-loading-toast.operator.d.ts +6 -0
  39. package/lib/components/public-api.d.ts +1 -0
  40. package/lib/components/toast/public-api.d.ts +2 -0
  41. package/lib/components/toast/rxjs/show-success-or-error-toast.operator.d.ts +37 -0
  42. package/lib/components/toast/rxjs/show-toast.operator.d.ts +17 -0
  43. package/lib/components/translation-form/components/translation-form.component.d.ts +2 -2
  44. package/lib/components/translation-form/decorators/translation-form-group.decorator.d.ts +1 -0
  45. package/lib/components/translation-form/directives/translation-context.directive.d.ts +3 -2
  46. package/lib/components/translation-form/providers/nice-translation-form.service.d.ts +16 -0
  47. package/lib/components/translation-form/public-api.d.ts +6 -6
  48. package/lib/components/translation-form/toggle/translation-toggle.component.d.ts +3 -3
  49. package/lib/components/translation-form/validators/require-for-languages.validator.d.ts +3 -3
  50. package/package.json +1 -1
  51. package/esm2020/lib/components/translation-form/decorators/translation-form.decorator.mjs +0 -4
  52. package/esm2020/lib/components/translation-form/providers/translation-form.service.mjs +0 -46
  53. package/lib/components/translation-form/decorators/translation-form.decorator.d.ts +0 -1
  54. package/lib/components/translation-form/providers/translation-form.service.d.ts +0 -12
@@ -58,7 +58,7 @@ export class NiceAssetsCarouselComponent {
58
58
  this.color = this.defaultColor;
59
59
  this.edit = false;
60
60
  this.loading = false;
61
- this.accept = ["image/*"];
61
+ this.accept = [];
62
62
  this.customActions = [];
63
63
  this.multipleUpload = false;
64
64
  this.visiblePreviewAsset = 4;
@@ -66,6 +66,7 @@ export class NiceAssetsCarouselComponent {
66
66
  this.activeChange = new EventEmitter();
67
67
  this.removedAsset = new EventEmitter();
68
68
  this.listStyle = { transform: "translateX(0px)" };
69
+ this._imagesMimeTypes = ["image/png", "image/jpeg", "image/webp", "image/avif"];
69
70
  if (!this.options) {
70
71
  this.options = {
71
72
  actionButtons: {
@@ -94,6 +95,20 @@ export class NiceAssetsCarouselComponent {
94
95
  };
95
96
  }
96
97
  }
98
+ ngOnInit() {
99
+ if (!this.accept?.length) {
100
+ this.accept = [...this._imagesMimeTypes];
101
+ }
102
+ }
103
+ ngOnChanges(changes) {
104
+ if ("accept" in changes && this.accept) {
105
+ const index = this.accept.indexOf("image/*");
106
+ if (index >= 0) {
107
+ this.accept.splice(index, 1);
108
+ this.accept.push(...this._imagesMimeTypes);
109
+ }
110
+ }
111
+ }
97
112
  writeValue(assets) {
98
113
  this._assets = assets ?? [];
99
114
  if (this._assets.length === 0) {
@@ -136,39 +151,27 @@ export class NiceAssetsCarouselComponent {
136
151
  this.activeAsset = index;
137
152
  }
138
153
  async onFilesChange(event) {
139
- let files = event.target?.files;
140
- if (this.imagesProcessor) {
141
- files = await this.getProcessedFiles(files);
142
- }
154
+ const files = event.target?.files;
143
155
  await this.onFilesDrop(files);
144
156
  this.inputElement.nativeElement.value = "";
145
157
  }
146
- async onFilesDrop(files) {
158
+ async onFilesDrop(fileList) {
159
+ let files = this.filterOutUnsupportedFiles(fileList);
160
+ if (this.imagesProcessor) {
161
+ files = await this.getProcessedFiles(files);
162
+ }
147
163
  if (!files?.length) {
148
164
  return;
149
165
  }
150
- let newAssetsAdded = false;
151
- for (let i = 0; i < files.length; i++) {
152
- const file = files.item(i);
153
- if (!this.accept.some((accept) => {
154
- if (accept.endsWith("*")) {
155
- return file.type.startsWith(accept.replace("*", ""));
156
- }
157
- return accept === file.type;
158
- })) {
159
- continue;
160
- }
161
- newAssetsAdded = true;
166
+ for (const file of files) {
162
167
  this._assets.push({
163
168
  file,
164
169
  type: file.type.split("/").shift(),
165
170
  base64: await FileUtils.getDataUrl(file)
166
171
  });
167
172
  }
168
- if (newAssetsAdded) {
169
- this.clickAsset(this._assets.length - 1);
170
- this.propagate?.(this._assets);
171
- }
173
+ this.clickAsset(this._assets.length - 1);
174
+ this.propagate?.(this._assets);
172
175
  }
173
176
  clickRemove() {
174
177
  this.removedAsset.emit(this._assets[this._active]);
@@ -191,11 +194,31 @@ export class NiceAssetsCarouselComponent {
191
194
  await this._activeVideoElement.nativeElement.play();
192
195
  await this._assetsElement.get(this._active).nativeElement.firstElementChild.play();
193
196
  }
197
+ filterOutUnsupportedFiles(fileList) {
198
+ const files = [];
199
+ for (let i = 0; i < fileList.length; i++) {
200
+ const file = fileList.item(i);
201
+ if (this.accept.some((accept) => {
202
+ if (accept.endsWith("*")) {
203
+ return file.type.startsWith(accept.replace("*", ""));
204
+ }
205
+ return accept === file.type;
206
+ })) {
207
+ files.push(file);
208
+ }
209
+ }
210
+ return files;
211
+ }
194
212
  async getProcessedFiles(files) {
195
213
  try {
214
+ if (!files.length) {
215
+ return null;
216
+ }
196
217
  return await this.imagesProcessor(files);
197
218
  }
198
- catch (e) { }
219
+ catch (e) {
220
+ return null;
221
+ }
199
222
  }
200
223
  }
201
224
  NiceAssetsCarouselComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NiceAssetsCarouselComponent, deps: [{ token: NICE_ASSETS_CAROUSEL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
@@ -205,7 +228,7 @@ NiceAssetsCarouselComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.
205
228
  useExisting: forwardRef(() => NiceAssetsCarouselComponent),
206
229
  multi: true
207
230
  }
208
- ], queries: [{ propertyName: "activeContent", first: true, predicate: NiceAssetsCarouselActiveContentDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "activeVideoElement", first: true, predicate: ["activeVideo"], descendants: true }, { propertyName: "assetsElement", predicate: ["assets"], descendants: true }], ngImport: i0, template: "<div class=\"carousel-container\" niceDropzone (filesDropped)=\"onFilesDrop($event)\">\n <div\n class=\"active-image\"\n matRipple\n [class.empty-state]=\"!_activeAsset\"\n (click)=\"edit && fileInput.click();\n $event.stopPropagation()\"\n >\n <div *ngIf=\"loading\" class=\"flex flex-row justify-center items-center h-full\">\n <mat-spinner [diameter]=\"32\"></mat-spinner>\n </div>\n <ng-container *ngIf=\"!loading\">\n <ng-container\n *ngIf=\"_activeAsset && activeContent\"\n [ngTemplateOutlet]=\"activeContent\"\n [ngTemplateOutletContext]=\"{ $implicit: _activeAsset}\"\n ></ng-container>\n <img\n *ngIf=\"_activeAsset?.type === 'image'\"\n (mouseover)=\"showOverlay=true\"\n [src]=\"_activeAsset.url ?? _activeAsset.base64\"\n draggable=\"false\"\n class=\"relative\"\n alt=\"active-image\"\n >\n <video #activeVideo *ngIf=\"_activeAsset?.type === 'video'\" draggable=\"false\" loop [src]=\"_activeAsset.url ?? _activeAsset.base64\"></video>\n\n <div class=\"empty-state-content\" *ngIf=\"!_activeAsset\">\n <mat-icon *ngIf=\"options.upload.matIcon\">{{ options.upload.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.upload.svgIcon\" [svgIcon]=\"options.upload.svgIcon\"></mat-icon>\n <div class=\"text\">\n {{ \"nice_ui_kit.assets_carousel.upload_here\" | translate }}\n </div>\n </div>\n\n <div *ngIf=\"_activeAsset && showOverlay && edit\" class=\"active-image-overlay\">\n <div\n (mouseout)=\"showOverlay=false\"\n class=\"flex flex-col justify-center items-center w-full h-full\"\n >\n <mat-icon *ngIf=\"options.upload.matIcon\">{{ options.upload.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.upload.svgIcon\" [svgIcon]=\"options.upload.svgIcon\"></mat-icon>\n </div>\n </div>\n\n <div *ngIf=\"edit\" class=\"active-buttons\">\n <button mat-icon-button (click)=\"fileInput.click(); $event.stopPropagation()\">\n <mat-icon *ngIf=\"options.actionButtons.addPhoto.matIcon\">{{ options.actionButtons.addPhoto.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.addPhoto.svgIcon\" [svgIcon]=\"options.actionButtons.addPhoto.svgIcon\"></mat-icon>\n </button>\n <button mat-icon-button [matMenuTriggerFor]=\"assetActions\" (click)=\"$event.stopPropagation()\" [disabled]=\"!_activeAsset\">\n <mat-icon *ngIf=\"options.actionButtons.moreOptions.matIcon\">{{ options.actionButtons.moreOptions.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.moreOptions.svgIcon\" [svgIcon]=\"options.actionButtons.moreOptions.svgIcon\"></mat-icon>\n </button>\n <mat-menu class=\"nice-asset-options-menu\" [xPosition]=\"'before'\" #assetActions=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let action of customActions\"\n (click)=\"clickCustom(action)\"\n >\n <mat-icon *ngIf=\"action.icon.matIcon\">{{ action.icon.matIcon }}</mat-icon>\n <mat-icon [svgIcon]=\"action.icon.svgIcon\" *ngIf=\"action.icon.svgIcon\"></mat-icon>\n <span>{{ action.name | translate }}</span>\n </button>\n <button mat-menu-item (click)=\"clickRemove()\">\n <mat-icon *ngIf=\"options.actionButtons.remove.matIcon\">{{ options.actionButtons.remove.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.remove.svgIcon\" [svgIcon]=\"options.actionButtons.remove.svgIcon\"></mat-icon>\n <span>{{ \"nice_ui_kit.assets_carousel.delete\" | translate }}</span>\n </button>\n </mat-menu>\n </div>\n </ng-container>\n </div>\n\n <div class=\"carousel\">\n <button *ngIf=\"showAddAssetContainer || _activeAsset\" class=\"action-button left-arrow\" mat-icon-button [disabled]=\"!_active\" (click)=\"clickLeft()\">\n <mat-icon *ngIf=\"options.leftArrow.matIcon\">{{ options.leftArrow.matIcon }}</mat-icon>\n <mat-icon class=\"arrows\" *ngIf=\"options.leftArrow.svgIcon\" [svgIcon]=\"options.leftArrow.svgIcon\"></mat-icon>\n </button>\n <div class=\"asset-list-container\">\n <div *ngIf=\"showAddAssetContainer && edit\" class=\"add-asset-container\">\n <div class=\"add-asset\" matRipple (click)=\"fileInput.click()\">\n <mat-icon *ngIf=\"options.addPhoto.matIcon\">{{ options.addPhoto.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.addPhoto.svgIcon\" [svgIcon]=\"options.addPhoto.svgIcon\"></mat-icon>\n </div>\n </div>\n <div class=\"asset-list\" [ngStyle]=\"listStyle\">\n <div\n #assets\n class=\"asset\"\n *ngFor=\"let asset of _assets; let i = index\"\n (click)=\"clickAsset(i)\"\n [ngClass]=\"color\"\n [class.active]=\"_active === i\"\n >\n <ng-container>\n <img\n *ngIf=\"asset.type === 'image'\"\n draggable=\"false\"\n [src]=\"asset.url ?? asset.base64\"\n alt=\"add-image\"\n />\n <video\n *ngIf=\"asset.type === 'video'\"\n draggable=\"false\"\n loop\n [src]=\"asset.url ?? asset.base64\"\n ></video>\n </ng-container>\n </div>\n </div>\n </div>\n <button *ngIf=\"showAddAssetContainer || _activeAsset\" class=\"action-button right-arrow\" mat-icon-button [disabled]=\"_lastAsset\" (click)=\"clickRight()\">\n <mat-icon *ngIf=\"options.rightArrow.matIcon\">{{ options.rightArrow.matIcon }}</mat-icon>\n <mat-icon class=\"arrows\" *ngIf=\"options.rightArrow.svgIcon\" [svgIcon]=\"options.rightArrow.svgIcon\"></mat-icon>\n </button>\n </div>\n</div>\n\n<input #fileInput type=\"file\" hidden [accept]=\"accept\" (change)=\"onFilesChange($event)\" [multiple]=\"multipleUpload\">\n", styles: [":root{--nice-assets-carousel-asset-width: 90px;--nice-assets-carousel-asset-height: 60px;--nice-assets-carousel-asset-gap: .75rem}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i5.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: i6.NiceDropzoneDirective, selector: "[niceDropzone]", outputs: ["filesDropped"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], animations: niceAnimations, encapsulation: i0.ViewEncapsulation.None });
231
+ ], queries: [{ propertyName: "activeContent", first: true, predicate: NiceAssetsCarouselActiveContentDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "activeVideoElement", first: true, predicate: ["activeVideo"], descendants: true }, { propertyName: "assetsElement", predicate: ["assets"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"carousel-container\" niceDropzone (filesDropped)=\"onFilesDrop($event)\">\n <div\n class=\"active-image\"\n matRipple\n [class.empty-state]=\"!_activeAsset\"\n (click)=\"edit && fileInput.click();\n $event.stopPropagation()\"\n >\n <div *ngIf=\"loading\" class=\"flex flex-row justify-center items-center h-full\">\n <mat-spinner [diameter]=\"32\"></mat-spinner>\n </div>\n <ng-container *ngIf=\"!loading\">\n <ng-container\n *ngIf=\"_activeAsset && activeContent\"\n [ngTemplateOutlet]=\"activeContent\"\n [ngTemplateOutletContext]=\"{ $implicit: _activeAsset}\"\n ></ng-container>\n <img\n *ngIf=\"_activeAsset?.type === 'image'\"\n (mouseover)=\"showOverlay=true\"\n [src]=\"_activeAsset.url ?? _activeAsset.base64\"\n draggable=\"false\"\n class=\"relative\"\n alt=\"active-image\"\n >\n <video #activeVideo *ngIf=\"_activeAsset?.type === 'video'\" draggable=\"false\" loop [src]=\"_activeAsset.url ?? _activeAsset.base64\"></video>\n\n <div class=\"empty-state-content\" *ngIf=\"!_activeAsset\">\n <mat-icon *ngIf=\"options.upload.matIcon\">{{ options.upload.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.upload.svgIcon\" [svgIcon]=\"options.upload.svgIcon\"></mat-icon>\n <div class=\"text\">\n {{ \"nice_ui_kit.assets_carousel.upload_here\" | translate }}\n </div>\n </div>\n\n <div *ngIf=\"_activeAsset && showOverlay && edit\" class=\"active-image-overlay\">\n <div\n (mouseout)=\"showOverlay=false\"\n class=\"flex flex-col justify-center items-center w-full h-full\"\n >\n <mat-icon *ngIf=\"options.upload.matIcon\">{{ options.upload.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.upload.svgIcon\" [svgIcon]=\"options.upload.svgIcon\"></mat-icon>\n </div>\n </div>\n\n <div *ngIf=\"edit\" class=\"active-buttons\">\n <button mat-icon-button (click)=\"fileInput.click(); $event.stopPropagation()\">\n <mat-icon *ngIf=\"options.actionButtons.addPhoto.matIcon\">{{ options.actionButtons.addPhoto.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.addPhoto.svgIcon\" [svgIcon]=\"options.actionButtons.addPhoto.svgIcon\"></mat-icon>\n </button>\n <button mat-icon-button [matMenuTriggerFor]=\"assetActions\" (click)=\"$event.stopPropagation()\" [disabled]=\"!_activeAsset\">\n <mat-icon *ngIf=\"options.actionButtons.moreOptions.matIcon\">{{ options.actionButtons.moreOptions.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.moreOptions.svgIcon\" [svgIcon]=\"options.actionButtons.moreOptions.svgIcon\"></mat-icon>\n </button>\n <mat-menu class=\"nice-asset-options-menu\" [xPosition]=\"'before'\" #assetActions=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let action of customActions\"\n (click)=\"clickCustom(action)\"\n >\n <mat-icon *ngIf=\"action.icon.matIcon\">{{ action.icon.matIcon }}</mat-icon>\n <mat-icon [svgIcon]=\"action.icon.svgIcon\" *ngIf=\"action.icon.svgIcon\"></mat-icon>\n <span>{{ action.name | translate }}</span>\n </button>\n <button mat-menu-item (click)=\"clickRemove()\">\n <mat-icon *ngIf=\"options.actionButtons.remove.matIcon\">{{ options.actionButtons.remove.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.remove.svgIcon\" [svgIcon]=\"options.actionButtons.remove.svgIcon\"></mat-icon>\n <span>{{ \"nice_ui_kit.assets_carousel.delete\" | translate }}</span>\n </button>\n </mat-menu>\n </div>\n </ng-container>\n </div>\n\n <div class=\"carousel\">\n <button *ngIf=\"showAddAssetContainer || _activeAsset\" class=\"action-button left-arrow\" mat-icon-button [disabled]=\"!_active\" (click)=\"clickLeft()\">\n <mat-icon *ngIf=\"options.leftArrow.matIcon\">{{ options.leftArrow.matIcon }}</mat-icon>\n <mat-icon class=\"arrows\" *ngIf=\"options.leftArrow.svgIcon\" [svgIcon]=\"options.leftArrow.svgIcon\"></mat-icon>\n </button>\n <div class=\"asset-list-container\">\n <div *ngIf=\"showAddAssetContainer && edit\" class=\"add-asset-container\">\n <div class=\"add-asset\" matRipple (click)=\"fileInput.click()\">\n <mat-icon *ngIf=\"options.addPhoto.matIcon\">{{ options.addPhoto.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.addPhoto.svgIcon\" [svgIcon]=\"options.addPhoto.svgIcon\"></mat-icon>\n </div>\n </div>\n <div class=\"asset-list\" [ngStyle]=\"listStyle\">\n <div\n #assets\n class=\"asset\"\n *ngFor=\"let asset of _assets; let i = index\"\n (click)=\"clickAsset(i)\"\n [ngClass]=\"color\"\n [class.active]=\"_active === i\"\n >\n <ng-container>\n <img\n *ngIf=\"asset.type === 'image'\"\n draggable=\"false\"\n [src]=\"asset.url ?? asset.base64\"\n alt=\"add-image\"\n />\n <video\n *ngIf=\"asset.type === 'video'\"\n draggable=\"false\"\n loop\n [src]=\"asset.url ?? asset.base64\"\n ></video>\n </ng-container>\n </div>\n </div>\n </div>\n <button *ngIf=\"showAddAssetContainer || _activeAsset\" class=\"action-button right-arrow\" mat-icon-button [disabled]=\"_lastAsset\" (click)=\"clickRight()\">\n <mat-icon *ngIf=\"options.rightArrow.matIcon\">{{ options.rightArrow.matIcon }}</mat-icon>\n <mat-icon class=\"arrows\" *ngIf=\"options.rightArrow.svgIcon\" [svgIcon]=\"options.rightArrow.svgIcon\"></mat-icon>\n </button>\n </div>\n</div>\n\n<input #fileInput type=\"file\" hidden [accept]=\"accept\" (change)=\"onFilesChange($event)\" [multiple]=\"multipleUpload\">\n", styles: [":root{--nice-assets-carousel-asset-width: 90px;--nice-assets-carousel-asset-height: 60px;--nice-assets-carousel-asset-gap: .75rem}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i5.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: i6.NiceDropzoneDirective, selector: "[niceDropzone]", outputs: ["filesDropped"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], animations: niceAnimations, encapsulation: i0.ViewEncapsulation.None });
209
232
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NiceAssetsCarouselComponent, decorators: [{
210
233
  type: Component,
211
234
  args: [{ selector: "nice-assets-carousel", encapsulation: ViewEncapsulation.None, animations: niceAnimations, providers: [
@@ -257,4 +280,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
257
280
  }], assets: [{
258
281
  type: Input
259
282
  }] } });
260
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLWNhcm91c2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtdWkta2l0LXYyL3NyYy9saWIvY29tcG9uZW50cy9hc3NldHMtY2Fyb3VzZWwvYXNzZXRzLWNhcm91c2VsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtdWkta2l0LXYyL3NyYy9saWIvY29tcG9uZW50cy9hc3NldHMtY2Fyb3VzZWwvYXNzZXRzLWNhcm91c2VsLnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFFLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOzs7Ozs7Ozs7O0FBNENqSCxNQUFNLE9BQU8sMkJBQTJCO0lBd0RwQyxJQUNXLGtCQUFrQixDQUFDLGtCQUFnRDtRQUMxRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7UUFFOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkQsT0FBTztTQUNWO1FBRUQs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QUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFJdEUsWUFBWTtzQkFEbEIsTUFBTTtnQkFJQSxZQUFZO3NCQURsQixNQUFNO2dCQVVJLGtCQUFrQjtzQkFENUIsU0FBUzt1QkFBQyxhQUFhO2dCQVliLGFBQWE7c0JBRHZCLFlBQVk7dUJBQUMsUUFBUTtnQkFZWCxNQUFNO3NCQURoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgQ2FuQ29sb3IsIFRoZW1lUGFsZXR0ZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XG5pbXBvcnQgeyBuaWNlQW5pbWF0aW9ucyB9IGZyb20gXCIuLi8uLi9hbmltYXRpb25zXCI7XG5pbXBvcnQgeyBGaWxlVXRpbHMgfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcbmltcG9ydCB7IE5JQ0VfQVNTRVRTX0NBUk9VU0VMX09QVElPTlMgfSBmcm9tIFwiLi9hc3NldHMtY2Fyb3VzZWwuY29uc3RhbnRcIjtcbmltcG9ydCB7IE5pY2VBc3NldHNDYXJvdXNlbEFjdGl2ZUNvbnRlbnREaXJlY3RpdmUgfSBmcm9tIFwiLi9kaXJlY3RpdmVzL2Fzc2V0cy1jYXJvdXNlbC1hY3RpdmUtY29udGVudC5kaXJlY3RpdmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOaWNlQXNzZXRzIHtcbiAgICB0eXBlOiBcImltYWdlXCIgfCBcInZpZGVvXCI7XG4gICAgaWQ/OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgdXJsPzogc3RyaW5nO1xuICAgIGJhc2U2ND86IHN0cmluZztcbiAgICBmaWxlPzogRmlsZTtcbn1cblxuZXhwb3J0IHR5cGUgTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uSWNvbiA9IHsgbWF0SWNvbjogc3RyaW5nOyBzdmdJY29uPzogc3RyaW5nOyB9IHwgeyBtYXRJY29uPzogc3RyaW5nOyBzdmdJY29uOiBzdHJpbmc7IH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9ucyB7XG4gICAgaWNvbjogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uSWNvbjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYWN0aW9uOiAoYWN0aXZlOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmljZUFzc2V0c0Nhcm91c2VsT3B0aW9ucyB7XG4gICAgYWN0aW9uQnV0dG9ucz86IHtcbiAgICAgICAgbW9yZU9wdGlvbnM/OiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25JY29uO1xuICAgICAgICBhZGRQaG90bz86IE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbkljb247XG4gICAgICAgIHJlbW92ZT86IE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbkljb247XG4gICAgfTtcbiAgICBhZGRQaG90bz86IE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbkljb247XG4gICAgbGVmdEFycm93PzogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uSWNvbjtcbiAgICByaWdodEFycm93PzogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uSWNvbjtcbiAgICB1cGxvYWQ/OiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25JY29uO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJuaWNlLWFzc2V0cy1jYXJvdXNlbFwiLFxuICAgIHRlbXBsYXRlVXJsOiBcImFzc2V0cy1jYXJvdXNlbC50ZW1wbGF0ZS5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCJhc3NldHMtY2Fyb3VzZWwudGhlbWUuc2Nzc1wiXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGFuaW1hdGlvbnM6IG5pY2VBbmltYXRpb25zLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5pY2VBc3NldHNDYXJvdXNlbENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOaWNlQXNzZXRzQ2Fyb3VzZWxDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQ2FuQ29sb3Ige1xuICAgIHB1YmxpYyBfYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbiA9IDA7XG4gICAgcHVibGljIF9hY3RpdmUgPSAwO1xuICAgIHB1YmxpYyBfYXNzZXRzOiBOaWNlQXNzZXRzW10gPSBbXTtcbiAgICBwdWJsaWMgX2FjdGl2ZUFzc2V0OiBOaWNlQXNzZXRzO1xuICAgIHB1YmxpYyBfbGFzdEFzc2V0ID0gdHJ1ZTtcbiAgICBwdWJsaWMgX3Nob3VsZFRyYW5zZm9ybSA9IGZhbHNlO1xuICAgIHB1YmxpYyBfYWN0aXZlVmlkZW9FbGVtZW50OiBFbGVtZW50UmVmPEhUTUxWaWRlb0VsZW1lbnQ+O1xuICAgIHB1YmxpYyBfYXNzZXRzRWxlbWVudDogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PjtcbiAgICBwdWJsaWMgZGVmYXVsdENvbG9yOiBUaGVtZVBhbGV0dGUgPSBcInByaW1hcnlcIjtcblxuICAgIEBWaWV3Q2hpbGQoXCJmaWxlSW5wdXRcIilcbiAgICBwdWJsaWMgaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29sb3I6IFRoZW1lUGFsZXR0ZSA9IHRoaXMuZGVmYXVsdENvbG9yO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZWRpdCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWNjZXB0OiBzdHJpbmdbXSA9IFtcImltYWdlLypcIl07XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXN0b21BY3Rpb25zOiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25zW10gPSBbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGltYWdlc1Byb2Nlc3NvcjogKGZpbGVMaXN0OiBGaWxlTGlzdCkgPT4gUHJvbWlzZTxGaWxlTGlzdD47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtdWx0aXBsZVVwbG9hZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmlzaWJsZVByZXZpZXdBc3NldCA9IDQ7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93QWRkQXNzZXRDb250YWluZXIgPSB0cnVlO1xuXG4gICAgQENvbnRlbnRDaGlsZChOaWNlQXNzZXRzQ2Fyb3VzZWxBY3RpdmVDb250ZW50RGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIGFjdGl2ZUNvbnRlbnQ6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYWN0aXZlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlZEFzc2V0ID0gbmV3IEV2ZW50RW1pdHRlcjxOaWNlQXNzZXRzPigpO1xuXG4gICAgcHVibGljIGxpc3RTdHlsZTogeyB0cmFuc2Zvcm06IHN0cmluZyB9ID0geyB0cmFuc2Zvcm06IFwidHJhbnNsYXRlWCgwcHgpXCIgfTtcblxuICAgIHB1YmxpYyBzaG93T3ZlcmxheTogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgcHJvcGFnYXRlOiAoYXNzZXRzOiBOaWNlQXNzZXRzW10pID0+IHZvaWQ7XG5cbiAgICBAVmlld0NoaWxkKFwiYWN0aXZlVmlkZW9cIilcbiAgICBwdWJsaWMgc2V0IGFjdGl2ZVZpZGVvRWxlbWVudChhY3RpdmVWaWRlb0VsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTFZpZGVvRWxlbWVudD4pIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVmlkZW9FbGVtZW50ID0gYWN0aXZlVmlkZW9FbGVtZW50O1xuXG4gICAgICAgIGlmICghdGhpcy5fYWN0aXZlVmlkZW9FbGVtZW50IHx8ICF0aGlzLl9hc3NldHNFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXJ0U3luY1ZpZGVvKCk7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZHJlbihcImFzc2V0c1wiKVxuICAgIHB1YmxpYyBzZXQgYXNzZXRzRWxlbWVudChhc3NldHNFbGVtZW50OiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KSB7XG4gICAgICAgIHRoaXMuX2Fzc2V0c0VsZW1lbnQgPSBhc3NldHNFbGVtZW50O1xuXG4gICAgICAgIGlmICghdGhpcy5fYWN0aXZlVmlkZW9FbGVtZW50IHx8ICF0aGlzLl9hc3NldHNFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXJ0U3luY1ZpZGVvKCk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGFzc2V0cyhhc3NldHM6IE5pY2VBc3NldHNbXSkge1xuICAgICAgICB0aGlzLndyaXRlVmFsdWUoYXNzZXRzID8/IFtdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldCBhY3RpdmVUcmFuc2xhdGlvblBvc2l0aW9uKHBvc2l0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgICB0aGlzLmxpc3RTdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWChjYWxjKCh2YXIoLS1uaWNlLWFzc2V0cy1jYXJvdXNlbC1hc3NldC13aWR0aCkgKyB2YXIoLS1uaWNlLWFzc2V0cy1jYXJvdXNlbC1hc3NldC1nYXApKSAqICR7cG9zaXRpb259KSlgO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0IGFjdGl2ZUFzc2V0KHBvc2l0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCkge1xuICAgICAgICAgICAgcG9zaXRpb24gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlID0gcG9zaXRpb247XG4gICAgICAgIHRoaXMuX2FjdGl2ZUFzc2V0ID0gdGhpcy5fYXNzZXRzW3RoaXMuX2FjdGl2ZV07XG4gICAgICAgIHRoaXMuX2xhc3RBc3NldCA9IHRoaXMuX2FjdGl2ZSA9PT0gdGhpcy5fYXNzZXRzLmxlbmd0aCAtIDEgfHwgIXRoaXMuX2Fzc2V0cy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX3Nob3VsZFRyYW5zZm9ybVxuICAgICAgICAgICAgPSAoKHRoaXMuZWRpdCAmJiB0aGlzLnNob3dBZGRBc3NldENvbnRhaW5lcikgJiYgdGhpcy5fYWN0aXZlID49ICh0aGlzLnZpc2libGVQcmV2aWV3QXNzZXQgLSAxKSlcbiAgICAgICAgICAgIHx8IHRoaXMuX2FjdGl2ZSA+PSB0aGlzLnZpc2libGVQcmV2aWV3QXNzZXQ7XG4gICAgICAgIHRoaXMuYWN0aXZlQ2hhbmdlLmVtaXQodGhpcy5fYWN0aXZlKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KE5JQ0VfQVNTRVRTX0NBUk9VU0VMX09QVElPTlMpIHB1YmxpYyByZWFkb25seSBvcHRpb25zOiBOaWNlQXNzZXRzQ2Fyb3VzZWxPcHRpb25zKSB7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uQnV0dG9uczoge1xuICAgICAgICAgICAgICAgICAgICBhZGRQaG90bzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SWNvbjogXCJwaG90b19jYW1lcmFcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBtb3JlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SWNvbjogXCJtb3JlX3ZlcnRcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEljb246IFwiZGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWRkUGhvdG86IHtcbiAgICAgICAgICAgICAgICAgICAgbWF0SWNvbjogXCJwaG90b19jYW1lcmFcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbGVmdEFycm93OiB7XG4gICAgICAgICAgICAgICAgICAgIG1hdEljb246IFwiY2hldnJvbl9sZWZ0XCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJpZ2h0QXJyb3c6IHtcbiAgICAgICAgICAgICAgICAgICAgbWF0SWNvbjogXCJjaGV2cm9uX3JpZ2h0XCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVwbG9hZDoge1xuICAgICAgICAgICAgICAgICAgICBtYXRJY29uOiBcImZpbGVfdXBsb2FkXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUoYXNzZXRzOiBOaWNlQXNzZXRzW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYXNzZXRzID0gYXNzZXRzID8/IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLl9hc3NldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVBc3NldCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9sYXN0QXNzZXQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2Fzc2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVBc3NldCA9IHRoaXMuX2Fzc2V0c1t0aGlzLl9hY3RpdmVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChhc3NldHM6IE5pY2VBc3NldHNbXSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZSA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKGFzc2V0czogTmljZUFzc2V0c1tdKSA9PiB2b2lkKTogdm9pZCB7fVxuXG4gICAgcHVibGljIGNsaWNrTGVmdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVBc3NldCA9IHRoaXMuX2FjdGl2ZSAtIDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbiA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbiA9IHRoaXMuX2FjdGl2ZVRyYW5zbGF0aW9uUG9zaXRpb24gKyAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrUmlnaHQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9sYXN0QXNzZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlQXNzZXQgPSB0aGlzLl9hY3RpdmUgKyAxO1xuICAgICAgICBpZiAodGhpcy5fc2hvdWxkVHJhbnNmb3JtKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRyYW5zbGF0aW9uUG9zaXRpb24gPSB0aGlzLl9hY3RpdmVUcmFuc2xhdGlvblBvc2l0aW9uIC0gMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGlja0Fzc2V0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IHZpc2libGVBc3NldHMgPSAodGhpcy5lZGl0ICYmIHRoaXMuc2hvd0FkZEFzc2V0Q29udGFpbmVyKSA/ICh0aGlzLnZpc2libGVQcmV2aWV3QXNzZXQgLSAyKSA6ICh0aGlzLnZpc2libGVQcmV2aWV3QXNzZXQgLSAxKTtcbiAgICAgICAgaWYgKGluZGV4IDwgdmlzaWJsZUFzc2V0cykge1xuICAgICAgICAgICAgdmlzaWJsZUFzc2V0cyA9IGluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbiA9IChpbmRleCAtIHZpc2libGVBc3NldHMpICogLTE7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZUFzc2V0ID0gaW5kZXg7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9uRmlsZXNDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCBmaWxlcyA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LmZpbGVzO1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlc1Byb2Nlc3Nvcikge1xuICAgICAgICAgICAgZmlsZXMgPSBhd2FpdCB0aGlzLmdldFByb2Nlc3NlZEZpbGVzKGZpbGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMub25GaWxlc0Ryb3AoZmlsZXMpO1xuXG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvbkZpbGVzRHJvcChmaWxlczogRmlsZUxpc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCFmaWxlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbmV3QXNzZXRzQWRkZWQgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlID0gZmlsZXMuaXRlbShpKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5hY2NlcHQuc29tZSgoYWNjZXB0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFjY2VwdC5lbmRzV2l0aChcIipcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGUudHlwZS5zdGFydHNXaXRoKGFjY2VwdC5yZXBsYWNlKFwiKlwiLCBcIlwiKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY2VwdCA9PT0gZmlsZS50eXBlO1xuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV3QXNzZXRzQWRkZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICB0aGlzLl9hc3NldHMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGUuc3BsaXQoXCIvXCIpLnNoaWZ0KCkgYXMgXCJpbWFnZVwiIHwgXCJ2aWRlb1wiLFxuICAgICAgICAgICAgICAgIGJhc2U2NDogYXdhaXQgRmlsZVV0aWxzLmdldERhdGFVcmwoZmlsZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld0Fzc2V0c0FkZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsaWNrQXNzZXQodGhpcy5fYXNzZXRzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGU/Lih0aGlzLl9hc3NldHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrUmVtb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZWRBc3NldC5lbWl0KHRoaXMuX2Fzc2V0c1t0aGlzLl9hY3RpdmVdKTtcbiAgICAgICAgdGhpcy5fYXNzZXRzLnNwbGljZSh0aGlzLl9hY3RpdmUsIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLl9sYXN0QXNzZXQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xpY2tBc3NldCh0aGlzLl9hc3NldHMubGVuZ3RoIC0gMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNsaWNrQXNzZXQodGhpcy5fYWN0aXZlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvcGFnYXRlPy4odGhpcy5fYXNzZXRzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xpY2tDdXN0b20oYWN0aW9uOiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25zKTogdm9pZCB7XG4gICAgICAgIGFjdGlvbi5hY3Rpb24odGhpcy5fYWN0aXZlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc3RhcnRTeW5jVmlkZW8oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgICh0aGlzLl9hc3NldHNFbGVtZW50LmdldCh0aGlzLl9hY3RpdmUpLm5hdGl2ZUVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTFZpZGVvRWxlbWVudCkucGF1c2UoKTtcbiAgICAgICAgKHRoaXMuX2Fzc2V0c0VsZW1lbnQuZ2V0KHRoaXMuX2FjdGl2ZSkubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MVmlkZW9FbGVtZW50KS5jdXJyZW50VGltZSA9IDA7XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlVmlkZW9FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY3VycmVudFRpbWUgPSAwO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2FjdGl2ZVZpZGVvRWxlbWVudC5uYXRpdmVFbGVtZW50LnBsYXkoKTtcbiAgICAgICAgYXdhaXQgKHRoaXMuX2Fzc2V0c0VsZW1lbnQuZ2V0KHRoaXMuX2FjdGl2ZSkubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MVmlkZW9FbGVtZW50KS5wbGF5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRQcm9jZXNzZWRGaWxlcyhmaWxlczogRmlsZUxpc3QpOiBQcm9taXNlPEZpbGVMaXN0PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbWFnZXNQcm9jZXNzb3IoZmlsZXMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJvdXNlbC1jb250YWluZXJcIiBuaWNlRHJvcHpvbmUgKGZpbGVzRHJvcHBlZCk9XCJvbkZpbGVzRHJvcCgkZXZlbnQpXCI+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImFjdGl2ZS1pbWFnZVwiXG4gICAgICAgIG1hdFJpcHBsZVxuICAgICAgICBbY2xhc3MuZW1wdHktc3RhdGVdPVwiIV9hY3RpdmVBc3NldFwiXG4gICAgICAgIChjbGljayk9XCJlZGl0ICYmIGZpbGVJbnB1dC5jbGljaygpO1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgID5cbiAgICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIGgtZnVsbFwiPlxuICAgICAgICAgICAgPG1hdC1zcGlubmVyIFtkaWFtZXRlcl09XCIzMlwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIl9hY3RpdmVBc3NldCAmJiBhY3RpdmVDb250ZW50XCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhY3RpdmVDb250ZW50XCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IF9hY3RpdmVBc3NldH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiX2FjdGl2ZUFzc2V0Py50eXBlID09PSAnaW1hZ2UnXCJcbiAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cInNob3dPdmVybGF5PXRydWVcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiX2FjdGl2ZUFzc2V0LnVybCA/PyBfYWN0aXZlQXNzZXQuYmFzZTY0XCJcbiAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgICAgICAgICAgYWx0PVwiYWN0aXZlLWltYWdlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDx2aWRlbyAjYWN0aXZlVmlkZW8gKm5nSWY9XCJfYWN0aXZlQXNzZXQ/LnR5cGUgPT09ICd2aWRlbydcIiBkcmFnZ2FibGU9XCJmYWxzZVwiIGxvb3AgW3NyY109XCJfYWN0aXZlQXNzZXQudXJsID8/IF9hY3RpdmVBc3NldC5iYXNlNjRcIj48L3ZpZGVvPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGUtY29udGVudFwiICpuZ0lmPVwiIV9hY3RpdmVBc3NldFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMudXBsb2FkLm1hdEljb25cIj57eyBvcHRpb25zLnVwbG9hZC5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLnVwbG9hZC5zdmdJY29uXCIgW3N2Z0ljb25dPVwib3B0aW9ucy51cGxvYWQuc3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCJuaWNlX3VpX2tpdC5hc3NldHNfY2Fyb3VzZWwudXBsb2FkX2hlcmVcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJfYWN0aXZlQXNzZXQgJiYgc2hvd092ZXJsYXkgJiYgZWRpdFwiIGNsYXNzPVwiYWN0aXZlLWltYWdlLW92ZXJsYXlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIChtb3VzZW91dCk9XCJzaG93T3ZlcmxheT1mYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgdy1mdWxsIGgtZnVsbFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLnVwbG9hZC5tYXRJY29uXCI+e3sgb3B0aW9ucy51cGxvYWQubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMudXBsb2FkLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLnVwbG9hZC5zdmdJY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZWRpdFwiIGNsYXNzPVwiYWN0aXZlLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMuYWRkUGhvdG8ubWF0SWNvblwiPnt7IG9wdGlvbnMuYWN0aW9uQnV0dG9ucy5hZGRQaG90by5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy5hY3Rpb25CdXR0b25zLmFkZFBob3RvLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMuYWRkUGhvdG8uc3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImFzc2V0QWN0aW9uc1wiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBbZGlzYWJsZWRdPVwiIV9hY3RpdmVBc3NldFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMubW9yZU9wdGlvbnMubWF0SWNvblwiPnt7IG9wdGlvbnMuYWN0aW9uQnV0dG9ucy5tb3JlT3B0aW9ucy5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy5hY3Rpb25CdXR0b25zLm1vcmVPcHRpb25zLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMubW9yZU9wdGlvbnMuc3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPG1hdC1tZW51IGNsYXNzPVwibmljZS1hc3NldC1vcHRpb25zLW1lbnVcIiBbeFBvc2l0aW9uXT1cIidiZWZvcmUnXCIgI2Fzc2V0QWN0aW9ucz1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjdXN0b21BY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0N1c3RvbShhY3Rpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiYWN0aW9uLmljb24ubWF0SWNvblwiPnt7IGFjdGlvbi5pY29uLm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIFtzdmdJY29uXT1cImFjdGlvbi5pY29uLnN2Z0ljb25cIiAqbmdJZj1cImFjdGlvbi5pY29uLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgYWN0aW9uLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNsaWNrUmVtb3ZlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMuYWN0aW9uQnV0dG9ucy5yZW1vdmUubWF0SWNvblwiPnt7IG9wdGlvbnMuYWN0aW9uQnV0dG9ucy5yZW1vdmUubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMucmVtb3ZlLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMucmVtb3ZlLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCJuaWNlX3VpX2tpdC5hc3NldHNfY2Fyb3VzZWwuZGVsZXRlXCIgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2Fyb3VzZWxcIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dBZGRBc3NldENvbnRhaW5lciB8fCBfYWN0aXZlQXNzZXRcIiBjbGFzcz1cImFjdGlvbi1idXR0b24gbGVmdC1hcnJvd1wiIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZWRdPVwiIV9hY3RpdmVcIiAoY2xpY2spPVwiY2xpY2tMZWZ0KClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMubGVmdEFycm93Lm1hdEljb25cIj57eyBvcHRpb25zLmxlZnRBcnJvdy5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFycm93c1wiICpuZ0lmPVwib3B0aW9ucy5sZWZ0QXJyb3cuc3ZnSWNvblwiIFtzdmdJY29uXT1cIm9wdGlvbnMubGVmdEFycm93LnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFzc2V0LWxpc3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0FkZEFzc2V0Q29udGFpbmVyICYmIGVkaXRcIiBjbGFzcz1cImFkZC1hc3NldC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLWFzc2V0XCIgbWF0UmlwcGxlIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFkZFBob3RvLm1hdEljb25cIj57eyBvcHRpb25zLmFkZFBob3RvLm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFkZFBob3RvLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLmFkZFBob3RvLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXQtbGlzdFwiIFtuZ1N0eWxlXT1cImxpc3RTdHlsZVwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgI2Fzc2V0c1xuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2V0XCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFzc2V0IG9mIF9hc3NldHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tBc3NldChpKVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJfYWN0aXZlID09PSBpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhc3NldC50eXBlID09PSAnaW1hZ2UnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJhc3NldC51cmwgPz8gYXNzZXQuYmFzZTY0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJhZGQtaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYXNzZXQudHlwZSA9PT0gJ3ZpZGVvJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhZ2dhYmxlPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImFzc2V0LnVybCA/PyBhc3NldC5iYXNlNjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmlkZW8+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0FkZEFzc2V0Q29udGFpbmVyIHx8IF9hY3RpdmVBc3NldFwiIGNsYXNzPVwiYWN0aW9uLWJ1dHRvbiByaWdodC1hcnJvd1wiIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZWRdPVwiX2xhc3RBc3NldFwiIChjbGljayk9XCJjbGlja1JpZ2h0KClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMucmlnaHRBcnJvdy5tYXRJY29uXCI+e3sgb3B0aW9ucy5yaWdodEFycm93Lm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYXJyb3dzXCIgKm5nSWY9XCJvcHRpb25zLnJpZ2h0QXJyb3cuc3ZnSWNvblwiIFtzdmdJY29uXT1cIm9wdGlvbnMucmlnaHRBcnJvdy5zdmdJY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGlucHV0ICNmaWxlSW5wdXQgdHlwZT1cImZpbGVcIiBoaWRkZW4gW2FjY2VwdF09XCJhY2NlcHRcIiAoY2hhbmdlKT1cIm9uRmlsZXNDaGFuZ2UoJGV2ZW50KVwiIFttdWx0aXBsZV09XCJtdWx0aXBsZVVwbG9hZFwiPlxuIl19
283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLWNhcm91c2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtdWkta2l0LXYyL3NyYy9saWIvY29tcG9uZW50cy9hc3NldHMtY2Fyb3VzZWwvYXNzZXRzLWNhcm91c2VsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtdWkta2l0LXYyL3NyYy9saWIvY29tcG9uZW50cy9hc3NldHMtY2Fyb3VzZWwvYXNzZXRzLWNhcm91c2VsLnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFFLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOzs7Ozs7Ozs7O0FBNENqSCxNQUFNLE9BQU8sMkJBQTJCO0lBeURwQyxJQUNXLGtCQUFrQixDQUFDLGtCQUFnRDtRQUMxRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7UUFFOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkQsT0FBTztTQUNWO1FBRUQs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b250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCwgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBDYW5Db2xvciwgVGhlbWVQYWxldHRlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2NvcmVcIjtcbmltcG9ydCB7IG5pY2VBbmltYXRpb25zIH0gZnJvbSBcIi4uLy4uL2FuaW1hdGlvbnNcIjtcbmltcG9ydCB7IEZpbGVVdGlscyB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuaW1wb3J0IHsgTklDRV9BU1NFVFNfQ0FST1VTRUxfT1BUSU9OUyB9IGZyb20gXCIuL2Fzc2V0cy1jYXJvdXNlbC5jb25zdGFudFwiO1xuaW1wb3J0IHsgTmljZUFzc2V0c0Nhcm91c2VsQWN0aXZlQ29udGVudERpcmVjdGl2ZSB9IGZyb20gXCIuL2RpcmVjdGl2ZXMvYXNzZXRzLWNhcm91c2VsLWFjdGl2ZS1jb250ZW50LmRpcmVjdGl2ZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5pY2VBc3NldHMge1xuICAgIHR5cGU6IFwiaW1hZ2VcIiB8IFwidmlkZW9cIjtcbiAgICBpZD86IG51bWJlciB8IHN0cmluZztcbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgYmFzZTY0Pzogc3RyaW5nO1xuICAgIGZpbGU/OiBGaWxlO1xufVxuXG5leHBvcnQgdHlwZSBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25JY29uID0geyBtYXRJY29uOiBzdHJpbmc7IHN2Z0ljb24/OiBzdHJpbmc7IH0gfCB7IG1hdEljb24/OiBzdHJpbmc7IHN2Z0ljb246IHN0cmluZzsgfTtcblxuZXhwb3J0IGludGVyZmFjZSBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25zIHtcbiAgICBpY29uOiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25JY29uO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhY3Rpb246IChhY3RpdmU6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOaWNlQXNzZXRzQ2Fyb3VzZWxPcHRpb25zIHtcbiAgICBhY3Rpb25CdXR0b25zPzoge1xuICAgICAgICBtb3JlT3B0aW9ucz86IE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbkljb247XG4gICAgICAgIGFkZFBob3RvPzogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uSWNvbjtcbiAgICAgICAgcmVtb3ZlPzogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uSWNvbjtcbiAgICB9O1xuICAgIGFkZFBob3RvPzogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uSWNvbjtcbiAgICBsZWZ0QXJyb3c/OiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25JY29uO1xuICAgIHJpZ2h0QXJyb3c/OiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25JY29uO1xuICAgIHVwbG9hZD86IE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbkljb247XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIm5pY2UtYXNzZXRzLWNhcm91c2VsXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiYXNzZXRzLWNhcm91c2VsLnRlbXBsYXRlLmh0bWxcIixcbiAgICBzdHlsZVVybHM6IFtcImFzc2V0cy1jYXJvdXNlbC50aGVtZS5zY3NzXCJdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgYW5pbWF0aW9uczogbmljZUFuaW1hdGlvbnMsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmljZUFzc2V0c0Nhcm91c2VsQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE5pY2VBc3NldHNDYXJvdXNlbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQ2FuQ29sb3Ige1xuICAgIHB1YmxpYyBfYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbiA9IDA7XG4gICAgcHVibGljIF9hY3RpdmUgPSAwO1xuICAgIHB1YmxpYyBfYXNzZXRzOiBOaWNlQXNzZXRzW10gPSBbXTtcbiAgICBwdWJsaWMgX2FjdGl2ZUFzc2V0OiBOaWNlQXNzZXRzO1xuICAgIHB1YmxpYyBfbGFzdEFzc2V0ID0gdHJ1ZTtcbiAgICBwdWJsaWMgX3Nob3VsZFRyYW5zZm9ybSA9IGZhbHNlO1xuICAgIHB1YmxpYyBfYWN0aXZlVmlkZW9FbGVtZW50OiBFbGVtZW50UmVmPEhUTUxWaWRlb0VsZW1lbnQ+O1xuICAgIHB1YmxpYyBfYXNzZXRzRWxlbWVudDogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PjtcbiAgICBwdWJsaWMgZGVmYXVsdENvbG9yOiBUaGVtZVBhbGV0dGUgPSBcInByaW1hcnlcIjtcblxuICAgIEBWaWV3Q2hpbGQoXCJmaWxlSW5wdXRcIilcbiAgICBwdWJsaWMgaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29sb3I6IFRoZW1lUGFsZXR0ZSA9IHRoaXMuZGVmYXVsdENvbG9yO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZWRpdCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWNjZXB0OiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY3VzdG9tQWN0aW9uczogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uc1tdID0gW107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbWFnZXNQcm9jZXNzb3I6IChmaWxlczogRmlsZVtdKSA9PiBQcm9taXNlPEZpbGVbXT47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtdWx0aXBsZVVwbG9hZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmlzaWJsZVByZXZpZXdBc3NldCA9IDQ7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93QWRkQXNzZXRDb250YWluZXIgPSB0cnVlO1xuXG4gICAgQENvbnRlbnRDaGlsZChOaWNlQXNzZXRzQ2Fyb3VzZWxBY3RpdmVDb250ZW50RGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIGFjdGl2ZUNvbnRlbnQ6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYWN0aXZlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlZEFzc2V0ID0gbmV3IEV2ZW50RW1pdHRlcjxOaWNlQXNzZXRzPigpO1xuXG4gICAgcHVibGljIGxpc3RTdHlsZTogeyB0cmFuc2Zvcm06IHN0cmluZyB9ID0geyB0cmFuc2Zvcm06IFwidHJhbnNsYXRlWCgwcHgpXCIgfTtcblxuICAgIHB1YmxpYyBzaG93T3ZlcmxheTogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgX2ltYWdlc01pbWVUeXBlcyA9IFtcImltYWdlL3BuZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS93ZWJwXCIsIFwiaW1hZ2UvYXZpZlwiXTtcbiAgICBwcml2YXRlIHByb3BhZ2F0ZTogKGFzc2V0czogTmljZUFzc2V0c1tdKSA9PiB2b2lkO1xuXG4gICAgQFZpZXdDaGlsZChcImFjdGl2ZVZpZGVvXCIpXG4gICAgcHVibGljIHNldCBhY3RpdmVWaWRlb0VsZW1lbnQoYWN0aXZlVmlkZW9FbGVtZW50OiBFbGVtZW50UmVmPEhUTUxWaWRlb0VsZW1lbnQ+KSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVZpZGVvRWxlbWVudCA9IGFjdGl2ZVZpZGVvRWxlbWVudDtcblxuICAgICAgICBpZiAoIXRoaXMuX2FjdGl2ZVZpZGVvRWxlbWVudCB8fCAhdGhpcy5fYXNzZXRzRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGFydFN5bmNWaWRlbygpO1xuICAgIH1cblxuICAgIEBWaWV3Q2hpbGRyZW4oXCJhc3NldHNcIilcbiAgICBwdWJsaWMgc2V0IGFzc2V0c0VsZW1lbnQoYXNzZXRzRWxlbWVudDogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+Pikge1xuICAgICAgICB0aGlzLl9hc3NldHNFbGVtZW50ID0gYXNzZXRzRWxlbWVudDtcblxuICAgICAgICBpZiAoIXRoaXMuX2FjdGl2ZVZpZGVvRWxlbWVudCB8fCAhdGhpcy5fYXNzZXRzRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGFydFN5bmNWaWRlbygpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBhc3NldHMoYXNzZXRzOiBOaWNlQXNzZXRzW10pIHtcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKGFzc2V0cyA/PyBbXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXQgYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRyYW5zbGF0aW9uUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgICAgdGhpcy5saXN0U3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoY2FsYygodmFyKC0tbmljZS1hc3NldHMtY2Fyb3VzZWwtYXNzZXQtd2lkdGgpICsgdmFyKC0tbmljZS1hc3NldHMtY2Fyb3VzZWwtYXNzZXQtZ2FwKSkgKiAke3Bvc2l0aW9ufSkpYDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldCBhY3RpdmVBc3NldChwb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApIHtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHBvc2l0aW9uO1xuICAgICAgICB0aGlzLl9hY3RpdmVBc3NldCA9IHRoaXMuX2Fzc2V0c1t0aGlzLl9hY3RpdmVdO1xuICAgICAgICB0aGlzLl9sYXN0QXNzZXQgPSB0aGlzLl9hY3RpdmUgPT09IHRoaXMuX2Fzc2V0cy5sZW5ndGggLSAxIHx8ICF0aGlzLl9hc3NldHMubGVuZ3RoO1xuICAgICAgICB0aGlzLl9zaG91bGRUcmFuc2Zvcm1cbiAgICAgICAgICAgID0gKCh0aGlzLmVkaXQgJiYgdGhpcy5zaG93QWRkQXNzZXRDb250YWluZXIpICYmIHRoaXMuX2FjdGl2ZSA+PSAodGhpcy52aXNpYmxlUHJldmlld0Fzc2V0IC0gMSkpXG4gICAgICAgICAgICB8fCB0aGlzLl9hY3RpdmUgPj0gdGhpcy52aXNpYmxlUHJldmlld0Fzc2V0O1xuICAgICAgICB0aGlzLmFjdGl2ZUNoYW5nZS5lbWl0KHRoaXMuX2FjdGl2ZSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChOSUNFX0FTU0VUU19DQVJPVVNFTF9PUFRJT05TKSBwdWJsaWMgcmVhZG9ubHkgb3B0aW9uczogTmljZUFzc2V0c0Nhcm91c2VsT3B0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGFjdGlvbkJ1dHRvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkUGhvdG86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEljb246IFwicGhvdG9fY2FtZXJhXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbW9yZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEljb246IFwibW9yZV92ZXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJY29uOiBcImRlbGV0ZVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFkZFBob3RvOiB7XG4gICAgICAgICAgICAgICAgICAgIG1hdEljb246IFwicGhvdG9fY2FtZXJhXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxlZnRBcnJvdzoge1xuICAgICAgICAgICAgICAgICAgICBtYXRJY29uOiBcImNoZXZyb25fbGVmdFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByaWdodEFycm93OiB7XG4gICAgICAgICAgICAgICAgICAgIG1hdEljb246IFwiY2hldnJvbl9yaWdodFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB1cGxvYWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgbWF0SWNvbjogXCJmaWxlX3VwbG9hZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjY2VwdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFjY2VwdCA9IFsuLi50aGlzLl9pbWFnZXNNaW1lVHlwZXNdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKFwiYWNjZXB0XCIgaW4gY2hhbmdlcyAmJiB0aGlzLmFjY2VwdCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmFjY2VwdC5pbmRleE9mKFwiaW1hZ2UvKlwiKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY2NlcHQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjY2VwdC5wdXNoKC4uLnRoaXMuX2ltYWdlc01pbWVUeXBlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZShhc3NldHM6IE5pY2VBc3NldHNbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hc3NldHMgPSBhc3NldHMgPz8gW107XG5cbiAgICAgICAgaWYgKHRoaXMuX2Fzc2V0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUFzc2V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RBc3NldCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYXNzZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUFzc2V0ID0gdGhpcy5fYXNzZXRzW3RoaXMuX2FjdGl2ZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKGFzc2V0czogTmljZUFzc2V0c1tdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoYXNzZXRzOiBOaWNlQXNzZXRzW10pID0+IHZvaWQpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgY2xpY2tMZWZ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUFzc2V0ID0gdGhpcy5fYWN0aXZlIC0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmVUcmFuc2xhdGlvblBvc2l0aW9uIDwgMCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUcmFuc2xhdGlvblBvc2l0aW9uID0gdGhpcy5fYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbiArIDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xpY2tSaWdodCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2xhc3RBc3NldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVBc3NldCA9IHRoaXMuX2FjdGl2ZSArIDE7XG4gICAgICAgIGlmICh0aGlzLl9zaG91bGRUcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbiA9IHRoaXMuX2FjdGl2ZVRyYW5zbGF0aW9uUG9zaXRpb24gLSAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrQXNzZXQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBsZXQgdmlzaWJsZUFzc2V0cyA9ICh0aGlzLmVkaXQgJiYgdGhpcy5zaG93QWRkQXNzZXRDb250YWluZXIpID8gKHRoaXMudmlzaWJsZVByZXZpZXdBc3NldCAtIDIpIDogKHRoaXMudmlzaWJsZVByZXZpZXdBc3NldCAtIDEpO1xuICAgICAgICBpZiAoaW5kZXggPCB2aXNpYmxlQXNzZXRzKSB7XG4gICAgICAgICAgICB2aXNpYmxlQXNzZXRzID0gaW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUcmFuc2xhdGlvblBvc2l0aW9uID0gKGluZGV4IC0gdmlzaWJsZUFzc2V0cykgKiAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlQXNzZXQgPSBpbmRleDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb25GaWxlc0NoYW5nZShldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZmlsZXMgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpPy5maWxlcztcblxuICAgICAgICBhd2FpdCB0aGlzLm9uRmlsZXNEcm9wKGZpbGVzKTtcblxuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb25GaWxlc0Ryb3AoZmlsZUxpc3Q6IEZpbGVMaXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCBmaWxlcyA9IHRoaXMuZmlsdGVyT3V0VW5zdXBwb3J0ZWRGaWxlcyhmaWxlTGlzdCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VzUHJvY2Vzc29yKSB7XG4gICAgICAgICAgICBmaWxlcyA9IGF3YWl0IHRoaXMuZ2V0UHJvY2Vzc2VkRmlsZXMoZmlsZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmaWxlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2Fzc2V0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgICAgIHR5cGU6IGZpbGUudHlwZS5zcGxpdChcIi9cIikuc2hpZnQoKSBhcyBcImltYWdlXCIgfCBcInZpZGVvXCIsXG4gICAgICAgICAgICAgICAgYmFzZTY0OiBhd2FpdCBGaWxlVXRpbHMuZ2V0RGF0YVVybChmaWxlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsaWNrQXNzZXQodGhpcy5fYXNzZXRzLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZT8uKHRoaXMuX2Fzc2V0cyk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrUmVtb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZWRBc3NldC5lbWl0KHRoaXMuX2Fzc2V0c1t0aGlzLl9hY3RpdmVdKTtcbiAgICAgICAgdGhpcy5fYXNzZXRzLnNwbGljZSh0aGlzLl9hY3RpdmUsIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLl9sYXN0QXNzZXQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xpY2tBc3NldCh0aGlzLl9hc3NldHMubGVuZ3RoIC0gMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNsaWNrQXNzZXQodGhpcy5fYWN0aXZlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvcGFnYXRlPy4odGhpcy5fYXNzZXRzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xpY2tDdXN0b20oYWN0aW9uOiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25zKTogdm9pZCB7XG4gICAgICAgIGFjdGlvbi5hY3Rpb24odGhpcy5fYWN0aXZlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc3RhcnRTeW5jVmlkZW8oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgICh0aGlzLl9hc3NldHNFbGVtZW50LmdldCh0aGlzLl9hY3RpdmUpLm5hdGl2ZUVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTFZpZGVvRWxlbWVudCkucGF1c2UoKTtcbiAgICAgICAgKHRoaXMuX2Fzc2V0c0VsZW1lbnQuZ2V0KHRoaXMuX2FjdGl2ZSkubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MVmlkZW9FbGVtZW50KS5jdXJyZW50VGltZSA9IDA7XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlVmlkZW9FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY3VycmVudFRpbWUgPSAwO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2FjdGl2ZVZpZGVvRWxlbWVudC5uYXRpdmVFbGVtZW50LnBsYXkoKTtcbiAgICAgICAgYXdhaXQgKHRoaXMuX2Fzc2V0c0VsZW1lbnQuZ2V0KHRoaXMuX2FjdGl2ZSkubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MVmlkZW9FbGVtZW50KS5wbGF5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXJPdXRVbnN1cHBvcnRlZEZpbGVzKGZpbGVMaXN0OiBGaWxlTGlzdCk6IEZpbGVbXSB7XG4gICAgICAgIGNvbnN0IGZpbGVzOiBGaWxlW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlID0gZmlsZUxpc3QuaXRlbShpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjY2VwdC5zb21lKChhY2NlcHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYWNjZXB0LmVuZHNXaXRoKFwiKlwiKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZS50eXBlLnN0YXJ0c1dpdGgoYWNjZXB0LnJlcGxhY2UoXCIqXCIsIFwiXCIpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjZXB0ID09PSBmaWxlLnR5cGU7XG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgIGZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRQcm9jZXNzZWRGaWxlcyhmaWxlczogRmlsZVtdKTogUHJvbWlzZTxGaWxlW10gfCBudWxsPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbWFnZXNQcm9jZXNzb3IoZmlsZXMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJvdXNlbC1jb250YWluZXJcIiBuaWNlRHJvcHpvbmUgKGZpbGVzRHJvcHBlZCk9XCJvbkZpbGVzRHJvcCgkZXZlbnQpXCI+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImFjdGl2ZS1pbWFnZVwiXG4gICAgICAgIG1hdFJpcHBsZVxuICAgICAgICBbY2xhc3MuZW1wdHktc3RhdGVdPVwiIV9hY3RpdmVBc3NldFwiXG4gICAgICAgIChjbGljayk9XCJlZGl0ICYmIGZpbGVJbnB1dC5jbGljaygpO1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgID5cbiAgICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIGgtZnVsbFwiPlxuICAgICAgICAgICAgPG1hdC1zcGlubmVyIFtkaWFtZXRlcl09XCIzMlwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIl9hY3RpdmVBc3NldCAmJiBhY3RpdmVDb250ZW50XCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhY3RpdmVDb250ZW50XCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IF9hY3RpdmVBc3NldH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiX2FjdGl2ZUFzc2V0Py50eXBlID09PSAnaW1hZ2UnXCJcbiAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cInNob3dPdmVybGF5PXRydWVcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiX2FjdGl2ZUFzc2V0LnVybCA/PyBfYWN0aXZlQXNzZXQuYmFzZTY0XCJcbiAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgICAgICAgICAgYWx0PVwiYWN0aXZlLWltYWdlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDx2aWRlbyAjYWN0aXZlVmlkZW8gKm5nSWY9XCJfYWN0aXZlQXNzZXQ/LnR5cGUgPT09ICd2aWRlbydcIiBkcmFnZ2FibGU9XCJmYWxzZVwiIGxvb3AgW3NyY109XCJfYWN0aXZlQXNzZXQudXJsID8/IF9hY3RpdmVBc3NldC5iYXNlNjRcIj48L3ZpZGVvPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGUtY29udGVudFwiICpuZ0lmPVwiIV9hY3RpdmVBc3NldFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMudXBsb2FkLm1hdEljb25cIj57eyBvcHRpb25zLnVwbG9hZC5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLnVwbG9hZC5zdmdJY29uXCIgW3N2Z0ljb25dPVwib3B0aW9ucy51cGxvYWQuc3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCJuaWNlX3VpX2tpdC5hc3NldHNfY2Fyb3VzZWwudXBsb2FkX2hlcmVcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJfYWN0aXZlQXNzZXQgJiYgc2hvd092ZXJsYXkgJiYgZWRpdFwiIGNsYXNzPVwiYWN0aXZlLWltYWdlLW92ZXJsYXlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIChtb3VzZW91dCk9XCJzaG93T3ZlcmxheT1mYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgdy1mdWxsIGgtZnVsbFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLnVwbG9hZC5tYXRJY29uXCI+e3sgb3B0aW9ucy51cGxvYWQubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMudXBsb2FkLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLnVwbG9hZC5zdmdJY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZWRpdFwiIGNsYXNzPVwiYWN0aXZlLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMuYWRkUGhvdG8ubWF0SWNvblwiPnt7IG9wdGlvbnMuYWN0aW9uQnV0dG9ucy5hZGRQaG90by5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy5hY3Rpb25CdXR0b25zLmFkZFBob3RvLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMuYWRkUGhvdG8uc3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImFzc2V0QWN0aW9uc1wiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBbZGlzYWJsZWRdPVwiIV9hY3RpdmVBc3NldFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMubW9yZU9wdGlvbnMubWF0SWNvblwiPnt7IG9wdGlvbnMuYWN0aW9uQnV0dG9ucy5tb3JlT3B0aW9ucy5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy5hY3Rpb25CdXR0b25zLm1vcmVPcHRpb25zLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMubW9yZU9wdGlvbnMuc3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPG1hdC1tZW51IGNsYXNzPVwibmljZS1hc3NldC1vcHRpb25zLW1lbnVcIiBbeFBvc2l0aW9uXT1cIidiZWZvcmUnXCIgI2Fzc2V0QWN0aW9ucz1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjdXN0b21BY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0N1c3RvbShhY3Rpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiYWN0aW9uLmljb24ubWF0SWNvblwiPnt7IGFjdGlvbi5pY29uLm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIFtzdmdJY29uXT1cImFjdGlvbi5pY29uLnN2Z0ljb25cIiAqbmdJZj1cImFjdGlvbi5pY29uLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgYWN0aW9uLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNsaWNrUmVtb3ZlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMuYWN0aW9uQnV0dG9ucy5yZW1vdmUubWF0SWNvblwiPnt7IG9wdGlvbnMuYWN0aW9uQnV0dG9ucy5yZW1vdmUubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMucmVtb3ZlLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMucmVtb3ZlLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCJuaWNlX3VpX2tpdC5hc3NldHNfY2Fyb3VzZWwuZGVsZXRlXCIgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2Fyb3VzZWxcIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dBZGRBc3NldENvbnRhaW5lciB8fCBfYWN0aXZlQXNzZXRcIiBjbGFzcz1cImFjdGlvbi1idXR0b24gbGVmdC1hcnJvd1wiIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZWRdPVwiIV9hY3RpdmVcIiAoY2xpY2spPVwiY2xpY2tMZWZ0KClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMubGVmdEFycm93Lm1hdEljb25cIj57eyBvcHRpb25zLmxlZnRBcnJvdy5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFycm93c1wiICpuZ0lmPVwib3B0aW9ucy5sZWZ0QXJyb3cuc3ZnSWNvblwiIFtzdmdJY29uXT1cIm9wdGlvbnMubGVmdEFycm93LnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFzc2V0LWxpc3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0FkZEFzc2V0Q29udGFpbmVyICYmIGVkaXRcIiBjbGFzcz1cImFkZC1hc3NldC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLWFzc2V0XCIgbWF0UmlwcGxlIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFkZFBob3RvLm1hdEljb25cIj57eyBvcHRpb25zLmFkZFBob3RvLm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFkZFBob3RvLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLmFkZFBob3RvLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXQtbGlzdFwiIFtuZ1N0eWxlXT1cImxpc3RTdHlsZVwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgI2Fzc2V0c1xuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2V0XCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFzc2V0IG9mIF9hc3NldHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tBc3NldChpKVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJfYWN0aXZlID09PSBpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhc3NldC50eXBlID09PSAnaW1hZ2UnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJhc3NldC51cmwgPz8gYXNzZXQuYmFzZTY0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJhZGQtaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYXNzZXQudHlwZSA9PT0gJ3ZpZGVvJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhZ2dhYmxlPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImFzc2V0LnVybCA/PyBhc3NldC5iYXNlNjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmlkZW8+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0FkZEFzc2V0Q29udGFpbmVyIHx8IF9hY3RpdmVBc3NldFwiIGNsYXNzPVwiYWN0aW9uLWJ1dHRvbiByaWdodC1hcnJvd1wiIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZWRdPVwiX2xhc3RBc3NldFwiIChjbGljayk9XCJjbGlja1JpZ2h0KClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMucmlnaHRBcnJvdy5tYXRJY29uXCI+e3sgb3B0aW9ucy5yaWdodEFycm93Lm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYXJyb3dzXCIgKm5nSWY9XCJvcHRpb25zLnJpZ2h0QXJyb3cuc3ZnSWNvblwiIFtzdmdJY29uXT1cIm9wdGlvbnMucmlnaHRBcnJvdy5zdmdJY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGlucHV0ICNmaWxlSW5wdXQgdHlwZT1cImZpbGVcIiBoaWRkZW4gW2FjY2VwdF09XCJhY2NlcHRcIiAoY2hhbmdlKT1cIm9uRmlsZXNDaGFuZ2UoJGV2ZW50KVwiIFttdWx0aXBsZV09XCJtdWx0aXBsZVVwbG9hZFwiPlxuIl19
@@ -1,7 +1,9 @@
1
- import { Component, forwardRef, Input, ViewChild, ViewEncapsulation } from "@angular/core";
1
+ import { Component, forwardRef, Input, ViewEncapsulation } from "@angular/core";
2
2
  import { FormControl, FormGroup, NG_VALUE_ACCESSOR } from "@angular/forms";
3
- import { MatDateRangePicker } from "@angular/material/datepicker";
3
+ import { isSameDay } from "date-fns";
4
4
  import subDays from "date-fns/subDays";
5
+ import { pairwise, startWith } from "rxjs";
6
+ import { filter } from "rxjs/operators";
5
7
  import { HeaderComponent } from "./components/header/header.component";
6
8
  import * as i0 from "@angular/core";
7
9
  import * as i1 from "@angular/common";
@@ -28,9 +30,31 @@ export class NiceDateRangePickerComponent {
28
30
  to: this.max
29
31
  };
30
32
  this.formGroup.patchValue(this.value);
31
- this.formGroup.valueChanges.subscribe((_) => {
33
+ this.formGroup.valueChanges.pipe(startWith(this.value), pairwise(), filter(([before, after]) => {
34
+ /**
35
+ * We filter out the value changes to only emit when the selection is completed/
36
+ */
37
+ if (!after.from && !after.to) {
38
+ return true;
39
+ }
40
+ // This is the middle of the selection
41
+ if (after.from && !after.to) {
42
+ return false;
43
+ }
44
+ // This means that the selection is done
45
+ if (!before.to && after.to) {
46
+ return true;
47
+ }
48
+ // This is an edge case when we select a new range with an active range selected.
49
+ // The after.to will be at null after the after.from is emitted
50
+ if (!isSameDay(before.from, after.from) && isSameDay(before.to, after.to)) {
51
+ return false;
52
+ }
53
+ // Skip if noting has changed
54
+ return !(isSameDay(before.from, after.from) && !isSameDay(before.to, after.to));
55
+ })).subscribe((_) => {
32
56
  this.value = this.formGroup.getRawValue();
33
- this.propage?.(this.value);
57
+ this.propagate?.(this.value);
34
58
  });
35
59
  }
36
60
  writeValue(value) {
@@ -38,7 +62,7 @@ export class NiceDateRangePickerComponent {
38
62
  this.formGroup.patchValue(this.value);
39
63
  }
40
64
  registerOnChange(fn) {
41
- this.propage = fn;
65
+ this.propagate = fn;
42
66
  }
43
67
  registerOnTouched(fn) { }
44
68
  }
@@ -49,7 +73,7 @@ NiceDateRangePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14
49
73
  useExisting: forwardRef(() => NiceDateRangePickerComponent),
50
74
  multi: true
51
75
  }
52
- ], viewQueries: [{ propertyName: "picker", first: true, predicate: MatDateRangePicker, descendants: true }], ngImport: i0, template: "<div class=\"nice-date-picker-container\">\n <div class=\"nice-date-picker-header\">\n <div class=\"from-to\">\n <ng-container *ngIf=\"value.from\">\n {{ value.from | localizedDate: \"longDate\" }}\n </ng-container>\n <ng-container *ngIf=\"value.to\">\n <div class=\"separator\">-</div>\n {{ value.to | localizedDate: \"longDate\" }}\n </ng-container>\n </div>\n </div>\n\n <mat-date-range-input [formGroup]=\"formGroup\" [max]=\"nowIsMax ? now : null\" [rangePicker]=\"picker\">\n <input formControlName=\"from\" class=\"hidden-input\" matStartDate placeholder=\"Start date\">\n <input formControlName=\"to\" class=\"hidden-input\" matEndDate placeholder=\"End date\">\n </mat-date-range-input>\n\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n\n <mat-date-range-picker\n [calendarHeaderComponent]=\"HeaderComponent\"\n #picker\n ></mat-date-range-picker>\n</div>\n", styles: ["nice-date-range-picker .mat-date-range-input{width:0;height:0;padding:0;margin:0;border:none;visibility:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i2.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i2.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i2.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i2.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i5.LocalizedDatePipe, name: "localizedDate" }], encapsulation: i0.ViewEncapsulation.None });
76
+ ], ngImport: i0, template: "<div class=\"nice-date-picker-container\">\n <div class=\"nice-date-picker-header\">\n <div class=\"from-to\">\n <ng-container *ngIf=\"value?.from\">\n {{ value.from | localizedDate: \"longDate\" }}\n </ng-container>\n <ng-container *ngIf=\"value?.to\">\n <div class=\"separator\">-</div>\n {{ value.to | localizedDate: \"longDate\" }}\n </ng-container>\n </div>\n </div>\n\n <mat-date-range-input [formGroup]=\"formGroup\" [max]=\"nowIsMax ? now : null\" [rangePicker]=\"picker\">\n <input formControlName=\"from\" class=\"hidden-input\" matStartDate placeholder=\"Start date\">\n <input formControlName=\"to\" class=\"hidden-input\" matEndDate placeholder=\"End date\">\n </mat-date-range-input>\n\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n\n <mat-date-range-picker\n [calendarHeaderComponent]=\"HeaderComponent\"\n #picker\n ></mat-date-range-picker>\n</div>\n", styles: ["nice-date-range-picker .mat-date-range-input{width:0;height:0;padding:0;margin:0;border:none;visibility:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i2.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i2.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i2.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i2.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i5.LocalizedDatePipe, name: "localizedDate" }], encapsulation: i0.ViewEncapsulation.None });
53
77
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NiceDateRangePickerComponent, decorators: [{
54
78
  type: Component,
55
79
  args: [{ selector: "nice-date-range-picker", encapsulation: ViewEncapsulation.None, providers: [
@@ -58,11 +82,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
58
82
  useExisting: forwardRef(() => NiceDateRangePickerComponent),
59
83
  multi: true
60
84
  }
61
- ], template: "<div class=\"nice-date-picker-container\">\n <div class=\"nice-date-picker-header\">\n <div class=\"from-to\">\n <ng-container *ngIf=\"value.from\">\n {{ value.from | localizedDate: \"longDate\" }}\n </ng-container>\n <ng-container *ngIf=\"value.to\">\n <div class=\"separator\">-</div>\n {{ value.to | localizedDate: \"longDate\" }}\n </ng-container>\n </div>\n </div>\n\n <mat-date-range-input [formGroup]=\"formGroup\" [max]=\"nowIsMax ? now : null\" [rangePicker]=\"picker\">\n <input formControlName=\"from\" class=\"hidden-input\" matStartDate placeholder=\"Start date\">\n <input formControlName=\"to\" class=\"hidden-input\" matEndDate placeholder=\"End date\">\n </mat-date-range-input>\n\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n\n <mat-date-range-picker\n [calendarHeaderComponent]=\"HeaderComponent\"\n #picker\n ></mat-date-range-picker>\n</div>\n", styles: ["nice-date-range-picker .mat-date-range-input{width:0;height:0;padding:0;margin:0;border:none;visibility:hidden}\n"] }]
62
- }], propDecorators: { picker: [{
63
- type: ViewChild,
64
- args: [MatDateRangePicker]
65
- }], min: [{
85
+ ], template: "<div class=\"nice-date-picker-container\">\n <div class=\"nice-date-picker-header\">\n <div class=\"from-to\">\n <ng-container *ngIf=\"value?.from\">\n {{ value.from | localizedDate: \"longDate\" }}\n </ng-container>\n <ng-container *ngIf=\"value?.to\">\n <div class=\"separator\">-</div>\n {{ value.to | localizedDate: \"longDate\" }}\n </ng-container>\n </div>\n </div>\n\n <mat-date-range-input [formGroup]=\"formGroup\" [max]=\"nowIsMax ? now : null\" [rangePicker]=\"picker\">\n <input formControlName=\"from\" class=\"hidden-input\" matStartDate placeholder=\"Start date\">\n <input formControlName=\"to\" class=\"hidden-input\" matEndDate placeholder=\"End date\">\n </mat-date-range-input>\n\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n\n <mat-date-range-picker\n [calendarHeaderComponent]=\"HeaderComponent\"\n #picker\n ></mat-date-range-picker>\n</div>\n", styles: ["nice-date-range-picker .mat-date-range-input{width:0;height:0;padding:0;margin:0;border:none;visibility:hidden}\n"] }]
86
+ }], propDecorators: { min: [{
66
87
  type: Input
67
88
  }], max: [{
68
89
  type: Input
@@ -71,4 +92,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
71
92
  }], allowClear: [{
72
93
  type: Input
73
94
  }] } });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtdWkta2l0LXYyL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci50ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUF3QixXQUFXLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7O0FBb0J2RSxNQUFNLE9BQU8sNEJBQTRCO0lBYnpDO1FBY29CLG9CQUFlLEdBQUcsZUFBZSxDQUFDO1FBTTNDLFFBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUc3QixRQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUdqQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBR2hCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFFbEIsY0FBUyxHQUFHLElBQUksU0FBUyxDQUFDO1lBQzdCLElBQUksRUFBRSxJQUFJLFdBQVcsRUFBRTtZQUN2QixFQUFFLEVBQUUsSUFBSSxXQUFXLEVBQUU7U0FDeEIsQ0FBQyxDQUFDO1FBQ0ksUUFBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7S0E0QjNCO0lBdkJVLFFBQVE7UUFDWCxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1QsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2QsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHO1NBQ2YsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV0QyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBK0I7UUFDN0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxFQUE2QztRQUNqRSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU0saUJBQWlCLENBQUMsRUFBTyxJQUFTLENBQUM7O3lIQWpEakMsNEJBQTRCOzZHQUE1Qiw0QkFBNEIscUlBUjFCO1FBQ1A7WUFDSSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsNEJBQTRCLENBQUM7WUFDM0QsS0FBSyxFQUFFLElBQUk7U0FDZDtLQUNKLGtFQUtVLGtCQUFrQixnREMzQmpDLG1pQ0F5QkE7MkZERGEsNEJBQTRCO2tCQWJ4QyxTQUFTOytCQUNJLHdCQUF3QixpQkFHbkIsaUJBQWlCLENBQUMsSUFBSSxhQUMxQjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSw2QkFBNkIsQ0FBQzs0QkFDM0QsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0o7OEJBTU8sTUFBTTtzQkFEYixTQUFTO3VCQUFDLGtCQUFrQjtnQkFJdEIsR0FBRztzQkFEVCxLQUFLO2dCQUlDLEdBQUc7c0JBRFQsS0FBSztnQkFJQyxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsVUFBVTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IE1hdERhdGVSYW5nZVBpY2tlciB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyXCI7XG5pbXBvcnQgc3ViRGF5cyBmcm9tIFwiZGF0ZS1mbnMvc3ViRGF5c1wiO1xuaW1wb3J0IHsgSGVhZGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5pY2VEYXRlUmFuZ2VQaWNrZXJWYWx1ZSB7XG4gICAgZnJvbTogRGF0ZTtcbiAgICB0bzogRGF0ZTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibmljZS1kYXRlLXJhbmdlLXBpY2tlclwiLFxuICAgIHRlbXBsYXRlVXJsOiBcImRhdGUtcmFuZ2UtcGlja2VyLnRlbXBsYXRlLmh0bWxcIixcbiAgICBzdHlsZVVybHM6IFtcImRhdGUtcmFuZ2UtcGlja2VyLnN0eWxlLnNjc3NcIl0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOaWNlRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE5pY2VEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgSGVhZGVyQ29tcG9uZW50ID0gSGVhZGVyQ29tcG9uZW50O1xuXG4gICAgQFZpZXdDaGlsZChNYXREYXRlUmFuZ2VQaWNrZXIpXG4gICAgcHJpdmF0ZSBwaWNrZXI6IE1hdERhdGVSYW5nZVBpY2tlcjxhbnk+O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbWluID0gc3ViRGF5cyhuZXcgRGF0ZSgpLCAzKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1heCA9IG5ldyBEYXRlKCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBub3dJc01heCA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGxvd0NsZWFyID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgZnJvbTogbmV3IEZvcm1Db250cm9sKCksXG4gICAgICAgIHRvOiBuZXcgRm9ybUNvbnRyb2woKVxuICAgIH0pO1xuICAgIHB1YmxpYyBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIHB1YmxpYyB2YWx1ZTogTmljZURhdGVSYW5nZVBpY2tlclZhbHVlO1xuXG4gICAgcHJpdmF0ZSBwcm9wYWdlOiAodmFsdWU6IE5pY2VEYXRlUmFuZ2VQaWNrZXJWYWx1ZSkgPT4gdm9pZDtcblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHtcbiAgICAgICAgICAgIGZyb206IHRoaXMubWluLFxuICAgICAgICAgICAgdG86IHRoaXMubWF4XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodGhpcy52YWx1ZSk7XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgICAgICB0aGlzLnByb3BhZ2U/Lih0aGlzLnZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IE5pY2VEYXRlUmFuZ2VQaWNrZXJWYWx1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogTmljZURhdGVSYW5nZVBpY2tlclZhbHVlKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcGFnZSA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7fVxufVxuIiwiPGRpdiBjbGFzcz1cIm5pY2UtZGF0ZS1waWNrZXItY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cIm5pY2UtZGF0ZS1waWNrZXItaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmcm9tLXRvXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWUuZnJvbVwiPlxuICAgICAgICAgICAgICAgIHt7IHZhbHVlLmZyb20gfCBsb2NhbGl6ZWREYXRlOiBcImxvbmdEYXRlXCIgfX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhbHVlLnRvXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvclwiPi08L2Rpdj5cbiAgICAgICAgICAgICAgICB7eyB2YWx1ZS50byB8IGxvY2FsaXplZERhdGU6IFwibG9uZ0RhdGVcIiB9fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0IFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgW21heF09XCJub3dJc01heCA/IG5vdyA6IG51bGxcIiBbcmFuZ2VQaWNrZXJdPVwicGlja2VyXCI+XG4gICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJmcm9tXCIgY2xhc3M9XCJoaWRkZW4taW5wdXRcIiBtYXRTdGFydERhdGUgcGxhY2Vob2xkZXI9XCJTdGFydCBkYXRlXCI+XG4gICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0b1wiIGNsYXNzPVwiaGlkZGVuLWlucHV0XCIgbWF0RW5kRGF0ZSBwbGFjZWhvbGRlcj1cIkVuZCBkYXRlXCI+XG4gICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cblxuICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG5cbiAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyXG4gICAgICAgICAgICBbY2FsZW5kYXJIZWFkZXJDb21wb25lbnRdPVwiSGVhZGVyQ29tcG9uZW50XCJcbiAgICAgICAgICAgICNwaWNrZXJcbiAgICA+PC9tYXQtZGF0ZS1yYW5nZS1waWNrZXI+XG48L2Rpdj5cbiJdfQ==
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtdWkta2l0LXYyL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci50ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBVSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQXdCLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3JDLE9BQU8sT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7QUFvQnZFLE1BQU0sT0FBTyw0QkFBNEI7SUFiekM7UUFjb0Isb0JBQWUsR0FBRyxlQUFlLENBQUM7UUFHM0MsUUFBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRzdCLFFBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBR2pCLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFHaEIsZUFBVSxHQUFHLElBQUksQ0FBQztRQUVsQixjQUFT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QUcsRUFBRSw2QkFBNkIsQ0FBQzs0QkFDM0QsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0o7OEJBTU0sR0FBRztzQkFEVCxLQUFLO2dCQUlDLEdBQUc7c0JBRFQsS0FBSztnQkFJQyxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsVUFBVTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBpc1NhbWVEYXkgfSBmcm9tIFwiZGF0ZS1mbnNcIjtcbmltcG9ydCBzdWJEYXlzIGZyb20gXCJkYXRlLWZucy9zdWJEYXlzXCI7XG5pbXBvcnQgeyBwYWlyd2lzZSwgc3RhcnRXaXRoIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgSGVhZGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5pY2VEYXRlUmFuZ2VQaWNrZXJWYWx1ZSB7XG4gICAgZnJvbTogRGF0ZTtcbiAgICB0bzogRGF0ZTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibmljZS1kYXRlLXJhbmdlLXBpY2tlclwiLFxuICAgIHRlbXBsYXRlVXJsOiBcImRhdGUtcmFuZ2UtcGlja2VyLnRlbXBsYXRlLmh0bWxcIixcbiAgICBzdHlsZVVybHM6IFtcImRhdGUtcmFuZ2UtcGlja2VyLnN0eWxlLnNjc3NcIl0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOaWNlRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE5pY2VEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgSGVhZGVyQ29tcG9uZW50ID0gSGVhZGVyQ29tcG9uZW50O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbWluID0gc3ViRGF5cyhuZXcgRGF0ZSgpLCAzKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1heCA9IG5ldyBEYXRlKCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBub3dJc01heCA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGxvd0NsZWFyID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgZnJvbTogbmV3IEZvcm1Db250cm9sKCksXG4gICAgICAgIHRvOiBuZXcgRm9ybUNvbnRyb2woKVxuICAgIH0pO1xuICAgIHB1YmxpYyBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIHB1YmxpYyB2YWx1ZTogTmljZURhdGVSYW5nZVBpY2tlclZhbHVlO1xuXG4gICAgcHJpdmF0ZSBwcm9wYWdhdGU6ICh2YWx1ZTogTmljZURhdGVSYW5nZVBpY2tlclZhbHVlKSA9PiB2b2lkO1xuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0ge1xuICAgICAgICAgICAgZnJvbTogdGhpcy5taW4sXG4gICAgICAgICAgICB0bzogdGhpcy5tYXhcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aGlzLnZhbHVlKTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aCh0aGlzLnZhbHVlKSxcbiAgICAgICAgICAgIHBhaXJ3aXNlKCksXG4gICAgICAgICAgICBmaWx0ZXIoKFtiZWZvcmUsIGFmdGVyXSkgPT4ge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFdlIGZpbHRlciBvdXQgdGhlIHZhbHVlIGNoYW5nZXMgdG8gb25seSBlbWl0IHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBjb21wbGV0ZWQvXG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgICAgICBpZiAoIWFmdGVyLmZyb20gJiYgIWFmdGVyLnRvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG1pZGRsZSBvZiB0aGUgc2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgaWYgKGFmdGVyLmZyb20gJiYgIWFmdGVyLnRvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHNlbGVjdGlvbiBpcyBkb25lXG4gICAgICAgICAgICAgICAgaWYgKCFiZWZvcmUudG8gJiYgYWZ0ZXIudG8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBlZGdlIGNhc2Ugd2hlbiB3ZSBzZWxlY3QgYSBuZXcgcmFuZ2Ugd2l0aCBhbiBhY3RpdmUgcmFuZ2Ugc2VsZWN0ZWQuXG4gICAgICAgICAgICAgICAgLy8gVGhlIGFmdGVyLnRvIHdpbGwgYmUgYXQgbnVsbCBhZnRlciB0aGUgYWZ0ZXIuZnJvbSBpcyBlbWl0dGVkXG4gICAgICAgICAgICAgICAgaWYgKCFpc1NhbWVEYXkoYmVmb3JlLmZyb20sIGFmdGVyLmZyb20pICYmIGlzU2FtZURheShiZWZvcmUudG8sIGFmdGVyLnRvKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gU2tpcCBpZiBub3RpbmcgaGFzIGNoYW5nZWRcbiAgICAgICAgICAgICAgICByZXR1cm4gIShpc1NhbWVEYXkoYmVmb3JlLmZyb20sIGFmdGVyLmZyb20pICYmICFpc1NhbWVEYXkoYmVmb3JlLnRvLCBhZnRlci50bykpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlPy4odGhpcy52YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBOaWNlRGF0ZVJhbmdlUGlja2VyVmFsdWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IE5pY2VEYXRlUmFuZ2VQaWNrZXJWYWx1ZSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZSA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7fVxufVxuIiwiPGRpdiBjbGFzcz1cIm5pY2UtZGF0ZS1waWNrZXItY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cIm5pY2UtZGF0ZS1waWNrZXItaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmcm9tLXRvXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWU/LmZyb21cIj5cbiAgICAgICAgICAgICAgICB7eyB2YWx1ZS5mcm9tIHwgbG9jYWxpemVkRGF0ZTogXCJsb25nRGF0ZVwiIH19XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2YWx1ZT8udG9cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yXCI+LTwvZGl2PlxuICAgICAgICAgICAgICAgIHt7IHZhbHVlLnRvIHwgbG9jYWxpemVkRGF0ZTogXCJsb25nRGF0ZVwiIH19XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBbbWF4XT1cIm5vd0lzTWF4ID8gbm93IDogbnVsbFwiIFtyYW5nZVBpY2tlcl09XCJwaWNrZXJcIj5cbiAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImZyb21cIiBjbGFzcz1cImhpZGRlbi1pbnB1dFwiIG1hdFN0YXJ0RGF0ZSBwbGFjZWhvbGRlcj1cIlN0YXJ0IGRhdGVcIj5cbiAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInRvXCIgY2xhc3M9XCJoaWRkZW4taW5wdXRcIiBtYXRFbmREYXRlIHBsYWNlaG9sZGVyPVwiRW5kIGRhdGVcIj5cbiAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxuXG4gICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cblxuICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXJcbiAgICAgICAgICAgIFtjYWxlbmRhckhlYWRlckNvbXBvbmVudF09XCJIZWFkZXJDb21wb25lbnRcIlxuICAgICAgICAgICAgI3BpY2tlclxuICAgID48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbjwvZGl2PlxuIl19
@@ -22,12 +22,12 @@ export class ExportBottomSheetComponent {
22
22
  }
23
23
  }
24
24
  ExportBottomSheetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ExportBottomSheetComponent, deps: [{ token: MAT_BOTTOM_SHEET_DATA }, { token: i1.MatBottomSheetRef }, { token: i2.ExportBottomSheetService }], target: i0.ɵɵFactoryTarget.Component });
25
- ExportBottomSheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ExportBottomSheetComponent, selector: "nice-export-bottom-sheet", ngImport: i0, template: "<mat-nav-list>\n <a *ngFor=\"let strategy of exportBottomSheetConfig.exportStrategies\" mat-list-item (click)=\"clickExport(strategy)\">\n <i [ngClass]=\"getStrategyIcon(strategy)\" mat-list-icon></i>\n <span mat-line>{{ (\"components.export_bottom_sheet.types.\" + strategy.type) | translate }}</span>\n </a>\n</mat-nav-list>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i4.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i4.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
25
+ ExportBottomSheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ExportBottomSheetComponent, selector: "nice-export-bottom-sheet", ngImport: i0, template: "<mat-nav-list>\n <a *ngFor=\"let strategy of exportBottomSheetConfig.exportStrategies\" mat-list-item (click)=\"clickExport(strategy)\">\n <i [ngClass]=\"getStrategyIcon(strategy)\" mat-list-icon></i>\n <span mat-line [innerHtml]=\"'components.export_bottom_sheet.types.' + strategy.type | translate\"></span>\n </a>\n</mat-nav-list>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i4.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i4.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
26
26
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ExportBottomSheetComponent, decorators: [{
27
27
  type: Component,
28
- args: [{ selector: "nice-export-bottom-sheet", template: "<mat-nav-list>\n <a *ngFor=\"let strategy of exportBottomSheetConfig.exportStrategies\" mat-list-item (click)=\"clickExport(strategy)\">\n <i [ngClass]=\"getStrategyIcon(strategy)\" mat-list-icon></i>\n <span mat-line>{{ (\"components.export_bottom_sheet.types.\" + strategy.type) | translate }}</span>\n </a>\n</mat-nav-list>\n" }]
28
+ args: [{ selector: "nice-export-bottom-sheet", template: "<mat-nav-list>\n <a *ngFor=\"let strategy of exportBottomSheetConfig.exportStrategies\" mat-list-item (click)=\"clickExport(strategy)\">\n <i [ngClass]=\"getStrategyIcon(strategy)\" mat-list-icon></i>\n <span mat-line [innerHtml]=\"'components.export_bottom_sheet.types.' + strategy.type | translate\"></span>\n </a>\n</mat-nav-list>\n" }]
29
29
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
30
30
  type: Inject,
31
31
  args: [MAT_BOTTOM_SHEET_DATA]
32
32
  }] }, { type: i1.MatBottomSheetRef }, { type: i2.ExportBottomSheetService }]; } });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWJvdHRvbS1zaGVldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uaWNlLXVpLWtpdC12Mi9zcmMvbGliL2NvbXBvbmVudHMvZXhwb3J0LWJvdHRvbS1zaGVldC9leHBvcnQtYm90dG9tLXNoZWV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtdWkta2l0LXYyL3NyYy9saWIvY29tcG9uZW50cy9leHBvcnQtYm90dG9tLXNoZWV0L2V4cG9ydC1ib3R0b20tc2hlZXQudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUxRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7Ozs7OztBQVVuRixNQUFNLE9BQU8sMEJBQTBCO0lBQ25DLFlBQzBDLHVCQUFnRCxFQUM5RSxjQUE2RCxFQUM3RCxPQUFpQztRQUZILDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDOUUsbUJBQWMsR0FBZCxjQUFjLENBQStDO1FBQzdELFlBQU8sR0FBUCxPQUFPLENBQTBCO0lBQzFDLENBQUM7SUFFRyxlQUFlLENBQUMsUUFBd0I7UUFDM0MsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sV0FBVyxDQUFDLFFBQXdCO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUIsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7O3VIQWRRLDBCQUEwQixrQkFFdkIscUJBQXFCOzJHQUZ4QiwwQkFBMEIsZ0VDYnZDLDhWQU1BOzJGRE9hLDBCQUEwQjtrQkFKdEMsU0FBUzsrQkFDSSwwQkFBMEI7OzBCQUsvQixNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE1hdEJvdHRvbVNoZWV0UmVmLCBNQVRfQk9UVE9NX1NIRUVUX0RBVEEgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvYm90dG9tLXNoZWV0XCI7XG5pbXBvcnQgeyBFeHBvcnRTdHJhdGVneSB9IGZyb20gXCIuL21vZGVscy9leHBvcnQtc3RyYXRlZ3kubW9kZWxcIjtcbmltcG9ydCB7IEV4cG9ydEJvdHRvbVNoZWV0U2VydmljZSB9IGZyb20gXCIuL3Byb3ZpZGVycy9leHBvcnQtYm90dG9tLXNoZWV0LnNlcnZpY2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRCb3R0b21TaGVldENvbmZpZyB7XG4gICAgZXhwb3J0U3RyYXRlZ2llczogRXhwb3J0U3RyYXRlZ3lbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibmljZS1leHBvcnQtYm90dG9tLXNoZWV0XCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiZXhwb3J0LWJvdHRvbS1zaGVldC50ZW1wbGF0ZS5odG1sXCJcbn0pXG5leHBvcnQgY2xhc3MgRXhwb3J0Qm90dG9tU2hlZXRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KE1BVF9CT1RUT01fU0hFRVRfREFUQSkgcHVibGljIGV4cG9ydEJvdHRvbVNoZWV0Q29uZmlnOiBFeHBvcnRCb3R0b21TaGVldENvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSBib3R0b21TaGVldFJlZjogTWF0Qm90dG9tU2hlZXRSZWY8RXhwb3J0Qm90dG9tU2hlZXRDb21wb25lbnQ+LFxuICAgICAgICBwcml2YXRlIHNlcnZpY2U6IEV4cG9ydEJvdHRvbVNoZWV0U2VydmljZVxuICAgICkge31cblxuICAgIHB1YmxpYyBnZXRTdHJhdGVneUljb24oc3RyYXRlZ3k6IEV4cG9ydFN0cmF0ZWd5KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5nZXRTdHJhdGVneUljb24oc3RyYXRlZ3kpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGlja0V4cG9ydChzdHJhdGVneTogRXhwb3J0U3RyYXRlZ3kpIHtcbiAgICAgICAgdGhpcy5ib3R0b21TaGVldFJlZi5kaXNtaXNzKCk7XG4gICAgICAgIHN0cmF0ZWd5Lm9uQ2xpY2tFeHBvcnQoKTtcbiAgICB9XG59XG4iLCI8bWF0LW5hdi1saXN0PlxuICAgIDxhICpuZ0Zvcj1cImxldCBzdHJhdGVneSBvZiBleHBvcnRCb3R0b21TaGVldENvbmZpZy5leHBvcnRTdHJhdGVnaWVzXCIgbWF0LWxpc3QtaXRlbSAoY2xpY2spPVwiY2xpY2tFeHBvcnQoc3RyYXRlZ3kpXCI+XG4gICAgICAgIDxpIFtuZ0NsYXNzXT1cImdldFN0cmF0ZWd5SWNvbihzdHJhdGVneSlcIiBtYXQtbGlzdC1pY29uPjwvaT5cbiAgICAgICAgPHNwYW4gbWF0LWxpbmU+e3sgKFwiY29tcG9uZW50cy5leHBvcnRfYm90dG9tX3NoZWV0LnR5cGVzLlwiICsgc3RyYXRlZ3kudHlwZSkgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9hPlxuPC9tYXQtbmF2LWxpc3Q+XG4iXX0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWJvdHRvbS1zaGVldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uaWNlLXVpLWtpdC12Mi9zcmMvbGliL2NvbXBvbmVudHMvZXhwb3J0LWJvdHRvbS1zaGVldC9leHBvcnQtYm90dG9tLXNoZWV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtdWkta2l0LXYyL3NyYy9saWIvY29tcG9uZW50cy9leHBvcnQtYm90dG9tLXNoZWV0L2V4cG9ydC1ib3R0b20tc2hlZXQudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUxRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7Ozs7OztBQVVuRixNQUFNLE9BQU8sMEJBQTBCO0lBQ25DLFlBQzBDLHVCQUFnRCxFQUM5RSxjQUE2RCxFQUM3RCxPQUFpQztRQUZILDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDOUUsbUJBQWMsR0FBZCxjQUFjLENBQStDO1FBQzdELFlBQU8sR0FBUCxPQUFPLENBQTBCO0lBQzFDLENBQUM7SUFFRyxlQUFlLENBQUMsUUFBd0I7UUFDM0MsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sV0FBVyxDQUFDLFFBQXdCO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUIsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7O3VIQWRRLDBCQUEwQixrQkFFdkIscUJBQXFCOzJHQUZ4QiwwQkFBMEIsZ0VDYnZDLHFXQU1BOzJGRE9hLDBCQUEwQjtrQkFKdEMsU0FBUzsrQkFDSSwwQkFBMEI7OzBCQUsvQixNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE1hdEJvdHRvbVNoZWV0UmVmLCBNQVRfQk9UVE9NX1NIRUVUX0RBVEEgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvYm90dG9tLXNoZWV0XCI7XG5pbXBvcnQgeyBFeHBvcnRTdHJhdGVneSB9IGZyb20gXCIuL21vZGVscy9leHBvcnQtc3RyYXRlZ3kubW9kZWxcIjtcbmltcG9ydCB7IEV4cG9ydEJvdHRvbVNoZWV0U2VydmljZSB9IGZyb20gXCIuL3Byb3ZpZGVycy9leHBvcnQtYm90dG9tLXNoZWV0LnNlcnZpY2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRCb3R0b21TaGVldENvbmZpZyB7XG4gICAgZXhwb3J0U3RyYXRlZ2llczogRXhwb3J0U3RyYXRlZ3lbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibmljZS1leHBvcnQtYm90dG9tLXNoZWV0XCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiZXhwb3J0LWJvdHRvbS1zaGVldC50ZW1wbGF0ZS5odG1sXCJcbn0pXG5leHBvcnQgY2xhc3MgRXhwb3J0Qm90dG9tU2hlZXRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KE1BVF9CT1RUT01fU0hFRVRfREFUQSkgcHVibGljIGV4cG9ydEJvdHRvbVNoZWV0Q29uZmlnOiBFeHBvcnRCb3R0b21TaGVldENvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSBib3R0b21TaGVldFJlZjogTWF0Qm90dG9tU2hlZXRSZWY8RXhwb3J0Qm90dG9tU2hlZXRDb21wb25lbnQ+LFxuICAgICAgICBwcml2YXRlIHNlcnZpY2U6IEV4cG9ydEJvdHRvbVNoZWV0U2VydmljZVxuICAgICkge31cblxuICAgIHB1YmxpYyBnZXRTdHJhdGVneUljb24oc3RyYXRlZ3k6IEV4cG9ydFN0cmF0ZWd5KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5nZXRTdHJhdGVneUljb24oc3RyYXRlZ3kpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGlja0V4cG9ydChzdHJhdGVneTogRXhwb3J0U3RyYXRlZ3kpIHtcbiAgICAgICAgdGhpcy5ib3R0b21TaGVldFJlZi5kaXNtaXNzKCk7XG4gICAgICAgIHN0cmF0ZWd5Lm9uQ2xpY2tFeHBvcnQoKTtcbiAgICB9XG59XG4iLCI8bWF0LW5hdi1saXN0PlxuICAgIDxhICpuZ0Zvcj1cImxldCBzdHJhdGVneSBvZiBleHBvcnRCb3R0b21TaGVldENvbmZpZy5leHBvcnRTdHJhdGVnaWVzXCIgbWF0LWxpc3QtaXRlbSAoY2xpY2spPVwiY2xpY2tFeHBvcnQoc3RyYXRlZ3kpXCI+XG4gICAgICAgIDxpIFtuZ0NsYXNzXT1cImdldFN0cmF0ZWd5SWNvbihzdHJhdGVneSlcIiBtYXQtbGlzdC1pY29uPjwvaT5cbiAgICAgICAgPHNwYW4gbWF0LWxpbmUgW2lubmVySHRtbF09XCInY29tcG9uZW50cy5leHBvcnRfYm90dG9tX3NoZWV0LnR5cGVzLicgKyBzdHJhdGVneS50eXBlIHwgdHJhbnNsYXRlXCI+PC9zcGFuPlxuICAgIDwvYT5cbjwvbWF0LW5hdi1saXN0PlxuIl19
@@ -0,0 +1,2 @@
1
+ export * from "./public-api";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uaWNlLXVpLWtpdC12Mi9zcmMvbGliL2NvbXBvbmVudHMvbG9hZGluZy10b2FzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3B1YmxpYy1hcGlcIjtcbiJdfQ==
@@ -0,0 +1,38 @@
1
+ import { ChangeDetectionStrategy, Component, Inject, Input, Optional, ViewEncapsulation } from "@angular/core";
2
+ import { MAT_SNACK_BAR_DATA } from "@angular/material/snack-bar";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/material/progress-spinner";
5
+ import * as i2 from "../alert/alert.component";
6
+ export class NiceLoadingToastComponent {
7
+ get appearance() {
8
+ return this.data?.options?.appearance ?? this.options?.appearance;
9
+ }
10
+ get color() {
11
+ return this.data?.options?.color ?? this.options?.color;
12
+ }
13
+ get showIcon() {
14
+ return this.data?.options?.showIcon ?? this.options?.showIcon;
15
+ }
16
+ get type() {
17
+ return this.data?.options?.type ?? this.options?.type;
18
+ }
19
+ constructor(data) {
20
+ this.data = data;
21
+ }
22
+ }
23
+ NiceLoadingToastComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NiceLoadingToastComponent, deps: [{ token: MAT_SNACK_BAR_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
24
+ NiceLoadingToastComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NiceLoadingToastComponent, selector: "nice-loading-toast", inputs: { message: "message", options: "options" }, ngImport: i0, template: "<nice-alert class=\"toast\" disableAnimation [appearance]=\"appearance\" [color]=\"color\" [dismissible]=\"false\" [type]=\"type\" [showIcon]=\"showIcon\">\n <div class=\"full flex justify-between gap-8\" niceAlertTitle>\n <span class=\"flex-auto\">{{ data?.message ?? message }}</span>\n\n <div>\n <mat-spinner [diameter]=\"21\"></mat-spinner>\n </div>\n </div>\n</nice-alert>\n", styles: [".nice-loading-toast .mdc-snackbar__surface{background:transparent!important;box-shadow:none!important;padding:0;min-width:unset}.nice-loading-toast .toast{padding:16px;border-radius:4px;-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "component", type: i1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i2.NiceAlertComponent, selector: "nice-alert", inputs: ["appearance", "dismissed", "dismissible", "disableAnimation", "name", "showIcon", "type", "color"], outputs: ["dismissedChanged"], exportAs: ["niceAlert"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NiceLoadingToastComponent, decorators: [{
26
+ type: Component,
27
+ args: [{ selector: "nice-loading-toast", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<nice-alert class=\"toast\" disableAnimation [appearance]=\"appearance\" [color]=\"color\" [dismissible]=\"false\" [type]=\"type\" [showIcon]=\"showIcon\">\n <div class=\"full flex justify-between gap-8\" niceAlertTitle>\n <span class=\"flex-auto\">{{ data?.message ?? message }}</span>\n\n <div>\n <mat-spinner [diameter]=\"21\"></mat-spinner>\n </div>\n </div>\n</nice-alert>\n", styles: [".nice-loading-toast .mdc-snackbar__surface{background:transparent!important;box-shadow:none!important;padding:0;min-width:unset}.nice-loading-toast .toast{padding:16px;border-radius:4px;-webkit-user-select:none;user-select:none}\n"] }]
28
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
29
+ type: Optional
30
+ }, {
31
+ type: Inject,
32
+ args: [MAT_SNACK_BAR_DATA]
33
+ }] }]; }, propDecorators: { message: [{
34
+ type: Input
35
+ }], options: [{
36
+ type: Input
37
+ }] } });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy10b2FzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uaWNlLXVpLWtpdC12Mi9zcmMvbGliL2NvbXBvbmVudHMvbG9hZGluZy10b2FzdC9sb2FkaW5nLXRvYXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtdWkta2l0LXYyL3NyYy9saWIvY29tcG9uZW50cy9sb2FkaW5nLXRvYXN0L2xvYWRpbmctdG9hc3QudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7O0FBZ0JqRSxNQUFNLE9BQU8seUJBQXlCO0lBT2xDLElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQztJQUN0RSxDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7SUFDNUQsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO0lBQ2xFLENBQUM7SUFFRCxJQUFXLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQztJQUMxRCxDQUFDO0lBRUQsWUFBMkQsSUFBMkI7UUFBM0IsU0FBSSxHQUFKLElBQUksQ0FBdUI7SUFBRyxDQUFDOztzSEF2QmpGLHlCQUF5QixrQkF1QkYsa0JBQWtCOzBHQXZCekMseUJBQXlCLDhHQ2pCdEMsbWFBU0E7MkZEUWEseUJBQXlCO2tCQVByQyxTQUFTOytCQUNJLG9CQUFvQixpQkFHZixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNOzswQkF5QmxDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsa0JBQWtCOzRDQXJCM0MsT0FBTztzQkFEYixLQUFLO2dCQUlDLE9BQU87c0JBRGIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBNQVRfU05BQ0tfQkFSX0RBVEEgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyXCI7XG5pbXBvcnQgeyBOaWNlQWxlcnRBcHBlYXJhbmNlLCBOaWNlQWxlcnRDb2xvciwgTmljZUFsZXJ0VHlwZSB9IGZyb20gXCIuLi9hbGVydFwiO1xuaW1wb3J0IHsgTmljZUxvYWRpbmdUb2FzdE9wdGlvbnMgfSBmcm9tIFwiLi9sb2FkaW5nLXRvYXN0LnNlcnZpY2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOaWNlTG9hZGluZ1RvYXN0RGF0YSB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIG9wdGlvbnM/OiBOaWNlTG9hZGluZ1RvYXN0T3B0aW9ucztcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibmljZS1sb2FkaW5nLXRvYXN0XCIsXG4gICAgdGVtcGxhdGVVcmw6IFwibG9hZGluZy10b2FzdC50ZW1wbGF0ZS5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCJsb2FkaW5nLXRvYXN0LnN0eWxlLnNjc3NcIl0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBOaWNlTG9hZGluZ1RvYXN0Q29tcG9uZW50IHtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvcHRpb25zOiBOaWNlTG9hZGluZ1RvYXN0T3B0aW9ucztcblxuICAgIHB1YmxpYyBnZXQgYXBwZWFyYW5jZSgpOiBOaWNlQWxlcnRBcHBlYXJhbmNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YT8ub3B0aW9ucz8uYXBwZWFyYW5jZSA/PyB0aGlzLm9wdGlvbnM/LmFwcGVhcmFuY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2xvcigpOiBOaWNlQWxlcnRDb2xvciB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE/Lm9wdGlvbnM/LmNvbG9yID8/IHRoaXMub3B0aW9ucz8uY29sb3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzaG93SWNvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YT8ub3B0aW9ucz8uc2hvd0ljb24gPz8gdGhpcy5vcHRpb25zPy5zaG93SWNvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHR5cGUoKTogTmljZUFsZXJ0VHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE/Lm9wdGlvbnM/LnR5cGUgPz8gdGhpcy5vcHRpb25zPy50eXBlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX1NOQUNLX0JBUl9EQVRBKSBwdWJsaWMgZGF0YT86IE5pY2VMb2FkaW5nVG9hc3REYXRhKSB7fVxufVxuIiwiPG5pY2UtYWxlcnQgY2xhc3M9XCJ0b2FzdFwiIGRpc2FibGVBbmltYXRpb24gW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiIFtjb2xvcl09XCJjb2xvclwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIFt0eXBlXT1cInR5cGVcIiBbc2hvd0ljb25dPVwic2hvd0ljb25cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZnVsbCBmbGV4IGp1c3RpZnktYmV0d2VlbiBnYXAtOFwiIG5pY2VBbGVydFRpdGxlPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXgtYXV0b1wiPnt7IGRhdGE/Lm1lc3NhZ2UgPz8gbWVzc2FnZSB9fTwvc3Bhbj5cblxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPG1hdC1zcGlubmVyIFtkaWFtZXRlcl09XCIyMVwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uaWNlLWFsZXJ0PlxuIl19
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from "@angular/core";
2
+ export const NICE_LOADING_TOAST_OPTIONS = new InjectionToken("nice_loading_toast_options");
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy10b2FzdC5jb25zdGFudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtdWkta2l0LXYyL3NyYy9saWIvY29tcG9uZW50cy9sb2FkaW5nLXRvYXN0L2xvYWRpbmctdG9hc3QuY29uc3RhbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLGNBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5leHBvcnQgY29uc3QgTklDRV9MT0FESU5HX1RPQVNUX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW4oXCJuaWNlX2xvYWRpbmdfdG9hc3Rfb3B0aW9uc1wiKTtcbiJdfQ==