@smartbit4all/ng-client 3.3.38 → 3.3.39

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 (21) hide show
  1. package/esm2020/lib/smart-client/smart-component-api-client.mjs +4 -1
  2. package/esm2020/lib/smart-component-layout/api/model/componentType.mjs +1 -1
  3. package/esm2020/lib/smart-component-layout/api/model/componentWidgetType.mjs +2 -1
  4. package/esm2020/lib/smart-component-layout/api/model/layoutDirection.mjs +1 -1
  5. package/esm2020/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +1 -1
  6. package/esm2020/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +1 -1
  7. package/esm2020/lib/smart-component-layout/smart-component-layout-utility.mjs +13 -1
  8. package/esm2020/lib/smart-component-layout/smart-component-layout.component.mjs +27 -6
  9. package/esm2020/lib/smart-component-layout/smart-component-layout.module.mjs +6 -2
  10. package/fesm2015/smartbit4all-ng-client.mjs +48 -8
  11. package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
  12. package/fesm2020/smartbit4all-ng-client.mjs +44 -5
  13. package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
  14. package/lib/smart-component-layout/api/model/componentWidgetType.d.ts +2 -1
  15. package/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.d.ts +1 -2
  16. package/lib/smart-component-layout/smart-component-layout-utility.d.ts +2 -0
  17. package/lib/smart-component-layout/smart-component-layout.component.d.ts +6 -0
  18. package/lib/smart-component-layout/smart-component-layout.module.d.ts +2 -1
  19. package/package.json +1 -1
  20. package/smartbit4all-ng-client-3.3.39.tgz +0 -0
  21. package/smartbit4all-ng-client-3.3.38.tgz +0 -0
@@ -9,7 +9,8 @@ import * as i2 from "../smart-expandable-section/expandable-section.component";
9
9
  import * as i3 from "../smart-form/smartform.component";
10
10
  import * as i4 from "../smart-grid/smart-grid.component";
11
11
  import * as i5 from "../smart-tree/smarttree.component";
12
- import * as i6 from "@angular/common";
12
+ import * as i6 from "../view-context/smart-ui-action/ui-action-toolbar.component";
13
+ import * as i7 from "@angular/common";
13
14
  export class SmartComponentLayoutComponent {
14
15
  constructor(layoutService) {
15
16
  this.layoutService = layoutService;
@@ -40,6 +41,14 @@ export class SmartComponentLayoutComponent {
40
41
  this.bindFilter();
41
42
  }
42
43
  });
44
+ if (this.toolbarList?.first) {
45
+ this.setToolbarComponent(this.toolbarList?.first);
46
+ }
47
+ this.toolbarList.changes
48
+ .pipe(takeUntil(this._destroy$))
49
+ .subscribe((list) => {
50
+ this.setToolbarComponent(list.first);
51
+ });
43
52
  if (this.smartComponentLayout) {
44
53
  this.setUp();
45
54
  }
@@ -74,6 +83,9 @@ export class SmartComponentLayoutComponent {
74
83
  else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.TREE) {
75
84
  this.constructTree();
76
85
  }
86
+ else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.TOOLBAR) {
87
+ this.constructToolbar();
88
+ }
77
89
  }
78
90
  }
79
91
  type() {
@@ -126,7 +138,7 @@ export class SmartComponentLayoutComponent {
126
138
  }
127
139
  constructGrid() {
128
140
  this.smartGrid = {
129
- gridIdentifier: this.smartComponentLayout?.widget?.gridIdentifier,
141
+ gridIdentifier: this.smartComponentLayout?.widget?.identifier,
130
142
  gridModel: {
131
143
  page: {},
132
144
  },
@@ -151,6 +163,9 @@ export class SmartComponentLayoutComponent {
151
163
  }, false, this.smartGridComponent);
152
164
  }
153
165
  }
166
+ setToolbarComponent(comp) {
167
+ this.toolbar = comp;
168
+ }
154
169
  constructFilter() {
155
170
  this.smartFilter = this.smartComponentLayout.parentComponent.addFilter(`filter_${this.makeid(5)}`, this.smartComponentLayout?.widget?.filterExpressionFieldList, this.smartComponentLayout?.widget?.filterType, this.smartFilterComponent);
156
171
  }
@@ -158,15 +173,18 @@ export class SmartComponentLayoutComponent {
158
173
  // TODO
159
174
  }
160
175
  constructTree() {
161
- this.parent.setUpDefaultTree(this.smartComponentLayout?.widget?.treeIdentifier);
176
+ this.parent.setUpDefaultTree(this.smartComponentLayout?.widget?.identifier);
162
177
  this.treeService?.initialize();
163
178
  }
179
+ constructToolbar() {
180
+ this.toolbarId = this.smartComponentLayout?.widget?.identifier;
181
+ }
164
182
  }
165
183
  SmartComponentLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartComponentLayoutComponent, deps: [{ token: i1.SmartformLayoutDefinitionService }], target: i0.ɵɵFactoryTarget.Component });
