cps-ui-kit 0.128.0 → 0.130.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +1 -0
  2. package/assets/icons.svg +8 -0
  3. package/esm2020/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +3 -3
  4. package/esm2020/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +3 -3
  5. package/esm2020/lib/components/cps-checkbox/cps-checkbox.component.mjs +1 -1
  6. package/esm2020/lib/components/cps-datepicker/cps-datepicker.component.mjs +3 -3
  7. package/esm2020/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +3 -3
  8. package/esm2020/lib/components/cps-icon/cps-icon.component.mjs +3 -1
  9. package/esm2020/lib/components/cps-info-circle/cps-info-circle.component.mjs +1 -1
  10. package/esm2020/lib/components/cps-input/cps-input.component.mjs +1 -1
  11. package/esm2020/lib/components/cps-menu/cps-menu.component.mjs +3 -3
  12. package/esm2020/lib/components/cps-paginator/cps-paginator.component.mjs +3 -3
  13. package/esm2020/lib/components/cps-radio-group/cps-radio-group.component.mjs +1 -1
  14. package/esm2020/lib/components/cps-select/cps-select.component.mjs +3 -3
  15. package/esm2020/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +3 -3
  16. package/esm2020/lib/components/cps-table/cps-table.component.mjs +3 -3
  17. package/esm2020/lib/components/cps-textarea/cps-textarea.component.mjs +1 -1
  18. package/esm2020/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +8 -5
  19. package/esm2020/lib/components/cps-tree-select/cps-tree-select.component.mjs +8 -5
  20. package/esm2020/lib/components/cps-tree-table/cps-tree-table.component.mjs +76 -47
  21. package/esm2020/lib/components/cps-tree-table/tree-table-sort-icon/tree-table-sort-icon.component.mjs +3 -5
  22. package/esm2020/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +499 -0
  23. package/esm2020/lib/directives/cps-tooltip.directive.mjs +1 -1
  24. package/esm2020/lib/services/cps-dialog/cps-dialog.service.mjs +87 -0
  25. package/esm2020/lib/services/cps-dialog/internal/components/cps-confirmation/cps-confirmation.component.mjs +25 -0
  26. package/esm2020/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +466 -0
  27. package/esm2020/lib/services/cps-dialog/internal/directives/cps-dialog-content.directive.mjs +18 -0
  28. package/esm2020/lib/services/cps-dialog/utils/cps-dialog-config.mjs +3 -0
  29. package/esm2020/lib/services/cps-dialog/utils/cps-dialog-ref.mjs +128 -0
  30. package/esm2020/public-api.mjs +4 -1
  31. package/fesm2015/cps-ui-kit.mjs +829 -84
  32. package/fesm2015/cps-ui-kit.mjs.map +1 -1
  33. package/fesm2020/cps-ui-kit.mjs +813 -85
  34. package/fesm2020/cps-ui-kit.mjs.map +1 -1
  35. package/lib/components/cps-autocomplete/cps-autocomplete.component.d.ts +2 -2
  36. package/lib/components/cps-button-toggle/cps-button-toggle.component.d.ts +3 -3
  37. package/lib/components/cps-checkbox/cps-checkbox.component.d.ts +2 -2
  38. package/lib/components/cps-datepicker/cps-datepicker.component.d.ts +2 -2
  39. package/lib/components/cps-info-circle/cps-info-circle.component.d.ts +2 -2
  40. package/lib/components/cps-input/cps-input.component.d.ts +2 -2
  41. package/lib/components/cps-radio-group/cps-radio-group.component.d.ts +2 -2
  42. package/lib/components/cps-select/cps-select.component.d.ts +2 -2
  43. package/lib/components/cps-textarea/cps-textarea.component.d.ts +2 -2
  44. package/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.d.ts +4 -3
  45. package/lib/components/cps-tree-select/cps-tree-select.component.d.ts +4 -3
  46. package/lib/components/cps-tree-table/cps-tree-table.component.d.ts +6 -1
  47. package/lib/{base_components/base-tree-dropdown.component.d.ts → components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.d.ts} +7 -8
  48. package/lib/directives/cps-tooltip.directive.d.ts +4 -4
  49. package/lib/services/cps-dialog/cps-dialog.service.d.ts +22 -0
  50. package/lib/services/cps-dialog/internal/components/cps-confirmation/cps-confirmation.component.d.ts +12 -0
  51. package/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.d.ts +93 -0
  52. package/lib/services/cps-dialog/internal/directives/cps-dialog-content.directive.d.ts +8 -0
  53. package/lib/services/cps-dialog/utils/cps-dialog-config.d.ts +151 -0
  54. package/lib/services/cps-dialog/utils/cps-dialog-ref.d.ts +101 -0
  55. package/package.json +1 -1
  56. package/public-api.d.ts +3 -0
  57. package/styles/_colors.scss +4 -0
  58. package/esm2020/lib/base_components/base-tree-dropdown.component.mjs +0 -502
@@ -61,13 +61,11 @@ export class TreeTableSortIconComponent {
61
61
  }
62
62
  }
