@vendure/admin-ui 2.0.0-next.0 → 2.0.0-next.3

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 (95) hide show
  1. package/catalog/components/collection-contents/collection-contents.component.d.ts +8 -2
  2. package/catalog/components/collection-detail/collection-detail.component.d.ts +11 -4
  3. package/catalog/components/collection-list/collection-list.component.d.ts +2 -0
  4. package/catalog/components/collection-tree/array-to-tree.d.ts +1 -1
  5. package/catalog/components/collection-tree/collection-tree-node.component.d.ts +6 -2
  6. package/catalog/components/collection-tree/collection-tree.component.d.ts +2 -1
  7. package/catalog/components/product-variants-list/product-variants-list.component.d.ts +1 -0
  8. package/core/common/generated-types.d.ts +131 -2
  9. package/core/common/version.d.ts +1 -1
  10. package/core/data/definitions/collection-definitions.d.ts +1 -0
  11. package/core/data/providers/collection-data.service.d.ts +4 -0
  12. package/core/data/providers/promotion-data.service.d.ts +1 -1
  13. package/core/providers/local-storage/local-storage.service.d.ts +1 -0
  14. package/core/public_api.d.ts +2 -1
  15. package/core/shared/components/object-tree/object-tree.component.d.ts +3 -3
  16. package/core/shared/components/{product-selector/product-selector.component.d.ts → product-variant-selector/product-variant-selector.component.d.ts} +4 -4
  17. package/core/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.d.ts +18 -0
  18. package/core/shared/shared.module.d.ts +15 -14
  19. package/esm2020/catalog/components/assets/assets.component.mjs +2 -2
  20. package/esm2020/catalog/components/collection-contents/collection-contents.component.mjs +53 -13
  21. package/esm2020/catalog/components/collection-detail/collection-detail.component.mjs +57 -32
  22. package/esm2020/catalog/components/collection-list/collection-list.component.mjs +30 -5
  23. package/esm2020/catalog/components/collection-tree/array-to-tree.mjs +3 -3
  24. package/esm2020/catalog/components/collection-tree/collection-tree-node.component.mjs +29 -10
  25. package/esm2020/catalog/components/collection-tree/collection-tree.component.mjs +6 -3
  26. package/esm2020/catalog/components/facet-detail/facet-detail.component.mjs +2 -2
  27. package/esm2020/catalog/components/product-variants-list/product-variants-list.component.mjs +9 -3
  28. package/esm2020/catalog/providers/routing/collection-resolver.mjs +2 -1
  29. package/esm2020/core/app.component.module.mjs +1 -1
  30. package/esm2020/core/common/base-detail.component.mjs +1 -1
  31. package/esm2020/core/common/deactivate-aware.mjs +1 -1
  32. package/esm2020/core/common/generated-types.mjs +29 -1
  33. package/esm2020/core/common/introspection-result.mjs +255 -183
  34. package/esm2020/core/common/utilities/configurable-operation-utils.mjs +21 -2
  35. package/esm2020/core/common/version.mjs +2 -2
  36. package/esm2020/core/core.module.mjs +1 -1
  37. package/esm2020/core/data/definitions/collection-definitions.mjs +19 -1
  38. package/esm2020/core/data/definitions/customer-definitions.mjs +241 -241
  39. package/esm2020/core/data/definitions/order-definitions.mjs +2 -1
  40. package/esm2020/core/data/definitions/shared-definitions.mjs +29 -28
  41. package/esm2020/core/data/providers/collection-data.service.mjs +7 -2
  42. package/esm2020/core/data/providers/promotion-data.service.mjs +3 -2
  43. package/esm2020/core/providers/local-storage/local-storage.service.mjs +1 -1
  44. package/esm2020/core/public_api.mjs +3 -2
  45. package/esm2020/core/shared/components/asset-preview/asset-preview.component.mjs +4 -4
  46. package/esm2020/core/shared/components/configurable-input/configurable-input.component.mjs +10 -9
  47. package/esm2020/core/shared/components/help-tooltip/help-tooltip.component.mjs +2 -2
  48. package/esm2020/core/shared/components/object-tree/object-tree.component.mjs +4 -4
  49. package/esm2020/core/shared/components/product-variant-selector/product-variant-selector.component.mjs +62 -0
  50. package/esm2020/core/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.mjs +4 -4
  51. package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.mjs +54 -0
  52. package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/relation-form-input.component.mjs +5 -4
  53. package/esm2020/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.mjs +1 -1
  54. package/esm2020/core/shared/shared.module.mjs +9 -5
  55. package/esm2020/order/components/cancel-order-dialog/cancel-order-dialog.component.mjs +8 -4
  56. package/esm2020/order/components/order-editor/order-editor.component.mjs +26 -10
  57. package/esm2020/order/components/order-table/order-table.component.mjs +2 -2
  58. package/esm2020/order/components/refund-order-dialog/refund-order-dialog.component.mjs +8 -4
  59. package/esm2020/settings/components/test-order-builder/test-order-builder.component.mjs +3 -3
  60. package/fesm2015/vendure-admin-ui-catalog.mjs +180 -57
  61. package/fesm2015/vendure-admin-ui-catalog.mjs.map +1 -1
  62. package/fesm2015/vendure-admin-ui-core.mjs +772 -584
  63. package/fesm2015/vendure-admin-ui-core.mjs.map +1 -1
  64. package/fesm2015/vendure-admin-ui-order.mjs +38 -16
  65. package/fesm2015/vendure-admin-ui-order.mjs.map +1 -1
  66. package/fesm2015/vendure-admin-ui-settings.mjs +2 -2
  67. package/fesm2015/vendure-admin-ui-settings.mjs.map +1 -1
  68. package/fesm2020/vendure-admin-ui-catalog.mjs +178 -59
  69. package/fesm2020/vendure-admin-ui-catalog.mjs.map +1 -1
  70. package/fesm2020/vendure-admin-ui-core.mjs +770 -581
  71. package/fesm2020/vendure-admin-ui-core.mjs.map +1 -1
  72. package/fesm2020/vendure-admin-ui-order.mjs +36 -15
  73. package/fesm2020/vendure-admin-ui-order.mjs.map +1 -1
  74. package/fesm2020/vendure-admin-ui-settings.mjs +2 -2
  75. package/fesm2020/vendure-admin-ui-settings.mjs.map +1 -1
  76. package/order/components/order-editor/order-editor.component.d.ts +8 -2
  77. package/package.json +2 -2
  78. package/static/i18n-messages/cs.json +6 -1
  79. package/static/i18n-messages/de.json +4 -1
  80. package/static/i18n-messages/en.json +6 -1
  81. package/static/i18n-messages/es.json +6 -1
  82. package/static/i18n-messages/fr.json +6 -1
  83. package/static/i18n-messages/it.json +6 -1
  84. package/static/i18n-messages/pl.json +6 -1
  85. package/static/i18n-messages/pt_BR.json +6 -1
  86. package/static/i18n-messages/pt_PT.json +6 -1
  87. package/static/i18n-messages/ru.json +6 -1
  88. package/static/i18n-messages/uk.json +6 -1
  89. package/static/i18n-messages/zh_Hans.json +6 -1
  90. package/static/i18n-messages/zh_Hant.json +6 -1
  91. package/static/styles/global/_forms.scss +3 -4
  92. package/static/styles/global/_overrides.scss +6 -0
  93. package/static/theme.min.css +1 -1
  94. package/static/vendure-ui-config.json +25 -10
  95. package/esm2020/core/shared/components/product-selector/product-selector.component.mjs +0 -62
@@ -22,12 +22,15 @@ export class CollectionListComponent {
22
22
  this.serverConfigService = serverConfigService;
23
23
  this.filterTermControl = new FormControl('');
24
24
  this.expandAll = false;
25
+ this.expandedIds = [];
25
26
  this.destroy$ = new Subject();
26
27
  }