166
- SmartComponentLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartComponentLayoutComponent, selector: "smart-component-layout", inputs: { smartComponentLayout: "smartComponentLayout" }, viewQueries: [{ propertyName: "smartFormList", predicate: ["form"], descendants: true }, { propertyName: "smartGridList", predicate: ["grid"], descendants: true }, { propertyName: "smartFilterList", predicate: ["filter"], descendants: true }, { propertyName: "components", predicate: SmartComponentLayoutComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"smartComponentLayout?.expandable; then expandable; else normal\"> </div>\r\n\r\n<ng-template #expandable>\r\n <smart-expandable-section\r\n *ngIf=\"expandableSection\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n</ng-template>\r\n\r\n<ng-template #normal>\r\n <div\r\n *ngIf=\"smartComponentLayout?.type === type().CONTAINER\"\r\n [ngClass]=\"smartComponentLayout?.direction ?? 'vertical'\"\r\n >\r\n <smart-component-layout\r\n *ngFor=\"let layout of smartComponentLayout?.components\"\r\n [smartComponentLayout]=\"layout\"\r\n ></smart-component-layout>\r\n </div>\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <smart-grid #grid [smartGrid]=\"smartGrid\" [uuid]=\"uuid!\"></smart-grid>\r\n <!-- <smart-filter #filter [filter]=\"smartFilter\"></smart-filter> -->\r\n <smart-tree *ngIf=\"treeService\" [treeService]=\"treeService!\"></smart-tree>\r\n</ng-template>\r\n", styles: [".horizontal{display:flex;flex-direction:row}.vertical{display:flex;flex-direction:column}\n"], components: [{ type: i2.ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { type: SmartComponentLayoutComponent, selector: "smart-component-layout", inputs: ["smartComponentLayout"] }, { type: i3.SmartformComponent, selector: "smartform", inputs: ["smartForm"] }, { type: i4.SmartGridComponent, selector: "smart-grid", inputs: ["smartGrid", "uuid", "dev"] }, { type: i5.SmartTreeComponent, selector: "smart-tree", inputs: ["treeStyle", "treeService"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
184
+ SmartComponentLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartComponentLayoutComponent, selector: "smart-component-layout", inputs: { smartComponentLayout: "smartComponentLayout" }, viewQueries: [{ propertyName: "smartFormList", predicate: ["form"], descendants: true }, { propertyName: "smartGridList", predicate: ["grid"], descendants: true }, { propertyName: "smartFilterList", predicate: ["filter"], descendants: true }, { propertyName: "toolbarList", predicate: ["toolbar"], descendants: true }, { propertyName: "components", predicate: SmartComponentLayoutComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"smartComponentLayout?.expandable; then expandable; else normal\"> </div>\r\n\r\n<ng-template #expandable>\r\n <smart-expandable-section\r\n *ngIf=\"expandableSection\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n</ng-template>\r\n\r\n<ng-template #normal>\r\n <div\r\n *ngIf=\"smartComponentLayout?.type === type().CONTAINER\"\r\n [ngClass]=\"smartComponentLayout?.direction ?? 'vertical'\"\r\n >\r\n <smart-component-layout\r\n *ngFor=\"let layout of smartComponentLayout?.components\"\r\n [smartComponentLayout]=\"layout\"\r\n ></smart-component-layout>\r\n </div>\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <smart-grid #grid [smartGrid]=\"smartGrid\" [uuid]=\"uuid!\"></smart-grid>\r\n <!-- <smart-filter #filter [filter]=\"smartFilter\"></smart-filter> -->\r\n <smart-tree *ngIf=\"treeService\" [treeService]=\"treeService!\"></smart-tree>\r\n <smart-ui-action-toolbar *ngIf=\"toolbarId\" #toolbar [id]=\"toolbarId\"></smart-ui-action-toolbar>\r\n</ng-template>\r\n", styles: [".horizontal{display:flex;flex-direction:row}.vertical{display:flex;flex-direction:column}\n"], components: [{ type: i2.ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { type: SmartComponentLayoutComponent, selector: "smart-component-layout", inputs: ["smartComponentLayout"] }, { type: i3.SmartformComponent, selector: "smartform", inputs: ["smartForm"] }, { type: i4.SmartGridComponent, selector: "smart-grid", inputs: ["smartGrid", "uuid", "dev"] }, { type: i5.SmartTreeComponent, selector: "smart-tree", inputs: ["treeStyle", "treeService"] }, { type: i6.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
167
185
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartComponentLayoutComponent, decorators: [{
168
186
  type: Component,
169
- args: [{ selector: 'smart-component-layout', template: "<div *ngIf=\"smartComponentLayout?.expandable; then expandable; else normal\"> </div>\r\n\r\n<ng-template #expandable>\r\n <smart-expandable-section\r\n *ngIf=\"expandableSection\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n</ng-template>\r\n\r\n<ng-template #normal>\r\n <div\r\n *ngIf=\"smartComponentLayout?.type === type().CONTAINER\"\r\n [ngClass]=\"smartComponentLayout?.direction ?? 'vertical'\"\r\n >\r\n <smart-component-layout\r\n *ngFor=\"let layout of smartComponentLayout?.components\"\r\n [smartComponentLayout]=\"layout\"\r\n ></smart-component-layout>\r\n </div>\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <smart-grid #grid [smartGrid]=\"smartGrid\" [uuid]=\"uuid!\"></smart-grid>\r\n <!-- <smart-filter #filter [filter]=\"smartFilter\"></smart-filter> -->\r\n <smart-tree *ngIf=\"treeService\" [treeService]=\"treeService!\"></smart-tree>\r\n</ng-template>\r\n", styles: [".horizontal{display:flex;flex-direction:row}.vertical{display:flex;flex-direction:column}\n"] }]
187
+ args: [{ selector: 'smart-component-layout', template: "<div *ngIf=\"smartComponentLayout?.expandable; then expandable; else normal\"> </div>\r\n\r\n<ng-template #expandable>\r\n <smart-expandable-section\r\n *ngIf=\"expandableSection\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n</ng-template>\r\n\r\n<ng-template #normal>\r\n <div\r\n *ngIf=\"smartComponentLayout?.type === type().CONTAINER\"\r\n [ngClass]=\"smartComponentLayout?.direction ?? 'vertical'\"\r\n >\r\n <smart-component-layout\r\n *ngFor=\"let layout of smartComponentLayout?.components\"\r\n [smartComponentLayout]=\"layout\"\r\n ></smart-component-layout>\r\n </div>\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <smart-grid #grid [smartGrid]=\"smartGrid\" [uuid]=\"uuid!\"></smart-grid>\r\n <!-- <smart-filter #filter [filter]=\"smartFilter\"></smart-filter> -->\r\n <smart-tree *ngIf=\"treeService\" [treeService]=\"treeService!\"></smart-tree>\r\n <smart-ui-action-toolbar *ngIf=\"toolbarId\" #toolbar [id]=\"toolbarId\"></smart-ui-action-toolbar>\r\n</ng-template>\r\n", styles: [".horizontal{display:flex;flex-direction:row}.vertical{display:flex;flex-direction:column}\n"] }]
170
188
  }], ctorParameters: function () { return [{ type: i1.SmartformLayoutDefinitionService }]; }, propDecorators: { smartComponentLayout: [{
171
189
  type: Input
172
190
  }], smartFormList: [{
@@ -178,8 +196,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
178
196
  }], smartFilterList: [{
179
197
  type: ViewChildren,
180
198
  args: ['filter']
199
+ }], toolbarList: [{
200
+ type: ViewChildren,
201
+ args: ['toolbar']
181
202
  }], components: [{
182
203
  type: ViewChildren,
183
204
  args: [SmartComponentLayoutComponent]
184
205
  }] } });
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jb21wb25lbnQtbGF5b3V0L3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtY29tcG9uZW50LWxheW91dC9zbWFydC1jb21wb25lbnQtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsS0FBSyxFQU9MLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFrQyxNQUFNLE9BQU8sQ0FBQztBQUMzRixPQUFPLEVBRUwsd0JBQXdCLEdBR3pCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLGdCQUFnQixFQUdoQixjQUFjLEdBQ2YsTUFBTSx3QkFBd0IsQ0FBQztBQUloQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFPMUMsTUFBTSxPQUFPLDZCQUE2QjtJQThCeEMsWUFBb0IsYUFBK0M7UUFBL0Msa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBN0J6RCxjQUFTLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7SUE2Qm1CLENBQUM7SUFFdkUsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbEQ7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU87YUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJ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NkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIENvbXBvbmVudFdpZGdldFR5cGUsIFNtYXJ0Q29tcG9uZW50TGF5b3V0RGVmaW5pdGlvbiB9IGZyb20gJy4vYXBpJztcclxuaW1wb3J0IHtcclxuICBTbWFydEZvcm0sXHJcbiAgU21hcnRGb3JtV2lkZ2V0RGlyZWN0aW9uLFxyXG4gIFNtYXJ0Zm9ybUNvbXBvbmVudCxcclxuICBTbWFydGZvcm1MYXlvdXREZWZpbml0aW9uU2VydmljZSxcclxufSBmcm9tICcuLi9zbWFydC1mb3JtL3Byb2plY3RzJztcclxuaW1wb3J0IHtcclxuICBHcmlkVWlBY3Rpb25UeXBlLFxyXG4gIFNtYXJ0R3JpZCxcclxuICBTbWFydEdyaWRDb21wb25lbnQsXHJcbiAgU21hcnRMYXlvdXREZWYsXHJcbn0gZnJvbSAnLi4vc21hcnQtZ3JpZC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0RmlsdGVyLCBTbWFydEZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uL3NtYXJ0LWZpbHRlci9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtdHJlZS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IEV4cGFuZGFibGVTZWN0aW9uIH0gZnJvbSAnLi4vc21hcnQtZXhwYW5kYWJsZS1zZWN0aW9uL3Byb2plY3RzJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1jb21wb25lbnQtbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC1jb21wb25lbnQtbGF5b3V0LmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG4gIHByb3RlY3RlZCBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBASW5wdXQoKSBzbWFydENvbXBvbmVudExheW91dD86IFNtYXJ0Q29tcG9uZW50TGF5b3V0RGVmaW5pdGlvbjtcclxuXHJcbiAgdXVpZD86IHN0cmluZztcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignZm9ybScpXHJcbiAgc21hcnRGb3JtTGlzdCE6IFF1ZXJ5TGlzdDxTbWFydGZvcm1Db21wb25lbnQ+O1xyXG4gIHNtYXJ0Rm9ybUNvbXBvbmVudD86IFNtYXJ0Zm9ybUNvbXBvbmVudDtcclxuICBzbWFydEZvcm0/OiBTbWFydEZvcm07XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ2dyaWQnKVxyXG4gIHNtYXJ0R3JpZExpc3QhOiBRdWVyeUxpc3Q8U21hcnRHcmlkQ29tcG9uZW50PjtcclxuICBzbWFydEdyaWRDb21wb25lbnQ/OiBTbWFydEdyaWRDb21wb25lbnQ7XHJcbiAgc21hcnRHcmlkPzogU21hcnRHcmlkO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdmaWx0ZXInKVxyXG4gIHNtYXJ0RmlsdGVyTGlzdCE6IFF1ZXJ5TGlzdDxTbWFydEZpbHRlckNvbXBvbmVudD47XHJcbiAgc21hcnRGaWx0ZXJDb21wb25lbnQ/OiBTbWFydEZpbHRlckNvbXBvbmVudDtcclxuICBzbWFydEZpbHRlcj86IFNtYXJ0RmlsdGVyO1xyXG5cclxuICBwYXJlbnQ/OiBhbnk7IC8vU21hcnRDb21wb25lbnQ8YW55PlxyXG4gIHRyZWVTZXJ2aWNlPzogU21hcnR0cmVlR2VuZXJpY1NlcnZpY2U7XHJcblxyXG4gIGV4cGFuZGFibGVTZWN0aW9uPzogRXhwYW5kYWJsZVNlY3Rpb248U21hcnRDb21wb25lbnRMYXlvdXREZWZpbml0aW9uPjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihTbWFydENvbXBvbmVudExheW91dENvbXBvbmVudClcclxuICBjb21wb25lbnRzITogUXVlcnlMaXN0PFNtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBsYXlvdXRTZXJ2aWNlOiBTbWFydGZvcm1MYXlvdXREZWZpbml0aW9uU2VydmljZSkge31cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc21hcnRGb3JtTGlzdD8uZmlyc3QpIHtcclxuICAgICAgdGhpcy5zZXRGb3JtQ29tcG9uZW50KHRoaXMuc21hcnRGb3JtTGlzdD8uZmlyc3QpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zbWFydEZvcm1MaXN0LmNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgobGlzdDogUXVlcnlMaXN0PFNtYXJ0Zm9ybUNvbXBvbmVudD4pID0+IHtcclxuICAgICAgICB0aGlzLnNldEZvcm1Db21wb25lbnQobGlzdC5maXJzdCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZExpc3Q/LmZpcnN0KSB7XHJcbiAgICAgIHRoaXMuc2V0R3JpZENvbXBvbmVudCh0aGlzLnNtYXJ0R3JpZExpc3Q/LmZpcnN0KTtcclxuICAgIH1cclxuICAgIHRoaXMuc21hcnRHcmlkTGlzdC5jaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IFF1ZXJ5TGlzdDxTbWFydEdyaWRDb21wb25lbnQ+KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRHcmlkQ29tcG9uZW50KGxpc3QuZmlyc3QpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNtYXJ0RmlsdGVyTGlzdC5jaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IFF1ZXJ5TGlzdDxTbWFydEZpbHRlckNvbXBvbmVudD4pID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuc21hcnRGaWx0ZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgIHRoaXMuc21hcnRGaWx0ZXJDb21wb25lbnQgPSBsaXN0LmZpcnN0O1xyXG4gICAgICAgICAgdGhpcy5iaW5kRmlsdGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0KSB7XHJcbiAgICAgIHRoaXMuc2V0VXAoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQgPSBjaGFuZ2VzWydzbWFydENvbXBvbmVudExheW91dCddLmN1cnJlbnRWYWx1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dCkge1xyXG4gICAgICB0aGlzLnNldFVwKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFVwKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wYXJlbnQgPSB0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py5wYXJlbnRDb21wb25lbnQgYXMgYW55O1xyXG4gICAgdGhpcy51dWlkID0gdGhpcy5wYXJlbnQudXVpZDtcclxuICAgIHRoaXMudHJlZVNlcnZpY2UgPSB0aGlzLnBhcmVudC5zbWFydFRyZWVTZXJ2aWNlO1xyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py5leHBhbmRhYmxlKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0RXhwYW5kYWJsZVNlY3Rpb24oKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dD8udHlwZSA9PT0gQ29tcG9uZW50VHlwZS5GT1JNKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0Rm9ybSgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py50eXBlID09PSBDb21wb25lbnRUeXBlLldJREdFVCkge1xyXG4gICAgICBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dC53aWRnZXQ/LnR5cGUgPT09IENvbXBvbmVudFdpZGdldFR5cGUuR1JJRCkge1xyXG4gICAgICAgIHRoaXMuY29uc3RydWN0R3JpZCgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQud2lkZ2V0Py50eXBlID09PSBDb21wb25lbnRXaWRnZXRUeXBlLkZJTFRFUikge1xyXG4gICAgICAgIHRoaXMuY29uc3RydWN0RmlsdGVyKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dC53aWRnZXQ/LnR5cGUgPT09IENvbXBvbmVudFdpZGdldFR5cGUuVFJFRSkge1xyXG4gICAgICAgIHRoaXMuY29uc3RydWN0VHJlZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0eXBlKCk6IHR5cGVvZiBDb21wb25lbnRUeXBlIHtcclxuICAgIHJldHVybiBDb21wb25lbnRUeXBlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0RXhwYW5kYWJsZVNlY3Rpb24oKTogdm9pZCB7XHJcbiAgICBsZXQgZGF0YTogU21hcnRDb21wb25lbnRMYXlvdXREZWZpbml0aW9uID0geyAuLi50aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0ISB9O1xyXG4gICAgZGF0YS5leHBhbmRhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5leHBhbmRhYmxlU2VjdGlvbiA9IHtcclxuICAgICAgdGl0bGU6IHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LmV4cGFuZGFibGVTZWN0aW9uTGFiZWwgPz8gJycsXHJcbiAgICAgIGRhdGEsXHJcbiAgICAgIGlucHV0TmFtZTogJ3NtYXJ0Q29tcG9uZW50TGF5b3V0JyxcclxuICAgICAgY3VzdG9tQ29tcG9uZW50OiBTbWFydENvbXBvbmVudExheW91dENvbXBvbmVudCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RGb3JtKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgd2lkZ2V0cyA9IHRoaXMubGF5b3V0U2VydmljZS5yZW5kZXIoe1xyXG4gICAgICBsYXlvdXREZWZpbml0aW9uczogdGhpcy5zbWFydENvbXBvbmVudExheW91dD8uZm9ybSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc21hcnRGb3JtID0ge1xyXG4gICAgICBkaXJlY3Rpb246IFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbi5DT0wsXHJcbiAgICAgIGNvbXBvbmVudE1vZGVsOiB0aGlzLnBhcmVudD8ubW9kZWwsXHJcbiAgICAgIHdpZGdldHMsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuYmluZEZvcm0oKTtcclxuICB9XHJcblxyXG4gIHNldEZvcm1Db21wb25lbnQoY29tcDogU21hcnRmb3JtQ29tcG9uZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuc21hcnRGb3JtQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuc21hcnRGb3JtQ29tcG9uZW50ID0gY29tcDtcclxuICAgICAgdGhpcy5iaW5kRm9ybSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYmluZEZvcm0oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zbWFydEZvcm0gJiYgdGhpcy5zbWFydEZvcm1Db21wb25lbnQpIHtcclxuICAgICAgdGhpcy5wYXJlbnQ/LmFkZEZvcm0oXHJcbiAgICAgICAgLy8gdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBmb3JtXHJcbiAgICAgICAgYGZvcm1fJHt0aGlzLm1ha2VpZCg1KX1gLFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtLFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtQ29tcG9uZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtYWtlaWQobGVuZ3RoOiBudW1iZXIpIHtcclxuICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgIGNvbnN0IGNoYXJhY3RlcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknO1xyXG4gICAgY29uc3QgY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnMubGVuZ3RoO1xyXG4gICAgbGV0IGNvdW50ZXIgPSAwO1xyXG4gICAgd2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcclxuICAgICAgcmVzdWx0ICs9IGNoYXJhY3RlcnMuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJhY3RlcnNMZW5ndGgpKTtcclxuICAgICAgY291bnRlciArPSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdEdyaWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCA9IHtcclxuICAgICAgZ3JpZElkZW50aWZpZXI6IHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uZ3JpZElkZW50aWZpZXIhLFxyXG4gICAgICBncmlkTW9kZWw6IHtcclxuICAgICAgICBwYWdlOiB7fSxcclxuICAgICAgfSxcclxuICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgIHJvd1VpQWN0aW9uVHlwZTogR3JpZFVpQWN0aW9uVHlwZS5QT1BVUF9NRU5VLFxyXG4gICAgICB9LFxyXG4gICAgICBsYXlvdXREZWY6IFNtYXJ0TGF5b3V0RGVmLlRBQkxFLFxyXG4gICAgICBwYWdpbmF0b3I6IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuYmluZEdyaWQoKTtcclxuICB9XHJcblxyXG4gIHNldEdyaWRDb21wb25lbnQoY29tcDogU21hcnRHcmlkQ29tcG9uZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuc21hcnRHcmlkQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkQ29tcG9uZW50ID0gY29tcDtcclxuICAgICAgdGhpcy5iaW5kR3JpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYmluZEdyaWQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQgJiYgdGhpcy5zbWFydEdyaWRDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5zbWFydEdyaWQgPSB0aGlzLnBhcmVudD8uYWRkR3JpZChcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICByb3dVaUFjdGlvblR5cGU6IEdyaWRVaUFjdGlvblR5cGUuUE9QVVBfTUVOVSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkQ29tcG9uZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNtYXJ0RmlsdGVyID0gKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQhLnBhcmVudENvbXBvbmVudCBhcyBhbnkpLmFkZEZpbHRlcihcclxuICAgICAgYGZpbHRlcl8ke3RoaXMubWFrZWlkKDUpfWAsXHJcbiAgICAgIHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uZmlsdGVyRXhwcmVzc2lvbkZpZWxkTGlzdCxcclxuICAgICAgdGhpcy5zbWFydENvbXBvbmVudExheW91dD8ud2lkZ2V0Py5maWx0ZXJUeXBlLFxyXG4gICAgICB0aGlzLnNtYXJ0RmlsdGVyQ29tcG9uZW50XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYmluZEZpbHRlcigpOiB2b2lkIHtcclxuICAgIC8vIFRPRE9cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdFRyZWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhcmVudC5zZXRVcERlZmF1bHRUcmVlKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8udHJlZUlkZW50aWZpZXIpO1xyXG4gICAgdGhpcy50cmVlU2VydmljZT8uaW5pdGlhbGl6ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwic21hcnRDb21wb25lbnRMYXlvdXQ/LmV4cGFuZGFibGU7IHRoZW4gZXhwYW5kYWJsZTsgZWxzZSBub3JtYWxcIj4gPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2V4cGFuZGFibGU+XHJcbiAgPHNtYXJ0LWV4cGFuZGFibGUtc2VjdGlvblxyXG4gICAgKm5nSWY9XCJleHBhbmRhYmxlU2VjdGlvblwiXHJcbiAgICBbZGF0YV09XCJleHBhbmRhYmxlU2VjdGlvblwiXHJcbiAgPjwvc21hcnQtZXhwYW5kYWJsZS1zZWN0aW9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNub3JtYWw+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJzbWFydENvbXBvbmVudExheW91dD8udHlwZSA9PT0gdHlwZSgpLkNPTlRBSU5FUlwiXHJcbiAgICBbbmdDbGFzc109XCJzbWFydENvbXBvbmVudExheW91dD8uZGlyZWN0aW9uID8/ICd2ZXJ0aWNhbCdcIlxyXG4gID5cclxuICAgIDxzbWFydC1jb21wb25lbnQtbGF5b3V0XHJcbiAgICAgICpuZ0Zvcj1cImxldCBsYXlvdXQgb2Ygc21hcnRDb21wb25lbnRMYXlvdXQ/LmNvbXBvbmVudHNcIlxyXG4gICAgICBbc21hcnRDb21wb25lbnRMYXlvdXRdPVwibGF5b3V0XCJcclxuICAgID48L3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQ+XHJcbiAgPC9kaXY+XHJcbiAgPHNtYXJ0Zm9ybSAjZm9ybSBbc21hcnRGb3JtXT1cInNtYXJ0Rm9ybVwiPjwvc21hcnRmb3JtPlxyXG4gIDxzbWFydC1ncmlkICNncmlkIFtzbWFydEdyaWRdPVwic21hcnRHcmlkXCIgW3V1aWRdPVwidXVpZCFcIj48L3NtYXJ0LWdyaWQ+XHJcbiAgPCEtLSA8c21hcnQtZmlsdGVyICNmaWx0ZXIgW2ZpbHRlcl09XCJzbWFydEZpbHRlclwiPjwvc21hcnQtZmlsdGVyPiAtLT5cclxuICA8c21hcnQtdHJlZSAqbmdJZj1cInRyZWVTZXJ2aWNlXCIgW3RyZWVTZXJ2aWNlXT1cInRyZWVTZXJ2aWNlIVwiPjwvc21hcnQtdHJlZT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jb21wb25lbnQtbGF5b3V0L3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtY29tcG9uZW50LWxheW91dC9zbWFydC1jb21wb25lbnQtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsS0FBSyxFQU9MLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFrQyxNQUFNLE9BQU8sQ0FBQztBQUMzRixPQUFPLEVBRUwsd0JBQXdCLEdBR3pCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLGdCQUFnQixFQUdoQixjQUFjLEdBQ2YsTUFBTSx3QkFBd0IsQ0FBQztBQUloQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBUTFDLE1BQU0sT0FBTyw2QkFBNkI7SUFtQ3hDLFlBQW9CLGFBQStDO1FBQS9DLGtCQUFhLEdBQWIsYUFBYSxDQUFrQztRQWxDekQsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBa0NtQixDQUFDO0lBRXZFLGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFO1lBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2xEO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPO2FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMs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LElBQUksQ0FBQyxvQkFBb0IsQ0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTztJQUNULENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUM7SUFDakUsQ0FBQzs7MEhBMU9VLDZCQUE2Qjs4R0FBN0IsNkJBQTZCLHdjQWdDMUIsNkJBQTZCLHFFQ3BFN0MsNGlDQXlCQSwwT0RXYSw2QkFBNkI7MkZBQTdCLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSx3QkFBd0I7dUhBT3pCLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFLTixhQUFhO3NCQURaLFlBQVk7dUJBQUMsTUFBTTtnQkFNcEIsYUFBYTtzQkFEWixZQUFZO3VCQUFDLE1BQU07Z0JBTXBCLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxRQUFRO2dCQU10QixXQUFXO3NCQURWLFlBQVk7dUJBQUMsU0FBUztnQkFXdkIsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgQ29tcG9uZW50V2lkZ2V0VHlwZSwgU21hcnRDb21wb25lbnRMYXlvdXREZWZpbml0aW9uIH0gZnJvbSAnLi9hcGknO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0Rm9ybSxcclxuICBTbWFydEZvcm1XaWRnZXREaXJlY3Rpb24sXHJcbiAgU21hcnRmb3JtQ29tcG9uZW50LFxyXG4gIFNtYXJ0Zm9ybUxheW91dERlZmluaXRpb25TZXJ2aWNlLFxyXG59IGZyb20gJy4uL3NtYXJ0LWZvcm0vcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIEdyaWRVaUFjdGlvblR5cGUsXHJcbiAgU21hcnRHcmlkLFxyXG4gIFNtYXJ0R3JpZENvbXBvbmVudCxcclxuICBTbWFydExheW91dERlZixcclxufSBmcm9tICcuLi9zbWFydC1ncmlkL3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnRGaWx0ZXIsIFNtYXJ0RmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vc21hcnQtZmlsdGVyL3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UgfSBmcm9tICcuLi9zbWFydC10cmVlL3Byb2plY3RzJztcclxuaW1wb3J0IHsgRXhwYW5kYWJsZVNlY3Rpb24gfSBmcm9tICcuLi9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24vcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vdmlldy1jb250ZXh0L3Byb2plY3RzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc21hcnQtY29tcG9uZW50LWxheW91dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQuY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRDb21wb25lbnRMYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XHJcbiAgcHJvdGVjdGVkIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIEBJbnB1dCgpIHNtYXJ0Q29tcG9uZW50TGF5b3V0PzogU21hcnRDb21wb25lbnRMYXlvdXREZWZpbml0aW9uO1xyXG5cclxuICB1dWlkPzogc3RyaW5nO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdmb3JtJylcclxuICBzbWFydEZvcm1MaXN0ITogUXVlcnlMaXN0PFNtYXJ0Zm9ybUNvbXBvbmVudD47XHJcbiAgc21hcnRGb3JtQ29tcG9uZW50PzogU21hcnRmb3JtQ29tcG9uZW50O1xyXG4gIHNtYXJ0Rm9ybT86IFNtYXJ0Rm9ybTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignZ3JpZCcpXHJcbiAgc21hcnRHcmlkTGlzdCE6IFF1ZXJ5TGlzdDxTbWFydEdyaWRDb21wb25lbnQ+O1xyXG4gIHNtYXJ0R3JpZENvbXBvbmVudD86IFNtYXJ0R3JpZENvbXBvbmVudDtcclxuICBzbWFydEdyaWQ/OiBTbWFydEdyaWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ2ZpbHRlcicpXHJcbiAgc21hcnRGaWx0ZXJMaXN0ITogUXVlcnlMaXN0PFNtYXJ0RmlsdGVyQ29tcG9uZW50PjtcclxuICBzbWFydEZpbHRlckNvbXBvbmVudD86IFNtYXJ0RmlsdGVyQ29tcG9uZW50O1xyXG4gIHNtYXJ0RmlsdGVyPzogU21hcnRGaWx0ZXI7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ3Rvb2xiYXInKVxyXG4gIHRvb2xiYXJMaXN0ITogUXVlcnlMaXN0PFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudD47XHJcbiAgdG9vbGJhcj86IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudDtcclxuICB0b29sYmFySWQ/OiBzdHJpbmc7XHJcblxyXG4gIHBhcmVudD86IGFueTsgLy9TbWFydENvbXBvbmVudDxhbnk+XHJcbiAgdHJlZVNlcnZpY2U/OiBTbWFydHRyZWVHZW5lcmljU2VydmljZTtcclxuXHJcbiAgZXhwYW5kYWJsZVNlY3Rpb24/OiBFeHBhbmRhYmxlU2VjdGlvbjxTbWFydENvbXBvbmVudExheW91dERlZmluaXRpb24+O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFNtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50KVxyXG4gIGNvbXBvbmVudHMhOiBRdWVyeUxpc3Q8U21hcnRDb21wb25lbnRMYXlvdXRDb21wb25lbnQ+O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxheW91dFNlcnZpY2U6IFNtYXJ0Zm9ybUxheW91dERlZmluaXRpb25TZXJ2aWNlKSB7fVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zbWFydEZvcm1MaXN0Py5maXJzdCkge1xyXG4gICAgICB0aGlzLnNldEZvcm1Db21wb25lbnQodGhpcy5zbWFydEZvcm1MaXN0Py5maXJzdCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNtYXJ0Rm9ybUxpc3QuY2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBRdWVyeUxpc3Q8U21hcnRmb3JtQ29tcG9uZW50PikgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUNvbXBvbmVudChsaXN0LmZpcnN0KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkTGlzdD8uZmlyc3QpIHtcclxuICAgICAgdGhpcy5zZXRHcmlkQ29tcG9uZW50KHRoaXMuc21hcnRHcmlkTGlzdD8uZmlyc3QpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zbWFydEdyaWRMaXN0LmNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgobGlzdDogUXVlcnlMaXN0PFNtYXJ0R3JpZENvbXBvbmVudD4pID0+IHtcclxuICAgICAgICB0aGlzLnNldEdyaWRDb21wb25lbnQobGlzdC5maXJzdCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc21hcnRGaWx0ZXJMaXN0LmNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgobGlzdDogUXVlcnlMaXN0PFNtYXJ0RmlsdGVyQ29tcG9uZW50PikgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5zbWFydEZpbHRlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgdGhpcy5zbWFydEZpbHRlckNvbXBvbmVudCA9IGxpc3QuZmlyc3Q7XHJcbiAgICAgICAgICB0aGlzLmJpbmRGaWx0ZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRvb2xiYXJMaXN0Py5maXJzdCkge1xyXG4gICAgICB0aGlzLnNldFRvb2xiYXJDb21wb25lbnQodGhpcy50b29sYmFyTGlzdD8uZmlyc3QpO1xyXG4gICAgfVxyXG4gICAgdGhpcy50b29sYmFyTGlzdC5jaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IFF1ZXJ5TGlzdDxVaUFjdGlvblRvb2xiYXJDb21wb25lbnQ+KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRUb29sYmFyQ29tcG9uZW50KGxpc3QuZmlyc3QpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dCkge1xyXG4gICAgICB0aGlzLnNldFVwKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0ID0gY2hhbmdlc1snc21hcnRDb21wb25lbnRMYXlvdXQnXS5jdXJyZW50VmFsdWU7XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQpIHtcclxuICAgICAgdGhpcy5zZXRVcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVcCgpOiB2b2lkIHtcclxuICAgIHRoaXMucGFyZW50ID0gdGhpcy5zbWFydENvbXBvbmVudExheW91dD8ucGFyZW50Q29tcG9uZW50IGFzIGFueTtcclxuICAgIHRoaXMudXVpZCA9IHRoaXMucGFyZW50LnV1aWQ7XHJcbiAgICB0aGlzLnRyZWVTZXJ2aWNlID0gdGhpcy5wYXJlbnQuc21hcnRUcmVlU2VydmljZTtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dD8uZXhwYW5kYWJsZSkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdEV4cGFuZGFibGVTZWN0aW9uKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LnR5cGUgPT09IENvbXBvbmVudFR5cGUuRk9STSkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdEZvcm0oKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dD8udHlwZSA9PT0gQ29tcG9uZW50VHlwZS5XSURHRVQpIHtcclxuICAgICAgaWYgKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQud2lkZ2V0Py50eXBlID09PSBDb21wb25lbnRXaWRnZXRUeXBlLkdSSUQpIHtcclxuICAgICAgICB0aGlzLmNvbnN0cnVjdEdyaWQoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0LndpZGdldD8udHlwZSA9PT0gQ29tcG9uZW50V2lkZ2V0VHlwZS5GSUxURVIpIHtcclxuICAgICAgICB0aGlzLmNvbnN0cnVjdEZpbHRlcigpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQud2lkZ2V0Py50eXBlID09PSBDb21wb25lbnRXaWRnZXRUeXBlLlRSRUUpIHtcclxuICAgICAgICB0aGlzLmNvbnN0cnVjdFRyZWUoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0LndpZGdldD8udHlwZSA9PT0gQ29tcG9uZW50V2lkZ2V0VHlwZS5UT09MQkFSKSB7XHJcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RUb29sYmFyKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHR5cGUoKTogdHlwZW9mIENvbXBvbmVudFR5cGUge1xyXG4gICAgcmV0dXJuIENvbXBvbmVudFR5cGU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RFeHBhbmRhYmxlU2VjdGlvbigpOiB2b2lkIHtcclxuICAgIGxldCBkYXRhOiBTbWFydENvbXBvbmVudExheW91dERlZmluaXRpb24gPSB7IC4uLnRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQhIH07XHJcbiAgICBkYXRhLmV4cGFuZGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmV4cGFuZGFibGVTZWN0aW9uID0ge1xyXG4gICAgICB0aXRsZTogdGhpcy5zbWFydENvbXBvbmVudExheW91dD8uZXhwYW5kYWJsZVNlY3Rpb25MYWJlbCA/PyAnJyxcclxuICAgICAgZGF0YSxcclxuICAgICAgaW5wdXROYW1lOiAnc21hcnRDb21wb25lbnRMYXlvdXQnLFxyXG4gICAgICBjdXN0b21Db21wb25lbnQ6IFNtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50LFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdEZvcm0oKTogdm9pZCB7XHJcbiAgICBjb25zdCB3aWRnZXRzID0gdGhpcy5sYXlvdXRTZXJ2aWNlLnJlbmRlcih7XHJcbiAgICAgIGxheW91dERlZmluaXRpb25zOiB0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py5mb3JtLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zbWFydEZvcm0gPSB7XHJcbiAgICAgIGRpcmVjdGlvbjogU21hcnRGb3JtV2lkZ2V0RGlyZWN0aW9uLkNPTCxcclxuICAgICAgY29tcG9uZW50TW9kZWw6IHRoaXMucGFyZW50Py5tb2RlbCxcclxuICAgICAgd2lkZ2V0cyxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5iaW5kRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybUNvbXBvbmVudChjb21wOiBTbWFydGZvcm1Db21wb25lbnQpIHtcclxuICAgIGlmICghdGhpcy5zbWFydEZvcm1Db21wb25lbnQpIHtcclxuICAgICAgdGhpcy5zbWFydEZvcm1Db21wb25lbnQgPSBjb21wO1xyXG4gICAgICB0aGlzLmJpbmRGb3JtKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiaW5kRm9ybSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0Rm9ybSAmJiB0aGlzLnNtYXJ0Rm9ybUNvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLnBhcmVudD8uYWRkRm9ybShcclxuICAgICAgICAvLyB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGZvcm1cclxuICAgICAgICBgZm9ybV8ke3RoaXMubWFrZWlkKDUpfWAsXHJcbiAgICAgICAgdGhpcy5zbWFydEZvcm0sXHJcbiAgICAgICAgdGhpcy5zbWFydEZvcm1Db21wb25lbnRcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1ha2VpZChsZW5ndGg6IG51bWJlcikge1xyXG4gICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgY29uc3QgY2hhcmFjdGVycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSc7XHJcbiAgICBjb25zdCBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XHJcbiAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICB3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xyXG4gICAgICByZXN1bHQgKz0gY2hhcmFjdGVycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcmFjdGVyc0xlbmd0aCkpO1xyXG4gICAgICBjb3VudGVyICs9IDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0R3JpZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc21hcnRHcmlkID0ge1xyXG4gICAgICBncmlkSWRlbnRpZmllcjogdGhpcy5zbWFydENvbXBvbmVudExheW91dD8ud2lkZ2V0Py5pZGVudGlmaWVyISxcclxuICAgICAgZ3JpZE1vZGVsOiB7XHJcbiAgICAgICAgcGFnZToge30sXHJcbiAgICAgIH0sXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICByb3dVaUFjdGlvblR5cGU6IEdyaWRVaUFjdGlvblR5cGUuUE9QVVBfTUVOVSxcclxuICAgICAgfSxcclxuICAgICAgbGF5b3V0RGVmOiBTbWFydExheW91dERlZi5UQUJMRSxcclxuICAgICAgcGFnaW5hdG9yOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmJpbmRHcmlkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRHcmlkQ29tcG9uZW50KGNvbXA6IFNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZENvbXBvbmVudCA9IGNvbXA7XHJcbiAgICAgIHRoaXMuYmluZEdyaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJpbmRHcmlkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkICYmIHRoaXMuc21hcnRHcmlkQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkID0gdGhpcy5wYXJlbnQ/LmFkZEdyaWQoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcm93VWlBY3Rpb25UeXBlOiBHcmlkVWlBY3Rpb25UeXBlLlBPUFVQX01FTlUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZENvbXBvbmVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VG9vbGJhckNvbXBvbmVudChjb21wOiBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQpIHtcclxuICAgIHRoaXMudG9vbGJhciA9IGNvbXA7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNtYXJ0RmlsdGVyID0gKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQhLnBhcmVudENvbXBvbmVudCBhcyBhbnkpLmFkZEZpbHRlcihcclxuICAgICAgYGZpbHRlcl8ke3RoaXMubWFrZWlkKDUpfWAsXHJcbiAgICAgIHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uZmlsdGVyRXhwcmVzc2lvbkZpZWxkTGlzdCxcclxuICAgICAgdGhpcy5zbWFydENvbXBvbmVudExheW91dD8ud2lkZ2V0Py5maWx0ZXJUeXBlLFxyXG4gICAgICB0aGlzLnNtYXJ0RmlsdGVyQ29tcG9uZW50XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYmluZEZpbHRlcigpOiB2b2lkIHtcclxuICAgIC8vIFRPRE9cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdFRyZWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhcmVudC5zZXRVcERlZmF1bHRUcmVlKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uaWRlbnRpZmllcik7XHJcbiAgICB0aGlzLnRyZWVTZXJ2aWNlPy5pbml0aWFsaXplKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RUb29sYmFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy50b29sYmFySWQgPSB0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py53aWRnZXQ/LmlkZW50aWZpZXI7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJzbWFydENvbXBvbmVudExheW91dD8uZXhwYW5kYWJsZTsgdGhlbiBleHBhbmRhYmxlOyBlbHNlIG5vcm1hbFwiPiA8L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZXhwYW5kYWJsZT5cclxuICA8c21hcnQtZXhwYW5kYWJsZS1zZWN0aW9uXHJcbiAgICAqbmdJZj1cImV4cGFuZGFibGVTZWN0aW9uXCJcclxuICAgIFtkYXRhXT1cImV4cGFuZGFibGVTZWN0aW9uXCJcclxuICA+PC9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI25vcm1hbD5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInNtYXJ0Q29tcG9uZW50TGF5b3V0Py50eXBlID09PSB0eXBlKCkuQ09OVEFJTkVSXCJcclxuICAgIFtuZ0NsYXNzXT1cInNtYXJ0Q29tcG9uZW50TGF5b3V0Py5kaXJlY3Rpb24gPz8gJ3ZlcnRpY2FsJ1wiXHJcbiAgPlxyXG4gICAgPHNtYXJ0LWNvbXBvbmVudC1sYXlvdXRcclxuICAgICAgKm5nRm9yPVwibGV0IGxheW91dCBvZiBzbWFydENvbXBvbmVudExheW91dD8uY29tcG9uZW50c1wiXHJcbiAgICAgIFtzbWFydENvbXBvbmVudExheW91dF09XCJsYXlvdXRcIlxyXG4gICAgPjwvc21hcnQtY29tcG9uZW50LWxheW91dD5cclxuICA8L2Rpdj5cclxuICA8c21hcnRmb3JtICNmb3JtIFtzbWFydEZvcm1dPVwic21hcnRGb3JtXCI+PC9zbWFydGZvcm0+XHJcbiAgPHNtYXJ0LWdyaWQgI2dyaWQgW3NtYXJ0R3JpZF09XCJzbWFydEdyaWRcIiBbdXVpZF09XCJ1dWlkIVwiPjwvc21hcnQtZ3JpZD5cclxuICA8IS0tIDxzbWFydC1maWx0ZXIgI2ZpbHRlciBbZmlsdGVyXT1cInNtYXJ0RmlsdGVyXCI+PC9zbWFydC1maWx0ZXI+IC0tPlxyXG4gIDxzbWFydC10cmVlICpuZ0lmPVwidHJlZVNlcnZpY2VcIiBbdHJlZVNlcnZpY2VdPVwidHJlZVNlcnZpY2UhXCI+PC9zbWFydC10cmVlPlxyXG4gIDxzbWFydC11aS1hY3Rpb24tdG9vbGJhciAqbmdJZj1cInRvb2xiYXJJZFwiICN0b29sYmFyIFtpZF09XCJ0b29sYmFySWRcIj48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
@@ -6,6 +6,7 @@ import { SmartGridModule } from '../smart-grid/smart-grid.module';
6
6
  import { SmartExpandableSectionModule } from '../smart-expandable-section/smart-expandable-section.module';
7
7
  import { SmarttreeModule } from '../smart-tree/smarttree.module';
8
8
  import { SmartComponentLayoutComponent } from './smart-component-layout.component';
9
+ import { SmartViewContextModule } from '../view-context/smart-view-context.module';
9
10
  import * as i0 from "@angular/core";
10
11
  export class SmartComponentLayoutModule {
11
12
  }
@@ -15,7 +16,8 @@ SmartComponentLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.
15
16
  SmartformModule,
16
17
  SmartGridModule,
17
18
  SmartExpandableSectionModule,
18
- SmarttreeModule], exports: [SmartComponentLayoutComponent] });
19
+ SmarttreeModule,
20
+ SmartViewContextModule], exports: [SmartComponentLayoutComponent] });
19
21
  SmartComponentLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartComponentLayoutModule, providers: [], imports: [[
20
22
  BrowserModule,
21
23
  MatCommonModule,
@@ -23,6 +25,7 @@ SmartComponentLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.
23
25
  SmartGridModule,
24
26
  SmartExpandableSectionModule,
25
27
  SmarttreeModule,
28
+ SmartViewContextModule,
26
29
  ]] });
27
30
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartComponentLayoutModule, decorators: [{
28
31
  type: NgModule,
@@ -35,9 +38,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
35
38
  SmartGridModule,
36
39
  SmartExpandableSectionModule,
37
40
  SmarttreeModule,
41
+ SmartViewContextModule,
38
42
  ],
39
43
  exports: [SmartComponentLayoutComponent],
40
44
  providers: [],
41
45
  }]