63
63
  TreeTableSortIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TreeTableSortIconComponent, deps: [{ token: i1.TreeTable }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
64
- TreeTableSortIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TreeTableSortIconComponent, isStandalone: true, selector: "tree-table-sort-icon", inputs: { field: "field" }, host: { classAttribute: "p-element" }, ngImport: i0, template: "<ng-container *ngIf=\"!tt.sortIconTemplate\">\n <SortAltIcon\n [styleClass]=\"'p-sortable-column-icon'\"\n *ngIf=\"sortOrder === 0\" />\n <SortAmountUpAltIcon\n [styleClass]=\"'p-sortable-column-icon'\"\n *ngIf=\"sortOrder === 1\" />\n <SortAmountDownIcon\n [styleClass]=\"'p-sortable-column-icon'\"\n *ngIf=\"sortOrder === -1\" />\n</ng-container>\n<span *ngIf=\"tt.sortIconTemplate\" class=\"p-sortable-column-icon\">\n <ng-template\n *ngTemplateOutlet=\"\n tt.sortIconTemplate;\n context: { $implicit: sortOrder }\n \"></ng-template>\n</span>\n<span *ngIf=\"isMultiSorted()\" class=\"p-sortable-column-badge\">{{\n getBadgeValue()\n}}</span>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SortAltIcon, selector: "SortAltIcon" }, { kind: "component", type: SortAmountUpAltIcon, selector: "SortAmountUpAltIcon" }, { kind: "component", type: SortAmountDownIcon, selector: "SortAmountDownIcon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
64
+ TreeTableSortIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TreeTableSortIconComponent, isStandalone: true, selector: "tree-table-sort-icon", inputs: { field: "field" }, ngImport: i0, template: "<ng-container *ngIf=\"!tt.sortIconTemplate\">\n <SortAltIcon\n [styleClass]=\"'p-sortable-column-icon'\"\n *ngIf=\"sortOrder === 0\" />\n <SortAmountUpAltIcon\n [styleClass]=\"'p-sortable-column-icon'\"\n *ngIf=\"sortOrder === 1\" />\n <SortAmountDownIcon\n [styleClass]=\"'p-sortable-column-icon'\"\n *ngIf=\"sortOrder === -1\" />\n</ng-container>\n<span *ngIf=\"tt.sortIconTemplate\" class=\"p-sortable-column-icon\">\n <ng-template\n *ngTemplateOutlet=\"\n tt.sortIconTemplate;\n context: { $implicit: sortOrder }\n \"></ng-template>\n</span>\n<span *ngIf=\"isMultiSorted()\" class=\"p-sortable-column-badge\">{{\n getBadgeValue()\n}}</span>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SortAltIcon, selector: "SortAltIcon" }, { kind: "component", type: SortAmountUpAltIcon, selector: "SortAmountUpAltIcon" }, { kind: "component", type: SortAmountDownIcon, selector: "SortAmountDownIcon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
65
65
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TreeTableSortIconComponent, decorators: [{
66
66
  type: Component,
67
- args: [{ selector: 'tree-table-sort-icon', standalone: true, imports: [CommonModule, SortAltIcon, SortAmountUpAltIcon, SortAmountDownIcon], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
68
- class: 'p-element'
69
- }, template: "<ng-container *ngIf=\"!tt.sortIconTemplate\">\n <SortAltIcon\n [styleClass]=\"'p-sortable-column-icon'\"\n *ngIf=\"sortOrder === 0\" />\n <SortAmountUpAltIcon\n [styleClass]=\"'p-sortable-column-icon'\"\n *ngIf=\"sortOrder === 1\" />\n <SortAmountDownIcon\n [styleClass]=\"'p-sortable-column-icon'\"\n *ngIf=\"sortOrder === -1\" />\n</ng-container>\n<span *ngIf=\"tt.sortIconTemplate\" class=\"p-sortable-column-icon\">\n <ng-template\n *ngTemplateOutlet=\"\n tt.sortIconTemplate;\n context: { $implicit: sortOrder }\n \"></ng-template>\n</span>\n<span *ngIf=\"isMultiSorted()\" class=\"p-sortable-column-badge\">{{\n getBadgeValue()\n}}</span>\n" }]
67
+ args: [{ selector: 'tree-table-sort-icon', standalone: true, imports: [CommonModule, SortAltIcon, SortAmountUpAltIcon, SortAmountDownIcon], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"!tt.sortIconTemplate\">\n <SortAltIcon\n [styleClass]=\"'p-sortable-column-icon'\"\n *ngIf=\"sortOrder === 0\" />\n <SortAmountUpAltIcon\n [styleClass]=\"'p-sortable-column-icon'\"\n *ngIf=\"sortOrder === 1\" />\n <SortAmountDownIcon\n [styleClass]=\"'p-sortable-column-icon'\"\n *ngIf=\"sortOrder === -1\" />\n</ng-container>\n<span *ngIf=\"tt.sortIconTemplate\" class=\"p-sortable-column-icon\">\n <ng-template\n *ngTemplateOutlet=\"\n tt.sortIconTemplate;\n context: { $implicit: sortOrder }\n \"></ng-template>\n</span>\n<span *ngIf=\"isMultiSorted()\" class=\"p-sortable-column-badge\">{{\n getBadgeValue()\n}}</span>\n" }]
70
68
  }], ctorParameters: function () { return [{ type: i1.TreeTable }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { field: [{
71
69
  type: Input
72
70
  }] } });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS10YWJsZS1zb3J0LWljb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvdHJlZS10YWJsZS1zb3J0LWljb24vdHJlZS10YWJsZS1zb3J0LWljb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvdHJlZS10YWJsZS1zb3J0LWljb24vdHJlZS10YWJsZS1zb3J0LWljb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULEtBQUssRUFHTCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7O0FBZXBFLE1BQU0sT0FBTywwQkFBMEI7SUFPckMsWUFBbUIsRUFBYSxFQUFTLEVBQXFCO1FBQTNDLE9BQUUsR0FBRixFQUFFLENBQVc7UUFBUyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQU5yRCxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBSXBCLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFHWixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQzVELENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBVTtRQUNoQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtZQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2RTthQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssVUFBVSxFQUFFO1lBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQztRQUM3QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVmLElBQ0UsYUFBYTtZQUNiLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxLQUFLLFVBQVU7WUFDL0IsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ3hCO1lBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUMxRCxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUNWLE1BQU07aUJBQ1A7YUFDRjtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNqQztJQUNILENBQUM7O3VIQWxFVSwwQkFBMEI7MkdBQTFCLDBCQUEwQixtSkMzQnZDLCtxQkFxQkEsMkNERlksWUFBWSwwU0FBRSxXQUFXLHdEQUFFLG1CQUFtQixnRUFBRSxrQkFBa0I7MkZBUWpFLDBCQUEwQjtrQkFYdEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsQ0FBQyxpQkFFOUQsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSixLQUFLLEVBQUUsV0FBVztxQkFDbkI7Z0lBR1EsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU29ydEFsdEljb24gfSBmcm9tICdwcmltZW5nL2ljb25zL3NvcnRhbHQnO1xuaW1wb3J0IHsgU29ydEFtb3VudERvd25JY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9zb3J0YW1vdW50ZG93bic7XG5pbXBvcnQgeyBTb3J0QW1vdW50VXBBbHRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9zb3J0YW1vdW50dXBhbHQnO1xuaW1wb3J0IHsgVHJlZVRhYmxlIH0gZnJvbSAncHJpbWVuZy90cmVldGFibGUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RyZWUtdGFibGUtc29ydC1pY29uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU29ydEFsdEljb24sIFNvcnRBbW91bnRVcEFsdEljb24sIFNvcnRBbW91bnREb3duSWNvbl0sXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLXRhYmxlLXNvcnQtaWNvbi5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdwLWVsZW1lbnQnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgVHJlZVRhYmxlU29ydEljb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGZpZWxkID0gJyc7XG5cbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgc29ydE9yZGVyID0gMDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdHQ6IFRyZWVUYWJsZSwgcHVibGljIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy50dC50YWJsZVNlcnZpY2Uuc29ydFNvdXJjZSQuc3Vic2NyaWJlKFxuICAgICAgKHNvcnRNZXRhKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU29ydFN0YXRlKCk7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudXBkYXRlU29ydFN0YXRlKCk7XG4gIH1cblxuICBvbkNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgdXBkYXRlU29ydFN0YXRlKCkge1xuICAgIGlmICh0aGlzLnR0LnNvcnRNb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgdGhpcy5zb3J0T3JkZXIgPSB0aGlzLnR0LmlzU29ydGVkKHRoaXMuZmllbGQpID8gdGhpcy50dC5zb3J0T3JkZXIgOiAwO1xuICAgIH0gZWxzZSBpZiAodGhpcy50dC5zb3J0TW9kZSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgY29uc3Qgc29ydE1ldGEgPSB0aGlzLnR0LmdldFNvcnRNZXRhKHRoaXMuZmllbGQpO1xuICAgICAgdGhpcy5zb3J0T3JkZXIgPSBzb3J0TWV0YSA/IHNvcnRNZXRhLm9yZGVyIDogMDtcbiAgICB9XG4gIH1cblxuICBnZXRNdWx0aVNvcnRNZXRhSW5kZXgoKSB7XG4gICAgY29uc3QgbXVsdGlTb3J0TWV0YSA9IHRoaXMudHQuX211bHRpU29ydE1ldGE7XG4gICAgbGV0IGluZGV4ID0gLTE7XG5cbiAgICBpZiAoXG4gICAgICBtdWx0aVNvcnRNZXRhICYmXG4gICAgICB0aGlzLnR0LnNvcnRNb2RlID09PSAnbXVsdGlwbGUnICYmXG4gICAgICBtdWx0aVNvcnRNZXRhLmxlbmd0aCA+IDFcbiAgICApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXVsdGlTb3J0TWV0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBtZXRhID0gbXVsdGlTb3J0TWV0YVtpXTtcbiAgICAgICAgaWYgKG1ldGEuZmllbGQgPT09IHRoaXMuZmllbGQgfHwgbWV0YS5maWVsZCA9PT0gdGhpcy5maWVsZCkge1xuICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGdldEJhZGdlVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TXVsdGlTb3J0TWV0YUluZGV4KCkgKyAxO1xuICB9XG5cbiAgaXNNdWx0aVNvcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy50dC5zb3J0TW9kZSA9PT0gJ211bHRpcGxlJyAmJiB0aGlzLmdldE11bHRpU29ydE1ldGFJbmRleCgpID4gLTE7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIXR0LnNvcnRJY29uVGVtcGxhdGVcIj5cbiAgPFNvcnRBbHRJY29uXG4gICAgW3N0eWxlQ2xhc3NdPVwiJ3Atc29ydGFibGUtY29sdW1uLWljb24nXCJcbiAgICAqbmdJZj1cInNvcnRPcmRlciA9PT0gMFwiIC8+XG4gIDxTb3J0QW1vdW50VXBBbHRJY29uXG4gICAgW3N0eWxlQ2xhc3NdPVwiJ3Atc29ydGFibGUtY29sdW1uLWljb24nXCJcbiAgICAqbmdJZj1cInNvcnRPcmRlciA9PT0gMVwiIC8+XG4gIDxTb3J0QW1vdW50RG93bkljb25cbiAgICBbc3R5bGVDbGFzc109XCIncC1zb3J0YWJsZS1jb2x1bW4taWNvbidcIlxuICAgICpuZ0lmPVwic29ydE9yZGVyID09PSAtMVwiIC8+XG48L25nLWNvbnRhaW5lcj5cbjxzcGFuICpuZ0lmPVwidHQuc29ydEljb25UZW1wbGF0ZVwiIGNsYXNzPVwicC1zb3J0YWJsZS1jb2x1bW4taWNvblwiPlxuICA8bmctdGVtcGxhdGVcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgdHQuc29ydEljb25UZW1wbGF0ZTtcbiAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBzb3J0T3JkZXIgfVxuICAgIFwiPjwvbmctdGVtcGxhdGU+XG48L3NwYW4+XG48c3BhbiAqbmdJZj1cImlzTXVsdGlTb3J0ZWQoKVwiIGNsYXNzPVwicC1zb3J0YWJsZS1jb2x1bW4tYmFkZ2VcIj57e1xuICBnZXRCYWRnZVZhbHVlKClcbn19PC9zcGFuPlxuIl19
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS10YWJsZS1zb3J0LWljb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvdHJlZS10YWJsZS1zb3J0LWljb24vdHJlZS10YWJsZS1zb3J0LWljb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvdHJlZS10YWJsZS1zb3J0LWljb24vdHJlZS10YWJsZS1zb3J0LWljb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULEtBQUssRUFHTCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7O0FBWXBFLE1BQU0sT0FBTywwQkFBMEI7SUFPckMsWUFBbUIsRUFBYSxFQUFTLEVBQXFCO1FBQTNDLE9BQUUsR0FBRixFQUFFLENBQVc7UUFBUyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQU5yRCxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBSXBCLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFHWixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQzVELENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBVTtRQUNoQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtZQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2RTthQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssVUFBVSxFQUFFO1lBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQztRQUM3QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVmLElBQ0UsYUFBYTtZQUNiLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxLQUFLLFVBQVU7WUFDL0IsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ3hCO1lBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUMxRCxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUNWLE1BQU07aUJBQ1A7YUFDRjtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNqQztJQUNILENBQUM7O3VIQWxFVSwwQkFBMEI7MkdBQTFCLDBCQUEwQiw0R0N4QnZDLCtxQkFxQkEsMkNERlksWUFBWSwwU0FBRSxXQUFXLHdEQUFFLG1CQUFtQixnRUFBRSxrQkFBa0I7MkZBS2pFLDBCQUEwQjtrQkFSdEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsQ0FBQyxpQkFFOUQsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTtnSUFHdEMsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU29ydEFsdEljb24gfSBmcm9tICdwcmltZW5nL2ljb25zL3NvcnRhbHQnO1xuaW1wb3J0IHsgU29ydEFtb3VudERvd25JY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9zb3J0YW1vdW50ZG93bic7XG5pbXBvcnQgeyBTb3J0QW1vdW50VXBBbHRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9zb3J0YW1vdW50dXBhbHQnO1xuaW1wb3J0IHsgVHJlZVRhYmxlIH0gZnJvbSAncHJpbWVuZy90cmVldGFibGUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RyZWUtdGFibGUtc29ydC1pY29uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU29ydEFsdEljb24sIFNvcnRBbW91bnRVcEFsdEljb24sIFNvcnRBbW91bnREb3duSWNvbl0sXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLXRhYmxlLXNvcnQtaWNvbi5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVUYWJsZVNvcnRJY29uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBmaWVsZCA9ICcnO1xuXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHNvcnRPcmRlciA9IDA7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHR0OiBUcmVlVGFibGUsIHB1YmxpYyBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMudHQudGFibGVTZXJ2aWNlLnNvcnRTb3VyY2UkLnN1YnNjcmliZShcbiAgICAgIChzb3J0TWV0YSkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVNvcnRTdGF0ZSgpO1xuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZVNvcnRTdGF0ZSgpO1xuICB9XG5cbiAgb25DbGljayhldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHVwZGF0ZVNvcnRTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy50dC5zb3J0TW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHRoaXMuc29ydE9yZGVyID0gdGhpcy50dC5pc1NvcnRlZCh0aGlzLmZpZWxkKSA/IHRoaXMudHQuc29ydE9yZGVyIDogMDtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHQuc29ydE1vZGUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgIGNvbnN0IHNvcnRNZXRhID0gdGhpcy50dC5nZXRTb3J0TWV0YSh0aGlzLmZpZWxkKTtcbiAgICAgIHRoaXMuc29ydE9yZGVyID0gc29ydE1ldGEgPyBzb3J0TWV0YS5vcmRlciA6IDA7XG4gICAgfVxuICB9XG5cbiAgZ2V0TXVsdGlTb3J0TWV0YUluZGV4KCkge1xuICAgIGNvbnN0IG11bHRpU29ydE1ldGEgPSB0aGlzLnR0Ll9tdWx0aVNvcnRNZXRhO1xuICAgIGxldCBpbmRleCA9IC0xO1xuXG4gICAgaWYgKFxuICAgICAgbXVsdGlTb3J0TWV0YSAmJlxuICAgICAgdGhpcy50dC5zb3J0TW9kZSA9PT0gJ211bHRpcGxlJyAmJlxuICAgICAgbXVsdGlTb3J0TWV0YS5sZW5ndGggPiAxXG4gICAgKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG11bHRpU29ydE1ldGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IG11bHRpU29ydE1ldGFbaV07XG4gICAgICAgIGlmIChtZXRhLmZpZWxkID09PSB0aGlzLmZpZWxkIHx8IG1ldGEuZmllbGQgPT09IHRoaXMuZmllbGQpIHtcbiAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBnZXRCYWRnZVZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmdldE11bHRpU29ydE1ldGFJbmRleCgpICsgMTtcbiAgfVxuXG4gIGlzTXVsdGlTb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudHQuc29ydE1vZGUgPT09ICdtdWx0aXBsZScgJiYgdGhpcy5nZXRNdWx0aVNvcnRNZXRhSW5kZXgoKSA+IC0xO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0dC5zb3J0SWNvblRlbXBsYXRlXCI+XG4gIDxTb3J0QWx0SWNvblxuICAgIFtzdHlsZUNsYXNzXT1cIidwLXNvcnRhYmxlLWNvbHVtbi1pY29uJ1wiXG4gICAgKm5nSWY9XCJzb3J0T3JkZXIgPT09IDBcIiAvPlxuICA8U29ydEFtb3VudFVwQWx0SWNvblxuICAgIFtzdHlsZUNsYXNzXT1cIidwLXNvcnRhYmxlLWNvbHVtbi1pY29uJ1wiXG4gICAgKm5nSWY9XCJzb3J0T3JkZXIgPT09IDFcIiAvPlxuICA8U29ydEFtb3VudERvd25JY29uXG4gICAgW3N0eWxlQ2xhc3NdPVwiJ3Atc29ydGFibGUtY29sdW1uLWljb24nXCJcbiAgICAqbmdJZj1cInNvcnRPcmRlciA9PT0gLTFcIiAvPlxuPC9uZy1jb250YWluZXI+XG48c3BhbiAqbmdJZj1cInR0LnNvcnRJY29uVGVtcGxhdGVcIiBjbGFzcz1cInAtc29ydGFibGUtY29sdW1uLWljb25cIj5cbiAgPG5nLXRlbXBsYXRlXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgIHR0LnNvcnRJY29uVGVtcGxhdGU7XG4gICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogc29ydE9yZGVyIH1cbiAgICBcIj48L25nLXRlbXBsYXRlPlxuPC9zcGFuPlxuPHNwYW4gKm5nSWY9XCJpc011bHRpU29ydGVkKClcIiBjbGFzcz1cInAtc29ydGFibGUtY29sdW1uLWJhZGdlXCI+e3tcbiAgZ2V0QmFkZ2VWYWx1ZSgpXG59fTwvc3Bhbj5cbiJdfQ==
@@ -0,0 +1,499 @@
1
+ import { Component, EventEmitter, Input, Optional, Output, Self, ViewChild } from '@angular/core';
2
+ import { Subscription } from 'rxjs';
3
+ import { isEqual } from 'lodash-es';
4
+ import { convertSize } from '../../../utils/internal/size-utils';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/forms";
7
+ export class CpsBaseTreeDropdownComponent {
8
+ set options(options) {
9
+ if (options?.some((o) => o.inner)) {
10
+ this._options = options;
11
+ return;
12
+ }
13
+ this._options = this._toInnerOptions(options);
14
+ }
15
+ get options() {
16
+ return this._options;
17
+ }
18
+ set value(value) {
19
+ this._value = value;
20
+ this.onChange(value);
21
+ }
22
+ get value() {
23
+ return this._value;
24
+ }
25
+ constructor(control, cdRef) {
26
+ this.control = control;
27
+ this.cdRef = cdRef;
28
+ this.label = '';
29
+ this.hint = '';
30
+ this.multiple = false;
31
+ this.disabled = false;
32
+ this.width = '100%';
33
+ this.chips = true;
34
+ this.closableChips = true;
35
+ this.clearable = false;
36
+ this.openOnClear = true;
37
+ this.optionLabel = 'label';
38
+ this.optionInfo = 'info';
39
+ this.hideDetails = false;
40
+ this.persistentClear = false;
41
+ this.prefixIcon = '';
42
+ this.prefixIconSize = '18px';
43
+ this.loading = false;
44
+ this.virtualScroll = false;
45
+ this.numToleratedItems = 10;
46
+ this.infoTooltip = '';
47
+ this.infoTooltipClass = 'cps-tooltip-content';
48
+ this.infoTooltipMaxWidth = '100%';
49
+ this.infoTooltipPersistent = false;
50
+ this.infoTooltipPosition = 'top';
51
+ this.initialExpandDirectories = false;
52
+ this.initialExpandAll = false;
53
+ this._value = undefined;
54
+ this.valueChanged = new EventEmitter();
55
+ this._statusChangesSubscription = new Subscription();
56
+ this._options = [];
57
+ this.optionsMap = new Map();
58
+ this.originalOptionsMap = new Map();
59
+ this.virtualListHeight = 240;
60
+ this.virtualScrollItemSize = 40;
61
+ this.error = '';
62
+ this.cvtWidth = '';
63
+ this.isOpened = false;
64
+ this.optionFocused = false;
65
+ this.isAutocomplete = false;
66
+ this.boxWidth = 0;
67
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
68
+ this.onChange = (event) => { };
69
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
70
+ this.onTouched = () => { };
71
+ if (this.control) {
72
+ this.control.valueAccessor = this;
73
+ }
74
+ this.resizeObserver = new ResizeObserver((entries) => {
75
+ entries.forEach((entry) => {
76
+ if (entry?.target)
77
+ this.boxWidth = entry.target.offsetWidth;
78
+ });
79
+ });
80
+ }
81
+ ngOnInit() {
82
+ this.cvtWidth = convertSize(this.width);
83
+ if (!this._value) {
84
+ if (this.multiple) {
85
+ this._value = [];
86
+ this.treeSelection = [];
87
+ }
88
+ }
89
+ else {
90
+ this.treeSelection = this._valueToTreeSelection(this.value);
91
+ }
92
+ this._statusChangesSubscription = this.control?.statusChanges?.subscribe(() => {
93
+ this._checkErrors();
94
+ });
95
+ }
96
+ ngAfterViewInit() {
97
+ this._initContainerClickListener();
98
+ this.recalcVirtualListHeight();
99
+ this.resizeObserver.observe(this.boxEl.nativeElement);
100
+ this.cdRef.detectChanges();
101
+ }
102
+ ngOnDestroy() {
103
+ this._statusChangesSubscription?.unsubscribe();
104
+ this.treeContainerElement?.removeEventListener('click', this._handleOnContainerClick.bind(this));
105
+ this.resizeObserver?.disconnect();
106
+ }
107
+ _initContainerClickListener() {
108
+ this.treeContainerElement =
109
+ this.treeList?.el?.nativeElement?.querySelector('.p-tree-container');
110
+ if (this.treeContainerElement) {
111
+ this.treeContainerElement.addEventListener('click', this._handleOnContainerClick.bind(this));
112
+ }
113
+ }
114
+ _handleOnContainerClick(event) {
115
+ function getParentWithClass(element, className) {
116
+ let currentElement = element;
117
+ while (currentElement) {
118
+ if (currentElement.classList.contains(className)) {
119
+ return currentElement;
120
+ }
121
+ currentElement = currentElement.parentElement;
122
+ }
123
+ return null;
124
+ }
125
+ this.optionFocused = true;
126
+ const elem = event.target.classList.contains('p-treenode-content')
127
+ ? event.target
128
+ : getParentWithClass(event.target, 'p-treenode-content');
129
+ if (elem?.parentElement?.classList?.contains('cps-tree-node-fully-expandable')) {
130
+ this.onClickFullyExpandable(elem);
131
+ }
132
+ }
133
+ registerOnChange(fn) {
134
+ this.onChange = fn;
135
+ }
136
+ registerOnTouched(fn) {
137
+ this.onTouched = fn;
138
+ }
139
+ writeValue(value, internal = false) {
140
+ this.value = value;
141
+ if (!internal && value !== null) {
142
+ this.treeSelection = this._valueToTreeSelection(this.value);
143
+ }
144
+ }
145
+ updateValue(value) {
146
+ this.writeValue(value, true);
147
+ this.onChange(value);
148
+ this.valueChanged.emit(value);
149
+ }
150
+ onSelectNode() {
151
+ if (!this.multiple) {
152
+ this.toggleOptions(false);
153
+ }
154
+ }
155
+ onClickFullyExpandable(elem) {
156
+ const parent = elem.parentElement;
157
+ const key = this._getHTMLElementKey(parent);
158
+ if (!key)
159
+ return;
160
+ const treeNode = this.options.find((o) => o.key === key);
161
+ if (!treeNode)
162
+ return;
163
+ treeNode.expanded = !treeNode.expanded;
164
+ this.updateOptions();
165
+ setTimeout(() => {
166
+ this._nodeToggled(elem);
167
+ });
168
+ }
169
+ _getHTMLElementKey(elem) {
170
+ if (!elem?.classList)
171
+ return '';
172
+ const classList = [...elem.classList];
173
+ const key = classList.find((className) => {
174
+ return className.startsWith('key-');
175
+ });
176
+ if (!key)
177
+ return '';
178
+ return key.replace('key-', '');
179
+ }
180
+ treeSelectionChanged(selection) {
181
+ this.updateValue(this.treeSelectionToValue(selection));
182
+ }
183
+ recalcVirtualListHeight() {
184
+ if (!this.virtualScroll)
185
+ return;
186
+ const currentLen = this.treeList?.serializedValue?.length || 0;
187
+ this.virtualListHeight = Math.min(this.virtualScrollItemSize * currentLen, 240);
188
+ }
189
+ toggleOptions(show) {
190
+ if (this.disabled || this.isOpened === show)
191
+ return;
192
+ if (typeof show === 'boolean') {
193
+ if (show) {
194
+ this.optionsMenu.show({
195
+ target: this.boxEl.nativeElement
196
+ });
197
+ }
198
+ else {
199
+ this.optionsMenu.hide();
200
+ }
201
+ }
202
+ else {
203
+ this.optionsMenu.toggle({
204
+ target: this.boxEl.nativeElement
205
+ });
206
+ }
207
+ this.isOpened = this.optionsMenu.isVisible();
208
+ this.optionFocused = false;
209
+ if (this.isOpened && this.treeSelection) {
210
+ this._expandToNodes(this.multiple ? this.treeSelection : [this.treeSelection]);
211
+ this.updateOptions();
212
+ setTimeout(() => {
213
+ this.recalcVirtualListHeight();
214
+ const selected = this.treeContainerElement.querySelector('.p-highlight');
215
+ if (selected) {
216
+ selected.scrollIntoView({
217
+ behavior: 'instant',
218
+ block: 'nearest',
219
+ inline: 'center'
220
+ });
221
+ }
222
+ else if (this.virtualScroll && this.treeSelection) {
223
+ let key = '';
224
+ if (this.multiple) {
225
+ if (this.treeSelection.length > 0)
226
+ key = this.treeSelection[0].key;
227
+ }
228
+ else
229
+ key = this.treeSelection.key;
230
+ if (key) {
231
+ const idx = this.treeList?.serializedValue?.findIndex((v) => v.node.key === key) || -1;
232
+ if (idx >= 0)
233
+ this.treeList.scrollToVirtualIndex(idx);
234
+ }
235
+ }
236
+ });
237
+ }
238
+ }
239
+ remove(option) {
240
+ if (!this.multiple)
241
+ return;
242
+ this.treeSelection = this.treeSelection.filter((v) => !isEqual(v, option));
243
+ this.updateValue(this.treeSelectionToValue(this.treeSelection));
244
+ }
245
+ initArrowsNavigaton() {
246
+ if (!this.isOpened)
247
+ return;
248
+ if (!this.optionFocused) {
249
+ const firstElem = this.treeContainerElement?.querySelector('.p-treenode-content');
250
+ if (firstElem)
251
+ firstElem.focus();
252
+ this.optionFocused = true;
253
+ }
254
+ }
255
+ _nodeToggled(elem) {
256
+ this.recalcVirtualListHeight();
257
+ setTimeout(() => {
258
+ this.optionsMenu.align();
259
+ });
260
+ elem?.focus();
261
+ }
262
+ _nodeToggledWithChevron(elem) {
263
+ this._nodeToggled(elem);
264
+ // fix primeng tree event stop propagation
265
+ this.optionsMenu.selfClick = false;
266
+ }
267
+ onNodeExpand(event) {
268
+ this._nodeToggledWithChevron(event?.originalEvent?.currentTarget?.parentElement);
269
+ }
270
+ onNodeCollapse(event) {
271
+ this._nodeToggledWithChevron(event?.originalEvent?.currentTarget?.parentElement);
272
+ }
273
+ clear(event) {
274
+ event.stopPropagation();
275
+ if ((!this.multiple && this.treeSelection) ||
276
+ (this.multiple && this.treeSelection?.length > 0)) {
277
+ if (this.openOnClear) {
278
+ this.toggleOptions(true);
279
+ }
280
+ const val = this.multiple ? [] : undefined;
281
+ this.treeSelection = val;
282
+ this.updateValue(val);
283
+ }
284
+ this.optionFocused = false;
285
+ }
286
+ _checkErrors() {
287
+ const errors = this.control?.errors;
288
+ if (!this.control?.control?.touched || !errors) {
289
+ this.error = '';
290
+ return;
291
+ }
292
+ if ('required' in errors) {
293
+ this.error = 'Field is required';
294
+ return;
295
+ }
296
+ const errArr = Object.values(errors);
297
+ if (errArr.length < 1) {
298
+ this.error = '';
299
+ return;
300
+ }
301
+ const message = errArr.find((msg) => typeof msg === 'string');
302
+ this.error = message || 'Unknown error';
303
+ }
304
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
305
+ setDisabledState(disabled) { }
306
+ onBlur() {
307
+ this.control?.control?.markAsTouched();
308
+ this._checkErrors();
309
+ }
310
+ focus() {
311
+ this.componentContainer?.nativeElement?.focus();
312
+ this.toggleOptions(true);
313
+ }
314
+ _expandToNodes(nodes) {
315
+ function getParentKey(key) {
316
+ const lastSeparatorIndex = key.lastIndexOf('-');
317
+ if (lastSeparatorIndex !== -1) {
318
+ return key.substring(0, lastSeparatorIndex);
319
+ }
320
+ return '';
321
+ }
322
+ nodes.forEach((node) => {
323
+ const parentNodeKey = getParentKey(node.key);
324
+ const parentNode = this.optionsMap.get(parentNodeKey) || null;
325
+ if (parentNode) {
326
+ parentNode.expanded = true;
327
+ this._expandToNodes([parentNode]);
328
+ }
329
+ });
330
+ }
331
+ _toInnerOptions(_options) {
332
+ const mapOption = (o, optionLabel, optionInfo, key, originalOptionsMap) => {
333
+ const inner = {
334
+ inner: true,
335
+ label: o[optionLabel],
336
+ info: o[optionInfo],
337
+ key,
338
+ styleClass: 'key-' + key
339
+ };
340
+ if (this.initialExpandAll) {
341
+ inner.expanded = true;
342
+ }
343
+ if (o.isDirectory) {
344
+ inner.type = 'directory';
345
+ inner.selectable = false;
346
+ inner.styleClass += ' cps-tree-node-fully-expandable';
347
+ if (this.initialExpandDirectories) {
348
+ inner.expanded = true;
349
+ }
350
+ }
351
+ if (o.children) {
352
+ inner.children = o.children.map((c, index) => {
353
+ return mapOption(c, optionLabel, optionInfo, key + '-' + index, originalOptionsMap);
354
+ });
355
+ }
356
+ originalOptionsMap.set(key, o);
357
+ return inner;
358
+ };
359
+ const res = _options.map((option, index) => {
360
+ return mapOption(option, this.optionLabel, this.optionInfo, '' + index, this.originalOptionsMap);
361
+ });
362
+ this.optionsMap = this._buildOptionsMap(res);
363
+ return res;
364
+ }
365
+ _buildOptionsMap(options) {
366
+ const nodeMap = new Map();
367
+ for (const option of options) {
368
+ nodeMap.set(option.key, option);
369
+ if (option.children) {
370
+ const childNodeMap = this._buildOptionsMap(option.children);
371
+ childNodeMap.forEach((value, key) => nodeMap.set(key, value));
372
+ }
373
+ }
374
+ return nodeMap;
375
+ }
376
+ treeSelectionToValue(selection) {
377
+ if (!selection)
378
+ return this.multiple ? [] : undefined;
379
+ if (this.multiple) {
380
+ return selection.map((s) => this.originalOptionsMap.get(s.key));
381
+ }
382
+ else {
383
+ return this.originalOptionsMap.get(selection.key);
384
+ }
385
+ }
386
+ _valueToTreeSelection(value) {
387
+ function getKey(v, map) {
388
+ for (const [key, val] of map.entries()) {
389
+ if (isEqual(v, val)) {
390
+ return key;
391
+ }
392
+ }
393
+ return '';
394
+ }
395
+ if (!value)
396
+ return this.multiple ? [] : undefined;
397
+ if (this.multiple) {
398
+ const res = [];
399
+ value.forEach((v) => {
400
+ const key = getKey(v, this.originalOptionsMap);
401
+ if (key)
402
+ res.push(this.optionsMap.get(key));
403
+ });
404
+ return res;
405
+ }
406
+ else {
407
+ const key = getKey(value, this.originalOptionsMap);
408
+ return key ? this.optionsMap.get(key) : undefined;
409
+ }
410
+ }
411
+ // this is a fix of primeng change detection bug when virtual scroller is enabled
412
+ updateOptions() {
413
+ if (!this.virtualScroll)
414
+ return;
415
+ this.options = [...this.options];
416
+ }
417
+ }
418
+ CpsBaseTreeDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsBaseTreeDropdownComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
419
+ CpsBaseTreeDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsBaseTreeDropdownComponent, selector: "ng-component", inputs: { label: "label", hint: "hint", multiple: "multiple", disabled: "disabled", width: "width", chips: "chips", closableChips: "closableChips", clearable: "clearable", openOnClear: "openOnClear", optionLabel: "optionLabel", optionInfo: "optionInfo", hideDetails: "hideDetails", persistentClear: "persistentClear", prefixIcon: "prefixIcon", prefixIconSize: "prefixIconSize", loading: "loading", virtualScroll: "virtualScroll", numToleratedItems: "numToleratedItems", infoTooltip: "infoTooltip", infoTooltipClass: "infoTooltipClass", infoTooltipMaxWidth: "infoTooltipMaxWidth", infoTooltipPersistent: "infoTooltipPersistent", infoTooltipPosition: "infoTooltipPosition", initialExpandDirectories: "initialExpandDirectories", initialExpandAll: "initialExpandAll", options: "options", _value: ["value", "_value"] }, outputs: { valueChanged: "valueChanged" }, viewQueries: [{ propertyName: "componentContainer", first: true, predicate: ["componentContainer"], descendants: true }, { propertyName: "optionsMenu", first: true, predicate: ["optionsMenu"], descendants: true }, { propertyName: "treeList", first: true, predicate: ["treeList"], descendants: true }, { propertyName: "boxEl", first: true, predicate: ["boxEl"], descendants: true }], ngImport: i0, template: '', isInline: true });
420
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsBaseTreeDropdownComponent, decorators: [{
421
+ type: Component,
422
+ args: [{
423
+ template: ''
424
+ }]
425
+ }], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
426
+ type: Self
427
+ }, {
428
+ type: Optional
429
+ }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { label: [{
430
+ type: Input
431
+ }], hint: [{
432
+ type: Input
433
+ }], multiple: [{
434
+ type: Input
435
+ }], disabled: [{
436
+ type: Input
437
+ }], width: [{
438
+ type: Input
439
+ }], chips: [{
440
+ type: Input
441
+ }], closableChips: [{
442
+ type: Input
443
+ }], clearable: [{
444
+ type: Input
445
+ }], openOnClear: [{
446
+ type: Input
447
+ }], optionLabel: [{
448
+ type: Input
449
+ }], optionInfo: [{
450
+ type: Input
451
+ }], hideDetails: [{
452
+ type: Input
453
+ }], persistentClear: [{
454
+ type: Input
455
+ }], prefixIcon: [{
456
+ type: Input
457
+ }], prefixIconSize: [{
458
+ type: Input
459
+ }], loading: [{
460
+ type: Input
461
+ }], virtualScroll: [{
462
+ type: Input
463
+ }], numToleratedItems: [{
464
+ type: Input
465
+ }], infoTooltip: [{
466
+ type: Input
467
+ }], infoTooltipClass: [{
468
+ type: Input
469
+ }], infoTooltipMaxWidth: [{
470
+ type: Input
471
+ }], infoTooltipPersistent: [{
472
+ type: Input
473
+ }], infoTooltipPosition: [{
474
+ type: Input
475
+ }], initialExpandDirectories: [{
476
+ type: Input
477
+ }], initialExpandAll: [{
478
+ type: Input
479
+ }], options: [{
480
+ type: Input
481
+ }], _value: [{
482
+ type: Input,
483
+ args: ['value']
484
+ }], valueChanged: [{
485
+ type: Output
486
+ }], componentContainer: [{
487
+ type: ViewChild,
488
+ args: ['componentContainer']
489
+ }], optionsMenu: [{
490
+ type: ViewChild,
491
+ args: ['optionsMenu']
492
+ }], treeList: [{
493
+ type: ViewChild,
494
+ args: ['treeList']
495
+ }], boxEl: [{
496
+ type: ViewChild,
497
+ args: ['boxEl']
498
+ }] } });
499
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLWJhc2UtdHJlZS1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9pbnRlcm5hbC9jcHMtYmFzZS10cmVlLWRyb3Bkb3duL2Nwcy1iYXNlLXRyZWUtZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBT2pFLE1BQU0sT0FBTyw0QkFBNEI7SUE2QnZDLElBQWEsT0FBTyxDQUFDLE9BQWM7UUFDakMsSUFBSSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDeEIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUlELElBQUksS0FBSyxDQUFDLEtBQVU7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxL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REosU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNlbGYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJlZSB9IGZyb20gJ3ByaW1lbmcvdHJlZSc7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEljb25UeXBlLCBpY29uU2l6ZVR5cGUgfSBmcm9tICcuLi8uLi9jcHMtaWNvbi9jcHMtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgY29udmVydFNpemUgfSBmcm9tICcuLi8uLi8uLi91dGlscy9pbnRlcm5hbC9zaXplLXV0aWxzJztcbmltcG9ydCB7IENwc1Rvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvY3BzLXRvb2x0aXAuZGlyZWN0aXZlJztcbmltcG9ydCB7IENwc01lbnVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jcHMtbWVudS9jcHMtbWVudS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGNsYXNzIENwc0Jhc2VUcmVlRHJvcGRvd25Db21wb25lbnRcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgQElucHV0KCkgaGludCA9ICcnO1xuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSB3aWR0aDogbnVtYmVyIHwgc3RyaW5nID0gJzEwMCUnO1xuICBASW5wdXQoKSBjaGlwcyA9IHRydWU7XG4gIEBJbnB1dCgpIGNsb3NhYmxlQ2hpcHMgPSB0cnVlO1xuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgb3Blbk9uQ2xlYXIgPSB0cnVlO1xuICBASW5wdXQoKSBvcHRpb25MYWJlbCA9ICdsYWJlbCc7XG4gIEBJbnB1dCgpIG9wdGlvbkluZm8gPSAnaW5mbyc7XG4gIEBJbnB1dCgpIGhpZGVEZXRhaWxzID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBlcnNpc3RlbnRDbGVhciA9IGZhbHNlO1xuICBASW5wdXQoKSBwcmVmaXhJY29uOiBJY29uVHlwZSA9ICcnO1xuICBASW5wdXQoKSBwcmVmaXhJY29uU2l6ZTogaWNvblNpemVUeXBlID0gJzE4cHgnO1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG4gIEBJbnB1dCgpIHZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcbiAgQElucHV0KCkgbnVtVG9sZXJhdGVkSXRlbXMgPSAxMDtcbiAgQElucHV0KCkgaW5mb1Rvb2x0aXAgPSAnJztcbiAgQElucHV0KCkgaW5mb1Rvb2x0aXBDbGFzcyA9ICdjcHMtdG9vbHRpcC1jb250ZW50JztcbiAgQElucHV0KCkgaW5mb1Rvb2x0aXBNYXhXaWR0aDogbnVtYmVyIHwgc3RyaW5nID0gJzEwMCUnO1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcFBlcnNpc3RlbnQgPSBmYWxzZTtcbiAgQElucHV0KCkgaW5mb1Rvb2x0aXBQb3NpdGlvbjogQ3BzVG9vbHRpcFBvc2l0aW9uID0gJ3RvcCc7XG4gIEBJbnB1dCgpIGluaXRpYWxFeHBhbmREaXJlY3RvcmllcyA9IGZhbHNlO1xuICBASW5wdXQoKSBpbml0aWFsRXhwYW5kQWxsID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2V0IG9wdGlvbnMob3B0aW9uczogYW55W10pIHtcbiAgICBpZiAob3B0aW9ucz8uc29tZSgobykgPT4gby5pbm5lcikpIHtcbiAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX29wdGlvbnMgPSB0aGlzLl90b0lubmVyT3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIGdldCBvcHRpb25zKCk6IFRyZWVOb2RlW10ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG5cbiAgQElucHV0KCd2YWx1ZScpIF92YWx1ZTogYW55ID0gdW5kZWZpbmVkO1xuXG4gIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAVmlld0NoaWxkKCdjb21wb25lbnRDb250YWluZXInKVxuICBjb21wb25lbnRDb250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ29wdGlvbnNNZW51JylcbiAgb3B0aW9uc01lbnUhOiBDcHNNZW51Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ3RyZWVMaXN0JykgdHJlZUxpc3QhOiBUcmVlO1xuXG4gIEBWaWV3Q2hpbGQoJ2JveEVsJylcbiAgYm94RWwhOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgX3N0YXR1c0NoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBfb3B0aW9uczogVHJlZU5vZGVbXSA9IFtdO1xuICBvcHRpb25zTWFwID0gbmV3IE1hcDxzdHJpbmcsIFRyZWVOb2RlPigpO1xuICBvcmlnaW5hbE9wdGlvbnNNYXAgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuXG4gIHZpcnR1YWxMaXN0SGVpZ2h0ID0gMjQwO1xuICB2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSA0MDtcblxuICBlcnJvciA9ICcnO1xuICBjdnRXaWR0aCA9ICcnO1xuICBpc09wZW5lZCA9IGZhbHNlO1xuICBvcHRpb25Gb2N1c2VkID0gZmFsc2U7XG4gIGlzQXV0b2NvbXBsZXRlID0gZmFsc2U7XG5cbiAgdHJlZUNvbnRhaW5lckVsZW1lbnQhOiBIVE1MRWxlbWVudDtcbiAgdHJlZVNlbGVjdGlvbjogYW55O1xuXG4gIGJveFdpZHRoID0gMDtcbiAgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHVibGljIGNvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBwdWJsaWMgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgIHRoaXMuY29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICBpZiAoZW50cnk/LnRhcmdldCkgdGhpcy5ib3hXaWR0aCA9IChlbnRyeS50YXJnZXQgYXMgYW55KS5vZmZzZXRXaWR0aDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jdnRXaWR0aCA9IGNvbnZlcnRTaXplKHRoaXMud2lkdGgpO1xuICAgIGlmICghdGhpcy5fdmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gW107XG4gICAgICAgIHRoaXMudHJlZVNlbGVjdGlvbiA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyZWVTZWxlY3Rpb24gPSB0aGlzLl92YWx1ZVRvVHJlZVNlbGVjdGlvbih0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy5jb250cm9sPy5zdGF0dXNDaGFuZ2VzPy5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoZWNrRXJyb3JzKCk7XG4gICAgICB9XG4gICAgKSBhcyBTdWJzY3JpcHRpb247XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5faW5pdENvbnRhaW5lckNsaWNrTGlzdGVuZXIoKTtcbiAgICB0aGlzLnJlY2FsY1ZpcnR1YWxMaXN0SGVpZ2h0KCk7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuYm94RWwubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy50cmVlQ29udGFpbmVyRWxlbWVudD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICdjbGljaycsXG4gICAgICB0aGlzLl9oYW5kbGVPbkNvbnRhaW5lckNsaWNrLmJpbmQodGhpcylcbiAgICApO1xuXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdENvbnRhaW5lckNsaWNrTGlzdGVuZXIoKSB7XG4gICAgdGhpcy50cmVlQ29udGFpbmVyRWxlbWVudCA9XG4gICAgICB0aGlzLnRyZWVMaXN0Py5lbD8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcignLnAtdHJlZS1jb250YWluZXInKTtcbiAgICBpZiAodGhpcy50cmVlQ29udGFpbmVyRWxlbWVudCkge1xuICAgICAgdGhpcy50cmVlQ29udGFpbmVyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnY2xpY2snLFxuICAgICAgICB0aGlzLl9oYW5kbGVPbkNvbnRhaW5lckNsaWNrLmJpbmQodGhpcylcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlT25Db250YWluZXJDbGljayhldmVudDogYW55KSB7XG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50V2l0aENsYXNzKFxuICAgICAgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsLFxuICAgICAgY2xhc3NOYW1lOiBzdHJpbmdcbiAgICApIHtcbiAgICAgIGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICB3aGlsZSAoY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnRFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9uRm9jdXNlZCA9IHRydWU7XG5cbiAgICBjb25zdCBlbGVtID0gZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygncC10cmVlbm9kZS1jb250ZW50JylcbiAgICAgID8gZXZlbnQudGFyZ2V0XG4gICAgICA6IGdldFBhcmVudFdpdGhDbGFzcyhldmVudC50YXJnZXQsICdwLXRyZWVub2RlLWNvbnRlbnQnKTtcblxuICAgIGlmIChcbiAgICAgIGVsZW0/LnBhcmVudEVsZW1lbnQ/LmNsYXNzTGlzdD8uY29udGFpbnMoJ2Nwcy10cmVlLW5vZGUtZnVsbHktZXhwYW5kYWJsZScpXG4gICAgKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tGdWxseUV4cGFuZGFibGUoZWxlbSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvbkNoYW5nZSA9IChldmVudDogYW55KSA9PiB7fTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55LCBpbnRlcm5hbCA9IGZhbHNlKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIGlmICghaW50ZXJuYWwgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMudHJlZVNlbGVjdGlvbiA9IHRoaXMuX3ZhbHVlVG9UcmVlU2VsZWN0aW9uKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUsIHRydWUpO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgb25TZWxlY3ROb2RlKCkge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy50b2dnbGVPcHRpb25zKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBvbkNsaWNrRnVsbHlFeHBhbmRhYmxlKGVsZW06IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50ID0gZWxlbS5wYXJlbnRFbGVtZW50O1xuICAgIGNvbnN0IGtleSA9IHRoaXMuX2dldEhUTUxFbGVtZW50S2V5KHBhcmVudCk7XG4gICAgaWYgKCFrZXkpIHJldHVybjtcblxuICAgIGNvbnN0IHRyZWVOb2RlID0gdGhpcy5vcHRpb25zLmZpbmQoKG8pID0+IG8ua2V5ID09PSBrZXkpO1xuICAgIGlmICghdHJlZU5vZGUpIHJldHVybjtcblxuICAgIHRyZWVOb2RlLmV4cGFuZGVkID0gIXRyZWVOb2RlLmV4cGFuZGVkO1xuICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fbm9kZVRvZ2dsZWQoZWxlbSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRIVE1MRWxlbWVudEtleShlbGVtOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghZWxlbT8uY2xhc3NMaXN0KSByZXR1cm4gJyc7XG4gICAgY29uc3QgY2xhc3NMaXN0ID0gWy4uLmVsZW0uY2xhc3NMaXN0XTtcbiAgICBjb25zdCBrZXkgPSBjbGFzc0xpc3QuZmluZCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBjbGFzc05hbWUuc3RhcnRzV2l0aCgna2V5LScpO1xuICAgIH0pO1xuICAgIGlmICgha2V5KSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIGtleS5yZXBsYWNlKCdrZXktJywgJycpO1xuICB9XG5cbiAgdHJlZVNlbGVjdGlvbkNoYW5nZWQoc2VsZWN0aW9uOiBhbnkpIHtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHRoaXMudHJlZVNlbGVjdGlvblRvVmFsdWUoc2VsZWN0aW9uKSk7XG4gIH1cblxuICByZWNhbGNWaXJ0dWFsTGlzdEhlaWdodCgpIHtcbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbCkgcmV0dXJuO1xuICAgIGNvbnN0IGN1cnJlbnRMZW4gPSB0aGlzLnRyZWVMaXN0Py5zZXJpYWxpemVkVmFsdWU/Lmxlbmd0aCB8fCAwO1xuICAgIHRoaXMudmlydHVhbExpc3RIZWlnaHQgPSBNYXRoLm1pbihcbiAgICAgIHRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplICogY3VycmVudExlbixcbiAgICAgIDI0MFxuICAgICk7XG4gIH1cblxuICB0b2dnbGVPcHRpb25zKHNob3c/OiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5pc09wZW5lZCA9PT0gc2hvdykgcmV0dXJuO1xuXG4gICAgaWYgKHR5cGVvZiBzaG93ID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGlmIChzaG93KSB7XG4gICAgICAgIHRoaXMub3B0aW9uc01lbnUuc2hvdyh7XG4gICAgICAgICAgdGFyZ2V0OiB0aGlzLmJveEVsLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnNNZW51LmhpZGUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zTWVudS50b2dnbGUoe1xuICAgICAgICB0YXJnZXQ6IHRoaXMuYm94RWwubmF0aXZlRWxlbWVudFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5pc09wZW5lZCA9IHRoaXMub3B0aW9uc01lbnUuaXNWaXNpYmxlKCk7XG5cbiAgICB0aGlzLm9wdGlvbkZvY3VzZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc09wZW5lZCAmJiB0aGlzLnRyZWVTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuX2V4cGFuZFRvTm9kZXMoXG4gICAgICAgIHRoaXMubXVsdGlwbGUgPyB0aGlzLnRyZWVTZWxlY3Rpb24gOiBbdGhpcy50cmVlU2VsZWN0aW9uXVxuICAgICAgKTtcbiAgICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVjYWxjVmlydHVhbExpc3RIZWlnaHQoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnRyZWVDb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgJy5wLWhpZ2hsaWdodCdcbiAgICAgICAgKSBhcyBhbnk7XG4gICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgIHNlbGVjdGVkLnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnaW5zdGFudCcsXG4gICAgICAgICAgICBibG9jazogJ25lYXJlc3QnLFxuICAgICAgICAgICAgaW5saW5lOiAnY2VudGVyJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlydHVhbFNjcm9sbCAmJiB0aGlzLnRyZWVTZWxlY3Rpb24pIHtcbiAgICAgICAgICBsZXQga2V5ID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVTZWxlY3Rpb24ubGVuZ3RoID4gMCkga2V5ID0gdGhpcy50cmVlU2VsZWN0aW9uWzBdLmtleTtcbiAgICAgICAgICB9IGVsc2Uga2V5ID0gdGhpcy50cmVlU2VsZWN0aW9uLmtleTtcbiAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPVxuICAgICAgICAgICAgICB0aGlzLnRyZWVMaXN0Py5zZXJpYWxpemVkVmFsdWU/LmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAodikgPT4gdi5ub2RlLmtleSA9PT0ga2V5XG4gICAgICAgICAgICAgICkgfHwgLTE7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHRoaXMudHJlZUxpc3Quc2Nyb2xsVG9WaXJ0dWFsSW5kZXgoaWR4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZShvcHRpb246IFRyZWVOb2RlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSByZXR1cm47XG5cbiAgICB0aGlzLnRyZWVTZWxlY3Rpb24gPSB0aGlzLnRyZWVTZWxlY3Rpb24uZmlsdGVyKFxuICAgICAgKHY6IFRyZWVOb2RlKSA9PiAhaXNFcXVhbCh2LCBvcHRpb24pXG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHRoaXMudHJlZVNlbGVjdGlvblRvVmFsdWUodGhpcy50cmVlU2VsZWN0aW9uKSk7XG4gIH1cblxuICBpbml0QXJyb3dzTmF2aWdhdG9uKCkge1xuICAgIGlmICghdGhpcy5pc09wZW5lZCkgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLm9wdGlvbkZvY3VzZWQpIHtcbiAgICAgIGNvbnN0IGZpcnN0RWxlbSA9IHRoaXMudHJlZUNvbnRhaW5lckVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcucC10cmVlbm9kZS1jb250ZW50J1xuICAgICAgKTtcbiAgICAgIGlmIChmaXJzdEVsZW0pIChmaXJzdEVsZW0gYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG4gICAgICB0aGlzLm9wdGlvbkZvY3VzZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX25vZGVUb2dnbGVkKGVsZW06IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5yZWNhbGNWaXJ0dWFsTGlzdEhlaWdodCgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5vcHRpb25zTWVudS5hbGlnbigpO1xuICAgIH0pO1xuICAgIGVsZW0/LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIF9ub2RlVG9nZ2xlZFdpdGhDaGV2cm9uKGVsZW06IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5fbm9kZVRvZ2dsZWQoZWxlbSk7XG4gICAgLy8gZml4IHByaW1lbmcgdHJlZSBldmVudCBzdG9wIHByb3BhZ2F0aW9uXG4gICAgdGhpcy5vcHRpb25zTWVudS5zZWxmQ2xpY2sgPSBmYWxzZTtcbiAgfVxuXG4gIG9uTm9kZUV4cGFuZChldmVudDogYW55KSB7XG4gICAgdGhpcy5fbm9kZVRvZ2dsZWRXaXRoQ2hldnJvbihcbiAgICAgIGV2ZW50Py5vcmlnaW5hbEV2ZW50Py5jdXJyZW50VGFyZ2V0Py5wYXJlbnRFbGVtZW50XG4gICAgKTtcbiAgfVxuXG4gIG9uTm9kZUNvbGxhcHNlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLl9ub2RlVG9nZ2xlZFdpdGhDaGV2cm9uKFxuICAgICAgZXZlbnQ/Lm9yaWdpbmFsRXZlbnQ/LmN1cnJlbnRUYXJnZXQ/LnBhcmVudEVsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgY2xlYXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKFxuICAgICAgKCF0aGlzLm11bHRpcGxlICYmIHRoaXMudHJlZVNlbGVjdGlvbikgfHxcbiAgICAgICh0aGlzLm11bHRpcGxlICYmIHRoaXMudHJlZVNlbGVjdGlvbj8ubGVuZ3RoID4gMClcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLm9wZW5PbkNsZWFyKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlT3B0aW9ucyh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbCA9IHRoaXMubXVsdGlwbGUgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudHJlZVNlbGVjdGlvbiA9IHZhbDtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUodmFsKTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25Gb2N1c2VkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF9jaGVja0Vycm9ycygpOiB2b2lkIHtcbiAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmNvbnRyb2w/LmVycm9ycztcblxuICAgIGlmICghdGhpcy5jb250cm9sPy5jb250cm9sPy50b3VjaGVkIHx8ICFlcnJvcnMpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoJ3JlcXVpcmVkJyBpbiBlcnJvcnMpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSAnRmllbGQgaXMgcmVxdWlyZWQnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVyckFyciA9IE9iamVjdC52YWx1ZXMoZXJyb3JzKTtcbiAgICBpZiAoZXJyQXJyLmxlbmd0aCA8IDEpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyckFyci5maW5kKChtc2cpID0+IHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKTtcblxuICAgIHRoaXMuZXJyb3IgPSBtZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJztcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbikge31cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5jb250cm9sPy5jb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgdGhpcy5fY2hlY2tFcnJvcnMoKTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIHRoaXMuY29tcG9uZW50Q29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuICAgIHRoaXMudG9nZ2xlT3B0aW9ucyh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2V4cGFuZFRvTm9kZXMobm9kZXM6IGFueVtdKSB7XG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50S2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIGNvbnN0IGxhc3RTZXBhcmF0b3JJbmRleCA9IGtleS5sYXN0SW5kZXhPZignLScpO1xuICAgICAgaWYgKGxhc3RTZXBhcmF0b3JJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGtleS5zdWJzdHJpbmcoMCwgbGFzdFNlcGFyYXRvckluZGV4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnROb2RlS2V5ID0gZ2V0UGFyZW50S2V5KG5vZGUua2V5KTtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLm9wdGlvbnNNYXAuZ2V0KHBhcmVudE5vZGVLZXkpIHx8IG51bGw7XG5cbiAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgIHBhcmVudE5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9leHBhbmRUb05vZGVzKFtwYXJlbnROb2RlXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF90b0lubmVyT3B0aW9ucyhfb3B0aW9uczogYW55W10pOiBUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBtYXBPcHRpb24gPSAoXG4gICAgICBvOiBhbnksXG4gICAgICBvcHRpb25MYWJlbDogc3RyaW5nLFxuICAgICAgb3B0aW9uSW5mbzogc3RyaW5nLFxuICAgICAga2V5OiBzdHJpbmcsXG4gICAgICBvcmlnaW5hbE9wdGlvbnNNYXA6IGFueVxuICAgICkgPT4ge1xuICAgICAgY29uc3QgaW5uZXIgPSB7XG4gICAgICAgIGlubmVyOiB0cnVlLFxuICAgICAgICBsYWJlbDogb1tvcHRpb25MYWJlbF0sXG4gICAgICAgIGluZm86IG9bb3B0aW9uSW5mb10sXG4gICAgICAgIGtleSxcbiAgICAgICAgc3R5bGVDbGFzczogJ2tleS0nICsga2V5XG4gICAgICB9IGFzIFRyZWVOb2RlO1xuXG4gICAgICBpZiAodGhpcy5pbml0aWFsRXhwYW5kQWxsKSB7XG4gICAgICAgIGlubmVyLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG8uaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgaW5uZXIudHlwZSA9ICdkaXJlY3RvcnknO1xuICAgICAgICBpbm5lci5zZWxlY3RhYmxlID0gZmFsc2U7XG4gICAgICAgIGlubmVyLnN0eWxlQ2xhc3MgKz0gJyBjcHMtdHJlZS1ub2RlLWZ1bGx5LWV4cGFuZGFibGUnO1xuICAgICAgICBpZiAodGhpcy5pbml0aWFsRXhwYW5kRGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICBpbm5lci5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvLmNoaWxkcmVuKSB7XG4gICAgICAgIGlubmVyLmNoaWxkcmVuID0gby5jaGlsZHJlbi5tYXAoKGM6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHJldHVybiBtYXBPcHRpb24oXG4gICAgICAgICAgICBjLFxuICAgICAgICAgICAgb3B0aW9uTGFiZWwsXG4gICAgICAgICAgICBvcHRpb25JbmZvLFxuICAgICAgICAgICAga2V5ICsgJy0nICsgaW5kZXgsXG4gICAgICAgICAgICBvcmlnaW5hbE9wdGlvbnNNYXBcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIG9yaWdpbmFsT3B0aW9uc01hcC5zZXQoa2V5LCBvKTtcbiAgICAgIHJldHVybiBpbm5lcjtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzID0gX29wdGlvbnMubWFwKChvcHRpb24sIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gbWFwT3B0aW9uKFxuICAgICAgICBvcHRpb24sXG4gICAgICAgIHRoaXMub3B0aW9uTGFiZWwsXG4gICAgICAgIHRoaXMub3B0aW9uSW5mbyxcbiAgICAgICAgJycgKyBpbmRleCxcbiAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnNNYXBcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9wdGlvbnNNYXAgPSB0aGlzLl9idWlsZE9wdGlvbnNNYXAocmVzKTtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcml2YXRlIF9idWlsZE9wdGlvbnNNYXAob3B0aW9uczogYW55W10pOiBNYXA8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBub2RlTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICBub2RlTWFwLnNldChvcHRpb24ua2V5LCBvcHRpb24pO1xuICAgICAgaWYgKG9wdGlvbi5jaGlsZHJlbikge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVNYXAgPSB0aGlzLl9idWlsZE9wdGlvbnNNYXAob3B0aW9uLmNoaWxkcmVuKTtcbiAgICAgICAgY2hpbGROb2RlTWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IG5vZGVNYXAuc2V0KGtleSwgdmFsdWUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vZGVNYXA7XG4gIH1cblxuICB0cmVlU2VsZWN0aW9uVG9WYWx1ZShzZWxlY3Rpb246IGFueSkge1xuICAgIGlmICghc2VsZWN0aW9uKSByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IFtdIDogdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICByZXR1cm4gc2VsZWN0aW9uLm1hcCgoczogYW55KSA9PiB0aGlzLm9yaWdpbmFsT3B0aW9uc01hcC5nZXQocy5rZXkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxPcHRpb25zTWFwLmdldChzZWxlY3Rpb24ua2V5KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZVRvVHJlZVNlbGVjdGlvbih2YWx1ZTogYW55KSB7XG4gICAgZnVuY3Rpb24gZ2V0S2V5KHY6IGFueSwgbWFwOiBNYXA8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBtYXAuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChpc0VxdWFsKHYsIHZhbCkpIHtcbiAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHRoaXMubXVsdGlwbGUgPyBbXSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICBjb25zdCByZXMgPSBbXSBhcyBUcmVlTm9kZVtdO1xuICAgICAgdmFsdWUuZm9yRWFjaCgodjogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IGdldEtleSh2LCB0aGlzLm9yaWdpbmFsT3B0aW9uc01hcCk7XG4gICAgICAgIGlmIChrZXkpIHJlcy5wdXNoKHRoaXMub3B0aW9uc01hcC5nZXQoa2V5KSBhcyBUcmVlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IGdldEtleSh2YWx1ZSwgdGhpcy5vcmlnaW5hbE9wdGlvbnNNYXApO1xuICAgICAgcmV0dXJuIGtleSA/IHRoaXMub3B0aW9uc01hcC5nZXQoa2V5KSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyB0aGlzIGlzIGEgZml4IG9mIHByaW1lbmcgY2hhbmdlIGRldGVjdGlvbiBidWcgd2hlbiB2aXJ0dWFsIHNjcm9sbGVyIGlzIGVuYWJsZWRcbiAgdXBkYXRlT3B0aW9ucygpIHtcbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbCkgcmV0dXJuO1xuICAgIHRoaXMub3B0aW9ucyA9IFsuLi50aGlzLm9wdGlvbnNdO1xuICB9XG59XG4iXX0=