27
28
  ngOnInit() {
28
29
  this.queryResult = this.dataService.collection.getCollections(1000, 0).refetchOnChannelChange();
29
30
  this.items$ = this.queryResult.mapStream(data => data.collections.items).pipe(shareReplay(1));
30
31
  this.activeCollectionId$ = this.route.paramMap.pipe(map(pm => pm.get('contents')), distinctUntilChanged());
32
+ this.expandedIds = this.route.snapshot.queryParamMap.get('expanded')?.split(',') ?? [];
33
+ this.expandAll = this.route.snapshot.queryParamMap.get('expanded') === 'all';
31
34
  this.activeCollectionTitle$ = combineLatest(this.activeCollectionId$, this.items$).pipe(map(([id, collections]) => {
32
35
  if (id) {
33
36
  const match = collections.find(c => c.id === id);
@@ -42,13 +45,34 @@ export class CollectionListComponent {
42
45
  .pipe(tap(() => this.refresh()));
43
46
  this.filterTermControl.valueChanges
44
47
  .pipe(debounceTime(250), takeUntil(this.destroy$))
48
+ .subscribe(term => {
49
+ this.router.navigate(['./'], {
50
+ queryParams: {
51
+ q: term || undefined,
52
+ },
53
+ queryParamsHandling: 'merge',
54
+ relativeTo: this.route,
55
+ });
56
+ });
57
+ this.route.queryParamMap
58
+ .pipe(map(qpm => qpm.get('q')), distinctUntilChanged(), takeUntil(this.destroy$))
45
59
  .subscribe(() => this.refresh());
60
+ this.filterTermControl.patchValue(this.route.snapshot.queryParamMap.get('q'));
46
61
  }
47
62
  ngOnDestroy() {
48
63
  this.queryResult.completed$.next();
49
64
  this.destroy$.next(undefined);
50
65
  this.destroy$.complete();
51
66
  }
67
+ toggleExpandAll() {
68
+ this.router.navigate(['./'], {
69
+ queryParams: {
70
+ expanded: this.expandAll ? 'all' : undefined,
71
+ },
72
+ queryParamsHandling: 'merge',
73
+ relativeTo: this.route,
74
+ });
75
+ }
52
76
  onRearrange(event) {
53
77
  this.dataService.collection.moveCollection([event]).subscribe({
54
78
  next: () => {
@@ -94,15 +118,16 @@ export class CollectionListComponent {
94
118
  this.dataService.client.setContentLanguage(code).subscribe();
95
119
  }
96
120
  refresh() {
121
+ const filterTerm = this.route.snapshot.queryParamMap.get('q');
97
122
  this.queryResult.ref.refetch({
98
123
  options: {
99
124
  skip: 0,
100
125
  take: 1000,
101
- ...(this.filterTermControl.value
126
+ ...(filterTerm
102
127
  ? {
103
128
  filter: {
104
129
  name: {
105
- contains: this.filterTermControl.value,
130
+ contains: filterTerm,
106
131
  },
107
132
  },
108
133
  }
@@ -112,9 +137,9 @@ export class CollectionListComponent {
112
137
  }
113
138
  }
114
139
  CollectionListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CollectionListComponent, deps: [{ token: i1.DataService }, { token: i1.NotificationService }, { token: i1.ModalService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i1.ServerConfigService }], target: i0.ɵɵFactoryTarget.Component });
115
- CollectionListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CollectionListComponent, selector: "vdr-collection-list", ngImport: i0, template: "<vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex center wrap\">\r\n <vdr-language-selector\r\n class=\"mt2\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n <clr-checkbox-wrapper\r\n class=\"expand-all-toggle ml3\"\r\n [ngClass]=\"(availableLanguages$ | async)?.length === 1 ? 'mt3' : 'mt1'\"\r\n >\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"expandAll\" />\r\n <label>{{ 'catalog.expand-all-collections' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <input\r\n type='text'\r\n name='searchTerm'\r\n [formControl]='filterTermControl'\r\n [placeholder]=\"'catalog.filter-by-name' | translate\"\r\n class='clr-input search-input ml4'\r\n />\r\n </div>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"collection-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n [routerLink]=\"['./create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n<div class=\"collection-wrapper\">\r\n <vdr-collection-tree\r\n [collections]=\"items$ | async\"\r\n [activeCollectionId]=\"activeCollectionId$ | async\"\r\n [expandAll]=\"expandAll\"\r\n (rearrange)=\"onRearrange($event)\"\r\n (deleteCollection)=\"deleteCollection($event)\"\r\n ></vdr-collection-tree>\r\n\r\n <div class=\"collection-contents\" [class.expanded]=\"activeCollectionId$ | async\">\r\n <vdr-collection-contents [collectionId]=\"activeCollectionId$ | async\">\r\n <ng-template let-count>\r\n <div class=\"collection-title\">\r\n {{ activeCollectionTitle$ | async }} ({{\r\n 'common.results-count' | translate: { count: count }\r\n }})\r\n </div>\r\n <button type=\"button\" class=\"close-button\" (click)=\"closeContents()\">\r\n <clr-icon shape=\"close\"></clr-icon>\r\n </button>\r\n </ng-template>\r\n </vdr-collection-contents>\r\n </div>\r\n</div>\r\n", styles: [":host{height:100%;display:flex;flex-direction:column}.expand-all-toggle{display:block}.collection-wrapper{display:flex;height:calc(100% - 50px)}.collection-wrapper vdr-collection-tree{flex:1;height:100%;overflow:auto}.collection-wrapper .collection-contents{height:100%;width:0;opacity:0;visibility:hidden;overflow:auto;transition:width .3s,opacity .2s .3s,visibility 0s .3s}.collection-wrapper .collection-contents.expanded{width:30vw;visibility:visible;opacity:1;padding-left:12px}.collection-wrapper .collection-contents .close-button{margin:0;background:none;border:none;cursor:pointer}.paging-controls{padding-top:6px;border-top:1px solid var(--color-component-border-100);display:flex;justify-content:space-between}\n"], components: [{ type: i1.ActionBarComponent, selector: "vdr-action-bar" }, { type: i1.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i1.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { type: i3.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { type: i1.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i1.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i4.CollectionTreeComponent, selector: "vdr-collection-tree", inputs: ["collections", "activeCollectionId", "expandAll"], outputs: ["rearrange", "deleteCollection"] }, { type: i5.CollectionContentsComponent, selector: "vdr-collection-contents", inputs: ["collectionId"] }], directives: [{ type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i7.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i3.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.ClrLabel, selector: "label", inputs: ["for"] }, { type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.ClrIconCustomTag, selector: "clr-icon" }], pipes: { "async": i6.AsyncPipe, "translate": i8.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
140
+ CollectionListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CollectionListComponent, selector: "vdr-collection-list", ngImport: i0, template: "<vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex center wrap\">\r\n <vdr-language-selector\r\n class=\"mt2\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n <clr-checkbox-wrapper\r\n class=\"expand-all-toggle ml3\"\r\n [ngClass]=\"(availableLanguages$ | async)?.length === 1 ? 'mt3' : 'mt1'\"\r\n >\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"expandAll\" (change)=\"toggleExpandAll()\"/>\r\n <label>{{ 'catalog.expand-all-collections' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <input\r\n type='text'\r\n name='searchTerm'\r\n [formControl]='filterTermControl'\r\n [placeholder]=\"'catalog.filter-by-name' | translate\"\r\n class='clr-input search-input ml4'\r\n />\r\n </div>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"collection-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n [routerLink]=\"['./create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n<div class=\"collection-wrapper\">\r\n <vdr-collection-tree\r\n [collections]=\"items$ | async\"\r\n [activeCollectionId]=\"activeCollectionId$ | async\"\r\n [expandAll]=\"expandAll\"\r\n [expandedIds]=\"expandedIds\"\r\n (rearrange)=\"onRearrange($event)\"\r\n (deleteCollection)=\"deleteCollection($event)\"\r\n ></vdr-collection-tree>\r\n\r\n <div class=\"collection-contents\" [class.expanded]=\"activeCollectionId$ | async\">\r\n <vdr-collection-contents [collectionId]=\"activeCollectionId$ | async\">\r\n <ng-template let-count>\r\n <div class=\"collection-title\">\r\n {{ activeCollectionTitle$ | async }} ({{\r\n 'common.results-count' | translate: { count: count }\r\n }})\r\n </div>\r\n <button type=\"button\" class=\"close-button\" (click)=\"closeContents()\">\r\n <clr-icon shape=\"close\"></clr-icon>\r\n </button>\r\n </ng-template>\r\n </vdr-collection-contents>\r\n </div>\r\n</div>\r\n", styles: [":host{height:100%;display:flex;flex-direction:column}.expand-all-toggle{display:block}.collection-wrapper{display:flex;height:calc(100% - 50px)}.collection-wrapper vdr-collection-tree{flex:1;height:100%;overflow:auto}.collection-wrapper .collection-contents{height:100%;width:0;opacity:0;visibility:hidden;overflow:auto;transition:width .3s,opacity .2s .3s,visibility 0s .3s}.collection-wrapper .collection-contents.expanded{width:30vw;visibility:visible;opacity:1;padding-left:12px}.collection-wrapper .collection-contents .close-button{margin:0;background:none;border:none;cursor:pointer}.paging-controls{padding-top:6px;border-top:1px solid var(--color-component-border-100);display:flex;justify-content:space-between}\n"], components: [{ type: i1.ActionBarComponent, selector: "vdr-action-bar" }, { type: i1.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i1.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { type: i3.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { type: i1.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i1.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i4.CollectionTreeComponent, selector: "vdr-collection-tree", inputs: ["collections", "activeCollectionId", "expandAll", "expandedIds"], outputs: ["rearrange", "deleteCollection"] }, { type: i5.CollectionContentsComponent, selector: "vdr-collection-contents", inputs: ["collectionId", "parentId", "updatedFilters", "previewUpdatedFilters"] }], directives: [{ type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i7.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i3.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.ClrLabel, selector: "label", inputs: ["for"] }, { type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.ClrIconCustomTag, selector: "clr-icon" }], pipes: { "async": i6.AsyncPipe, "translate": i8.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
116
141
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CollectionListComponent, decorators: [{
117
142
  type: Component,
118
- args: [{ selector: 'vdr-collection-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex center wrap\">\r\n <vdr-language-selector\r\n class=\"mt2\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n <clr-checkbox-wrapper\r\n class=\"expand-all-toggle ml3\"\r\n [ngClass]=\"(availableLanguages$ | async)?.length === 1 ? 'mt3' : 'mt1'\"\r\n >\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"expandAll\" />\r\n <label>{{ 'catalog.expand-all-collections' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <input\r\n type='text'\r\n name='searchTerm'\r\n [formControl]='filterTermControl'\r\n [placeholder]=\"'catalog.filter-by-name' | translate\"\r\n class='clr-input search-input ml4'\r\n />\r\n </div>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"collection-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n [routerLink]=\"['./create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n<div class=\"collection-wrapper\">\r\n <vdr-collection-tree\r\n [collections]=\"items$ | async\"\r\n [activeCollectionId]=\"activeCollectionId$ | async\"\r\n [expandAll]=\"expandAll\"\r\n (rearrange)=\"onRearrange($event)\"\r\n (deleteCollection)=\"deleteCollection($event)\"\r\n ></vdr-collection-tree>\r\n\r\n <div class=\"collection-contents\" [class.expanded]=\"activeCollectionId$ | async\">\r\n <vdr-collection-contents [collectionId]=\"activeCollectionId$ | async\">\r\n <ng-template let-count>\r\n <div class=\"collection-title\">\r\n {{ activeCollectionTitle$ | async }} ({{\r\n 'common.results-count' | translate: { count: count }\r\n }})\r\n </div>\r\n <button type=\"button\" class=\"close-button\" (click)=\"closeContents()\">\r\n <clr-icon shape=\"close\"></clr-icon>\r\n </button>\r\n </ng-template>\r\n </vdr-collection-contents>\r\n </div>\r\n</div>\r\n", styles: [":host{height:100%;display:flex;flex-direction:column}.expand-all-toggle{display:block}.collection-wrapper{display:flex;height:calc(100% - 50px)}.collection-wrapper vdr-collection-tree{flex:1;height:100%;overflow:auto}.collection-wrapper .collection-contents{height:100%;width:0;opacity:0;visibility:hidden;overflow:auto;transition:width .3s,opacity .2s .3s,visibility 0s .3s}.collection-wrapper .collection-contents.expanded{width:30vw;visibility:visible;opacity:1;padding-left:12px}.collection-wrapper .collection-contents .close-button{margin:0;background:none;border:none;cursor:pointer}.paging-controls{padding-top:6px;border-top:1px solid var(--color-component-border-100);display:flex;justify-content:space-between}\n"] }]
143
+ args: [{ selector: 'vdr-collection-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex center wrap\">\r\n <vdr-language-selector\r\n class=\"mt2\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n <clr-checkbox-wrapper\r\n class=\"expand-all-toggle ml3\"\r\n [ngClass]=\"(availableLanguages$ | async)?.length === 1 ? 'mt3' : 'mt1'\"\r\n >\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"expandAll\" (change)=\"toggleExpandAll()\"/>\r\n <label>{{ 'catalog.expand-all-collections' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <input\r\n type='text'\r\n name='searchTerm'\r\n [formControl]='filterTermControl'\r\n [placeholder]=\"'catalog.filter-by-name' | translate\"\r\n class='clr-input search-input ml4'\r\n />\r\n </div>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"collection-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n [routerLink]=\"['./create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n<div class=\"collection-wrapper\">\r\n <vdr-collection-tree\r\n [collections]=\"items$ | async\"\r\n [activeCollectionId]=\"activeCollectionId$ | async\"\r\n [expandAll]=\"expandAll\"\r\n [expandedIds]=\"expandedIds\"\r\n (rearrange)=\"onRearrange($event)\"\r\n (deleteCollection)=\"deleteCollection($event)\"\r\n ></vdr-collection-tree>\r\n\r\n <div class=\"collection-contents\" [class.expanded]=\"activeCollectionId$ | async\">\r\n <vdr-collection-contents [collectionId]=\"activeCollectionId$ | async\">\r\n <ng-template let-count>\r\n <div class=\"collection-title\">\r\n {{ activeCollectionTitle$ | async }} ({{\r\n 'common.results-count' | translate: { count: count }\r\n }})\r\n </div>\r\n <button type=\"button\" class=\"close-button\" (click)=\"closeContents()\">\r\n <clr-icon shape=\"close\"></clr-icon>\r\n </button>\r\n </ng-template>\r\n </vdr-collection-contents>\r\n </div>\r\n</div>\r\n", styles: [":host{height:100%;display:flex;flex-direction:column}.expand-all-toggle{display:block}.collection-wrapper{display:flex;height:calc(100% - 50px)}.collection-wrapper vdr-collection-tree{flex:1;height:100%;overflow:auto}.collection-wrapper .collection-contents{height:100%;width:0;opacity:0;visibility:hidden;overflow:auto;transition:width .3s,opacity .2s .3s,visibility 0s .3s}.collection-wrapper .collection-contents.expanded{width:30vw;visibility:visible;opacity:1;padding-left:12px}.collection-wrapper .collection-contents .close-button{margin:0;background:none;border:none;cursor:pointer}.paging-controls{padding-top:6px;border-top:1px solid var(--color-component-border-100);display:flex;justify-content:space-between}\n"] }]
119
144
  }], ctorParameters: function () { return [{ type: i1.DataService }, { type: i1.NotificationService }, { type: i1.ModalService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i1.ServerConfigService }]; } });
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWxpc3QvY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWxpc3QvY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBV3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQ0gsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsV0FBVyxFQUNYLFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxFQUNULEdBQUcsR0FDTixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBVXhCLE1BQU0sT0FBTyx1QkFBdUI7SUFXaEMsWUFDWSxXQUF3QixFQUN4QixtQkFBd0MsRUFDeEMsWUFBMEIsRUFDMUIsTUFBYyxFQUNkLEtBQXFCLEVBQ3JCLG1CQUF3QztRQUx4QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBaEJw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QUFJLEVBQUU7Z0NBQ0YsUUFBUSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLOzZCQUN6Qzt5QkFDSjtxQkFDSjtvQkFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ1o7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDOztvSEE5SFEsdUJBQXVCO3dHQUF2Qix1QkFBdUIsMkRDbENwQyx5cEZBNkRBOzJGRDNCYSx1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0kscUJBQXFCLG1CQUdkLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcclxuaW1wb3J0IHtcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgR2V0Q29sbGVjdGlvbkxpc3RRdWVyeSxcclxuICAgIEl0ZW1PZixcclxuICAgIExhbmd1YWdlQ29kZSxcclxuICAgIE1vZGFsU2VydmljZSxcclxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBRdWVyeVJlc3VsdCxcclxuICAgIFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIEVNUFRZLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgICBkZWJvdW5jZVRpbWUsXHJcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcclxuICAgIG1hcCxcclxuICAgIHNoYXJlUmVwbGF5LFxyXG4gICAgc3dpdGNoTWFwLFxyXG4gICAgdGFrZSxcclxuICAgIHRha2VVbnRpbCxcclxuICAgIHRhcCxcclxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBSZWFycmFuZ2VFdmVudCB9IGZyb20gJy4uL2NvbGxlY3Rpb24tdHJlZS9jb2xsZWN0aW9uLXRyZWUudHlwZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1jb2xsZWN0aW9uLWxpc3QnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbGxlY3Rpb24tbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb2xsZWN0aW9uLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBmaWx0ZXJUZXJtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcbiAgICBhY3RpdmVDb2xsZWN0aW9uSWQkOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+O1xyXG4gICAgYWN0aXZlQ29sbGVjdGlvblRpdGxlJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG4gICAgaXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PEl0ZW1PZjxHZXRDb2xsZWN0aW9uTGlzdFF1ZXJ5LCAnY29sbGVjdGlvbnMnPj4+O1xyXG4gICAgYXZhaWxhYmxlTGFuZ3VhZ2VzJDogT2JzZXJ2YWJsZTxMYW5ndWFnZUNvZGVbXT47XHJcbiAgICBjb250ZW50TGFuZ3VhZ2UkOiBPYnNlcnZhYmxlPExhbmd1YWdlQ29kZT47XHJcbiAgICBleHBhbmRBbGwgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgcXVlcnlSZXN1bHQ6IFF1ZXJ5UmVzdWx0PGFueT47XHJcbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByaXZhdGUgc2VydmVyQ29uZmlnU2VydmljZTogU2VydmVyQ29uZmlnU2VydmljZSxcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnF1ZXJ5UmVzdWx0ID0gdGhpcy5kYXRhU2VydmljZS5jb2xsZWN0aW9uLmdldENvbGxlY3Rpb25zKDEwMDAsIDApLnJlZmV0Y2hPbkNoYW5uZWxDaGFuZ2UoKTtcclxuICAgICAgICB0aGlzLml0ZW1zJCA9IHRoaXMucXVlcnlSZXN1bHQubWFwU3RyZWFtKGRhdGEgPT4gZGF0YS5jb2xsZWN0aW9ucy5pdGVtcykucGlwZShzaGFyZVJlcGxheSgxKSk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVDb2xsZWN0aW9uSWQkID0gdGhpcy5yb3V0ZS5wYXJhbU1hcC5waXBlKFxyXG4gICAgICAgICAgICBtYXAocG0gPT4gcG0uZ2V0KCdjb250ZW50cycpKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmFjdGl2ZUNvbGxlY3Rpb25UaXRsZSQgPSBjb21iaW5lTGF0ZXN0KHRoaXMuYWN0aXZlQ29sbGVjdGlvbklkJCwgdGhpcy5pdGVtcyQpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoW2lkLCBjb2xsZWN0aW9uc10pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gY29sbGVjdGlvbnMuZmluZChjID0+IGMuaWQgPT09IGlkKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaC5uYW1lIDogJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMkID0gdGhpcy5zZXJ2ZXJDb25maWdTZXJ2aWNlLmdldEF2YWlsYWJsZUxhbmd1YWdlcygpO1xyXG4gICAgICAgIHRoaXMuY29udGVudExhbmd1YWdlJCA9IHRoaXMuZGF0YVNlcnZpY2UuY2xpZW50XHJcbiAgICAgICAgICAgIC51aVN0YXRlKClcclxuICAgICAgICAgICAgLm1hcFN0cmVhbSgoeyB1aVN0YXRlIH0pID0+IHVpU3RhdGUuY29udGVudExhbmd1YWdlKVxyXG4gICAgICAgICAgICAucGlwZSh0YXAoKCkgPT4gdGhpcy5yZWZyZXNoKCkpKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXJUZXJtQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDI1MCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZnJlc2goKSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5xdWVyeVJlc3VsdC5jb21wbGV0ZWQkLm5leHQoKTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodW5kZWZpbmVkKTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25SZWFycmFuZ2UoZXZlbnQ6IFJlYXJyYW5nZUV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jb2xsZWN0aW9uLm1vdmVDb2xsZWN0aW9uKFtldmVudF0pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktc2F2ZWQtY2hhbmdlcycpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXNhdmUtY2hhbmdlcy1lcnJvcicpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVDb2xsZWN0aW9uKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLml0ZW1zJFxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtYXAoaXRlbXMgPT4gLTEgPCBpdGVtcy5maW5kSW5kZXgoaSA9PiBpLnBhcmVudCAmJiBpLnBhcmVudC5pZCA9PT0gaWQpKSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChoYXNDaGlsZHJlbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlLmRpYWxvZyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfKCdjYXRhbG9nLmNvbmZpcm0tZGVsZXRlLWNvbGxlY3Rpb24nKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogaGFzQ2hpbGRyZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXygnY2F0YWxvZy5jb25maXJtLWRlbGV0ZS1jb2xsZWN0aW9uLWFuZC1jaGlsZHJlbi1ib2R5JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdzZWNvbmRhcnknLCBsYWJlbDogXygnY29tbW9uLmNhbmNlbCcpIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdkYW5nZXInLCBsYWJlbDogXygnY29tbW9uLmRlbGV0ZScpLCByZXR1cm5WYWx1ZTogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzcG9uc2UgPT4gKHJlc3BvbnNlID8gdGhpcy5kYXRhU2VydmljZS5jb2xsZWN0aW9uLmRlbGV0ZUNvbGxlY3Rpb24oaWQpIDogRU1QVFkpKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktZGVsZXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDb2xsZWN0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LWRlbGV0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0NvbGxlY3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZUNvbnRlbnRzKCkge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4udGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMgfTtcclxuICAgICAgICBkZWxldGUgcGFyYW1zLmNvbnRlbnRzO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nLCBwYXJhbXNdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdwcmVzZXJ2ZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGFuZ3VhZ2UoY29kZTogTGFuZ3VhZ2VDb2RlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jbGllbnQuc2V0Q29udGVudExhbmd1YWdlKGNvZGUpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVmcmVzaCgpIHtcclxuICAgICAgICB0aGlzLnF1ZXJ5UmVzdWx0LnJlZi5yZWZldGNoKHtcclxuICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgc2tpcDogMCxcclxuICAgICAgICAgICAgICAgIHRha2U6IDEwMDAsXHJcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5maWx0ZXJUZXJtQ29udHJvbC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluczogdGhpcy5maWx0ZXJUZXJtQ29udHJvbC52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge30pLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItYWN0aW9uLWJhcj5cclxuICAgIDx2ZHItYWItbGVmdD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBjZW50ZXIgd3JhcFwiPlxyXG4gICAgICAgICAgICA8dmRyLWxhbmd1YWdlLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm10MlwiXHJcbiAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc109XCJhdmFpbGFibGVMYW5ndWFnZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgW2N1cnJlbnRMYW5ndWFnZUNvZGVdPVwiY29udGVudExhbmd1YWdlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIChsYW5ndWFnZUNvZGVDaGFuZ2UpPVwic2V0TGFuZ3VhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L3Zkci1sYW5ndWFnZS1zZWxlY3Rvcj5cclxuICAgICAgICAgICAgPGNsci1jaGVja2JveC13cmFwcGVyXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV4cGFuZC1hbGwtdG9nZ2xlIG1sM1wiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIoYXZhaWxhYmxlTGFuZ3VhZ2VzJCB8IGFzeW5jKT8ubGVuZ3RoID09PSAxID8gJ210MycgOiAnbXQxJ1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbHJDaGVja2JveCBbKG5nTW9kZWwpXT1cImV4cGFuZEFsbFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ2NhdGFsb2cuZXhwYW5kLWFsbC1jb2xsZWN0aW9ucycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Nsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgIHR5cGU9J3RleHQnXHJcbiAgICAgICAgICAgICAgICBuYW1lPSdzZWFyY2hUZXJtJ1xyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0nZmlsdGVyVGVybUNvbnRyb2wnXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2NhdGFsb2cuZmlsdGVyLWJ5LW5hbWUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPSdjbHItaW5wdXQgc2VhcmNoLWlucHV0IG1sNCdcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvdmRyLWFiLWxlZnQ+XHJcbiAgICA8dmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgIDx2ZHItYWN0aW9uLWJhci1pdGVtcyBsb2NhdGlvbklkPVwiY29sbGVjdGlvbi1saXN0XCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cclxuICAgICAgICA8YVxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICp2ZHJJZlBlcm1pc3Npb25zPVwiWydDcmVhdGVDYXRhbG9nJywgJ0NyZWF0ZUNvbGxlY3Rpb24nXVwiXHJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnLi9jcmVhdGUnXVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAge3sgJ2NhdGFsb2cuY3JlYXRlLW5ldy1jb2xsZWN0aW9uJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvYT5cclxuICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG48L3Zkci1hY3Rpb24tYmFyPlxyXG48ZGl2IGNsYXNzPVwiY29sbGVjdGlvbi13cmFwcGVyXCI+XHJcbiAgICA8dmRyLWNvbGxlY3Rpb24tdHJlZVxyXG4gICAgICAgIFtjb2xsZWN0aW9uc109XCJpdGVtcyQgfCBhc3luY1wiXHJcbiAgICAgICAgW2FjdGl2ZUNvbGxlY3Rpb25JZF09XCJhY3RpdmVDb2xsZWN0aW9uSWQkIHwgYXN5bmNcIlxyXG4gICAgICAgIFtleHBhbmRBbGxdPVwiZXhwYW5kQWxsXCJcclxuICAgICAgICAocmVhcnJhbmdlKT1cIm9uUmVhcnJhbmdlKCRldmVudClcIlxyXG4gICAgICAgIChkZWxldGVDb2xsZWN0aW9uKT1cImRlbGV0ZUNvbGxlY3Rpb24oJGV2ZW50KVwiXHJcbiAgICA+PC92ZHItY29sbGVjdGlvbi10cmVlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xsZWN0aW9uLWNvbnRlbnRzXCIgW2NsYXNzLmV4cGFuZGVkXT1cImFjdGl2ZUNvbGxlY3Rpb25JZCQgfCBhc3luY1wiPlxyXG4gICAgICAgIDx2ZHItY29sbGVjdGlvbi1jb250ZW50cyBbY29sbGVjdGlvbklkXT1cImFjdGl2ZUNvbGxlY3Rpb25JZCQgfCBhc3luY1wiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvdW50PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxlY3Rpb24tdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBhY3RpdmVDb2xsZWN0aW9uVGl0bGUkIHwgYXN5bmMgfX0gKHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb21tb24ucmVzdWx0cy1jb3VudCcgfCB0cmFuc2xhdGU6IHsgY291bnQ6IGNvdW50IH1cclxuICAgICAgICAgICAgICAgICAgICB9fSlcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZS1idXR0b25cIiAoY2xpY2spPVwiY2xvc2VDb250ZW50cygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiY2xvc2VcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC92ZHItY29sbGVjdGlvbi1jb250ZW50cz5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWxpc3QvY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWxpc3QvY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBV3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQ0gsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsV0FBVyxFQUNYLFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxFQUNULEdBQUcsR0FDTixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBVXhCLE1BQU0sT0FBTyx1QkFBdUI7SUFZaEMsWUFDWSxXQUF3QixFQUN4QixtQkFBd0MsRUFDeEMsWUFBMEIsRUFDMUIsTUFBYyxFQUNkLEtBQXFCLEVBQ3JCLG1CQUF3QztRQUx4QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBakJw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O1FBQzlELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztZQUN6QixPQUFPLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsR0FBRyxDQUFDLFVBQVU7b0JBQ1YsQ0FBQyxDQUFDO3dCQUNJLE1BQU0sRUFBRTs0QkFDSixJQUFJLEVBQUU7Z0NBQ0YsUUFBUSxFQUFFLFVBQVU7NkJBQ3ZCO3lCQUNKO3FCQUNKO29CQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDWjtTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7O29IQTdKUSx1QkFBdUI7d0dBQXZCLHVCQUF1QiwyRENsQ3BDLGd1RkE4REE7MkZENUJhLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDSSxxQkFBcUIsbUJBR2QsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgRGF0YVNlcnZpY2UsXHJcbiAgICBHZXRDb2xsZWN0aW9uTGlzdFF1ZXJ5LFxyXG4gICAgSXRlbU9mLFxyXG4gICAgTGFuZ3VhZ2VDb2RlLFxyXG4gICAgTW9kYWxTZXJ2aWNlLFxyXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIFF1ZXJ5UmVzdWx0LFxyXG4gICAgU2VydmVyQ29uZmlnU2VydmljZSxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgRU1QVFksIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICAgIGRlYm91bmNlVGltZSxcclxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxyXG4gICAgbWFwLFxyXG4gICAgc2hhcmVSZXBsYXksXHJcbiAgICBzd2l0Y2hNYXAsXHJcbiAgICB0YWtlLFxyXG4gICAgdGFrZVVudGlsLFxyXG4gICAgdGFwLFxyXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IFJlYXJyYW5nZUV2ZW50IH0gZnJvbSAnLi4vY29sbGVjdGlvbi10cmVlL2NvbGxlY3Rpb24tdHJlZS50eXBlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWNvbGxlY3Rpb24tbGlzdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NvbGxlY3Rpb24tbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIGZpbHRlclRlcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICAgIGFjdGl2ZUNvbGxlY3Rpb25JZCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XHJcbiAgICBhY3RpdmVDb2xsZWN0aW9uVGl0bGUkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgICBpdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8SXRlbU9mPEdldENvbGxlY3Rpb25MaXN0UXVlcnksICdjb2xsZWN0aW9ucyc+Pj47XHJcbiAgICBhdmFpbGFibGVMYW5ndWFnZXMkOiBPYnNlcnZhYmxlPExhbmd1YWdlQ29kZVtdPjtcclxuICAgIGNvbnRlbnRMYW5ndWFnZSQ6IE9ic2VydmFibGU8TGFuZ3VhZ2VDb2RlPjtcclxuICAgIGV4cGFuZEFsbCA9IGZhbHNlO1xyXG4gICAgZXhwYW5kZWRJZHM6IHN0cmluZ1tdID0gW107XHJcbiAgICBwcml2YXRlIHF1ZXJ5UmVzdWx0OiBRdWVyeVJlc3VsdDxhbnk+O1xyXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIHNlcnZlckNvbmZpZ1NlcnZpY2U6IFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5xdWVyeVJlc3VsdCA9IHRoaXMuZGF0YVNlcnZpY2UuY29sbGVjdGlvbi5nZXRDb2xsZWN0aW9ucygxMDAwLCAwKS5yZWZldGNoT25DaGFubmVsQ2hhbmdlKCk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyQgPSB0aGlzLnF1ZXJ5UmVzdWx0Lm1hcFN0cmVhbShkYXRhID0+IGRhdGEuY29sbGVjdGlvbnMuaXRlbXMpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlQ29sbGVjdGlvbklkJCA9IHRoaXMucm91dGUucGFyYW1NYXAucGlwZShcclxuICAgICAgICAgICAgbWFwKHBtID0+IHBtLmdldCgnY29udGVudHMnKSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkSWRzID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgnZXhwYW5kZWQnKT8uc3BsaXQoJywnKSA/PyBbXTtcclxuICAgICAgICB0aGlzLmV4cGFuZEFsbCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ2V4cGFuZGVkJykgPT09ICdhbGwnO1xyXG5cclxuICAgICAgICB0aGlzLmFjdGl2ZUNvbGxlY3Rpb25UaXRsZSQgPSBjb21iaW5lTGF0ZXN0KHRoaXMuYWN0aXZlQ29sbGVjdGlvbklkJCwgdGhpcy5pdGVtcyQpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoW2lkLCBjb2xsZWN0aW9uc10pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gY29sbGVjdGlvbnMuZmluZChjID0+IGMuaWQgPT09IGlkKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaC5uYW1lIDogJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMkID0gdGhpcy5zZXJ2ZXJDb25maWdTZXJ2aWNlLmdldEF2YWlsYWJsZUxhbmd1YWdlcygpO1xyXG4gICAgICAgIHRoaXMuY29udGVudExhbmd1YWdlJCA9IHRoaXMuZGF0YVNlcnZpY2UuY2xpZW50XHJcbiAgICAgICAgICAgIC51aVN0YXRlKClcclxuICAgICAgICAgICAgLm1hcFN0cmVhbSgoeyB1aVN0YXRlIH0pID0+IHVpU3RhdGUuY29udGVudExhbmd1YWdlKVxyXG4gICAgICAgICAgICAucGlwZSh0YXAoKCkgPT4gdGhpcy5yZWZyZXNoKCkpKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXJUZXJtQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDI1MCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh0ZXJtID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nXSwge1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHE6IHRlcm0gfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcclxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXBcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAocXBtID0+IHFwbS5nZXQoJ3EnKSksXHJcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZWZyZXNoKCkpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyVGVybUNvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KCdxJykpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMucXVlcnlSZXN1bHQuY29tcGxldGVkJC5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUV4cGFuZEFsbCgpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4vJ10sIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiB0aGlzLmV4cGFuZEFsbCA/ICdhbGwnIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxyXG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUmVhcnJhbmdlKGV2ZW50OiBSZWFycmFuZ2VFdmVudCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY29sbGVjdGlvbi5tb3ZlQ29sbGVjdGlvbihbZXZlbnRdKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LXNhdmVkLWNoYW5nZXMnKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS1zYXZlLWNoYW5nZXMtZXJyb3InKSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlQ29sbGVjdGlvbihpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyRcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgbWFwKGl0ZW1zID0+IC0xIDwgaXRlbXMuZmluZEluZGV4KGkgPT4gaS5wYXJlbnQgJiYgaS5wYXJlbnQuaWQgPT09IGlkKSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoaGFzQ2hpbGRyZW4gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZS5kaWFsb2coe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXygnY2F0YWxvZy5jb25maXJtLWRlbGV0ZS1jb2xsZWN0aW9uJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGhhc0NoaWxkcmVuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF8oJ2NhdGFsb2cuY29uZmlybS1kZWxldGUtY29sbGVjdGlvbi1hbmQtY2hpbGRyZW4tYm9keScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnc2Vjb25kYXJ5JywgbGFiZWw6IF8oJ2NvbW1vbi5jYW5jZWwnKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnZGFuZ2VyJywgbGFiZWw6IF8oJ2NvbW1vbi5kZWxldGUnKSwgcmV0dXJuVmFsdWU6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+IChyZXNwb25zZSA/IHRoaXMuZGF0YVNlcnZpY2UuY29sbGVjdGlvbi5kZWxldGVDb2xsZWN0aW9uKGlkKSA6IEVNUFRZKSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWRlbGV0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnQ29sbGVjdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS1kZWxldGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDb2xsZWN0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VDb250ZW50cygpIHtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucGFyYW1zIH07XHJcbiAgICAgICAgZGVsZXRlIHBhcmFtcy5jb250ZW50cztcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4vJywgcGFyYW1zXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLCBxdWVyeVBhcmFtc0hhbmRsaW5nOiAncHJlc2VydmUnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldExhbmd1YWdlKGNvZGU6IExhbmd1YWdlQ29kZSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY2xpZW50LnNldENvbnRlbnRMYW5ndWFnZShjb2RlKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlZnJlc2goKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyVGVybSA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ3EnKTtcclxuICAgICAgICB0aGlzLnF1ZXJ5UmVzdWx0LnJlZi5yZWZldGNoKHtcclxuICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgc2tpcDogMCxcclxuICAgICAgICAgICAgICAgIHRha2U6IDEwMDAsXHJcbiAgICAgICAgICAgICAgICAuLi4oZmlsdGVyVGVybVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluczogZmlsdGVyVGVybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge30pLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItYWN0aW9uLWJhcj5cclxuICAgIDx2ZHItYWItbGVmdD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBjZW50ZXIgd3JhcFwiPlxyXG4gICAgICAgICAgICA8dmRyLWxhbmd1YWdlLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm10MlwiXHJcbiAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc109XCJhdmFpbGFibGVMYW5ndWFnZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgW2N1cnJlbnRMYW5ndWFnZUNvZGVdPVwiY29udGVudExhbmd1YWdlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIChsYW5ndWFnZUNvZGVDaGFuZ2UpPVwic2V0TGFuZ3VhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L3Zkci1sYW5ndWFnZS1zZWxlY3Rvcj5cclxuICAgICAgICAgICAgPGNsci1jaGVja2JveC13cmFwcGVyXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV4cGFuZC1hbGwtdG9nZ2xlIG1sM1wiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIoYXZhaWxhYmxlTGFuZ3VhZ2VzJCB8IGFzeW5jKT8ubGVuZ3RoID09PSAxID8gJ210MycgOiAnbXQxJ1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbHJDaGVja2JveCBbKG5nTW9kZWwpXT1cImV4cGFuZEFsbFwiIChjaGFuZ2UpPVwidG9nZ2xlRXhwYW5kQWxsKClcIi8+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ2NhdGFsb2cuZXhwYW5kLWFsbC1jb2xsZWN0aW9ucycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Nsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgIHR5cGU9J3RleHQnXHJcbiAgICAgICAgICAgICAgICBuYW1lPSdzZWFyY2hUZXJtJ1xyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0nZmlsdGVyVGVybUNvbnRyb2wnXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2NhdGFsb2cuZmlsdGVyLWJ5LW5hbWUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPSdjbHItaW5wdXQgc2VhcmNoLWlucHV0IG1sNCdcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvdmRyLWFiLWxlZnQ+XHJcbiAgICA8dmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgIDx2ZHItYWN0aW9uLWJhci1pdGVtcyBsb2NhdGlvbklkPVwiY29sbGVjdGlvbi1saXN0XCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cclxuICAgICAgICA8YVxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICp2ZHJJZlBlcm1pc3Npb25zPVwiWydDcmVhdGVDYXRhbG9nJywgJ0NyZWF0ZUNvbGxlY3Rpb24nXVwiXHJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnLi9jcmVhdGUnXVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAge3sgJ2NhdGFsb2cuY3JlYXRlLW5ldy1jb2xsZWN0aW9uJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvYT5cclxuICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG48L3Zkci1hY3Rpb24tYmFyPlxyXG48ZGl2IGNsYXNzPVwiY29sbGVjdGlvbi13cmFwcGVyXCI+XHJcbiAgICA8dmRyLWNvbGxlY3Rpb24tdHJlZVxyXG4gICAgICAgIFtjb2xsZWN0aW9uc109XCJpdGVtcyQgfCBhc3luY1wiXHJcbiAgICAgICAgW2FjdGl2ZUNvbGxlY3Rpb25JZF09XCJhY3RpdmVDb2xsZWN0aW9uSWQkIHwgYXN5bmNcIlxyXG4gICAgICAgIFtleHBhbmRBbGxdPVwiZXhwYW5kQWxsXCJcclxuICAgICAgICBbZXhwYW5kZWRJZHNdPVwiZXhwYW5kZWRJZHNcIlxyXG4gICAgICAgIChyZWFycmFuZ2UpPVwib25SZWFycmFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKGRlbGV0ZUNvbGxlY3Rpb24pPVwiZGVsZXRlQ29sbGVjdGlvbigkZXZlbnQpXCJcclxuICAgID48L3Zkci1jb2xsZWN0aW9uLXRyZWU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbGxlY3Rpb24tY29udGVudHNcIiBbY2xhc3MuZXhwYW5kZWRdPVwiYWN0aXZlQ29sbGVjdGlvbklkJCB8IGFzeW5jXCI+XHJcbiAgICAgICAgPHZkci1jb2xsZWN0aW9uLWNvbnRlbnRzIFtjb2xsZWN0aW9uSWRdPVwiYWN0aXZlQ29sbGVjdGlvbklkJCB8IGFzeW5jXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY291bnQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGVjdGlvbi10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGFjdGl2ZUNvbGxlY3Rpb25UaXRsZSQgfCBhc3luYyB9fSAoe3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW1vbi5yZXN1bHRzLWNvdW50JyB8IHRyYW5zbGF0ZTogeyBjb3VudDogY291bnQgfVxyXG4gICAgICAgICAgICAgICAgICAgIH19KVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlLWJ1dHRvblwiIChjbGljayk9XCJjbG9zZUNvbnRlbnRzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJjbG9zZVwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L3Zkci1jb2xsZWN0aW9uLWNvbnRlbnRzPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -2,7 +2,7 @@
2
2
  * Builds a tree from an array of nodes which have a parent.
3
3
  * Based on https://stackoverflow.com/a/31247960/772859, modified to preserve ordering.
4
4
  */
5
- export function arrayToTree(nodes, currentState) {
5
+ export function arrayToTree(nodes, currentState, expandedIds = []) {
6
6
  const topLevelNodes = [];
7
7
  const mappedArr = {};
8
8
  const currentStateMap = treeToMap(currentState);
@@ -13,7 +13,7 @@ export function arrayToTree(nodes, currentState) {
13
13
  for (const id of nodes.map(n => n.id)) {
14
14
  if (mappedArr.hasOwnProperty(id)) {
15
15
  const mappedElem = mappedArr[id];
16
- mappedElem.expanded = currentStateMap.get(id)?.expanded ?? false;
16
+ mappedElem.expanded = currentStateMap.get(id)?.expanded ?? expandedIds.includes(id);
17
17
  const parent = mappedElem.parent;
18
18
  if (!parent) {
19
19
  continue;
@@ -53,4 +53,4 @@ function treeToMap(tree) {
53
53
  }
54
54
  return nodeMap;
55
55
  }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktdG8tdHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLXRyZWUvYXJyYXktdG8tdHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFzQixLQUFVLEVBQUUsWUFBMEI7SUFDbkYsTUFBTSxhQUFhLEdBQXVCLEVBQUUsQ0FBQztJQUM3QyxNQUFNLFNBQVMsR0FBa0MsRUFBRSxDQUFDO0lBQ3BELE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVoRCx3RUFBd0U7SUFDeEUsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7UUFDdEIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUksSUFBWSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztLQUMzRDtJQUVELEtBQUssTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUNuQyxJQUFJLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDOUIsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLElBQUksS0FBSyxDQUFDO1lBQ2pFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDakMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDVCxTQUFTO2FBQ1o7WUFDRCxtRkFBbUY7WUFDbkYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2YsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUN0QixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ2xEO3FCQUFNO29CQUNILFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBUyxDQUFDO2lCQUM1RDthQUNKO2lCQUFNO2dCQUNILGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDbEM7U0FDSjtLQUNKO0lBQ0QsaURBQWlEO0lBQ2pELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDOUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxDQUFDO0FBQ25ELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxTQUFTLENBQXNCLElBQWtCO0lBQ3RELE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO0lBQy9DLFNBQVMsS0FBSyxDQUFDLElBQWlCO1FBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsSUFBSSxJQUFJLEVBQUU7UUFDTixLQUFLLENBQUMsSUFBbUIsQ0FBQyxDQUFDO0tBQzlCO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEhhc1BhcmVudCA9IHsgaWQ6IHN0cmluZzsgcGFyZW50PzogeyBpZDogc3RyaW5nIH0gfCBudWxsIH07XG5leHBvcnQgdHlwZSBUcmVlTm9kZTxUIGV4dGVuZHMgSGFzUGFyZW50PiA9IFQgJiB7IGNoaWxkcmVuOiBBcnJheTxUcmVlTm9kZTxUPj47IGV4cGFuZGVkOiBib29sZWFuIH07XG5leHBvcnQgdHlwZSBSb290Tm9kZTxUIGV4dGVuZHMgSGFzUGFyZW50PiA9IHsgaWQ/OiBzdHJpbmc7IGNoaWxkcmVuOiBBcnJheTxUcmVlTm9kZTxUPj4gfTtcblxuLyoqXG4gKiBCdWlsZHMgYSB0cmVlIGZyb20gYW4gYXJyYXkgb2Ygbm9kZXMgd2hpY2ggaGF2ZSBhIHBhcmVudC5cbiAqIEJhc2VkIG9uIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zMTI0Nzk2MC83NzI4NTksIG1vZGlmaWVkIHRvIHByZXNlcnZlIG9yZGVyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlUb1RyZWU8VCBleHRlbmRzIEhhc1BhcmVudD4obm9kZXM6IFRbXSwgY3VycmVudFN0YXRlPzogUm9vdE5vZGU8VD4pOiBSb290Tm9kZTxUPiB7XG4gICAgY29uc3QgdG9wTGV2ZWxOb2RlczogQXJyYXk8VHJlZU5vZGU8VD4+ID0gW107XG4gICAgY29uc3QgbWFwcGVkQXJyOiB7IFtpZDogc3RyaW5nXTogVHJlZU5vZGU8VD4gfSA9IHt9O1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZU1hcCA9IHRyZWVUb01hcChjdXJyZW50U3RhdGUpO1xuXG4gICAgLy8gRmlyc3QgbWFwIHRoZSBub2RlcyBvZiB0aGUgYXJyYXkgdG8gYW4gb2JqZWN0IC0+IGNyZWF0ZSBhIGhhc2ggdGFibGUuXG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgIG1hcHBlZEFycltub2RlLmlkXSA9IHsgLi4uKG5vZGUgYXMgYW55KSwgY2hpbGRyZW46IFtdIH07XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpZCBvZiBub2Rlcy5tYXAobiA9PiBuLmlkKSkge1xuICAgICAgICBpZiAobWFwcGVkQXJyLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgY29uc3QgbWFwcGVkRWxlbSA9IG1hcHBlZEFycltpZF07XG4gICAgICAgICAgICBtYXBwZWRFbGVtLmV4cGFuZGVkID0gY3VycmVudFN0YXRlTWFwLmdldChpZCk/LmV4cGFuZGVkID8/IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gbWFwcGVkRWxlbS5wYXJlbnQ7XG4gICAgICAgICAgICBpZiAoIXBhcmVudCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbm90IGF0IHRoZSByb290IGxldmVsLCBhZGQgaXQgdG8gaXRzIHBhcmVudCBhcnJheSBvZiBjaGlsZHJlbi5cbiAgICAgICAgICAgIGNvbnN0IHBhcmVudElzUm9vdCA9ICFtYXBwZWRBcnJbcGFyZW50LmlkXTtcbiAgICAgICAgICAgIGlmICghcGFyZW50SXNSb290KSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hcHBlZEFycltwYXJlbnQuaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcHBlZEFycltwYXJlbnQuaWRdLmNoaWxkcmVuLnB1c2gobWFwcGVkRWxlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWFwcGVkQXJyW3BhcmVudC5pZF0gPSB7IGNoaWxkcmVuOiBbbWFwcGVkRWxlbV0gfSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0b3BMZXZlbE5vZGVzLnB1c2gobWFwcGVkRWxlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW5vbi1udWxsLWFzc2VydGlvblxuICAgIGNvbnN0IHJvb3RJZCA9IHRvcExldmVsTm9kZXMubGVuZ3RoID8gdG9wTGV2ZWxOb2Rlc1swXS5wYXJlbnQhLmlkIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IGlkOiByb290SWQsIGNoaWxkcmVuOiB0b3BMZXZlbE5vZGVzIH07XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gZXhpc3RpbmcgdHJlZSAoYXMgZ2VuZXJhdGVkIGJ5IHRoZSBhcnJheVRvVHJlZSBmdW5jdGlvbikgaW50byBhIGZsYXRcbiAqIE1hcC4gVGhpcyBpcyB1c2VkIHRvIHBlcnNpc3QgY2VydGFpbiBzdGF0ZXMgKGUuZy4gYGV4cGFuZGVkYCkgd2hlbiByZS1idWlsZGluZyB0aGVcbiAqIHRyZWUuXG4gKi9cbmZ1bmN0aW9uIHRyZWVUb01hcDxUIGV4dGVuZHMgSGFzUGFyZW50Pih0cmVlPzogUm9vdE5vZGU8VD4pOiBNYXA8c3RyaW5nLCBUcmVlTm9kZTxUPj4ge1xuICAgIGNvbnN0IG5vZGVNYXAgPSBuZXcgTWFwPHN0cmluZywgVHJlZU5vZGU8VD4+KCk7XG4gICAgZnVuY3Rpb24gdmlzaXQobm9kZTogVHJlZU5vZGU8VD4pIHtcbiAgICAgICAgbm9kZU1hcC5zZXQobm9kZS5pZCwgbm9kZSk7XG4gICAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCh2aXNpdCk7XG4gICAgfVxuICAgIGlmICh0cmVlKSB7XG4gICAgICAgIHZpc2l0KHRyZWUgYXMgVHJlZU5vZGU8VD4pO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZU1hcDtcbn1cbiJdfQ==
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktdG8tdHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLXRyZWUvYXJyYXktdG8tdHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN2QixLQUFVLEVBQ1YsWUFBMEIsRUFDMUIsY0FBd0IsRUFBRTtJQUUxQixNQUFNLGFBQWEsR0FBdUIsRUFBRSxDQUFDO0lBQzdDLE1BQU0sU0FBUyxHQUFrQyxFQUFFLENBQUM7SUFDcEQsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRWhELHdFQUF3RTtJQUN4RSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtRQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBSSxJQUFZLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0tBQzNEO0lBRUQsS0FBSyxNQUFNLEVBQUUsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ25DLElBQUksU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUM5QixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakMsVUFBVSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BGLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDakMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDVCxTQUFTO2FBQ1o7WUFDRCxtRkFBbUY7WUFDbkYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2YsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUN0QixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ2xEO3FCQUFNO29CQUNILFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBUyxDQUFDO2lCQUM1RDthQUNKO2lCQUFNO2dCQUNILGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDbEM7U0FDSjtLQUNKO0lBQ0QsaURBQWlEO0lBQ2pELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDOUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxDQUFDO0FBQ25ELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxTQUFTLENBQXNCLElBQWtCO0lBQ3RELE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO0lBQy9DLFNBQVMsS0FBSyxDQUFDLElBQWlCO1FBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsSUFBSSxJQUFJLEVBQUU7UUFDTixLQUFLLENBQUMsSUFBbUIsQ0FBQyxDQUFDO0tBQzlCO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEhhc1BhcmVudCA9IHsgaWQ6IHN0cmluZzsgcGFyZW50PzogeyBpZDogc3RyaW5nIH0gfCBudWxsIH07XHJcbmV4cG9ydCB0eXBlIFRyZWVOb2RlPFQgZXh0ZW5kcyBIYXNQYXJlbnQ+ID0gVCAmIHsgY2hpbGRyZW46IEFycmF5PFRyZWVOb2RlPFQ+PjsgZXhwYW5kZWQ6IGJvb2xlYW4gfTtcclxuZXhwb3J0IHR5cGUgUm9vdE5vZGU8VCBleHRlbmRzIEhhc1BhcmVudD4gPSB7IGlkPzogc3RyaW5nOyBjaGlsZHJlbjogQXJyYXk8VHJlZU5vZGU8VD4+IH07XHJcblxyXG4vKipcclxuICogQnVpbGRzIGEgdHJlZSBmcm9tIGFuIGFycmF5IG9mIG5vZGVzIHdoaWNoIGhhdmUgYSBwYXJlbnQuXHJcbiAqIEJhc2VkIG9uIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zMTI0Nzk2MC83NzI4NTksIG1vZGlmaWVkIHRvIHByZXNlcnZlIG9yZGVyaW5nLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5VG9UcmVlPFQgZXh0ZW5kcyBIYXNQYXJlbnQ+KFxyXG4gICAgbm9kZXM6IFRbXSxcclxuICAgIGN1cnJlbnRTdGF0ZT86IFJvb3ROb2RlPFQ+LFxyXG4gICAgZXhwYW5kZWRJZHM6IHN0cmluZ1tdID0gW10sXHJcbik6IFJvb3ROb2RlPFQ+IHtcclxuICAgIGNvbnN0IHRvcExldmVsTm9kZXM6IEFycmF5PFRyZWVOb2RlPFQ+PiA9IFtdO1xyXG4gICAgY29uc3QgbWFwcGVkQXJyOiB7IFtpZDogc3RyaW5nXTogVHJlZU5vZGU8VD4gfSA9IHt9O1xyXG4gICAgY29uc3QgY3VycmVudFN0YXRlTWFwID0gdHJlZVRvTWFwKGN1cnJlbnRTdGF0ZSk7XHJcblxyXG4gICAgLy8gRmlyc3QgbWFwIHRoZSBub2RlcyBvZiB0aGUgYXJyYXkgdG8gYW4gb2JqZWN0IC0+IGNyZWF0ZSBhIGhhc2ggdGFibGUuXHJcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgICBtYXBwZWRBcnJbbm9kZS5pZF0gPSB7IC4uLihub2RlIGFzIGFueSksIGNoaWxkcmVuOiBbXSB9O1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgaWQgb2Ygbm9kZXMubWFwKG4gPT4gbi5pZCkpIHtcclxuICAgICAgICBpZiAobWFwcGVkQXJyLmhhc093blByb3BlcnR5KGlkKSkge1xyXG4gICAgICAgICAgICBjb25zdCBtYXBwZWRFbGVtID0gbWFwcGVkQXJyW2lkXTtcclxuICAgICAgICAgICAgbWFwcGVkRWxlbS5leHBhbmRlZCA9IGN1cnJlbnRTdGF0ZU1hcC5nZXQoaWQpPy5leHBhbmRlZCA/PyBleHBhbmRlZElkcy5pbmNsdWRlcyhpZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IG1hcHBlZEVsZW0ucGFyZW50O1xyXG4gICAgICAgICAgICBpZiAoIXBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbm90IGF0IHRoZSByb290IGxldmVsLCBhZGQgaXQgdG8gaXRzIHBhcmVudCBhcnJheSBvZiBjaGlsZHJlbi5cclxuICAgICAgICAgICAgY29uc3QgcGFyZW50SXNSb290ID0gIW1hcHBlZEFycltwYXJlbnQuaWRdO1xyXG4gICAgICAgICAgICBpZiAoIXBhcmVudElzUm9vdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hcHBlZEFycltwYXJlbnQuaWRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFwcGVkQXJyW3BhcmVudC5pZF0uY2hpbGRyZW4ucHVzaChtYXBwZWRFbGVtKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFwcGVkQXJyW3BhcmVudC5pZF0gPSB7IGNoaWxkcmVuOiBbbWFwcGVkRWxlbV0gfSBhcyBhbnk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0b3BMZXZlbE5vZGVzLnB1c2gobWFwcGVkRWxlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICBjb25zdCByb290SWQgPSB0b3BMZXZlbE5vZGVzLmxlbmd0aCA/IHRvcExldmVsTm9kZXNbMF0ucGFyZW50IS5pZCA6IHVuZGVmaW5lZDtcclxuICAgIHJldHVybiB7IGlkOiByb290SWQsIGNoaWxkcmVuOiB0b3BMZXZlbE5vZGVzIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBhbiBleGlzdGluZyB0cmVlIChhcyBnZW5lcmF0ZWQgYnkgdGhlIGFycmF5VG9UcmVlIGZ1bmN0aW9uKSBpbnRvIGEgZmxhdFxyXG4gKiBNYXAuIFRoaXMgaXMgdXNlZCB0byBwZXJzaXN0IGNlcnRhaW4gc3RhdGVzIChlLmcuIGBleHBhbmRlZGApIHdoZW4gcmUtYnVpbGRpbmcgdGhlXHJcbiAqIHRyZWUuXHJcbiAqL1xyXG5mdW5jdGlvbiB0cmVlVG9NYXA8VCBleHRlbmRzIEhhc1BhcmVudD4odHJlZT86IFJvb3ROb2RlPFQ+KTogTWFwPHN0cmluZywgVHJlZU5vZGU8VD4+IHtcclxuICAgIGNvbnN0IG5vZGVNYXAgPSBuZXcgTWFwPHN0cmluZywgVHJlZU5vZGU8VD4+KCk7XHJcbiAgICBmdW5jdGlvbiB2aXNpdChub2RlOiBUcmVlTm9kZTxUPikge1xyXG4gICAgICAgIG5vZGVNYXAuc2V0KG5vZGUuaWQsIG5vZGUpO1xyXG4gICAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCh2aXNpdCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHJlZSkge1xyXG4gICAgICAgIHZpc2l0KHRyZWUgYXMgVHJlZU5vZGU8VD4pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vZGVNYXA7XHJcbn1cclxuIl19
@@ -5,16 +5,18 @@ import { map, shareReplay } from 'rxjs/operators';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@vendure/admin-ui/core";
7
7
  import * as i2 from "./collection-tree.service";
8
- import * as i3 from "@angular/cdk/drag-drop";
9
- import * as i4 from "@angular/common";
10
- import * as i5 from "@clr/angular";
11
- import * as i6 from "@angular/router";
8
+ import * as i3 from "@angular/router";
9
+ import * as i4 from "@angular/cdk/drag-drop";
10
+ import * as i5 from "@angular/common";
11
+ import * as i6 from "@clr/angular";
12
12
  import * as i7 from "@ngx-translate/core";
13
13
  export class CollectionTreeNodeComponent {
14
- constructor(parent, dataService, collectionTreeService) {
14
+ constructor(parent, dataService, collectionTreeService, router, route) {
15
15
  this.parent = parent;
16
16
  this.dataService = dataService;
17
17
  this.collectionTreeService = collectionTreeService;
18
+ this.router = router;
19
+ this.route = route;
18
20
  this.depth = 0;
19
21
  this.expandAll = false;
20
22
  this.moveListItems = [];
@@ -42,6 +44,23 @@ export class CollectionTreeNodeComponent {
42
44
  trackByFn(index, item) {
43
45
  return item.id;
44
46
  }
47
+ toggleExpanded(collection) {
48
+ collection.expanded = !collection.expanded;
49
+ let expandedIds = this.route.snapshot.queryParamMap.get('expanded')?.split(',') ?? [];
50
+ if (collection.expanded) {
51
+ expandedIds.push(collection.id);
52
+ }
53
+ else {
54
+ expandedIds = expandedIds.filter(id => id !== collection.id);
55
+ }
56
+ this.router.navigate(['./'], {
57
+ queryParams: {
58
+ expanded: expandedIds.filter(id => !!id).join(','),
59
+ },
60
+ queryParamsHandling: 'merge',
61
+ relativeTo: this.route,
62
+ });
63
+ }
45
64
  getMoveListItems(collection) {
46
65
  this.moveListItems = this.collectionTreeService.getMoveListItems(collection);
47
66
  }
@@ -80,20 +99,20 @@ export class CollectionTreeNodeComponent {
80
99
  this.collectionTreeService.onDelete(id);
81
100
  }
82
101
  }
83
- CollectionTreeNodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CollectionTreeNodeComponent, deps: [{ token: CollectionTreeNodeComponent, optional: true, skipSelf: true }, { token: i1.DataService }, { token: i2.CollectionTreeService }], target: i0.ɵɵFactoryTarget.Component });
84
- CollectionTreeNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CollectionTreeNodeComponent, selector: "vdr-collection-tree-node", inputs: { collectionTree: "collectionTree", activeCollectionId: "activeCollectionId", expandAll: "expandAll" }, usesOnChanges: true, ngImport: i0, template: "<div\r\n cdkDropList\r\n class=\"tree-node\"\r\n #dropList\r\n [cdkDropListData]=\"collectionTree\"\r\n [cdkDropListDisabled]=\"!(hasUpdatePermission$ | async)\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n>\r\n <div\r\n class=\"collection\"\r\n [class.private]=\"collection.isPrivate\"\r\n *ngFor=\"let collection of collectionTree.children; index as i; trackBy: trackByFn\"\r\n cdkDrag\r\n [cdkDragData]=\"collection\"\r\n >\r\n <div\r\n class=\"collection-detail\"\r\n [ngClass]=\"'depth-' + depth\"\r\n [class.active]=\"collection.id === activeCollectionId\"\r\n >\r\n <div class=\"name\">\r\n <button\r\n class=\"icon-button folder-button\"\r\n [disabled]=\"expandAll\"\r\n *ngIf=\"collection.children?.length; else folderSpacer\"\r\n (click)=\"collection.expanded = !collection.expanded\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!collection.expanded && !expandAll\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"collection.expanded || expandAll\"></clr-icon>\r\n </button>\r\n <ng-template #folderSpacer>\r\n <div class=\"folder-button-spacer\"></div>\r\n </ng-template>\r\n {{ collection.name }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-chip *ngIf=\"collection.isPrivate\">{{ 'catalog.private' | translate }}</vdr-chip>\r\n <a\r\n class=\"btn btn-link btn-sm\"\r\n [routerLink]=\"['./', { contents: collection.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <clr-icon shape=\"view-list\"></clr-icon>\r\n {{ 'catalog.view-contents' | translate }}\r\n </a>\r\n <a class=\"btn btn-link btn-sm\" [routerLink]=\"['/catalog/collections/', collection.id]\">\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </a>\r\n <div class=\"drag-handle\" cdkDragHandle *vdrIfPermissions=\"['UpdateCatalog', 'UpdateCollection']\">\r\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\r\n </div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger (click)=\"getMoveListItems(collection)\">\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <a\r\n class=\"dropdown-item\"\r\n [routerLink]=\"['./', 'create', { parentId: collection.id }]\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"i === 0 || !(hasUpdatePermission$ | async)\"\r\n (click)=\"moveUp(collection, i)\"\r\n >\r\n <clr-icon shape=\"caret up\"></clr-icon>\r\n {{ 'catalog.move-up' | translate }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"\r\n i === collectionTree.children.length - 1 || !(hasUpdatePermission$ | async)\r\n \"\r\n (click)=\"moveDown(collection, i)\"\r\n >\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n {{ 'catalog.move-down' | translate }}\r\n </button>\r\n <h4 class=\"dropdown-header\">{{ 'catalog.move-to' | translate }}</h4>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n *ngFor=\"let item of moveListItems\"\r\n (click)=\"move(collection, item.id)\"\r\n [disabled]=\"!(hasUpdatePermission$ | async)\"\r\n >\r\n <div class=\"move-to-item\">\r\n <div class=\"move-icon\">\r\n <clr-icon shape=\"child-arrow\"></clr-icon>\r\n </div>\r\n <div class=\"path\">\r\n {{ item.path }}\r\n </div>\r\n </div>\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"delete(collection.id)\"\r\n [disabled]=\"!(hasDeletePermission$ | async)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n <vdr-collection-tree-node\r\n *ngIf=\"collection.expanded || expandAll\"\r\n [expandAll]=\"expandAll\"\r\n [collectionTree]=\"collection\"\r\n [activeCollectionId]=\"activeCollectionId\"\r\n ></vdr-collection-tree-node>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}.collection{background-color:var(--color-component-bg-100);font-size:.65rem;transition:transform .25s cubic-bezier(0,0,.2,1);margin-bottom:2px;border-left:2px solid transparent;transition:border-left-color .2s}.collection.private{background-color:var(--color-component-bg-200)}.collection .collection-detail{padding:6px 12px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--color-component-border-100)}.collection .collection-detail.active{background-color:var(--clr-global-selection-color)}.collection .collection-detail.depth-1{padding-left:36px}.collection .collection-detail.depth-2{padding-left:60px}.collection .collection-detail.depth-3{padding-left:84px}.collection .collection-detail.depth-4{padding-left:108px}.collection .collection-detail .folder-button-spacer{display:inline-block;width:28px}.tree-node{display:block;background:var(--color-component-bg-100);overflow:hidden}.tree-node.cdk-drop-list-dragging>.collection{border-left-color:var(--color-primary-300)}.drag-placeholder{min-height:120px;background-color:var(--color-component-bg-300);transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-list.cdk-drop-list-dragging .tree-node:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.move-to-item{display:flex;white-space:normal;align-items:baseline}.move-to-item .move-icon{flex:none;margin-right:3px}.move-to-item .path{line-height:18px}\n"], components: [{ type: i1.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition"] }, { type: CollectionTreeNodeComponent, selector: "vdr-collection-tree-node", inputs: ["collectionTree", "activeCollectionId", "expandAll"] }], directives: [{ type: i3.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: ["ngForTrackBy"] }, { type: i3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.ClrIconCustomTag, selector: "clr-icon" }, { type: i6.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i3.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }], pipes: { "async": i4.AsyncPipe, "translate": i7.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
102
+ CollectionTreeNodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CollectionTreeNodeComponent, deps: [{ token: CollectionTreeNodeComponent, optional: true, skipSelf: true }, { token: i1.DataService }, { token: i2.CollectionTreeService }, { token: i3.Router }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
103
+ CollectionTreeNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CollectionTreeNodeComponent, selector: "vdr-collection-tree-node", inputs: { collectionTree: "collectionTree", activeCollectionId: "activeCollectionId", expandAll: "expandAll" }, usesOnChanges: true, ngImport: i0, template: "<div\r\n cdkDropList\r\n class=\"tree-node\"\r\n #dropList\r\n [cdkDropListData]=\"collectionTree\"\r\n [cdkDropListDisabled]=\"!(hasUpdatePermission$ | async)\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n>\r\n <div\r\n class=\"collection\"\r\n [class.private]=\"collection.isPrivate\"\r\n *ngFor=\"let collection of collectionTree.children; index as i; trackBy: trackByFn\"\r\n cdkDrag\r\n [cdkDragData]=\"collection\"\r\n >\r\n <div\r\n class=\"collection-detail\"\r\n [ngClass]=\"'depth-' + depth\"\r\n [class.active]=\"collection.id === activeCollectionId\"\r\n >\r\n <div class=\"name\">\r\n <button\r\n class=\"icon-button folder-button\"\r\n [disabled]=\"expandAll\"\r\n *ngIf=\"collection.children?.length; else folderSpacer\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!collection.expanded && !expandAll\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"collection.expanded || expandAll\"></clr-icon>\r\n </button>\r\n <ng-template #folderSpacer>\r\n <div class=\"folder-button-spacer\"></div>\r\n </ng-template>\r\n {{ collection.name }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-chip *ngIf=\"collection.isPrivate\">{{ 'catalog.private' | translate }}</vdr-chip>\r\n <a\r\n class=\"btn btn-link btn-sm\"\r\n [routerLink]=\"['./', { contents: collection.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <clr-icon shape=\"view-list\"></clr-icon>\r\n {{ 'catalog.view-contents' | translate }}\r\n </a>\r\n <a class=\"btn btn-link btn-sm\" [routerLink]=\"['/catalog/collections/', collection.id]\">\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </a>\r\n <div class=\"drag-handle\" cdkDragHandle *vdrIfPermissions=\"['UpdateCatalog', 'UpdateCollection']\">\r\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\r\n </div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger (click)=\"getMoveListItems(collection)\">\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <a\r\n class=\"dropdown-item\"\r\n [routerLink]=\"['./', 'create', { parentId: collection.id }]\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"i === 0 || !(hasUpdatePermission$ | async)\"\r\n (click)=\"moveUp(collection, i)\"\r\n >\r\n <clr-icon shape=\"caret up\"></clr-icon>\r\n {{ 'catalog.move-up' | translate }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"\r\n i === collectionTree.children.length - 1 || !(hasUpdatePermission$ | async)\r\n \"\r\n (click)=\"moveDown(collection, i)\"\r\n >\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n {{ 'catalog.move-down' | translate }}\r\n </button>\r\n <h4 class=\"dropdown-header\">{{ 'catalog.move-to' | translate }}</h4>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n *ngFor=\"let item of moveListItems\"\r\n (click)=\"move(collection, item.id)\"\r\n [disabled]=\"!(hasUpdatePermission$ | async)\"\r\n >\r\n <div class=\"move-to-item\">\r\n <div class=\"move-icon\">\r\n <clr-icon shape=\"child-arrow\"></clr-icon>\r\n </div>\r\n <div class=\"path\">\r\n {{ item.path }}\r\n </div>\r\n </div>\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"delete(collection.id)\"\r\n [disabled]=\"!(hasDeletePermission$ | async)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n <vdr-collection-tree-node\r\n *ngIf=\"collection.expanded || expandAll\"\r\n [expandAll]=\"expandAll\"\r\n [collectionTree]=\"collection\"\r\n [activeCollectionId]=\"activeCollectionId\"\r\n ></vdr-collection-tree-node>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}.collection{background-color:var(--color-component-bg-100);font-size:.65rem;transition:transform .25s cubic-bezier(0,0,.2,1);margin-bottom:2px;border-left:2px solid transparent;transition:border-left-color .2s}.collection.private{background-color:var(--color-component-bg-200)}.collection .collection-detail{padding:6px 12px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--color-component-border-100)}.collection .collection-detail.active{background-color:var(--clr-global-selection-color)}.collection .collection-detail.depth-1{padding-left:36px}.collection .collection-detail.depth-2{padding-left:60px}.collection .collection-detail.depth-3{padding-left:84px}.collection .collection-detail.depth-4{padding-left:108px}.collection .collection-detail .folder-button-spacer{display:inline-block;width:28px}.tree-node{display:block;background:var(--color-component-bg-100);overflow:hidden}.tree-node.cdk-drop-list-dragging>.collection{border-left-color:var(--color-primary-300)}.drag-placeholder{min-height:120px;background-color:var(--color-component-bg-300);transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-list.cdk-drop-list-dragging .tree-node:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.move-to-item{display:flex;white-space:normal;align-items:baseline}.move-to-item .move-icon{flex:none;margin-right:3px}.move-to-item .path{line-height:18px}\n"], components: [{ type: i1.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition"] }, { type: CollectionTreeNodeComponent, selector: "vdr-collection-tree-node", inputs: ["collectionTree", "activeCollectionId", "expandAll"] }], directives: [{ type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: ["ngForTrackBy"] }, { type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.ClrIconCustomTag, selector: "clr-icon" }, { type: i3.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i4.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }], pipes: { "async": i5.AsyncPipe, "translate": i7.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
85
104
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CollectionTreeNodeComponent, decorators: [{
86
105
  type: Component,
87
- args: [{ selector: 'vdr-collection-tree-node', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n cdkDropList\r\n class=\"tree-node\"\r\n #dropList\r\n [cdkDropListData]=\"collectionTree\"\r\n [cdkDropListDisabled]=\"!(hasUpdatePermission$ | async)\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n>\r\n <div\r\n class=\"collection\"\r\n [class.private]=\"collection.isPrivate\"\r\n *ngFor=\"let collection of collectionTree.children; index as i; trackBy: trackByFn\"\r\n cdkDrag\r\n [cdkDragData]=\"collection\"\r\n >\r\n <div\r\n class=\"collection-detail\"\r\n [ngClass]=\"'depth-' + depth\"\r\n [class.active]=\"collection.id === activeCollectionId\"\r\n >\r\n <div class=\"name\">\r\n <button\r\n class=\"icon-button folder-button\"\r\n [disabled]=\"expandAll\"\r\n *ngIf=\"collection.children?.length; else folderSpacer\"\r\n (click)=\"collection.expanded = !collection.expanded\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!collection.expanded && !expandAll\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"collection.expanded || expandAll\"></clr-icon>\r\n </button>\r\n <ng-template #folderSpacer>\r\n <div class=\"folder-button-spacer\"></div>\r\n </ng-template>\r\n {{ collection.name }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-chip *ngIf=\"collection.isPrivate\">{{ 'catalog.private' | translate }}</vdr-chip>\r\n <a\r\n class=\"btn btn-link btn-sm\"\r\n [routerLink]=\"['./', { contents: collection.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <clr-icon shape=\"view-list\"></clr-icon>\r\n {{ 'catalog.view-contents' | translate }}\r\n </a>\r\n <a class=\"btn btn-link btn-sm\" [routerLink]=\"['/catalog/collections/', collection.id]\">\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </a>\r\n <div class=\"drag-handle\" cdkDragHandle *vdrIfPermissions=\"['UpdateCatalog', 'UpdateCollection']\">\r\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\r\n </div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger (click)=\"getMoveListItems(collection)\">\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <a\r\n class=\"dropdown-item\"\r\n [routerLink]=\"['./', 'create', { parentId: collection.id }]\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"i === 0 || !(hasUpdatePermission$ | async)\"\r\n (click)=\"moveUp(collection, i)\"\r\n >\r\n <clr-icon shape=\"caret up\"></clr-icon>\r\n {{ 'catalog.move-up' | translate }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"\r\n i === collectionTree.children.length - 1 || !(hasUpdatePermission$ | async)\r\n \"\r\n (click)=\"moveDown(collection, i)\"\r\n >\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n {{ 'catalog.move-down' | translate }}\r\n </button>\r\n <h4 class=\"dropdown-header\">{{ 'catalog.move-to' | translate }}</h4>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n *ngFor=\"let item of moveListItems\"\r\n (click)=\"move(collection, item.id)\"\r\n [disabled]=\"!(hasUpdatePermission$ | async)\"\r\n >\r\n <div class=\"move-to-item\">\r\n <div class=\"move-icon\">\r\n <clr-icon shape=\"child-arrow\"></clr-icon>\r\n </div>\r\n <div class=\"path\">\r\n {{ item.path }}\r\n </div>\r\n </div>\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"delete(collection.id)\"\r\n [disabled]=\"!(hasDeletePermission$ | async)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n <vdr-collection-tree-node\r\n *ngIf=\"collection.expanded || expandAll\"\r\n [expandAll]=\"expandAll\"\r\n [collectionTree]=\"collection\"\r\n [activeCollectionId]=\"activeCollectionId\"\r\n ></vdr-collection-tree-node>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}.collection{background-color:var(--color-component-bg-100);font-size:.65rem;transition:transform .25s cubic-bezier(0,0,.2,1);margin-bottom:2px;border-left:2px solid transparent;transition:border-left-color .2s}.collection.private{background-color:var(--color-component-bg-200)}.collection .collection-detail{padding:6px 12px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--color-component-border-100)}.collection .collection-detail.active{background-color:var(--clr-global-selection-color)}.collection .collection-detail.depth-1{padding-left:36px}.collection .collection-detail.depth-2{padding-left:60px}.collection .collection-detail.depth-3{padding-left:84px}.collection .collection-detail.depth-4{padding-left:108px}.collection .collection-detail .folder-button-spacer{display:inline-block;width:28px}.tree-node{display:block;background:var(--color-component-bg-100);overflow:hidden}.tree-node.cdk-drop-list-dragging>.collection{border-left-color:var(--color-primary-300)}.drag-placeholder{min-height:120px;background-color:var(--color-component-bg-300);transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-list.cdk-drop-list-dragging .tree-node:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.move-to-item{display:flex;white-space:normal;align-items:baseline}.move-to-item .move-icon{flex:none;margin-right:3px}.move-to-item .path{line-height:18px}\n"] }]
106
+ args: [{ selector: 'vdr-collection-tree-node', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n cdkDropList\r\n class=\"tree-node\"\r\n #dropList\r\n [cdkDropListData]=\"collectionTree\"\r\n [cdkDropListDisabled]=\"!(hasUpdatePermission$ | async)\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n>\r\n <div\r\n class=\"collection\"\r\n [class.private]=\"collection.isPrivate\"\r\n *ngFor=\"let collection of collectionTree.children; index as i; trackBy: trackByFn\"\r\n cdkDrag\r\n [cdkDragData]=\"collection\"\r\n >\r\n <div\r\n class=\"collection-detail\"\r\n [ngClass]=\"'depth-' + depth\"\r\n [class.active]=\"collection.id === activeCollectionId\"\r\n >\r\n <div class=\"name\">\r\n <button\r\n class=\"icon-button folder-button\"\r\n [disabled]=\"expandAll\"\r\n *ngIf=\"collection.children?.length; else folderSpacer\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!collection.expanded && !expandAll\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"collection.expanded || expandAll\"></clr-icon>\r\n </button>\r\n <ng-template #folderSpacer>\r\n <div class=\"folder-button-spacer\"></div>\r\n </ng-template>\r\n {{ collection.name }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-chip *ngIf=\"collection.isPrivate\">{{ 'catalog.private' | translate }}</vdr-chip>\r\n <a\r\n class=\"btn btn-link btn-sm\"\r\n [routerLink]=\"['./', { contents: collection.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <clr-icon shape=\"view-list\"></clr-icon>\r\n {{ 'catalog.view-contents' | translate }}\r\n </a>\r\n <a class=\"btn btn-link btn-sm\" [routerLink]=\"['/catalog/collections/', collection.id]\">\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </a>\r\n <div class=\"drag-handle\" cdkDragHandle *vdrIfPermissions=\"['UpdateCatalog', 'UpdateCollection']\">\r\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\r\n </div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger (click)=\"getMoveListItems(collection)\">\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <a\r\n class=\"dropdown-item\"\r\n [routerLink]=\"['./', 'create', { parentId: collection.id }]\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"i === 0 || !(hasUpdatePermission$ | async)\"\r\n (click)=\"moveUp(collection, i)\"\r\n >\r\n <clr-icon shape=\"caret up\"></clr-icon>\r\n {{ 'catalog.move-up' | translate }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"\r\n i === collectionTree.children.length - 1 || !(hasUpdatePermission$ | async)\r\n \"\r\n (click)=\"moveDown(collection, i)\"\r\n >\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n {{ 'catalog.move-down' | translate }}\r\n </button>\r\n <h4 class=\"dropdown-header\">{{ 'catalog.move-to' | translate }}</h4>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n *ngFor=\"let item of moveListItems\"\r\n (click)=\"move(collection, item.id)\"\r\n [disabled]=\"!(hasUpdatePermission$ | async)\"\r\n >\r\n <div class=\"move-to-item\">\r\n <div class=\"move-icon\">\r\n <clr-icon shape=\"child-arrow\"></clr-icon>\r\n </div>\r\n <div class=\"path\">\r\n {{ item.path }}\r\n </div>\r\n </div>\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"delete(collection.id)\"\r\n [disabled]=\"!(hasDeletePermission$ | async)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n <vdr-collection-tree-node\r\n *ngIf=\"collection.expanded || expandAll\"\r\n [expandAll]=\"expandAll\"\r\n [collectionTree]=\"collection\"\r\n [activeCollectionId]=\"activeCollectionId\"\r\n ></vdr-collection-tree-node>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}.collection{background-color:var(--color-component-bg-100);font-size:.65rem;transition:transform .25s cubic-bezier(0,0,.2,1);margin-bottom:2px;border-left:2px solid transparent;transition:border-left-color .2s}.collection.private{background-color:var(--color-component-bg-200)}.collection .collection-detail{padding:6px 12px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--color-component-border-100)}.collection .collection-detail.active{background-color:var(--clr-global-selection-color)}.collection .collection-detail.depth-1{padding-left:36px}.collection .collection-detail.depth-2{padding-left:60px}.collection .collection-detail.depth-3{padding-left:84px}.collection .collection-detail.depth-4{padding-left:108px}.collection .collection-detail .folder-button-spacer{display:inline-block;width:28px}.tree-node{display:block;background:var(--color-component-bg-100);overflow:hidden}.tree-node.cdk-drop-list-dragging>.collection{border-left-color:var(--color-primary-300)}.drag-placeholder{min-height:120px;background-color:var(--color-component-bg-300);transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-list.cdk-drop-list-dragging .tree-node:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.move-to-item{display:flex;white-space:normal;align-items:baseline}.move-to-item .move-icon{flex:none;margin-right:3px}.move-to-item .path{line-height:18px}\n"] }]
88
107
  }], ctorParameters: function () { return [{ type: CollectionTreeNodeComponent, decorators: [{
89
108
  type: SkipSelf
90
109
  }, {
91
110
  type: Optional
92
- }] }, { type: i1.DataService }, { type: i2.CollectionTreeService }]; }, propDecorators: { collectionTree: [{
111
+ }] }, { type: i1.DataService }, { type: i2.CollectionTreeService }, { type: i3.Router }, { type: i3.ActivatedRoute }]; }, propDecorators: { collectionTree: [{
93
112
  type: Input
94
113
  }], activeCollectionId: [{
95
114
  type: Input
96
115
  }], expandAll: [{
97
116
  type: Input
98
117
  }] } });
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi10cmVlLW5vZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL2NvbGxlY3Rpb24tdHJlZS9jb2xsZWN0aW9uLXRyZWUtbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cvc3JjL2NvbXBvbmVudHMvY29sbGVjdGlvbi10cmVlL2NvbGxlY3Rpb24tdHJlZS1ub2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUVSLFFBQVEsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFakUsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBWWxELE1BQU0sT0FBTywyQkFBMkI7SUFVcEMsWUFDb0MsTUFBbUMsRUFDM0QsV0FBd0IsRUFDeEIscUJBQTRDO1FBRnBCLFdBQU0sR0FBTixNQUFNLENBQTZCO1FBQzNELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFaeEQsVUFBSyxHQUFHLENBQUMsQ0FBQztRQUlELGNBQVMsR0FBRyxLQUFLLENBQUM7UUFHM0Isa0JBQWEsR0FBd0MsRUFBRSxDQUFDO1FBT3BELElBQUksTUFBTSxFQUFFO1lBQ1IsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENB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SyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxFQUFVO1FBQ2IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDOzt3SEE5RlEsMkJBQTJCLGtCQVdRLDJCQUEyQjs0R0FYOUQsMkJBQTJCLHFNQ3pCeEMsazZMQTRIQSxrL0REbkdhLDJCQUEyQjsyRkFBM0IsMkJBQTJCO2tCQU52QyxTQUFTOytCQUNJLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTTswREFhSCwyQkFBMkI7MEJBQWxFLFFBQVE7OzBCQUFJLFFBQVE7MEdBUmhCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENvbXBvbmVudCxcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3B0aW9uYWwsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgU2tpcFNlbGYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlLCBQZXJtaXNzaW9uIH0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IFJvb3ROb2RlLCBUcmVlTm9kZSB9IGZyb20gJy4vYXJyYXktdG8tdHJlZSc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25UcmVlU2VydmljZSB9IGZyb20gJy4vY29sbGVjdGlvbi10cmVlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uUGFydGlhbCB9IGZyb20gJy4vY29sbGVjdGlvbi10cmVlLnR5cGVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItY29sbGVjdGlvbi10cmVlLW5vZGUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbGxlY3Rpb24tdHJlZS1ub2RlLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NvbGxlY3Rpb24tdHJlZS1ub2RlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25UcmVlTm9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICAgIGRlcHRoID0gMDtcclxuICAgIHBhcmVudE5hbWU6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGNvbGxlY3Rpb25UcmVlOiBUcmVlTm9kZTxDb2xsZWN0aW9uUGFydGlhbD47XHJcbiAgICBASW5wdXQoKSBhY3RpdmVDb2xsZWN0aW9uSWQ6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGV4cGFuZEFsbCA9IGZhbHNlO1xyXG4gICAgaGFzVXBkYXRlUGVybWlzc2lvbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBoYXNEZWxldGVQZXJtaXNzaW9uJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIG1vdmVMaXN0SXRlbXM6IEFycmF5PHsgcGF0aDogc3RyaW5nOyBpZDogc3RyaW5nIH0+ID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQFNraXBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBwYXJlbnQ6IENvbGxlY3Rpb25UcmVlTm9kZUNvbXBvbmVudCxcclxuICAgICAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNvbGxlY3Rpb25UcmVlU2VydmljZTogQ29sbGVjdGlvblRyZWVTZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmRlcHRoID0gcGFyZW50LmRlcHRoICsgMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5wYXJlbnROYW1lID0gdGhpcy5jb2xsZWN0aW9uVHJlZS5uYW1lIHx8ICc8cm9vdD4nO1xyXG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25zJCA9IHRoaXMuZGF0YVNlcnZpY2UuY2xpZW50XHJcbiAgICAgICAgICAgIC51c2VyU3RhdHVzKClcclxuICAgICAgICAgICAgLm1hcFN0cmVhbShkYXRhID0+IGRhdGEudXNlclN0YXR1cy5wZXJtaXNzaW9ucylcclxuICAgICAgICAgICAgLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xyXG4gICAgICAgIHRoaXMuaGFzVXBkYXRlUGVybWlzc2lvbiQgPSBwZXJtaXNzaW9ucyQucGlwZShcclxuICAgICAgICAgICAgbWFwKFxyXG4gICAgICAgICAgICAgICAgcGVybXMgPT5cclxuICAgICAgICAgICAgICAgICAgICBwZXJtcy5pbmNsdWRlcyhQZXJtaXNzaW9uLlVwZGF0ZUNhdGFsb2cpIHx8IHBlcm1zLmluY2x1ZGVzKFBlcm1pc3Npb24uVXBkYXRlQ29sbGVjdGlvbiksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmhhc0RlbGV0ZVBlcm1pc3Npb24kID0gcGVybWlzc2lvbnMkLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcChcclxuICAgICAgICAgICAgICAgIHBlcm1zID0+XHJcbiAgICAgICAgICAgICAgICAgICAgcGVybXMuaW5jbHVkZXMoUGVybWlzc2lvbi5EZWxldGVDYXRhbG9nKSB8fCBwZXJtcy5pbmNsdWRlcyhQZXJtaXNzaW9uLkRlbGV0ZUNvbGxlY3Rpb24pLFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGNvbnN0IGV4cGFuZEFsbENoYW5nZSA9IGNoYW5nZXNbJ2V4cGFuZEFsbCddO1xyXG4gICAgICAgIGlmIChleHBhbmRBbGxDaGFuZ2UpIHtcclxuICAgICAgICAgICAgaWYgKGV4cGFuZEFsbENoYW5nZS5wcmV2aW91c1ZhbHVlID09PSB0cnVlICYmIGV4cGFuZEFsbENoYW5nZS5jdXJyZW50VmFsdWUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbGxlY3Rpb25UcmVlLmNoaWxkcmVuLmZvckVhY2goYyA9PiAoYy5leHBhbmRlZCA9IGZhbHNlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGl0ZW06IENvbGxlY3Rpb25QYXJ0aWFsKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW92ZUxpc3RJdGVtcyhjb2xsZWN0aW9uOiBDb2xsZWN0aW9uUGFydGlhbCkge1xyXG4gICAgICAgIHRoaXMubW92ZUxpc3RJdGVtcyA9IHRoaXMuY29sbGVjdGlvblRyZWVTZXJ2aWNlLmdldE1vdmVMaXN0SXRlbXMoY29sbGVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgbW92ZShjb2xsZWN0aW9uOiBDb2xsZWN0aW9uUGFydGlhbCwgcGFyZW50SWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvblRyZWVTZXJ2aWNlLm9uTW92ZSh7XHJcbiAgICAgICAgICAgIGluZGV4OiAwLFxyXG4gICAgICAgICAgICBwYXJlbnRJZCxcclxuICAgICAgICAgICAgY29sbGVjdGlvbklkOiBjb2xsZWN0aW9uLmlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG1vdmVVcChjb2xsZWN0aW9uOiBDb2xsZWN0aW9uUGFydGlhbCwgY3VycmVudEluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIWNvbGxlY3Rpb24ucGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uVHJlZVNlcnZpY2Uub25Nb3ZlKHtcclxuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCAtIDEsXHJcbiAgICAgICAgICAgIHBhcmVudElkOiBjb2xsZWN0aW9uLnBhcmVudC5pZCxcclxuICAgICAgICAgICAgY29sbGVjdGlvbklkOiBjb2xsZWN0aW9uLmlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG1vdmVEb3duKGNvbGxlY3Rpb246IENvbGxlY3Rpb25QYXJ0aWFsLCBjdXJyZW50SW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghY29sbGVjdGlvbi5wYXJlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbGxlY3Rpb25UcmVlU2VydmljZS5vbk1vdmUoe1xyXG4gICAgICAgICAgICBpbmRleDogY3VycmVudEluZGV4ICsgMSxcclxuICAgICAgICAgICAgcGFyZW50SWQ6IGNvbGxlY3Rpb24ucGFyZW50LmlkLFxyXG4gICAgICAgICAgICBjb2xsZWN0aW9uSWQ6IGNvbGxlY3Rpb24uaWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8Q29sbGVjdGlvblBhcnRpYWwgfCBSb290Tm9kZTxDb2xsZWN0aW9uUGFydGlhbD4+KSB7XHJcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuY29sbGVjdGlvblRyZWUuY2hpbGRyZW4sIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uVHJlZVNlcnZpY2Uub25Ecm9wKGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGUoaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvblRyZWVTZXJ2aWNlLm9uRGVsZXRlKGlkKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgICBjZGtEcm9wTGlzdFxyXG4gICAgY2xhc3M9XCJ0cmVlLW5vZGVcIlxyXG4gICAgI2Ryb3BMaXN0XHJcbiAgICBbY2RrRHJvcExpc3REYXRhXT1cImNvbGxlY3Rpb25UcmVlXCJcclxuICAgIFtjZGtEcm9wTGlzdERpc2FibGVkXT1cIiEoaGFzVXBkYXRlUGVybWlzc2lvbiQgfCBhc3luYylcIlxyXG4gICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIlxyXG4+XHJcbiAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJjb2xsZWN0aW9uXCJcclxuICAgICAgICBbY2xhc3MucHJpdmF0ZV09XCJjb2xsZWN0aW9uLmlzUHJpdmF0ZVwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvblRyZWUuY2hpbGRyZW47IGluZGV4IGFzIGk7IHRyYWNrQnk6IHRyYWNrQnlGblwiXHJcbiAgICAgICAgY2RrRHJhZ1xyXG4gICAgICAgIFtjZGtEcmFnRGF0YV09XCJjb2xsZWN0aW9uXCJcclxuICAgID5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY29sbGVjdGlvbi1kZXRhaWxcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCInZGVwdGgtJyArIGRlcHRoXCJcclxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjb2xsZWN0aW9uLmlkID09PSBhY3RpdmVDb2xsZWN0aW9uSWRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tYnV0dG9uIGZvbGRlci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJleHBhbmRBbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sbGVjdGlvbi5jaGlsZHJlbj8ubGVuZ3RoOyBlbHNlIGZvbGRlclNwYWNlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbGxlY3Rpb24uZXhwYW5kZWQgPSAhY29sbGVjdGlvbi5leHBhbmRlZFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZm9sZGVyXCIgKm5nSWY9XCIhY29sbGVjdGlvbi5leHBhbmRlZCAmJiAhZXhwYW5kQWxsXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJmb2xkZXItb3BlblwiICpuZ0lmPVwiY29sbGVjdGlvbi5leHBhbmRlZCB8fCBleHBhbmRBbGxcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZvbGRlclNwYWNlcj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9sZGVyLWJ1dHRvbi1zcGFjZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2xsZWN0aW9uLm5hbWUgfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8dmRyLWNoaXAgKm5nSWY9XCJjb2xsZWN0aW9uLmlzUHJpdmF0ZVwiPnt7ICdjYXRhbG9nLnByaXZhdGUnIHwgdHJhbnNsYXRlIH19PC92ZHItY2hpcD5cclxuICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy4vJywgeyBjb250ZW50czogY29sbGVjdGlvbi5pZCB9XVwiXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nPVwicHJlc2VydmVcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJ2aWV3LWxpc3RcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cudmlldy1jb250ZW50cycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc21cIiBbcm91dGVyTGlua109XCJbJy9jYXRhbG9nL2NvbGxlY3Rpb25zLycsIGNvbGxlY3Rpb24uaWRdXCI+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJlZGl0XCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgIHt7ICdjb21tb24uZWRpdCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJhZy1oYW5kbGVcIiBjZGtEcmFnSGFuZGxlICp2ZHJJZlBlcm1pc3Npb25zPVwiWydVcGRhdGVDYXRhbG9nJywgJ1VwZGF0ZUNvbGxlY3Rpb24nXVwiPlxyXG4gICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZHJhZy1oYW5kbGVcIiBzaXplPVwiMjRcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHZkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ1dHRvblwiIHZkckRyb3Bkb3duVHJpZ2dlciAoY2xpY2spPVwiZ2V0TW92ZUxpc3RJdGVtcyhjb2xsZWN0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImVsbGlwc2lzLXZlcnRpY2FsXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bi1tZW51IHZkclBvc2l0aW9uPVwiYm90dG9tLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycuLycsICdjcmVhdGUnLCB7IHBhcmVudElkOiBjb2xsZWN0aW9uLmlkIH1dXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJbJ0NyZWF0ZUNhdGFsb2cnLCAnQ3JlYXRlQ29sbGVjdGlvbiddXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBsdXNcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5jcmVhdGUtbmV3LWNvbGxlY3Rpb24nIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmRyRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpID09PSAwIHx8ICEoaGFzVXBkYXRlUGVybWlzc2lvbiQgfCBhc3luYylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW92ZVVwKGNvbGxlY3Rpb24sIGkpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImNhcmV0IHVwXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cubW92ZS11cCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9PT0gY29sbGVjdGlvblRyZWUuY2hpbGRyZW4ubGVuZ3RoIC0gMSB8fCAhKGhhc1VwZGF0ZVBlcm1pc3Npb24kIHwgYXN5bmMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlRG93bihjb2xsZWN0aW9uLCBpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJjYXJldCBkb3duXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cubW92ZS1kb3duJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cImRyb3Bkb3duLWhlYWRlclwiPnt7ICdjYXRhbG9nLm1vdmUtdG8nIHwgdHJhbnNsYXRlIH19PC9oND5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbW92ZUxpc3RJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlKGNvbGxlY3Rpb24sIGl0ZW0uaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEoaGFzVXBkYXRlUGVybWlzc2lvbiQgfCBhc3luYylcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vdmUtdG8taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vdmUtaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImNoaWxkLWFycm93XCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnBhdGggfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZShjb2xsZWN0aW9uLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhKGhhc0RlbGV0ZVBlcm1pc3Npb24kIHwgYXN5bmMpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInRyYXNoXCIgY2xhc3M9XCJpcy1kYW5nZXJcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmRlbGV0ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDx2ZHItY29sbGVjdGlvbi10cmVlLW5vZGVcclxuICAgICAgICAgICAgKm5nSWY9XCJjb2xsZWN0aW9uLmV4cGFuZGVkIHx8IGV4cGFuZEFsbFwiXHJcbiAgICAgICAgICAgIFtleHBhbmRBbGxdPVwiZXhwYW5kQWxsXCJcclxuICAgICAgICAgICAgW2NvbGxlY3Rpb25UcmVlXT1cImNvbGxlY3Rpb25cIlxyXG4gICAgICAgICAgICBbYWN0aXZlQ29sbGVjdGlvbklkXT1cImFjdGl2ZUNvbGxlY3Rpb25JZFwiXHJcbiAgICAgICAgPjwvdmRyLWNvbGxlY3Rpb24tdHJlZS1ub2RlPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi10cmVlLW5vZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL2NvbGxlY3Rpb24tdHJlZS9jb2xsZWN0aW9uLXRyZWUtbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cvc3JjL2NvbXBvbmVudHMvY29sbGVjdGlvbi10cmVlL2NvbGxlY3Rpb24tdHJlZS1ub2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUVSLFFBQVEsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQWUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFakUsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBWWxELE1BQU0sT0FBTywyQkFBMkI7SUFVcEMsWUFDb0MsTUFBbUMsRUFDM0QsV0FBd0IsRUFDeEIscUJBQTRDLEVBQzVDLE1BQWMsRUFDZCxLQUFxQjtRQUpHLFdBQU0sR0FBTixNQUFNLENBQTZCO1FBQzNELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBZGpDLFVBQUssR0FBRyxDQUFDLENBQUM7UUFJRCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRzNCLGtCQUFhLEdBQXdDLEVBQUUsQ0FBQztRQVNwRCxJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUss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USwyQkFBMkI7NEdBWDlELDJCQUEyQixxTUMxQnhDLGs1TEE0SEEsay9ERGxHYSwyQkFBMkI7MkZBQTNCLDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFDSSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU07MERBYUgsMkJBQTJCOzBCQUFsRSxRQUFROzswQkFBSSxRQUFROzRKQVJoQixjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9uSW5pdCxcclxuICAgIE9wdGlvbmFsLFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFNraXBTZWxmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UsIFBlcm1pc3Npb24gfSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgUm9vdE5vZGUsIFRyZWVOb2RlIH0gZnJvbSAnLi9hcnJheS10by10cmVlJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvblRyZWVTZXJ2aWNlIH0gZnJvbSAnLi9jb2xsZWN0aW9uLXRyZWUuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25QYXJ0aWFsIH0gZnJvbSAnLi9jb2xsZWN0aW9uLXRyZWUudHlwZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1jb2xsZWN0aW9uLXRyZWUtbm9kZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29sbGVjdGlvbi10cmVlLW5vZGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY29sbGVjdGlvbi10cmVlLW5vZGUuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblRyZWVOb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gICAgZGVwdGggPSAwO1xyXG4gICAgcGFyZW50TmFtZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgY29sbGVjdGlvblRyZWU6IFRyZWVOb2RlPENvbGxlY3Rpb25QYXJ0aWFsPjtcclxuICAgIEBJbnB1dCgpIGFjdGl2ZUNvbGxlY3Rpb25JZDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgZXhwYW5kQWxsID0gZmFsc2U7XHJcbiAgICBoYXNVcGRhdGVQZXJtaXNzaW9uJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIGhhc0RlbGV0ZVBlcm1pc3Npb24kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgbW92ZUxpc3RJdGVtczogQXJyYXk8eyBwYXRoOiBzdHJpbmc7IGlkOiBzdHJpbmcgfT4gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBAU2tpcFNlbGYoKSBAT3B0aW9uYWwoKSBwcml2YXRlIHBhcmVudDogQ29sbGVjdGlvblRyZWVOb2RlQ29tcG9uZW50LFxyXG4gICAgICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY29sbGVjdGlvblRyZWVTZXJ2aWNlOiBDb2xsZWN0aW9uVHJlZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICkge1xyXG4gICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5kZXB0aCA9IHBhcmVudC5kZXB0aCArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMucGFyZW50TmFtZSA9IHRoaXMuY29sbGVjdGlvblRyZWUubmFtZSB8fCAnPHJvb3Q+JztcclxuICAgICAgICBjb25zdCBwZXJtaXNzaW9ucyQgPSB0aGlzLmRhdGFTZXJ2aWNlLmNsaWVudFxyXG4gICAgICAgICAgICAudXNlclN0YXR1cygpXHJcbiAgICAgICAgICAgIC5tYXBTdHJlYW0oZGF0YSA9PiBkYXRhLnVzZXJTdGF0dXMucGVybWlzc2lvbnMpXHJcbiAgICAgICAgICAgIC5waXBlKHNoYXJlUmVwbGF5KDEpKTtcclxuICAgICAgICB0aGlzLmhhc1VwZGF0ZVBlcm1pc3Npb24kID0gcGVybWlzc2lvbnMkLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcChcclxuICAgICAgICAgICAgICAgIHBlcm1zID0+XHJcbiAgICAgICAgICAgICAgICAgICAgcGVybXMuaW5jbHVkZXMoUGVybWlzc2lvbi5VcGRhdGVDYXRhbG9nKSB8fCBwZXJtcy5pbmNsdWRlcyhQZXJtaXNzaW9uLlVwZGF0ZUNvbGxlY3Rpb24pLFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5oYXNEZWxldGVQZXJtaXNzaW9uJCA9IHBlcm1pc3Npb25zJC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoXHJcbiAgICAgICAgICAgICAgICBwZXJtcyA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHBlcm1zLmluY2x1ZGVzKFBlcm1pc3Npb24uRGVsZXRlQ2F0YWxvZykgfHwgcGVybXMuaW5jbHVkZXMoUGVybWlzc2lvbi5EZWxldGVDb2xsZWN0aW9uKSxcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBjb25zdCBleHBhbmRBbGxDaGFuZ2UgPSBjaGFuZ2VzWydleHBhbmRBbGwnXTtcclxuICAgICAgICBpZiAoZXhwYW5kQWxsQ2hhbmdlKSB7XHJcbiAgICAgICAgICAgIGlmIChleHBhbmRBbGxDaGFuZ2UucHJldmlvdXNWYWx1ZSA9PT0gdHJ1ZSAmJiBleHBhbmRBbGxDaGFuZ2UuY3VycmVudFZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uVHJlZS5jaGlsZHJlbi5mb3JFYWNoKGMgPT4gKGMuZXhwYW5kZWQgPSBmYWxzZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBDb2xsZWN0aW9uUGFydGlhbCkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUV4cGFuZGVkKGNvbGxlY3Rpb246IFRyZWVOb2RlPENvbGxlY3Rpb25QYXJ0aWFsPikge1xyXG4gICAgICAgIGNvbGxlY3Rpb24uZXhwYW5kZWQgPSAhY29sbGVjdGlvbi5leHBhbmRlZDtcclxuICAgICAgICBsZXQgZXhwYW5kZWRJZHMgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KCdleHBhbmRlZCcpPy5zcGxpdCgnLCcpID8/IFtdO1xyXG4gICAgICAgIGlmIChjb2xsZWN0aW9uLmV4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIGV4cGFuZGVkSWRzLnB1c2goY29sbGVjdGlvbi5pZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXhwYW5kZWRJZHMgPSBleHBhbmRlZElkcy5maWx0ZXIoaWQgPT4gaWQgIT09IGNvbGxlY3Rpb24uaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4vJ10sIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBleHBhbmRlZElkcy5maWx0ZXIoaWQgPT4gISFpZCkuam9pbignLCcpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxyXG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1vdmVMaXN0SXRlbXMoY29sbGVjdGlvbjogQ29sbGVjdGlvblBhcnRpYWwpIHtcclxuICAgICAgICB0aGlzLm1vdmVMaXN0SXRlbXMgPSB0aGlzLmNvbGxlY3Rpb25UcmVlU2VydmljZS5nZXRNb3ZlTGlzdEl0ZW1zKGNvbGxlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIG1vdmUoY29sbGVjdGlvbjogQ29sbGVjdGlvblBhcnRpYWwsIHBhcmVudElkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmNvbGxlY3Rpb25UcmVlU2VydmljZS5vbk1vdmUoe1xyXG4gICAgICAgICAgICBpbmRleDogMCxcclxuICAgICAgICAgICAgcGFyZW50SWQsXHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb25JZDogY29sbGVjdGlvbi5pZCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBtb3ZlVXAoY29sbGVjdGlvbjogQ29sbGVjdGlvblBhcnRpYWwsIGN1cnJlbnRJbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCFjb2xsZWN0aW9uLnBhcmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvblRyZWVTZXJ2aWNlLm9uTW92ZSh7XHJcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggLSAxLFxyXG4gICAgICAgICAgICBwYXJlbnRJZDogY29sbGVjdGlvbi5wYXJlbnQuaWQsXHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb25JZDogY29sbGVjdGlvbi5pZCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBtb3ZlRG93bihjb2xsZWN0aW9uOiBDb2xsZWN0aW9uUGFydGlhbCwgY3VycmVudEluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIWNvbGxlY3Rpb24ucGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uVHJlZVNlcnZpY2Uub25Nb3ZlKHtcclxuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXHJcbiAgICAgICAgICAgIHBhcmVudElkOiBjb2xsZWN0aW9uLnBhcmVudC5pZCxcclxuICAgICAgICAgICAgY29sbGVjdGlvbklkOiBjb2xsZWN0aW9uLmlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPENvbGxlY3Rpb25QYXJ0aWFsIHwgUm9vdE5vZGU8Q29sbGVjdGlvblBhcnRpYWw+Pikge1xyXG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmNvbGxlY3Rpb25UcmVlLmNoaWxkcmVuLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvblRyZWVTZXJ2aWNlLm9uRHJvcChldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmNvbGxlY3Rpb25UcmVlU2VydmljZS5vbkRlbGV0ZShpZCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICAgY2RrRHJvcExpc3RcclxuICAgIGNsYXNzPVwidHJlZS1ub2RlXCJcclxuICAgICNkcm9wTGlzdFxyXG4gICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJjb2xsZWN0aW9uVHJlZVwiXHJcbiAgICBbY2RrRHJvcExpc3REaXNhYmxlZF09XCIhKGhhc1VwZGF0ZVBlcm1pc3Npb24kIHwgYXN5bmMpXCJcclxuICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCJcclxuPlxyXG4gICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiY29sbGVjdGlvblwiXHJcbiAgICAgICAgW2NsYXNzLnByaXZhdGVdPVwiY29sbGVjdGlvbi5pc1ByaXZhdGVcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25UcmVlLmNoaWxkcmVuOyBpbmRleCBhcyBpOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxyXG4gICAgICAgIGNka0RyYWdcclxuICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiY29sbGVjdGlvblwiXHJcbiAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImNvbGxlY3Rpb24tZGV0YWlsXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiJ2RlcHRoLScgKyBkZXB0aFwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY29sbGVjdGlvbi5pZCA9PT0gYWN0aXZlQ29sbGVjdGlvbklkXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLWJ1dHRvbiBmb2xkZXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZXhwYW5kQWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbGxlY3Rpb24uY2hpbGRyZW4/Lmxlbmd0aDsgZWxzZSBmb2xkZXJTcGFjZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFeHBhbmRlZChjb2xsZWN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZm9sZGVyXCIgKm5nSWY9XCIhY29sbGVjdGlvbi5leHBhbmRlZCAmJiAhZXhwYW5kQWxsXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJmb2xkZXItb3BlblwiICpuZ0lmPVwiY29sbGVjdGlvbi5leHBhbmRlZCB8fCBleHBhbmRBbGxcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZvbGRlclNwYWNlcj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9sZGVyLWJ1dHRvbi1zcGFjZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2xsZWN0aW9uLm5hbWUgfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8dmRyLWNoaXAgKm5nSWY9XCJjb2xsZWN0aW9uLmlzUHJpdmF0ZVwiPnt7ICdjYXRhbG9nLnByaXZhdGUnIHwgdHJhbnNsYXRlIH19PC92ZHItY2hpcD5cclxuICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy4vJywgeyBjb250ZW50czogY29sbGVjdGlvbi5pZCB9XVwiXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nPVwicHJlc2VydmVcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJ2aWV3LWxpc3RcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cudmlldy1jb250ZW50cycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc21cIiBbcm91dGVyTGlua109XCJbJy9jYXRhbG9nL2NvbGxlY3Rpb25zLycsIGNvbGxlY3Rpb24uaWRdXCI+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJlZGl0XCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgIHt7ICdjb21tb24uZWRpdCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJhZy1oYW5kbGVcIiBjZGtEcmFnSGFuZGxlICp2ZHJJZlBlcm1pc3Npb25zPVwiWydVcGRhdGVDYXRhbG9nJywgJ1VwZGF0ZUNvbGxlY3Rpb24nXVwiPlxyXG4gICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZHJhZy1oYW5kbGVcIiBzaXplPVwiMjRcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHZkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ1dHRvblwiIHZkckRyb3Bkb3duVHJpZ2dlciAoY2xpY2spPVwiZ2V0TW92ZUxpc3RJdGVtcyhjb2xsZWN0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImVsbGlwc2lzLXZlcnRpY2FsXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bi1tZW51IHZkclBvc2l0aW9uPVwiYm90dG9tLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycuLycsICdjcmVhdGUnLCB7IHBhcmVudElkOiBjb2xsZWN0aW9uLmlkIH1dXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJbJ0NyZWF0ZUNhdGFsb2cnLCAnQ3JlYXRlQ29sbGVjdGlvbiddXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBsdXNcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5jcmVhdGUtbmV3LWNvbGxlY3Rpb24nIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmRyRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpID09PSAwIHx8ICEoaGFzVXBkYXRlUGVybWlzc2lvbiQgfCBhc3luYylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW92ZVVwKGNvbGxlY3Rpb24sIGkpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImNhcmV0IHVwXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cubW92ZS11cCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9PT0gY29sbGVjdGlvblRyZWUuY2hpbGRyZW4ubGVuZ3RoIC0gMSB8fCAhKGhhc1VwZGF0ZVBlcm1pc3Npb24kIHwgYXN5bmMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlRG93bihjb2xsZWN0aW9uLCBpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJjYXJldCBkb3duXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cubW92ZS1kb3duJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cImRyb3Bkb3duLWhlYWRlclwiPnt7ICdjYXRhbG9nLm1vdmUtdG8nIHwgdHJhbnNsYXRlIH19PC9oND5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbW92ZUxpc3RJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlKGNvbGxlY3Rpb24sIGl0ZW0uaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEoaGFzVXBkYXRlUGVybWlzc2lvbiQgfCBhc3luYylcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vdmUtdG8taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vdmUtaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImNoaWxkLWFycm93XCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnBhdGggfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZShjb2xsZWN0aW9uLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhKGhhc0RlbGV0ZVBlcm1pc3Npb24kIHwgYXN5bmMpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInRyYXNoXCIgY2xhc3M9XCJpcy1kYW5nZXJcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmRlbGV0ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDx2ZHItY29sbGVjdGlvbi10cmVlLW5vZGVcclxuICAgICAgICAgICAgKm5nSWY9XCJjb2xsZWN0aW9uLmV4cGFuZGVkIHx8IGV4cGFuZEFsbFwiXHJcbiAgICAgICAgICAgIFtleHBhbmRBbGxdPVwiZXhwYW5kQWxsXCJcclxuICAgICAgICAgICAgW2NvbGxlY3Rpb25UcmVlXT1cImNvbGxlY3Rpb25cIlxyXG4gICAgICAgICAgICBbYWN0aXZlQ29sbGVjdGlvbklkXT1cImFjdGl2ZUNvbGxlY3Rpb25JZFwiXHJcbiAgICAgICAgPjwvdmRyLWNvbGxlY3Rpb24tdHJlZS1ub2RlPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -10,12 +10,13 @@ export class CollectionTreeComponent {
10
10
  constructor(collectionTreeService) {
11
11
  this.collectionTreeService = collectionTreeService;
12
12
  this.expandAll = false;
13
+ this.expandedIds = [];
13
14
  this.rearrange = new EventEmitter();
14
15
  this.deleteCollection = new EventEmitter();
15
16
  }
16
17
  ngOnChanges(changes) {
17
18
  if ('collections' in changes && this.collections) {
18
- this.collectionTree = arrayToTree(this.collections, this.collectionTree);
19
+ this.collectionTree = arrayToTree(this.collections, this.collectionTree, this.expandedIds);
19
20
  this.collectionTreeService.setCollectionTree(this.collectionTree);
20
21
  this.collectionTreeService.resetMoveList();
21
22
  }
@@ -26,7 +27,7 @@ export class CollectionTreeComponent {
26
27
  }
27
28
  }
28
29
  CollectionTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CollectionTreeComponent, deps: [{ token: i1.CollectionTreeService }], target: i0.ɵɵFactoryTarget.Component });
29
- CollectionTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CollectionTreeComponent, selector: "vdr-collection-tree", inputs: { collections: "collections", activeCollectionId: "activeCollectionId", expandAll: "expandAll" }, outputs: { rearrange: "rearrange", deleteCollection: "deleteCollection" }, providers: [CollectionTreeService], usesOnChanges: true, ngImport: i0, template: "<vdr-collection-tree-node\r\n *ngIf=\"collectionTree\"\r\n cdkDropListGroup\r\n [expandAll]=\"expandAll\"\r\n [collectionTree]=\"collectionTree\"\r\n [activeCollectionId]=\"activeCollectionId\"\r\n></vdr-collection-tree-node>\r\n", styles: [""], components: [{ type: i2.CollectionTreeNodeComponent, selector: "vdr-collection-tree-node", inputs: ["collectionTree", "activeCollectionId", "expandAll"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
30
+ CollectionTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CollectionTreeComponent, selector: "vdr-collection-tree", inputs: { collections: "collections", activeCollectionId: "activeCollectionId", expandAll: "expandAll", expandedIds: "expandedIds" }, outputs: { rearrange: "rearrange", deleteCollection: "deleteCollection" }, providers: [CollectionTreeService], usesOnChanges: true, ngImport: i0, template: "<vdr-collection-tree-node\r\n *ngIf=\"collectionTree\"\r\n cdkDropListGroup\r\n [expandAll]=\"expandAll\"\r\n [collectionTree]=\"collectionTree\"\r\n [activeCollectionId]=\"activeCollectionId\"\r\n></vdr-collection-tree-node>\r\n", styles: [""], components: [{ type: i2.CollectionTreeNodeComponent, selector: "vdr-collection-tree-node", inputs: ["collectionTree", "activeCollectionId", "expandAll"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
30
31
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CollectionTreeComponent, decorators: [{
31
32
  type: Component,
32
33
  args: [{ selector: 'vdr-collection-tree', changeDetection: ChangeDetectionStrategy.OnPush, providers: [CollectionTreeService], template: "<vdr-collection-tree-node\r\n *ngIf=\"collectionTree\"\r\n cdkDropListGroup\r\n [expandAll]=\"expandAll\"\r\n [collectionTree]=\"collectionTree\"\r\n [activeCollectionId]=\"activeCollectionId\"\r\n></vdr-collection-tree-node>\r\n", styles: [""] }]
@@ -36,9 +37,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
36
37
  type: Input
37
38
  }], expandAll: [{
38
39
  type: Input
40
+ }], expandedIds: [{
41
+ type: Input
39
42
  }], rearrange: [{
40
43
  type: Output
41
44
  }], deleteCollection: [{
42
45
  type: Output
43
46
  }] } });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLXRyZWUvY29sbGVjdGlvbi10cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLXRyZWUvY29sbGVjdGlvbi10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUVULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxXQUFXLEVBQVksTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBVWxFLE1BQU0sT0FBTyx1QkFBdUI7SUFRaEMsWUFBb0IscUJBQTRDO1FBQTVDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFMdkQsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNqQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFDL0MscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUdXLENBQUM7SUFFcEUsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksYUFBYSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzlDLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzlDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQzs7b0hBckJRLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLG1PQUZyQixDQUFDLHFCQUFxQixDQUFDLCtDQ3BCdEMsc1BBT0E7MkZEZWEsdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNJLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMscUJBQXFCLENBQUM7NEdBR3pCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0ksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBhcnJheVRvVHJlZSwgUm9vdE5vZGUgfSBmcm9tICcuL2FycmF5LXRvLXRyZWUnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uVHJlZVNlcnZpY2UgfSBmcm9tICcuL2NvbGxlY3Rpb24tdHJlZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvblBhcnRpYWwsIFJlYXJyYW5nZUV2ZW50IH0gZnJvbSAnLi9jb2xsZWN0aW9uLXRyZWUudHlwZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1jb2xsZWN0aW9uLXRyZWUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICdjb2xsZWN0aW9uLXRyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY29sbGVjdGlvbi10cmVlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHByb3ZpZGVyczogW0NvbGxlY3Rpb25UcmVlU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICAgIEBJbnB1dCgpIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uUGFydGlhbFtdO1xyXG4gICAgQElucHV0KCkgYWN0aXZlQ29sbGVjdGlvbklkOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBleHBhbmRBbGwgPSBmYWxzZTtcclxuICAgIEBPdXRwdXQoKSByZWFycmFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFJlYXJyYW5nZUV2ZW50PigpO1xyXG4gICAgQE91dHB1dCgpIGRlbGV0ZUNvbGxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICAgIGNvbGxlY3Rpb25UcmVlOiBSb290Tm9kZTxDb2xsZWN0aW9uUGFydGlhbD47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb2xsZWN0aW9uVHJlZVNlcnZpY2U6IENvbGxlY3Rpb25UcmVlU2VydmljZSkge31cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKCdjb2xsZWN0aW9ucycgaW4gY2hhbmdlcyAmJiB0aGlzLmNvbGxlY3Rpb25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvblRyZWUgPSBhcnJheVRvVHJlZSh0aGlzLmNvbGxlY3Rpb25zLCB0aGlzLmNvbGxlY3Rpb25UcmVlKTtcclxuICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uVHJlZVNlcnZpY2Uuc2V0Q29sbGVjdGlvblRyZWUodGhpcy5jb2xsZWN0aW9uVHJlZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvblRyZWVTZXJ2aWNlLnJlc2V0TW92ZUxpc3QoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uVHJlZVNlcnZpY2UucmVhcnJhbmdlJC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5yZWFycmFuZ2UuZW1pdChldmVudCkpO1xyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvblRyZWVTZXJ2aWNlLmRlbGV0ZSQuc3Vic2NyaWJlKGlkID0+IHRoaXMuZGVsZXRlQ29sbGVjdGlvbi5lbWl0KGlkKSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPHZkci1jb2xsZWN0aW9uLXRyZWUtbm9kZVxyXG4gICAgKm5nSWY9XCJjb2xsZWN0aW9uVHJlZVwiXHJcbiAgICBjZGtEcm9wTGlzdEdyb3VwXHJcbiAgICBbZXhwYW5kQWxsXT1cImV4cGFuZEFsbFwiXHJcbiAgICBbY29sbGVjdGlvblRyZWVdPVwiY29sbGVjdGlvblRyZWVcIlxyXG4gICAgW2FjdGl2ZUNvbGxlY3Rpb25JZF09XCJhY3RpdmVDb2xsZWN0aW9uSWRcIlxyXG4+PC92ZHItY29sbGVjdGlvbi10cmVlLW5vZGU+XHJcbiJdfQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLXRyZWUvY29sbGVjdGlvbi10cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLXRyZWUvY29sbGVjdGlvbi10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUVULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxXQUFXLEVBQVksTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBVWxFLE1BQU0sT0FBTyx1QkFBdUI7SUFTaEMsWUFBb0IscUJBQTRDO1FBQTVDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFOdkQsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUMxQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFDL0MscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUdXLENBQUM7SUFFcEUsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksYUFBYSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzlDLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDOUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDOztvSEF0QlEsdUJBQXVCO3dHQUF2Qix1QkFBdUIsK1BBRnJCLENBQUMscUJBQXFCLENBQUMsK0NDcEJ0QyxzUEFPQTsyRkRlYSx1QkFBdUI7a0JBUG5DLFNBQVM7K0JBQ0kscUJBQXFCLG1CQUdkLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxxQkFBcUIsQ0FBQzs0R0FHekIsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgYXJyYXlUb1RyZWUsIFJvb3ROb2RlIH0gZnJvbSAnLi9hcnJheS10by10cmVlJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvblRyZWVTZXJ2aWNlIH0gZnJvbSAnLi9jb2xsZWN0aW9uLXRyZWUuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25QYXJ0aWFsLCBSZWFycmFuZ2VFdmVudCB9IGZyb20gJy4vY29sbGVjdGlvbi10cmVlLnR5cGVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItY29sbGVjdGlvbi10cmVlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnY29sbGVjdGlvbi10cmVlLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NvbGxlY3Rpb24tdHJlZS5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBwcm92aWRlcnM6IFtDb2xsZWN0aW9uVHJlZVNlcnZpY2VdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgICBASW5wdXQoKSBjb2xsZWN0aW9uczogQ29sbGVjdGlvblBhcnRpYWxbXTtcclxuICAgIEBJbnB1dCgpIGFjdGl2ZUNvbGxlY3Rpb25JZDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgZXhwYW5kQWxsID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBleHBhbmRlZElkczogc3RyaW5nW10gPSBbXTtcclxuICAgIEBPdXRwdXQoKSByZWFycmFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFJlYXJyYW5nZUV2ZW50PigpO1xyXG4gICAgQE91dHB1dCgpIGRlbGV0ZUNvbGxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICAgIGNvbGxlY3Rpb25UcmVlOiBSb290Tm9kZTxDb2xsZWN0aW9uUGFydGlhbD47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb2xsZWN0aW9uVHJlZVNlcnZpY2U6IENvbGxlY3Rpb25UcmVlU2VydmljZSkge31cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKCdjb2xsZWN0aW9ucycgaW4gY2hhbmdlcyAmJiB0aGlzLmNvbGxlY3Rpb25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvblRyZWUgPSBhcnJheVRvVHJlZSh0aGlzLmNvbGxlY3Rpb25zLCB0aGlzLmNvbGxlY3Rpb25UcmVlLCB0aGlzLmV4cGFuZGVkSWRzKTtcclxuICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uVHJlZVNlcnZpY2Uuc2V0Q29sbGVjdGlvblRyZWUodGhpcy5jb2xsZWN0aW9uVHJlZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvblRyZWVTZXJ2aWNlLnJlc2V0TW92ZUxpc3QoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uVHJlZVNlcnZpY2UucmVhcnJhbmdlJC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5yZWFycmFuZ2UuZW1pdChldmVudCkpO1xyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvblRyZWVTZXJ2aWNlLmRlbGV0ZSQuc3Vic2NyaWJlKGlkID0+IHRoaXMuZGVsZXRlQ29sbGVjdGlvbi5lbWl0KGlkKSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPHZkci1jb2xsZWN0aW9uLXRyZWUtbm9kZVxyXG4gICAgKm5nSWY9XCJjb2xsZWN0aW9uVHJlZVwiXHJcbiAgICBjZGtEcm9wTGlzdEdyb3VwXHJcbiAgICBbZXhwYW5kQWxsXT1cImV4cGFuZEFsbFwiXHJcbiAgICBbY29sbGVjdGlvblRyZWVdPVwiY29sbGVjdGlvblRyZWVcIlxyXG4gICAgW2FjdGl2ZUNvbGxlY3Rpb25JZF09XCJhY3RpdmVDb2xsZWN0aW9uSWRcIlxyXG4+PC92ZHItY29sbGVjdGlvbi10cmVlLW5vZGU+XHJcbiJdfQ==