42
46
  }] });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWxheW91dC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jb21wb25lbnQtbGF5b3V0L3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQzNHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFlbkYsTUFBTSxPQUFPLDBCQUEwQjs7dUhBQTFCLDBCQUEwQjt3SEFBMUIsMEJBQTBCLGlCQVp0Qiw2QkFBNkIsYUFFMUMsYUFBYTtRQUNiLGVBQWU7UUFDZixlQUFlO1FBQ2YsZUFBZTtRQUNmLDRCQUE0QjtRQUM1QixlQUFlLGFBRVAsNkJBQTZCO3dIQUc1QiwwQkFBMEIsYUFGMUIsRUFBRSxZQVRKO1lBQ1AsYUFBYTtZQUNiLGVBQWU7WUFDZixlQUFlO1lBQ2YsZUFBZTtZQUNmLDRCQUE0QjtZQUM1QixlQUFlO1NBQ2hCOzJGQUlVLDBCQUEwQjtrQkFidEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztvQkFDN0MsT0FBTyxFQUFFO3dCQUNQLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsNEJBQTRCO3dCQUM1QixlQUFlO3FCQUNoQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztvQkFDeEMsU0FBUyxFQUFFLEVBQUU7aUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgQnJvd3Nlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBTbWFydGZvcm1Nb2R1bGUgfSBmcm9tICcuLi9zbWFydC1mb3JtL3NtYXJ0Zm9ybS5tb2R1bGUnO1xyXG5pbXBvcnQgeyBTbWFydEdyaWRNb2R1bGUgfSBmcm9tICcuLi9zbWFydC1ncmlkL3NtYXJ0LWdyaWQubW9kdWxlJztcclxuaW1wb3J0IHsgU21hcnRFeHBhbmRhYmxlU2VjdGlvbk1vZHVsZSB9IGZyb20gJy4uL3NtYXJ0LWV4cGFuZGFibGUtc2VjdGlvbi9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24ubW9kdWxlJztcclxuaW1wb3J0IHsgU21hcnR0cmVlTW9kdWxlIH0gZnJvbSAnLi4vc21hcnQtdHJlZS9zbWFydHRyZWUubW9kdWxlJztcclxuaW1wb3J0IHsgU21hcnRDb21wb25lbnRMYXlvdXRDb21wb25lbnQgfSBmcm9tICcuL3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQuY29tcG9uZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbU21hcnRDb21wb25lbnRMYXlvdXRDb21wb25lbnRdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEJyb3dzZXJNb2R1bGUsXHJcbiAgICBNYXRDb21tb25Nb2R1bGUsXHJcbiAgICBTbWFydGZvcm1Nb2R1bGUsXHJcbiAgICBTbWFydEdyaWRNb2R1bGUsXHJcbiAgICBTbWFydEV4cGFuZGFibGVTZWN0aW9uTW9kdWxlLFxyXG4gICAgU21hcnR0cmVlTW9kdWxlLFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1NtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50XSxcclxuICBwcm92aWRlcnM6IFtdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRDb21wb25lbnRMYXlvdXRNb2R1bGUge31cclxuIl19
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWxheW91dC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jb21wb25lbnQtbGF5b3V0L3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQzNHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7QUFnQm5GLE1BQU0sT0FBTywwQkFBMEI7O3VIQUExQiwwQkFBMEI7d0hBQTFCLDBCQUEwQixpQkFidEIsNkJBQTZCLGFBRTFDLGFBQWE7UUFDYixlQUFlO1FBQ2YsZUFBZTtRQUNmLGVBQWU7UUFDZiw0QkFBNEI7UUFDNUIsZUFBZTtRQUNmLHNCQUFzQixhQUVkLDZCQUE2Qjt3SEFHNUIsMEJBQTBCLGFBRjFCLEVBQUUsWUFWSjtZQUNQLGFBQWE7WUFDYixlQUFlO1lBQ2YsZUFBZTtZQUNmLGVBQWU7WUFDZiw0QkFBNEI7WUFDNUIsZUFBZTtZQUNmLHNCQUFzQjtTQUN2QjsyRkFJVSwwQkFBMEI7a0JBZHRDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsNkJBQTZCLENBQUM7b0JBQzdDLE9BQU8sRUFBRTt3QkFDUCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixlQUFlO3dCQUNmLDRCQUE0Qjt3QkFDNUIsZUFBZTt3QkFDZixzQkFBc0I7cUJBQ3ZCO29CQUNELE9BQU8sRUFBRSxDQUFDLDZCQUE2QixDQUFDO29CQUN4QyxTQUFTLEVBQUUsRUFBRTtpQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBCcm93c2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IFNtYXJ0Zm9ybU1vZHVsZSB9IGZyb20gJy4uL3NtYXJ0LWZvcm0vc21hcnRmb3JtLm1vZHVsZSc7XHJcbmltcG9ydCB7IFNtYXJ0R3JpZE1vZHVsZSB9IGZyb20gJy4uL3NtYXJ0LWdyaWQvc21hcnQtZ3JpZC5tb2R1bGUnO1xyXG5pbXBvcnQgeyBTbWFydEV4cGFuZGFibGVTZWN0aW9uTW9kdWxlIH0gZnJvbSAnLi4vc21hcnQtZXhwYW5kYWJsZS1zZWN0aW9uL3NtYXJ0LWV4cGFuZGFibGUtc2VjdGlvbi5tb2R1bGUnO1xyXG5pbXBvcnQgeyBTbWFydHRyZWVNb2R1bGUgfSBmcm9tICcuLi9zbWFydC10cmVlL3NtYXJ0dHJlZS5tb2R1bGUnO1xyXG5pbXBvcnQgeyBTbWFydENvbXBvbmVudExheW91dENvbXBvbmVudCB9IGZyb20gJy4vc21hcnQtY29tcG9uZW50LWxheW91dC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTbWFydFZpZXdDb250ZXh0TW9kdWxlIH0gZnJvbSAnLi4vdmlldy1jb250ZXh0L3NtYXJ0LXZpZXctY29udGV4dC5tb2R1bGUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtTbWFydENvbXBvbmVudExheW91dENvbXBvbmVudF0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQnJvd3Nlck1vZHVsZSxcclxuICAgIE1hdENvbW1vbk1vZHVsZSxcclxuICAgIFNtYXJ0Zm9ybU1vZHVsZSxcclxuICAgIFNtYXJ0R3JpZE1vZHVsZSxcclxuICAgIFNtYXJ0RXhwYW5kYWJsZVNlY3Rpb25Nb2R1bGUsXHJcbiAgICBTbWFydHRyZWVNb2R1bGUsXHJcbiAgICBTbWFydFZpZXdDb250ZXh0TW9kdWxlLFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1NtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50XSxcclxuICBwcm92aWRlcnM6IFtdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRDb21wb25lbnRMYXlvdXRNb2R1bGUge31cclxuIl19
@@ -12970,6 +12970,7 @@ var ComponentWidgetType;
12970
12970
  ComponentWidgetType["GRID"] = "grid";
12971
12971
  ComponentWidgetType["FILTER"] = "filter";
12972
12972
  ComponentWidgetType["TREE"] = "tree";
12973
+ ComponentWidgetType["TOOLBAR"] = "toolbar";
12973
12974
  })(ComponentWidgetType || (ComponentWidgetType = {}));
12974
12975
 
12975
12976
  /**
@@ -13037,7 +13038,7 @@ class SmartComponentLayoutComponent {
13037
13038
  this._destroy$ = new Subject();
13038
13039
  }
13039
13040
  ngAfterViewInit() {
13040
- var _a, _b, _c, _d;
13041
+ var _a, _b, _c, _d, _e, _f;
13041
13042
  if ((_a = this.smartFormList) === null || _a === void 0 ? void 0 : _a.first) {
13042
13043
  this.setFormComponent((_b = this.smartFormList) === null || _b === void 0 ? void 0 : _b.first);
13043
13044
  }
@@ -13062,6 +13063,14 @@ class SmartComponentLayoutComponent {
13062
13063
  this.bindFilter();
13063
13064
  }
13064
13065
  });
13066
+ if ((_e = this.toolbarList) === null || _e === void 0 ? void 0 : _e.first) {
13067
+ this.setToolbarComponent((_f = this.toolbarList) === null || _f === void 0 ? void 0 : _f.first);
13068
+ }
13069
+ this.toolbarList.changes
13070
+ .pipe(takeUntil(this._destroy$))
13071
+ .subscribe((list) => {
13072
+ this.setToolbarComponent(list.first);
13073
+ });
13065
13074
  if (this.smartComponentLayout) {
13066
13075
  this.setUp();
13067
13076
  }
@@ -13077,7 +13086,7 @@ class SmartComponentLayoutComponent {
13077
13086
  }
13078
13087
  }
13079
13088
  setUp() {
13080
- var _a, _b, _c, _d, _e, _f, _g;
13089
+ var _a, _b, _c, _d, _e, _f, _g, _h;
13081
13090
  this.parent = (_a = this.smartComponentLayout) === null || _a === void 0 ? void 0 : _a.parentComponent;
13082
13091
  this.uuid = this.parent.uuid;
13083
13092
  this.treeService = this.parent.smartTreeService;
@@ -13097,6 +13106,9 @@ class SmartComponentLayoutComponent {
13097
13106
  else if (((_g = this.smartComponentLayout.widget) === null || _g === void 0 ? void 0 : _g.type) === ComponentWidgetType.TREE) {
13098
13107
  this.constructTree();
13099
13108
  }
13109
+ else if (((_h = this.smartComponentLayout.widget) === null || _h === void 0 ? void 0 : _h.type) === ComponentWidgetType.TOOLBAR) {
13110
+ this.constructToolbar();
13111
+ }
13100
13112
  }
13101
13113
  }
13102
13114
  type() {
@@ -13153,7 +13165,7 @@ class SmartComponentLayoutComponent {
13153
13165
  constructGrid() {
13154
13166
  var _a, _b;
13155
13167
  this.smartGrid = {
13156
- gridIdentifier: (_b = (_a = this.smartComponentLayout) === null || _a === void 0 ? void 0 : _a.widget) === null || _b === void 0 ? void 0 : _b.gridIdentifier,
13168
+ gridIdentifier: (_b = (_a = this.smartComponentLayout) === null || _a === void 0 ? void 0 : _a.widget) === null || _b === void 0 ? void 0 : _b.identifier,
13157
13169
  gridModel: {
13158
13170
  page: {},
13159
13171
  },
@@ -13179,6 +13191,9 @@ class SmartComponentLayoutComponent {
13179
13191
  }, false, this.smartGridComponent);
13180
13192
  }
13181
13193
  }
13194
+ setToolbarComponent(comp) {
13195
+ this.toolbar = comp;
13196
+ }
13182
13197
  constructFilter() {
13183
13198
  var _a, _b, _c, _d;
13184
13199
  this.smartFilter = this.smartComponentLayout.parentComponent.addFilter(`filter_${this.makeid(5)}`, (_b = (_a = this.smartComponentLayout) === null || _a === void 0 ? void 0 : _a.widget) === null || _b === void 0 ? void 0 : _b.filterExpressionFieldList, (_d = (_c = this.smartComponentLayout) === null || _c === void 0 ? void 0 : _c.widget) === null || _d === void 0 ? void 0 : _d.filterType, this.smartFilterComponent);
@@ -13188,15 +13203,19 @@ class SmartComponentLayoutComponent {
13188
13203
  }
13189
13204
  constructTree() {
13190
13205
  var _a, _b, _c;
13191
- this.parent.setUpDefaultTree((_b = (_a = this.smartComponentLayout) === null || _a === void 0 ? void 0 : _a.widget) === null || _b === void 0 ? void 0 : _b.treeIdentifier);
13206
+ this.parent.setUpDefaultTree((_b = (_a = this.smartComponentLayout) === null || _a === void 0 ? void 0 : _a.widget) === null || _b === void 0 ? void 0 : _b.identifier);
13192
13207
  (_c = this.treeService) === null || _c === void 0 ? void 0 : _c.initialize();
13193
13208
  }
13209
+ constructToolbar() {
13210
+ var _a, _b;
13211
+ this.toolbarId = (_b = (_a = this.smartComponentLayout) === null || _a === void 0 ? void 0 : _a.widget) === null || _b === void 0 ? void 0 : _b.identifier;
13212
+ }
13194
13213
  }
13195
13214
  SmartComponentLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartComponentLayoutComponent, deps: [{ token: SmartformLayoutDefinitionService }], target: i0.ɵɵFactoryTarget.Component });
13196
- SmartComponentLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartComponentLayoutComponent, selector: "smart-component-layout", inputs: { smartComponentLayout: "smartComponentLayout" }, viewQueries: [{ propertyName: "smartFormList", predicate: ["form"], descendants: true }, { propertyName: "smartGridList", predicate: ["grid"], descendants: true }, { propertyName: "smartFilterList", predicate: ["filter"], descendants: true }, { propertyName: "components", predicate: SmartComponentLayoutComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"smartComponentLayout?.expandable; then expandable; else normal\"> </div>\r\n\r\n<ng-template #expandable>\r\n <smart-expandable-section\r\n *ngIf=\"expandableSection\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n</ng-template>\r\n\r\n<ng-template #normal>\r\n <div\r\n *ngIf=\"smartComponentLayout?.type === type().CONTAINER\"\r\n [ngClass]=\"smartComponentLayout?.direction ?? 'vertical'\"\r\n >\r\n <smart-component-layout\r\n *ngFor=\"let layout of smartComponentLayout?.components\"\r\n [smartComponentLayout]=\"layout\"\r\n ></smart-component-layout>\r\n </div>\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <smart-grid #grid [smartGrid]=\"smartGrid\" [uuid]=\"uuid!\"></smart-grid>\r\n <!-- <smart-filter #filter [filter]=\"smartFilter\"></smart-filter> -->\r\n <smart-tree *ngIf=\"treeService\" [treeService]=\"treeService!\"></smart-tree>\r\n</ng-template>\r\n", styles: [".horizontal{display:flex;flex-direction:row}.vertical{display:flex;flex-direction:column}\n"], components: [{ type: ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { type: SmartComponentLayoutComponent, selector: "smart-component-layout", inputs: ["smartComponentLayout"] }, { type: SmartformComponent, selector: "smartform", inputs: ["smartForm"] }, { type: SmartGridComponent, selector: "smart-grid", inputs: ["smartGrid", "uuid", "dev"] }, { type: SmartTreeComponent, selector: "smart-tree", inputs: ["treeStyle", "treeService"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
13215
+ SmartComponentLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartComponentLayoutComponent, selector: "smart-component-layout", inputs: { smartComponentLayout: "smartComponentLayout" }, viewQueries: [{ propertyName: "smartFormList", predicate: ["form"], descendants: true }, { propertyName: "smartGridList", predicate: ["grid"], descendants: true }, { propertyName: "smartFilterList", predicate: ["filter"], descendants: true }, { propertyName: "toolbarList", predicate: ["toolbar"], descendants: true }, { propertyName: "components", predicate: SmartComponentLayoutComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"smartComponentLayout?.expandable; then expandable; else normal\"> </div>\r\n\r\n<ng-template #expandable>\r\n <smart-expandable-section\r\n *ngIf=\"expandableSection\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n</ng-template>\r\n\r\n<ng-template #normal>\r\n <div\r\n *ngIf=\"smartComponentLayout?.type === type().CONTAINER\"\r\n [ngClass]=\"smartComponentLayout?.direction ?? 'vertical'\"\r\n >\r\n <smart-component-layout\r\n *ngFor=\"let layout of smartComponentLayout?.components\"\r\n [smartComponentLayout]=\"layout\"\r\n ></smart-component-layout>\r\n </div>\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <smart-grid #grid [smartGrid]=\"smartGrid\" [uuid]=\"uuid!\"></smart-grid>\r\n <!-- <smart-filter #filter [filter]=\"smartFilter\"></smart-filter> -->\r\n <smart-tree *ngIf=\"treeService\" [treeService]=\"treeService!\"></smart-tree>\r\n <smart-ui-action-toolbar *ngIf=\"toolbarId\" #toolbar [id]=\"toolbarId\"></smart-ui-action-toolbar>\r\n</ng-template>\r\n", styles: [".horizontal{display:flex;flex-direction:row}.vertical{display:flex;flex-direction:column}\n"], components: [{ type: ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { type: SmartComponentLayoutComponent, selector: "smart-component-layout", inputs: ["smartComponentLayout"] }, { type: SmartformComponent, selector: "smartform", inputs: ["smartForm"] }, { type: SmartGridComponent, selector: "smart-grid", inputs: ["smartGrid", "uuid", "dev"] }, { type: SmartTreeComponent, selector: "smart-tree", inputs: ["treeStyle", "treeService"] }, { type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
13197
13216
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartComponentLayoutComponent, decorators: [{
13198
13217
  type: Component,
13199
- args: [{ selector: 'smart-component-layout', template: "<div *ngIf=\"smartComponentLayout?.expandable; then expandable; else normal\"> </div>\r\n\r\n<ng-template #expandable>\r\n <smart-expandable-section\r\n *ngIf=\"expandableSection\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n</ng-template>\r\n\r\n<ng-template #normal>\r\n <div\r\n *ngIf=\"smartComponentLayout?.type === type().CONTAINER\"\r\n [ngClass]=\"smartComponentLayout?.direction ?? 'vertical'\"\r\n >\r\n <smart-component-layout\r\n *ngFor=\"let layout of smartComponentLayout?.components\"\r\n [smartComponentLayout]=\"layout\"\r\n ></smart-component-layout>\r\n </div>\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <smart-grid #grid [smartGrid]=\"smartGrid\" [uuid]=\"uuid!\"></smart-grid>\r\n <!-- <smart-filter #filter [filter]=\"smartFilter\"></smart-filter> -->\r\n <smart-tree *ngIf=\"treeService\" [treeService]=\"treeService!\"></smart-tree>\r\n</ng-template>\r\n", styles: [".horizontal{display:flex;flex-direction:row}.vertical{display:flex;flex-direction:column}\n"] }]
13218
+ args: [{ selector: 'smart-component-layout', template: "<div *ngIf=\"smartComponentLayout?.expandable; then expandable; else normal\"> </div>\r\n\r\n<ng-template #expandable>\r\n <smart-expandable-section\r\n *ngIf=\"expandableSection\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n</ng-template>\r\n\r\n<ng-template #normal>\r\n <div\r\n *ngIf=\"smartComponentLayout?.type === type().CONTAINER\"\r\n [ngClass]=\"smartComponentLayout?.direction ?? 'vertical'\"\r\n >\r\n <smart-component-layout\r\n *ngFor=\"let layout of smartComponentLayout?.components\"\r\n [smartComponentLayout]=\"layout\"\r\n ></smart-component-layout>\r\n </div>\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <smart-grid #grid [smartGrid]=\"smartGrid\" [uuid]=\"uuid!\"></smart-grid>\r\n <!-- <smart-filter #filter [filter]=\"smartFilter\"></smart-filter> -->\r\n <smart-tree *ngIf=\"treeService\" [treeService]=\"treeService!\"></smart-tree>\r\n <smart-ui-action-toolbar *ngIf=\"toolbarId\" #toolbar [id]=\"toolbarId\"></smart-ui-action-toolbar>\r\n</ng-template>\r\n", styles: [".horizontal{display:flex;flex-direction:row}.vertical{display:flex;flex-direction:column}\n"] }]
13200
13219
  }], ctorParameters: function () { return [{ type: SmartformLayoutDefinitionService }]; }, propDecorators: { smartComponentLayout: [{
13201
13220
  type: Input
13202
13221
  }], smartFormList: [{
@@ -13208,6 +13227,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
13208
13227
  }], smartFilterList: [{
13209
13228
  type: ViewChildren,
13210
13229
  args: ['filter']
13230
+ }], toolbarList: [{
13231
+ type: ViewChildren,
13232
+ args: ['toolbar']
13211
13233
  }], components: [{
13212
13234
  type: ViewChildren,
13213
13235
  args: [SmartComponentLayoutComponent]
@@ -13221,7 +13243,8 @@ SmartComponentLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.
13221
13243
  SmartformModule,
13222
13244
  SmartGridModule,
13223
13245
  SmartExpandableSectionModule,
13224
- SmarttreeModule], exports: [SmartComponentLayoutComponent] });
13246
+ SmarttreeModule,
13247
+ SmartViewContextModule], exports: [SmartComponentLayoutComponent] });
13225
13248
  SmartComponentLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartComponentLayoutModule, providers: [], imports: [[
13226
13249
  BrowserModule,
13227
13250
  MatCommonModule,
@@ -13229,6 +13252,7 @@ SmartComponentLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.
13229
13252
  SmartGridModule,
13230
13253
  SmartExpandableSectionModule,
13231
13254
  SmarttreeModule,
13255
+ SmartViewContextModule,
13232
13256
  ]] });
13233
13257
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartComponentLayoutModule, decorators: [{
13234
13258
  type: NgModule,
@@ -13241,6 +13265,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
13241
13265
  SmartGridModule,
13242
13266
  SmartExpandableSectionModule,
13243
13267
  SmarttreeModule,
13268
+ SmartViewContextModule,
13244
13269
  ],
13245
13270
  exports: [SmartComponentLayoutComponent],
13246
13271
  providers: [],
@@ -14177,6 +14202,18 @@ class SmartComponentLayoutUtility {
14177
14202
  }
14178
14203
  return result;
14179
14204
  }
14205
+ static getToolbars(comp) {
14206
+ let result = [];
14207
+ if (comp.components) {
14208
+ result = comp.components
14209
+ .map((c) => this.getToolbars(c))
14210
+ .reduce((acc, value) => acc.concat(value), []);
14211
+ }
14212
+ if (comp.toolbar) {
14213
+ result.push(comp.toolbar);
14214
+ }
14215
+ return result;
14216
+ }
14180
14217
  }
14181
14218
 
14182
14219
  /*
@@ -14777,13 +14814,16 @@ class SmartComponentApiClient {
14777
14814
  return filters;
14778
14815
  }
14779
14816
  getAllSmartUiActionToolbars() {
14780
- var _a, _b, _c;
14817
+ var _a, _b, _c, _d;
14781
14818
  let toolbars = (_b = (_a = this.getSmartUiActionToolbarsQL()) === null || _a === void 0 ? void 0 : _a.toArray()) !== null && _b !== void 0 ? _b : [];
14782
14819
  (_c = this.getAllSmartGridComponents()) === null || _c === void 0 ? void 0 : _c.forEach((grid) => {
14783
14820
  if (grid.toolbar) {
14784
14821
  toolbars.push(grid.toolbar);
14785
14822
  }
14786
14823
  });
14824
+ (_d = this.getSmartComponentLayoutsQL()) === null || _d === void 0 ? void 0 : _d.forEach((comp) => {
14825
+ toolbars.push(...SmartComponentLayoutUtility.getToolbars(comp));
14826
+ });
14787
14827
  return toolbars;
14788
14828
  }
14789
14829
  initData() {