@cuby-ui/core 0.0.574 → 0.0.576

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.
@@ -63,7 +63,7 @@ export class CuiCategoriesTreeComponent {
63
63
  }, { allowSignalWrites: true });
64
64
  }
65
65
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiCategoriesTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
66
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CuiCategoriesTreeComponent, isStandalone: true, selector: "cui-categories-tree", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, providers: [CuiCategoryTreeStateService], viewQueries: [{ propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true, isSignal: true }], ngImport: i0, template: "<button\n #dropdown=\"cuiDropdown\"\n [cuiDropdown]=\"dropdownContent\"\n orientation=\"stretch\"\n type=\"button\"\n class=\"target\"\n [disabled]=\"disabled()\"\n (click)=\"onOpenStorages()\"\n>\n <ng-content />\n</button>\n\n<ng-template #dropdownContent>\n <cui-dropdown-wrapper\n *transloco=\"let t\"\n [title]=\"t('SELECT_OR_CREATE_CATEGORY')\"\n width=\"100%\"\n class=\"dropdown-wrapper\"\n >\n <ng-container *cuiLet=\"storages() as storages\">\n @if (storages && storages.length) {\n <cui-categories-tree-list\n [storages]=\"storages\"\n (deleted)=\"onItemDeleted($event)\"\n />\n }\n @if (isCreateCategoryControlVisible()) {\n <cui-create-category-tree-item\n class=\"create-category\"\n [isDisabled]=\"isCategoryCreationLoading()\"\n (created)=\"onCreateNewCategory($event)\"\n (canceled)=\"onCreatingCategoryCanceled()\"\n />\n } @else if (!storages?.length) {\n <cui-empty-state\n class=\"empty\"\n [subtitle]=\"t('NO_CATEGORY_TO_VIEW_YET')\"\n />\n }\n </ng-container>\n <button\n ccDropdownFooterContent\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconPlus\"\n (click)=\"onStartCreatingNewCategory()\"\n >\n {{ t('NEW_CATEGORY') }}\n </button>\n </cui-dropdown-wrapper>\n</ng-template>\n", styles: ["::ng-deep .dropdown-wrapper .scrollable-content{flex:1;display:flex;flex-direction:column}.target{display:block;padding:0;width:100%;border-radius:8px;border:1px solid transparent}.target:focus{box-shadow:0 0 0 2px var(--cui-focus);border:1px solid var(--cui-info)}.target:disabled{cursor:default}.create-category{margin-left:24px}.empty{margin:auto}.dropdown-wrapper{display:block;height:350px}\n"], dependencies: [{ kind: "ngmodule", type: CuiButtonModule }, { kind: "component", type: i1.CuiButtonComponent, selector: "button[cuiButton], a[cuiButton]", inputs: ["shape", "disabled", "isLoaderShown", "icon", "iconRight", "appearance", "theme", "size"] }, { kind: "directive", type: CuiLetDirective, selector: "[cuiLet]", inputs: ["cuiLet"] }, { kind: "directive", type: CuiDropdownDirective, selector: "[cuiDropdown]", inputs: ["cuiDropdown", "orientation"], outputs: ["isOpened"], exportAs: ["cuiDropdown"] }, { kind: "component", type: CuiDropdownWrapperComponent, selector: "cui-dropdown-wrapper", inputs: ["title", "width", "maxHeight"] }, { kind: "component", type: CuiEmptyStateComponent, selector: "cui-empty-state, [cuiEmptyState]", inputs: ["title", "subtitle"] }, { kind: "component", type: CuiCreateCategoryTreeItemComponent, selector: "cui-create-category-tree-item", inputs: ["isDisabled"], outputs: ["created", "canceled"] }, { kind: "component", type: CuiCategoriesTreeListComponent, selector: "cui-categories-tree-list", inputs: ["storages"], outputs: ["deleted"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
66
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CuiCategoriesTreeComponent, isStandalone: true, selector: "cui-categories-tree", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true, isSignal: true }], ngImport: i0, template: "<button\n #dropdown=\"cuiDropdown\"\n [cuiDropdown]=\"dropdownContent\"\n orientation=\"stretch\"\n type=\"button\"\n class=\"target\"\n [disabled]=\"disabled()\"\n (click)=\"onOpenStorages()\"\n>\n <ng-content />\n</button>\n\n<ng-template #dropdownContent>\n <cui-dropdown-wrapper\n *transloco=\"let t\"\n [title]=\"t('SELECT_OR_CREATE_CATEGORY')\"\n width=\"100%\"\n class=\"dropdown-wrapper\"\n >\n <ng-container *cuiLet=\"storages() as storages\">\n @if (storages && storages.length) {\n <cui-categories-tree-list\n [storages]=\"storages\"\n (deleted)=\"onItemDeleted($event)\"\n />\n }\n @if (isCreateCategoryControlVisible()) {\n <cui-create-category-tree-item\n class=\"create-category\"\n [isDisabled]=\"isCategoryCreationLoading()\"\n (created)=\"onCreateNewCategory($event)\"\n (canceled)=\"onCreatingCategoryCanceled()\"\n />\n } @else if (!storages?.length) {\n <cui-empty-state\n class=\"empty\"\n [subtitle]=\"t('NO_CATEGORY_TO_VIEW_YET')\"\n />\n }\n </ng-container>\n <button\n ccDropdownFooterContent\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconPlus\"\n (click)=\"onStartCreatingNewCategory()\"\n >\n {{ t('NEW_CATEGORY') }}\n </button>\n </cui-dropdown-wrapper>\n</ng-template>\n", styles: ["::ng-deep .dropdown-wrapper .scrollable-content{flex:1;display:flex;flex-direction:column}.target{display:block;padding:0;width:100%;border-radius:8px;border:1px solid transparent}.target:focus{box-shadow:0 0 0 2px var(--cui-focus);border:1px solid var(--cui-info)}.target:disabled{cursor:default}.create-category{margin-left:24px}.empty{margin:auto}.dropdown-wrapper{display:block;height:350px}\n"], dependencies: [{ kind: "ngmodule", type: CuiButtonModule }, { kind: "component", type: i1.CuiButtonComponent, selector: "button[cuiButton], a[cuiButton]", inputs: ["shape", "disabled", "isLoaderShown", "icon", "iconRight", "appearance", "theme", "size"] }, { kind: "directive", type: CuiLetDirective, selector: "[cuiLet]", inputs: ["cuiLet"] }, { kind: "directive", type: CuiDropdownDirective, selector: "[cuiDropdown]", inputs: ["cuiDropdown", "orientation"], outputs: ["isOpened"], exportAs: ["cuiDropdown"] }, { kind: "component", type: CuiDropdownWrapperComponent, selector: "cui-dropdown-wrapper", inputs: ["title", "width", "maxHeight"] }, { kind: "component", type: CuiEmptyStateComponent, selector: "cui-empty-state, [cuiEmptyState]", inputs: ["title", "subtitle"] }, { kind: "component", type: CuiCreateCategoryTreeItemComponent, selector: "cui-create-category-tree-item", inputs: ["isDisabled"], outputs: ["created", "canceled"] }, { kind: "component", type: CuiCategoriesTreeListComponent, selector: "cui-categories-tree-list", inputs: ["storages"], outputs: ["deleted"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
67
67
  }
68
68
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiCategoriesTreeComponent, decorators: [{
69
69
  type: Component,
@@ -76,6 +76,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
76
76
  CuiCreateCategoryTreeItemComponent,
77
77
  CuiCategoriesTreeListComponent,
78
78
  TranslocoDirective
79
- ], standalone: true, providers: [CuiCategoryTreeStateService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n #dropdown=\"cuiDropdown\"\n [cuiDropdown]=\"dropdownContent\"\n orientation=\"stretch\"\n type=\"button\"\n class=\"target\"\n [disabled]=\"disabled()\"\n (click)=\"onOpenStorages()\"\n>\n <ng-content />\n</button>\n\n<ng-template #dropdownContent>\n <cui-dropdown-wrapper\n *transloco=\"let t\"\n [title]=\"t('SELECT_OR_CREATE_CATEGORY')\"\n width=\"100%\"\n class=\"dropdown-wrapper\"\n >\n <ng-container *cuiLet=\"storages() as storages\">\n @if (storages && storages.length) {\n <cui-categories-tree-list\n [storages]=\"storages\"\n (deleted)=\"onItemDeleted($event)\"\n />\n }\n @if (isCreateCategoryControlVisible()) {\n <cui-create-category-tree-item\n class=\"create-category\"\n [isDisabled]=\"isCategoryCreationLoading()\"\n (created)=\"onCreateNewCategory($event)\"\n (canceled)=\"onCreatingCategoryCanceled()\"\n />\n } @else if (!storages?.length) {\n <cui-empty-state\n class=\"empty\"\n [subtitle]=\"t('NO_CATEGORY_TO_VIEW_YET')\"\n />\n }\n </ng-container>\n <button\n ccDropdownFooterContent\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconPlus\"\n (click)=\"onStartCreatingNewCategory()\"\n >\n {{ t('NEW_CATEGORY') }}\n </button>\n </cui-dropdown-wrapper>\n</ng-template>\n", styles: ["::ng-deep .dropdown-wrapper .scrollable-content{flex:1;display:flex;flex-direction:column}.target{display:block;padding:0;width:100%;border-radius:8px;border:1px solid transparent}.target:focus{box-shadow:0 0 0 2px var(--cui-focus);border:1px solid var(--cui-info)}.target:disabled{cursor:default}.create-category{margin-left:24px}.empty{margin:auto}.dropdown-wrapper{display:block;height:350px}\n"] }]
79
+ ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n #dropdown=\"cuiDropdown\"\n [cuiDropdown]=\"dropdownContent\"\n orientation=\"stretch\"\n type=\"button\"\n class=\"target\"\n [disabled]=\"disabled()\"\n (click)=\"onOpenStorages()\"\n>\n <ng-content />\n</button>\n\n<ng-template #dropdownContent>\n <cui-dropdown-wrapper\n *transloco=\"let t\"\n [title]=\"t('SELECT_OR_CREATE_CATEGORY')\"\n width=\"100%\"\n class=\"dropdown-wrapper\"\n >\n <ng-container *cuiLet=\"storages() as storages\">\n @if (storages && storages.length) {\n <cui-categories-tree-list\n [storages]=\"storages\"\n (deleted)=\"onItemDeleted($event)\"\n />\n }\n @if (isCreateCategoryControlVisible()) {\n <cui-create-category-tree-item\n class=\"create-category\"\n [isDisabled]=\"isCategoryCreationLoading()\"\n (created)=\"onCreateNewCategory($event)\"\n (canceled)=\"onCreatingCategoryCanceled()\"\n />\n } @else if (!storages?.length) {\n <cui-empty-state\n class=\"empty\"\n [subtitle]=\"t('NO_CATEGORY_TO_VIEW_YET')\"\n />\n }\n </ng-container>\n <button\n ccDropdownFooterContent\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconPlus\"\n (click)=\"onStartCreatingNewCategory()\"\n >\n {{ t('NEW_CATEGORY') }}\n </button>\n </cui-dropdown-wrapper>\n</ng-template>\n", styles: ["::ng-deep .dropdown-wrapper .scrollable-content{flex:1;display:flex;flex-direction:column}.target{display:block;padding:0;width:100%;border-radius:8px;border:1px solid transparent}.target:focus{box-shadow:0 0 0 2px var(--cui-focus);border:1px solid var(--cui-info)}.target:disabled{cursor:default}.create-category{margin-left:24px}.empty{margin:auto}.dropdown-wrapper{display:block;height:350px}\n"] }]
80
80
  }], ctorParameters: () => [] });
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcmllcy10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvd2lkZ2V0cy91aS9jYXRlZ29yaWVzLXRyZWUvY2F0ZWdvcmllcy10cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvd2lkZ2V0cy91aS9jYXRlZ29yaWVzLXRyZWUvY2F0ZWdvcmllcy10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSWhDLE9BQU8sRUFDSCxzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLG9CQUFvQixFQUNwQiwyQkFBMkIsRUFDOUIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsOEJBQThCLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEcsT0FBTyxFQUFFLDZDQUE2QyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFlBQVksQ0FBQzs7O0FBb0J6RCxNQUFNLE9BQU8sMEJBQTBCO0lBa0JuQztRQWpCaUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxnQ0FB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QUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVPLHdCQUF3QjtRQUM1QixNQUFNLENBQ0YsR0FBRyxFQUFFO1lBQ0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QixDQUFDLEVBQ0QsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FDOUIsQ0FBQztJQUNOLENBQUM7K0dBekVRLDBCQUEwQjttR0FBMUIsMEJBQTBCLCtNQUh4QixDQUFDLDJCQUEyQixDQUFDLGdKQzdDNUMseXJEQXFEQSxzY0RwQlEsZUFBZSxvT0FDZixlQUFlLHlFQUNmLG9CQUFvQixvSkFDcEIsMkJBQTJCLDBHQUMzQixzQkFBc0IsNEdBQ3RCLGtDQUFrQyxvSUFDbEMsOEJBQThCLGlIQUM5QixrQkFBa0I7OzRGQVFiLDBCQUEwQjtrQkFsQnRDLFNBQVM7K0JBQ0kscUJBQXFCLFdBQ3RCO3dCQUNMLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixvQkFBb0I7d0JBQ3BCLDJCQUEyQjt3QkFDM0Isc0JBQXNCO3dCQUN0QixrQ0FBa0M7d0JBQ2xDLDhCQUE4Qjt3QkFDOUIsa0JBQWtCO3FCQUNyQixjQUNXLElBQUksYUFHTCxDQUFDLDJCQUEyQixDQUFDLG1CQUN2Qix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBEZXN0cm95UmVmLFxuICAgIGVmZmVjdCxcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgc2lnbmFsLFxuICAgIHZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB0eXBlIHsgQ3VpTnVsbGFibGUgfSBmcm9tICdAY3VieS11aS9jZGsnO1xuaW1wb3J0IHsgQ3VpTGV0RGlyZWN0aXZlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcbmltcG9ydCB7IFRyYW5zbG9jb0RpcmVjdGl2ZSB9IGZyb20gJ0Bqc3ZlcnNlL3RyYW5zbG9jbyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgdHlwZSB7IFRyZWVTdHJ1Y3QgfSBmcm9tICdAY3VieS11aS9hcGknO1xuXG5pbXBvcnQge1xuICAgIEN1aUVtcHR5U3RhdGVDb21wb25lbnQsXG4gICAgQ3VpQnV0dG9uTW9kdWxlLFxuICAgIEN1aURyb3Bkb3duRGlyZWN0aXZlLFxuICAgIEN1aURyb3Bkb3duV3JhcHBlckNvbXBvbmVudFxufSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzJztcbmltcG9ydCB7IEN1aUNhdGVnb3JpZXNUcmVlTGlzdENvbXBvbmVudCwgQ3VpQ3JlYXRlQ2F0ZWdvcnlUcmVlSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBDVUlfQ0FURUdPUklFU19UUkVFX0RBVEFfU09VUkNFX1NFUlZJQ0VfVE9LRU4gfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBDdWlDYXRlZ29yeVRyZWVTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjdWktY2F0ZWdvcmllcy10cmVlJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEN1aUJ1dHRvbk1vZHVsZSxcbiAgICAgICAgQ3VpTGV0RGlyZWN0aXZlLFxuICAgICAgICBDdWlEcm9wZG93bkRpcmVjdGl2ZSxcbiAgICAgICAgQ3VpRHJvcGRvd25XcmFwcGVyQ29tcG9uZW50LFxuICAgICAgICBDdWlFbXB0eVN0YXRlQ29tcG9uZW50LFxuICAgICAgICBDdWlDcmVhdGVDYXRlZ29yeVRyZWVJdGVtQ29tcG9uZW50LFxuICAgICAgICBDdWlDYXRlZ29yaWVzVHJlZUxpc3RDb21wb25lbnQsXG4gICAgICAgIFRyYW5zbG9jb0RpcmVjdGl2ZVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2F0ZWdvcmllcy10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jYXRlZ29yaWVzLXRyZWUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtDdWlDYXRlZ29yeVRyZWVTdGF0ZVNlcnZpY2VdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEN1aUNhdGVnb3JpZXNUcmVlQ29tcG9uZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yaWVzRGF0YVNvdXJjZVNlcnZpY2UgPSBpbmplY3QoQ1VJX0NBVEVHT1JJRVNfVFJFRV9EQVRBX1NPVVJDRV9TRVJWSUNFX1RPS0VOKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3J5VHJlZVN0YXRlU2VydmljZSA9IGluamVjdChDdWlDYXRlZ29yeVRyZWVTdGF0ZVNlcnZpY2UpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0b3JhZ2VzID0gc2lnbmFsPEN1aU51bGxhYmxlPFRyZWVTdHJ1Y3RbXT4+KG51bGwpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0NhdGVnb3J5Q3JlYXRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0NhdGVnb3J5Q3JlYXRpb25Mb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNDcmVhdGVDYXRlZ29yeUNvbnRyb2xWaXNpYmxlID0gY29tcHV0ZWQoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICAodGhpcy5jYXRlZ29yeVRyZWVTdGF0ZVNlcnZpY2UuaXNDcmVhdGluZ1Jvb3QoKSAmJiB0aGlzLmlzQ2F0ZWdvcnlDcmVhdGluZygpKSB8fFxuICAgICAgICAgICAgdGhpcy5pc0NhdGVnb3J5Q3JlYXRpb25Mb2FkaW5nKClcbiAgICApO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRyb3Bkb3duID0gdmlld0NoaWxkLnJlcXVpcmVkPEN1aURyb3Bkb3duRGlyZWN0aXZlPignZHJvcGRvd24nKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBkaXNhYmxlZCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmluaXRTZWxlY3RDYXRlZ29yeUVmZmVjdCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbk9wZW5TdG9yYWdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYXRlZ29yeVRyZWVTdGF0ZVNlcnZpY2UuY2xlYXJDcmVhdGluZygpO1xuICAgICAgICB0aGlzLmNhdGVnb3J5VHJlZVN0YXRlU2VydmljZS5jbGVhckVkaXRpbmdJZCgpO1xuXG4gICAgICAgIGlmICh0aGlzLnN0b3JhZ2VzKCk/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzRGF0YVNvdXJjZVNlcnZpY2VcbiAgICAgICAgICAgIC5sb2FkUm9vdHMoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyb290cykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZXMuc2V0KHJvb3RzKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblN0YXJ0Q3JlYXRpbmdOZXdDYXRlZ29yeSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0NhdGVnb3J5Q3JlYXRpbmcuc2V0KHRydWUpO1xuICAgICAgICB0aGlzLmNhdGVnb3J5VHJlZVN0YXRlU2VydmljZS5zdGFydENyZWF0aW5nUm9vdCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkNyZWF0ZU5ld0NhdGVnb3J5KHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0NhdGVnb3J5Q3JlYXRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yeVRyZWVTdGF0ZVNlcnZpY2UuY2xlYXJDcmVhdGluZygpO1xuICAgICAgICB0aGlzLmlzQ2F0ZWdvcnlDcmVhdGlvbkxvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXNEYXRhU291cmNlU2VydmljZVxuICAgICAgICAgICAgLmNyZWF0ZVJvb3QodGl0bGUpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzQ2F0ZWdvcnlDcmVhdGlvbkxvYWRpbmcuc2V0KGZhbHNlKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHN0b3JhZ2UpID0+IHRoaXMuc3RvcmFnZXMudXBkYXRlKCh2YWx1ZSkgPT4gWy4uLih2YWx1ZSB8fCBbXSksIHN0b3JhZ2VdKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uQ3JlYXRpbmdDYXRlZ29yeUNhbmNlbGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzQ2F0ZWdvcnlDcmVhdGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmNhdGVnb3J5VHJlZVN0YXRlU2VydmljZS5jbGVhckNyZWF0aW5nKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uSXRlbURlbGV0ZWQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JhZ2VzLnVwZGF0ZSgodmFsdWUpID0+ICh2YWx1ZSA/IHZhbHVlLmZpbHRlcigoc3RvcmFnZSkgPT4gc3RvcmFnZS5pZCAhPT0gaWQpIDogdmFsdWUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTZWxlY3RDYXRlZ29yeUVmZmVjdCgpOiB2b2lkIHtcbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLmNhdGVnb3J5KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bigpLmNsb3NlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPGJ1dHRvblxuICAgICNkcm9wZG93bj1cImN1aURyb3Bkb3duXCJcbiAgICBbY3VpRHJvcGRvd25dPVwiZHJvcGRvd25Db250ZW50XCJcbiAgICBvcmllbnRhdGlvbj1cInN0cmV0Y2hcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwidGFyZ2V0XCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgKGNsaWNrKT1cIm9uT3BlblN0b3JhZ2VzKClcIlxuPlxuICAgIDxuZy1jb250ZW50IC8+XG48L2J1dHRvbj5cblxuPG5nLXRlbXBsYXRlICNkcm9wZG93bkNvbnRlbnQ+XG4gICAgPGN1aS1kcm9wZG93bi13cmFwcGVyXG4gICAgICAgICp0cmFuc2xvY289XCJsZXQgdFwiXG4gICAgICAgIFt0aXRsZV09XCJ0KCdTRUxFQ1RfT1JfQ1JFQVRFX0NBVEVHT1JZJylcIlxuICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXdyYXBwZXJcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqY3VpTGV0PVwic3RvcmFnZXMoKSBhcyBzdG9yYWdlc1wiPlxuICAgICAgICAgICAgQGlmIChzdG9yYWdlcyAmJiBzdG9yYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICA8Y3VpLWNhdGVnb3JpZXMtdHJlZS1saXN0XG4gICAgICAgICAgICAgICAgICAgIFtzdG9yYWdlc109XCJzdG9yYWdlc1wiXG4gICAgICAgICAgICAgICAgICAgIChkZWxldGVkKT1cIm9uSXRlbURlbGV0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoaXNDcmVhdGVDYXRlZ29yeUNvbnRyb2xWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgICA8Y3VpLWNyZWF0ZS1jYXRlZ29yeS10cmVlLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcmVhdGUtY2F0ZWdvcnlcIlxuICAgICAgICAgICAgICAgICAgICBbaXNEaXNhYmxlZF09XCJpc0NhdGVnb3J5Q3JlYXRpb25Mb2FkaW5nKClcIlxuICAgICAgICAgICAgICAgICAgICAoY3JlYXRlZCk9XCJvbkNyZWF0ZU5ld0NhdGVnb3J5KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoY2FuY2VsZWQpPVwib25DcmVhdGluZ0NhdGVnb3J5Q2FuY2VsZWQoKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH0gQGVsc2UgaWYgKCFzdG9yYWdlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgPGN1aS1lbXB0eS1zdGF0ZVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVtcHR5XCJcbiAgICAgICAgICAgICAgICAgICAgW3N1YnRpdGxlXT1cInQoJ05PX0NBVEVHT1JZX1RPX1ZJRVdfWUVUJylcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjY0Ryb3Bkb3duRm9vdGVyQ29udGVudFxuICAgICAgICAgICAgY3VpQnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJnaG9zdFwiXG4gICAgICAgICAgICBzaXplPVwieHhzXCJcbiAgICAgICAgICAgIGljb249XCJjdWlJY29uUGx1c1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25TdGFydENyZWF0aW5nTmV3Q2F0ZWdvcnkoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IHQoJ05FV19DQVRFR09SWScpIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvY3VpLWRyb3Bkb3duLXdyYXBwZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcmllcy10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvd2lkZ2V0cy91aS9jYXRlZ29yaWVzLXRyZWUvY2F0ZWdvcmllcy10cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvd2lkZ2V0cy91aS9jYXRlZ29yaWVzLXRyZWUvY2F0ZWdvcmllcy10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSWhDLE9BQU8sRUFDSCxzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLG9CQUFvQixFQUNwQiwyQkFBMkIsRUFDOUIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsOEJBQThCLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEcsT0FBTyxFQUFFLDZDQUE2QyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFlBQVksQ0FBQzs7O0FBbUJ6RCxNQUFNLE9BQU8sMEJBQTBCO0lBa0JuQztRQWpCaUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxnQ0FB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QUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVPLHdCQUF3QjtRQUM1QixNQUFNLENBQ0YsR0FBRyxFQUFFO1lBQ0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QixDQUFDLEVBQ0QsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FDOUIsQ0FBQztJQUNOLENBQUM7K0dBekVRLDBCQUEwQjttR0FBMUIsMEJBQTBCLGtWQy9DdkMseXJEQXFEQSxzY0RwQlEsZUFBZSxvT0FDZixlQUFlLHlFQUNmLG9CQUFvQixvSkFDcEIsMkJBQTJCLDBHQUMzQixzQkFBc0IsNEdBQ3RCLGtDQUFrQyxvSUFDbEMsOEJBQThCLGlIQUM5QixrQkFBa0I7OzRGQU9iLDBCQUEwQjtrQkFqQnRDLFNBQVM7K0JBQ0kscUJBQXFCLFdBQ3RCO3dCQUNMLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixvQkFBb0I7d0JBQ3BCLDJCQUEyQjt3QkFDM0Isc0JBQXNCO3dCQUN0QixrQ0FBa0M7d0JBQ2xDLDhCQUE4Qjt3QkFDOUIsa0JBQWtCO3FCQUNyQixjQUNXLElBQUksbUJBR0MsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgRGVzdHJveVJlZixcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIHNpZ25hbCxcbiAgICB2aWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgdHlwZSB7IEN1aU51bGxhYmxlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcbmltcG9ydCB7IEN1aUxldERpcmVjdGl2ZSB9IGZyb20gJ0BjdWJ5LXVpL2Nkayc7XG5pbXBvcnQgeyBUcmFuc2xvY29EaXJlY3RpdmUgfSBmcm9tICdAanN2ZXJzZS90cmFuc2xvY28nO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHR5cGUgeyBUcmVlU3RydWN0IH0gZnJvbSAnQGN1YnktdWkvYXBpJztcblxuaW1wb3J0IHtcbiAgICBDdWlFbXB0eVN0YXRlQ29tcG9uZW50LFxuICAgIEN1aUJ1dHRvbk1vZHVsZSxcbiAgICBDdWlEcm9wZG93bkRpcmVjdGl2ZSxcbiAgICBDdWlEcm9wZG93bldyYXBwZXJDb21wb25lbnRcbn0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBDdWlDYXRlZ29yaWVzVHJlZUxpc3RDb21wb25lbnQsIEN1aUNyZWF0ZUNhdGVnb3J5VHJlZUl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQ1VJX0NBVEVHT1JJRVNfVFJFRV9EQVRBX1NPVVJDRV9TRVJWSUNFX1RPS0VOIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ3VpQ2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY3VpLWNhdGVnb3JpZXMtdHJlZScsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDdWlCdXR0b25Nb2R1bGUsXG4gICAgICAgIEN1aUxldERpcmVjdGl2ZSxcbiAgICAgICAgQ3VpRHJvcGRvd25EaXJlY3RpdmUsXG4gICAgICAgIEN1aURyb3Bkb3duV3JhcHBlckNvbXBvbmVudCxcbiAgICAgICAgQ3VpRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgICAgICAgQ3VpQ3JlYXRlQ2F0ZWdvcnlUcmVlSXRlbUNvbXBvbmVudCxcbiAgICAgICAgQ3VpQ2F0ZWdvcmllc1RyZWVMaXN0Q29tcG9uZW50LFxuICAgICAgICBUcmFuc2xvY29EaXJlY3RpdmVcbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhdGVnb3JpZXMtdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2F0ZWdvcmllcy10cmVlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQ3VpQ2F0ZWdvcmllc1RyZWVDb21wb25lbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3JpZXNEYXRhU291cmNlU2VydmljZSA9IGluamVjdChDVUlfQ0FURUdPUklFU19UUkVFX0RBVEFfU09VUkNFX1NFUlZJQ0VfVE9LRU4pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlID0gaW5qZWN0KEN1aUNhdGVnb3J5VHJlZVN0YXRlU2VydmljZSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RvcmFnZXMgPSBzaWduYWw8Q3VpTnVsbGFibGU8VHJlZVN0cnVjdFtdPj4obnVsbCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzQ2F0ZWdvcnlDcmVhdGluZyA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzQ2F0ZWdvcnlDcmVhdGlvbkxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0NyZWF0ZUNhdGVnb3J5Q29udHJvbFZpc2libGUgPSBjb21wdXRlZChcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICh0aGlzLmNhdGVnb3J5VHJlZVN0YXRlU2VydmljZS5pc0NyZWF0aW5nUm9vdCgpICYmIHRoaXMuaXNDYXRlZ29yeUNyZWF0aW5nKCkpIHx8XG4gICAgICAgICAgICB0aGlzLmlzQ2F0ZWdvcnlDcmVhdGlvbkxvYWRpbmcoKVxuICAgICk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZHJvcGRvd24gPSB2aWV3Q2hpbGQucmVxdWlyZWQ8Q3VpRHJvcGRvd25EaXJlY3RpdmU+KCdkcm9wZG93bicpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGRpc2FibGVkID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaW5pdFNlbGVjdENhdGVnb3J5RWZmZWN0KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uT3BlblN0b3JhZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhdGVnb3J5VHJlZVN0YXRlU2VydmljZS5jbGVhckNyZWF0aW5nKCk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLmNsZWFyRWRpdGluZ0lkKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RvcmFnZXMoKT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhdGVnb3JpZXNEYXRhU291cmNlU2VydmljZVxuICAgICAgICAgICAgLmxvYWRSb290cygpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJvb3RzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlcy5zZXQocm9vdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uU3RhcnRDcmVhdGluZ05ld0NhdGVnb3J5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzQ2F0ZWdvcnlDcmVhdGluZy5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLnN0YXJ0Q3JlYXRpbmdSb290KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uQ3JlYXRlTmV3Q2F0ZWdvcnkodGl0bGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzQ2F0ZWdvcnlDcmVhdGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmNhdGVnb3J5VHJlZVN0YXRlU2VydmljZS5jbGVhckNyZWF0aW5nKCk7XG4gICAgICAgIHRoaXMuaXNDYXRlZ29yeUNyZWF0aW9uTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0RhdGFTb3VyY2VTZXJ2aWNlXG4gICAgICAgICAgICAuY3JlYXRlUm9vdCh0aXRsZSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuaXNDYXRlZ29yeUNyZWF0aW9uTG9hZGluZy5zZXQoZmFsc2UpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RvcmFnZSkgPT4gdGhpcy5zdG9yYWdlcy51cGRhdGUoKHZhbHVlKSA9PiBbLi4uKHZhbHVlIHx8IFtdKSwgc3RvcmFnZV0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25DcmVhdGluZ0NhdGVnb3J5Q2FuY2VsZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNDYXRlZ29yeUNyZWF0aW5nLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLmNsZWFyQ3JlYXRpbmcoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25JdGVtRGVsZXRlZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcmFnZXMudXBkYXRlKCh2YWx1ZSkgPT4gKHZhbHVlID8gdmFsdWUuZmlsdGVyKChzdG9yYWdlKSA9PiBzdG9yYWdlLmlkICE9PSBpZCkgOiB2YWx1ZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFNlbGVjdENhdGVnb3J5RWZmZWN0KCk6IHZvaWQge1xuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yeVRyZWVTdGF0ZVNlcnZpY2UuY2F0ZWdvcnkoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duKCkuY2xvc2UoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCI8YnV0dG9uXG4gICAgI2Ryb3Bkb3duPVwiY3VpRHJvcGRvd25cIlxuICAgIFtjdWlEcm9wZG93bl09XCJkcm9wZG93bkNvbnRlbnRcIlxuICAgIG9yaWVudGF0aW9uPVwic3RyZXRjaFwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgY2xhc3M9XCJ0YXJnZXRcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgICAoY2xpY2spPVwib25PcGVuU3RvcmFnZXMoKVwiXG4+XG4gICAgPG5nLWNvbnRlbnQgLz5cbjwvYnV0dG9uPlxuXG48bmctdGVtcGxhdGUgI2Ryb3Bkb3duQ29udGVudD5cbiAgICA8Y3VpLWRyb3Bkb3duLXdyYXBwZXJcbiAgICAgICAgKnRyYW5zbG9jbz1cImxldCB0XCJcbiAgICAgICAgW3RpdGxlXT1cInQoJ1NFTEVDVF9PUl9DUkVBVEVfQ0FURUdPUlknKVwiXG4gICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgIGNsYXNzPVwiZHJvcGRvd24td3JhcHBlclwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpjdWlMZXQ9XCJzdG9yYWdlcygpIGFzIHN0b3JhZ2VzXCI+XG4gICAgICAgICAgICBAaWYgKHN0b3JhZ2VzICYmIHN0b3JhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIDxjdWktY2F0ZWdvcmllcy10cmVlLWxpc3RcbiAgICAgICAgICAgICAgICAgICAgW3N0b3JhZ2VzXT1cInN0b3JhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZWQpPVwib25JdGVtRGVsZXRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChpc0NyZWF0ZUNhdGVnb3J5Q29udHJvbFZpc2libGUoKSkge1xuICAgICAgICAgICAgICAgIDxjdWktY3JlYXRlLWNhdGVnb3J5LXRyZWUtaXRlbVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNyZWF0ZS1jYXRlZ29yeVwiXG4gICAgICAgICAgICAgICAgICAgIFtpc0Rpc2FibGVkXT1cImlzQ2F0ZWdvcnlDcmVhdGlvbkxvYWRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgIChjcmVhdGVkKT1cIm9uQ3JlYXRlTmV3Q2F0ZWdvcnkoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChjYW5jZWxlZCk9XCJvbkNyZWF0aW5nQ2F0ZWdvcnlDYW5jZWxlZCgpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoIXN0b3JhZ2VzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICA8Y3VpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZW1wdHlcIlxuICAgICAgICAgICAgICAgICAgICBbc3VidGl0bGVdPVwidCgnTk9fQ0FURUdPUllfVE9fVklFV19ZRVQnKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNjRHJvcGRvd25Gb290ZXJDb250ZW50XG4gICAgICAgICAgICBjdWlCdXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgYXBwZWFyYW5jZT1cImdob3N0XCJcbiAgICAgICAgICAgIHNpemU9XCJ4eHNcIlxuICAgICAgICAgICAgaWNvbj1cImN1aUljb25QbHVzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblN0YXJ0Q3JlYXRpbmdOZXdDYXRlZ29yeSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgdCgnTkVXX0NBVEVHT1JZJykgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9jdWktZHJvcGRvd24td3JhcHBlcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,8 +1,9 @@
1
- import { ChangeDetectionStrategy, Component, computed, DestroyRef, effect, forwardRef, inject, input, output, signal } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, computed, DestroyRef, effect, forwardRef, inject, input, output, signal, untracked } from '@angular/core';
2
2
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
3
  import { CuiLetDirective } from '@cuby-ui/cdk';
4
4
  import { finalize } from 'rxjs';
5
- import { CuiButtonModule, CuiIconButtonModule, CuiSvgModule } from '../../../../../components';
5
+ import { CuiButtonModule, CuiDialogService, CuiIconButtonModule, CuiSvgModule } from '../../../../../components';
6
+ import { CuiDeleteModalComponent } from '../../../delete-modal';
6
7
  import { CUI_CATEGORIES_TREE_DATA_SOURCE_SERVICE_TOKEN } from '../../models';
7
8
  import { CuiCategoryTreeStateService } from '../../services';
8
9
  import { CuiCategoriesTreeListComponent } from '../categories-tree-list';
@@ -16,12 +17,12 @@ export class CuiCategoryTreeItemComponent {
16
17
  this.destroyRef = inject(DestroyRef);
17
18
  this.categoriesDataSourceService = inject(CUI_CATEGORIES_TREE_DATA_SOURCE_SERVICE_TOKEN);
18
19
  this.categoryTreeStateService = inject(CuiCategoryTreeStateService);
20
+ this.cuiDialogService = inject(CuiDialogService);
19
21
  this.isDeleteSupported = !!this.categoriesDataSourceService.delete;
20
22
  this.storageChildren = signal([]);
21
23
  this.areChildrenOpened = signal(false);
22
24
  this.isSubcategoryCreating = signal(false);
23
25
  this.isSubcategoryCreationLoading = signal(false);
24
- this.isDeleting = signal(false);
25
26
  this.openCloseButtonIcon = computed(() => this.areChildrenOpened() ? 'cuiIconChevronDown' : 'cuiIconChevronRight');
26
27
  this.doChildrenExist = computed(() => this.storage().children.length || this.storageChildren().length);
27
28
  this.isOpenCloseButtonHidden = computed(() => !this.doChildrenExist());
@@ -30,7 +31,8 @@ export class CuiCategoryTreeItemComponent {
30
31
  this.isTitleEdit = computed(() => this.categoryTreeStateService.editingId() === this.storage().id);
31
32
  this.isCreateCategoryControlVisible = computed(() => (this.categoryTreeStateService.creatingParentId() === this.storage().id && this.isSubcategoryCreating()) ||
32
33
  this.isSubcategoryCreationLoading());
33
- this.isEmpty = computed(() => !this.storage().elements.length && !this.storage().children.length && !this.storageChildren().length);
34
+ this.isEmpty = computed(() => !this.storage().elements.length &&
35
+ (this.areChildrenOpened() ? !this.storageChildren().length : !this.storage().children.length));
34
36
  this.categoryTitle = signal('');
35
37
  this.category = computed(() => ({
36
38
  ...this.storage(),
@@ -97,42 +99,54 @@ export class CuiCategoryTreeItemComponent {
97
99
  onDelete(event) {
98
100
  event.stopPropagation();
99
101
  const deleteRequest = this.categoriesDataSourceService.delete;
100
- if (!deleteRequest || !this.isEmpty() || this.isDeleting()) {
102
+ if (!deleteRequest) {
101
103
  return;
102
104
  }
103
- this.isDeleting.set(true);
104
- deleteRequest
105
- .call(this.categoriesDataSourceService, this.storage().id)
106
- .pipe(finalize(() => this.isDeleting.set(false)), takeUntilDestroyed(this.destroyRef))
107
- .subscribe(() => this.deleted.emit(this.storage().id));
105
+ this.cuiDialogService
106
+ .open(CuiDeleteModalComponent, {
107
+ data: {
108
+ title: 'DELETE_CATEGORY_QUESTION',
109
+ content: ['ACTION_WILL_DELETE_CATEGORY'],
110
+ delete: () => deleteRequest.call(this.categoriesDataSourceService, this.storage().id)
111
+ }
112
+ })
113
+ .pipe(takeUntilDestroyed(this.destroyRef))
114
+ .subscribe((data) => {
115
+ if (data?.canceled) {
116
+ return;
117
+ }
118
+ this.deleted.emit(this.storage().id);
119
+ });
108
120
  }
109
121
  onChildDeleted(id) {
110
122
  this.storageChildren.update((children) => children.filter((child) => child.id !== id));
111
123
  }
112
124
  initStorageChildren() {
113
- effect(() => {
114
- if (!this.areChildrenOpened() || this.storageChildren().length) {
115
- return;
116
- }
117
- const storage = this.storage();
118
- const children = storage.children;
119
- if (!children.length) {
120
- return;
121
- }
122
- if (typeof children[0] !== 'string') {
123
- this.storageChildren.set(children);
125
+ const effectRef = effect(() => {
126
+ if (!this.areChildrenOpened()) {
124
127
  return;
125
128
  }
126
- this.categoriesDataSourceService
127
- .loadChildren(storage.id)
128
- .pipe(takeUntilDestroyed(this.destroyRef))
129
- .subscribe((storages) => {
130
- this.storageChildren.set(storages);
131
- });
129
+ effectRef.destroy();
130
+ untracked(() => this.loadChildren());
132
131
  }, { allowSignalWrites: true });
133
132
  }
133
+ loadChildren() {
134
+ const storage = this.storage();
135
+ const children = storage.children;
136
+ if (!children.length) {
137
+ return;
138
+ }
139
+ if (typeof children[0] !== 'string') {
140
+ this.storageChildren.set(children);
141
+ return;
142
+ }
143
+ this.categoriesDataSourceService
144
+ .loadChildren(storage.id)
145
+ .pipe(takeUntilDestroyed(this.destroyRef))
146
+ .subscribe((storages) => this.storageChildren.set(storages));
147
+ }
134
148
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiCategoryTreeItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
135
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CuiCategoryTreeItemComponent, isStandalone: true, selector: "cui-category-tree-item", inputs: { storage: { classPropertyName: "storage", publicName: "storage", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { deleted: "deleted" }, ngImport: i0, template: "<ng-container *cuiLet=\"category() as stage\">\n <button\n type=\"button\"\n [style.align-items]=\"alignItems()\"\n class=\"category\"\n (click)=\"onSelectCategory()\"\n >\n <button\n type=\"button\"\n class=\"category__open-close-button\"\n [class.category__open-close-button_hidden]=\"isOpenCloseButtonHidden()\"\n (click)=\"onToggleChildren($event)\"\n >\n <cui-svg\n [icon]=\"openCloseButtonIcon()\"\n color=\"var(--cui-base-500)\"\n />\n </button>\n <cui-svg\n [icon]=\"storageIcon()\"\n color=\"var(--cui-base-500)\"\n class=\"icon\"\n />\n @if (isTitleEdit()) {\n <cui-category-tree-form\n [defaultTitle]=\"stage.title\"\n (created)=\"onTitleChanged($event)\"\n (canceled)=\"onCancelTitleEdit()\"\n />\n } @else {\n <span class=\"category__title\">{{ stage.title }}</span>\n\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconEdit\"\n class=\"category__add-subcategory-button\"\n (click)=\"onStartTitleEdit($event)\"\n ></button>\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconPlus\"\n class=\"category__add-subcategory-button\"\n (click)=\"onStartCreatingSubcategory($event)\"\n ></button>\n @if (isDeleteSupported) {\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconTrash\"\n [disabled]=\"!isEmpty() || isDeleting()\"\n class=\"category__add-subcategory-button\"\n (click)=\"onDelete($event)\"\n ></button>\n }\n }\n </button>\n <div\n [hidden]=\"!areChildrenOpened()\"\n class=\"list-wrapper\"\n >\n <cui-categories-tree-list\n [storages]=\"storageChildren()\"\n (deleted)=\"onChildDeleted($event)\"\n />\n @if (isCreateCategoryControlVisible()) {\n <cui-create-category-tree-item\n class=\"create-category\"\n [isDisabled]=\"isSubcategoryCreationLoading()\"\n (created)=\"onCreateNewSubcategory($event)\"\n (canceled)=\"onCreatingSubcategoryCanceled()\"\n />\n }\n </div>\n</ng-container>\n", styles: [".category{display:flex;flex-direction:row;gap:4px;padding:2px 4px;width:100%;min-height:32px;border-radius:8px}@media (hover: hover){.category:hover{background:var(--cui-base-10)}}.category:active{background:var(--cui-base-10)}.category__open-close-button{display:flex;flex-direction:row;gap:0;padding:2px;border-radius:4px;margin:4px 0}@media (hover: hover){.category__open-close-button:hover{background:var(--cui-base-100)}}.category__open-close-button:active{background:var(--cui-base-100)}.category__open-close-button_hidden{visibility:hidden}.category__title{flex:1;text-align:start;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.category__add-subcategory-button{--cui-base-50: var(--cui-base-200)}.list-wrapper{padding-left:8px}.create-category{margin-left:24px}.icon{padding-right:2px;padding-left:2px;height:28px}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CuiButtonModule) }, { kind: "component", type: i0.forwardRef(() => i1.CuiButtonComponent), selector: "button[cuiButton], a[cuiButton]", inputs: ["shape", "disabled", "isLoaderShown", "icon", "iconRight", "appearance", "theme", "size"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiIconButtonModule) }, { kind: "directive", type: i0.forwardRef(() => CuiLetDirective), selector: "[cuiLet]", inputs: ["cuiLet"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiSvgModule) }, { kind: "component", type: i0.forwardRef(() => i2.CuiSvgComponent), selector: "cui-svg[icon]", inputs: ["width", "height", "strokeWidth", "color", "icon"] }, { kind: "component", type: i0.forwardRef(() => CuiCategoryTreeFormComponent), selector: "cui-category-tree-form", inputs: ["isDisabled", "defaultTitle"], outputs: ["created", "canceled"] }, { kind: "component", type: i0.forwardRef(() => CuiCreateCategoryTreeItemComponent), selector: "cui-create-category-tree-item", inputs: ["isDisabled"], outputs: ["created", "canceled"] }, { kind: "component", type: i0.forwardRef(() => CuiCategoriesTreeListComponent), selector: "cui-categories-tree-list", inputs: ["storages"], outputs: ["deleted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
149
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CuiCategoryTreeItemComponent, isStandalone: true, selector: "cui-category-tree-item", inputs: { storage: { classPropertyName: "storage", publicName: "storage", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { deleted: "deleted" }, ngImport: i0, template: "<ng-container *cuiLet=\"category() as stage\">\n <button\n type=\"button\"\n [style.align-items]=\"alignItems()\"\n class=\"category\"\n (click)=\"onSelectCategory()\"\n >\n <button\n type=\"button\"\n class=\"toggle-button\"\n [class.toggle-button_hidden]=\"isOpenCloseButtonHidden()\"\n (click)=\"onToggleChildren($event)\"\n >\n <cui-svg\n [icon]=\"openCloseButtonIcon()\"\n color=\"var(--cui-base-500)\"\n />\n </button>\n <cui-svg\n [icon]=\"storageIcon()\"\n color=\"var(--cui-base-500)\"\n class=\"icon\"\n />\n @if (isTitleEdit()) {\n <cui-category-tree-form\n [defaultTitle]=\"stage.title\"\n (created)=\"onTitleChanged($event)\"\n (canceled)=\"onCancelTitleEdit()\"\n />\n } @else {\n <span class=\"title\">{{ stage.title }}</span>\n\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconEdit\"\n class=\"button edit-button\"\n (click)=\"onStartTitleEdit($event)\"\n ></button>\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconPlus\"\n class=\"button add-button\"\n (click)=\"onStartCreatingSubcategory($event)\"\n ></button>\n @if (isDeleteSupported) {\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconTrash\"\n class=\"button delete-button\"\n (click)=\"onDelete($event)\"\n ></button>\n }\n }\n </button>\n <div\n [hidden]=\"!areChildrenOpened()\"\n class=\"list-wrapper\"\n >\n <cui-categories-tree-list\n [storages]=\"storageChildren()\"\n (deleted)=\"onChildDeleted($event)\"\n />\n @if (isCreateCategoryControlVisible()) {\n <cui-create-category-tree-item\n class=\"create-category\"\n [isDisabled]=\"isSubcategoryCreationLoading()\"\n (created)=\"onCreateNewSubcategory($event)\"\n (canceled)=\"onCreatingSubcategoryCanceled()\"\n />\n }\n </div>\n</ng-container>\n", styles: [".category{display:flex;flex-direction:row;gap:4px;padding:2px 4px;width:100%;min-height:32px;border-radius:8px}@media (hover: hover){.category:hover{background:var(--cui-base-10)}.category:hover .delete-button{display:inline-block}}.category:active{background:var(--cui-base-10)}.toggle-button{display:flex;flex-direction:row;gap:0;padding:2px;border-radius:4px;margin:4px 0}@media (hover: hover){.toggle-button:hover{background:var(--cui-base-100)}}.toggle-button:active{background:var(--cui-base-100)}.toggle-button_hidden{visibility:hidden}.title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;text-align:start}.button{--cui-base-50: var(--cui-base-200)}@media (hover: hover){.delete-button{display:none}}.list-wrapper{padding-left:8px}.create-category{margin-left:24px}.icon{padding-right:2px;padding-left:2px;height:28px}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CuiButtonModule) }, { kind: "component", type: i0.forwardRef(() => i1.CuiButtonComponent), selector: "button[cuiButton], a[cuiButton]", inputs: ["shape", "disabled", "isLoaderShown", "icon", "iconRight", "appearance", "theme", "size"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiIconButtonModule) }, { kind: "directive", type: i0.forwardRef(() => CuiLetDirective), selector: "[cuiLet]", inputs: ["cuiLet"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiSvgModule) }, { kind: "component", type: i0.forwardRef(() => i2.CuiSvgComponent), selector: "cui-svg[icon]", inputs: ["width", "height", "strokeWidth", "color", "icon"] }, { kind: "component", type: i0.forwardRef(() => CuiCategoryTreeFormComponent), selector: "cui-category-tree-form", inputs: ["isDisabled", "defaultTitle"], outputs: ["created", "canceled"] }, { kind: "component", type: i0.forwardRef(() => CuiCreateCategoryTreeItemComponent), selector: "cui-create-category-tree-item", inputs: ["isDisabled"], outputs: ["created", "canceled"] }, { kind: "component", type: i0.forwardRef(() => CuiCategoriesTreeListComponent), selector: "cui-categories-tree-list", inputs: ["storages"], outputs: ["deleted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
136
150
  }
137
151
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiCategoryTreeItemComponent, decorators: [{
138
152
  type: Component,
@@ -144,6 +158,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
144
158
  CuiCategoryTreeFormComponent,
145
159
  CuiCreateCategoryTreeItemComponent,
146
160
  forwardRef(() => CuiCategoriesTreeListComponent)
147
- ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *cuiLet=\"category() as stage\">\n <button\n type=\"button\"\n [style.align-items]=\"alignItems()\"\n class=\"category\"\n (click)=\"onSelectCategory()\"\n >\n <button\n type=\"button\"\n class=\"category__open-close-button\"\n [class.category__open-close-button_hidden]=\"isOpenCloseButtonHidden()\"\n (click)=\"onToggleChildren($event)\"\n >\n <cui-svg\n [icon]=\"openCloseButtonIcon()\"\n color=\"var(--cui-base-500)\"\n />\n </button>\n <cui-svg\n [icon]=\"storageIcon()\"\n color=\"var(--cui-base-500)\"\n class=\"icon\"\n />\n @if (isTitleEdit()) {\n <cui-category-tree-form\n [defaultTitle]=\"stage.title\"\n (created)=\"onTitleChanged($event)\"\n (canceled)=\"onCancelTitleEdit()\"\n />\n } @else {\n <span class=\"category__title\">{{ stage.title }}</span>\n\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconEdit\"\n class=\"category__add-subcategory-button\"\n (click)=\"onStartTitleEdit($event)\"\n ></button>\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconPlus\"\n class=\"category__add-subcategory-button\"\n (click)=\"onStartCreatingSubcategory($event)\"\n ></button>\n @if (isDeleteSupported) {\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconTrash\"\n [disabled]=\"!isEmpty() || isDeleting()\"\n class=\"category__add-subcategory-button\"\n (click)=\"onDelete($event)\"\n ></button>\n }\n }\n </button>\n <div\n [hidden]=\"!areChildrenOpened()\"\n class=\"list-wrapper\"\n >\n <cui-categories-tree-list\n [storages]=\"storageChildren()\"\n (deleted)=\"onChildDeleted($event)\"\n />\n @if (isCreateCategoryControlVisible()) {\n <cui-create-category-tree-item\n class=\"create-category\"\n [isDisabled]=\"isSubcategoryCreationLoading()\"\n (created)=\"onCreateNewSubcategory($event)\"\n (canceled)=\"onCreatingSubcategoryCanceled()\"\n />\n }\n </div>\n</ng-container>\n", styles: [".category{display:flex;flex-direction:row;gap:4px;padding:2px 4px;width:100%;min-height:32px;border-radius:8px}@media (hover: hover){.category:hover{background:var(--cui-base-10)}}.category:active{background:var(--cui-base-10)}.category__open-close-button{display:flex;flex-direction:row;gap:0;padding:2px;border-radius:4px;margin:4px 0}@media (hover: hover){.category__open-close-button:hover{background:var(--cui-base-100)}}.category__open-close-button:active{background:var(--cui-base-100)}.category__open-close-button_hidden{visibility:hidden}.category__title{flex:1;text-align:start;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.category__add-subcategory-button{--cui-base-50: var(--cui-base-200)}.list-wrapper{padding-left:8px}.create-category{margin-left:24px}.icon{padding-right:2px;padding-left:2px;height:28px}\n"] }]
161
+ ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *cuiLet=\"category() as stage\">\n <button\n type=\"button\"\n [style.align-items]=\"alignItems()\"\n class=\"category\"\n (click)=\"onSelectCategory()\"\n >\n <button\n type=\"button\"\n class=\"toggle-button\"\n [class.toggle-button_hidden]=\"isOpenCloseButtonHidden()\"\n (click)=\"onToggleChildren($event)\"\n >\n <cui-svg\n [icon]=\"openCloseButtonIcon()\"\n color=\"var(--cui-base-500)\"\n />\n </button>\n <cui-svg\n [icon]=\"storageIcon()\"\n color=\"var(--cui-base-500)\"\n class=\"icon\"\n />\n @if (isTitleEdit()) {\n <cui-category-tree-form\n [defaultTitle]=\"stage.title\"\n (created)=\"onTitleChanged($event)\"\n (canceled)=\"onCancelTitleEdit()\"\n />\n } @else {\n <span class=\"title\">{{ stage.title }}</span>\n\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconEdit\"\n class=\"button edit-button\"\n (click)=\"onStartTitleEdit($event)\"\n ></button>\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconPlus\"\n class=\"button add-button\"\n (click)=\"onStartCreatingSubcategory($event)\"\n ></button>\n @if (isDeleteSupported) {\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconTrash\"\n class=\"button delete-button\"\n (click)=\"onDelete($event)\"\n ></button>\n }\n }\n </button>\n <div\n [hidden]=\"!areChildrenOpened()\"\n class=\"list-wrapper\"\n >\n <cui-categories-tree-list\n [storages]=\"storageChildren()\"\n (deleted)=\"onChildDeleted($event)\"\n />\n @if (isCreateCategoryControlVisible()) {\n <cui-create-category-tree-item\n class=\"create-category\"\n [isDisabled]=\"isSubcategoryCreationLoading()\"\n (created)=\"onCreateNewSubcategory($event)\"\n (canceled)=\"onCreatingSubcategoryCanceled()\"\n />\n }\n </div>\n</ng-container>\n", styles: [".category{display:flex;flex-direction:row;gap:4px;padding:2px 4px;width:100%;min-height:32px;border-radius:8px}@media (hover: hover){.category:hover{background:var(--cui-base-10)}.category:hover .delete-button{display:inline-block}}.category:active{background:var(--cui-base-10)}.toggle-button{display:flex;flex-direction:row;gap:0;padding:2px;border-radius:4px;margin:4px 0}@media (hover: hover){.toggle-button:hover{background:var(--cui-base-100)}}.toggle-button:active{background:var(--cui-base-100)}.toggle-button_hidden{visibility:hidden}.title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;text-align:start}.button{--cui-base-50: var(--cui-base-200)}@media (hover: hover){.delete-button{display:none}}.list-wrapper{padding-left:8px}.create-category{margin-left:24px}.icon{padding-right:2px;padding-left:2px;height:28px}\n"] }]
148
162
  }], ctorParameters: () => [] });
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktdHJlZS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvd2lkZ2V0cy91aS9jYXRlZ29yaWVzLXRyZWUvY29tcG9uZW50cy9jYXRlZ29yeS10cmVlLWl0ZW0vY2F0ZWdvcnktdHJlZS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvd2lkZ2V0cy91aS9jYXRlZ29yaWVzLXRyZWUvY29tcG9uZW50cy9jYXRlZ29yeS10cmVlLWl0ZW0vY2F0ZWdvcnktdHJlZS1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUcvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhDLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0YsT0FBTyxFQUFFLDZDQUE2QyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFN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QTRCLDRQQ3pDekMsbXlGQWtGQSxnNUJEdERRLGVBQWUsNlFBQ2YsbUJBQW1CLG9EQUNuQixlQUFlLDZGQUNmLFlBQVksa05BQ1osNEJBQTRCLGtLQUM1QixrQ0FBa0MseUpBQ2pCLDhCQUE4Qjs7NEZBTzFDLDRCQUE0QjtrQkFoQnhDLFNBQVM7K0JBQ0ksd0JBQXdCLFdBQ3pCO3dCQUNMLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osNEJBQTRCO3dCQUM1QixrQ0FBa0M7d0JBQ2xDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztxQkFDbkQsY0FDVyxJQUFJLG1CQUdDLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBEZXN0cm95UmVmLFxuICAgIGVmZmVjdCxcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBvdXRwdXQsXG4gICAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQ3VpTGV0RGlyZWN0aXZlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcbmltcG9ydCB0eXBlIHsgVHJlZVN0cnVjdCB9IGZyb20gJ0BjdWJ5LXVpL2FwaSc7XG5pbXBvcnQgdHlwZSB7IEN1aUljb24gfSBmcm9tICdAY3VieS11aS9pY29ucyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDdWlCdXR0b25Nb2R1bGUsIEN1aUljb25CdXR0b25Nb2R1bGUsIEN1aVN2Z01vZHVsZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQ1VJX0NBVEVHT1JJRVNfVFJFRV9EQVRBX1NPVVJDRV9TRVJWSUNFX1RPS0VOIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IEN1aUNhdGVnb3J5VHJlZVN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEN1aUNhdGVnb3JpZXNUcmVlTGlzdENvbXBvbmVudCB9IGZyb20gJy4uL2NhdGVnb3JpZXMtdHJlZS1saXN0JztcbmltcG9ydCB7IEN1aUNhdGVnb3J5VHJlZUZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9jYXRlZ29yeS10cmVlLWZvcm0nO1xuaW1wb3J0IHsgQ3VpQ3JlYXRlQ2F0ZWdvcnlUcmVlSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2NyZWF0ZS1jYXRlZ29yeS10cmVlLWl0ZW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2N1aS1jYXRlZ29yeS10cmVlLWl0ZW0nLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ3VpQnV0dG9uTW9kdWxlLFxuICAgICAgICBDdWlJY29uQnV0dG9uTW9kdWxlLFxuICAgICAgICBDdWlMZXREaXJlY3RpdmUsXG4gICAgICAgIEN1aVN2Z01vZHVsZSxcbiAgICAgICAgQ3VpQ2F0ZWdvcnlUcmVlRm9ybUNvbXBvbmVudCxcbiAgICAgICAgQ3VpQ3JlYXRlQ2F0ZWdvcnlUcmVlSXRlbUNvbXBvbmVudCxcbiAgICAgICAgZm9yd2FyZFJlZigoKSA9PiBDdWlDYXRlZ29yaWVzVHJlZUxpc3RDb21wb25lbnQpXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXRlZ29yeS10cmVlLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jYXRlZ29yeS10cmVlLWl0ZW0uY29tcG9uZW50LnNjc3MnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEN1aUNhdGVnb3J5VHJlZUl0ZW1Db21wb25lbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3JpZXNEYXRhU291cmNlU2VydmljZSA9IGluamVjdChDVUlfQ0FURUdPUklFU19UUkVFX0RBVEFfU09VUkNFX1NFUlZJQ0VfVE9LRU4pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlID0gaW5qZWN0KEN1aUNhdGVnb3J5VHJlZVN0YXRlU2VydmljZSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNEZWxldGVTdXBwb3J0ZWQgPSAhIXRoaXMuY2F0ZWdvcmllc0RhdGFTb3VyY2VTZXJ2aWNlLmRlbGV0ZTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdG9yYWdlQ2hpbGRyZW4gPSBzaWduYWw8VHJlZVN0cnVjdFtdPihbXSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFyZUNoaWxkcmVuT3BlbmVkID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNTdWJjYXRlZ29yeUNyZWF0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNTdWJjYXRlZ29yeUNyZWF0aW9uTG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzRGVsZXRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBvcGVuQ2xvc2VCdXR0b25JY29uID0gY29tcHV0ZWQ8Q3VpSWNvbj4oKCkgPT5cbiAgICAgICAgdGhpcy5hcmVDaGlsZHJlbk9wZW5lZCgpID8gJ2N1aUljb25DaGV2cm9uRG93bicgOiAnY3VpSWNvbkNoZXZyb25SaWdodCdcbiAgICApO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkb0NoaWxkcmVuRXhpc3QgPSBjb21wdXRlZChcbiAgICAgICAgKCkgPT4gdGhpcy5zdG9yYWdlKCkuY2hpbGRyZW4ubGVuZ3RoIHx8IHRoaXMuc3RvcmFnZUNoaWxkcmVuKCkubGVuZ3RoXG4gICAgKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNPcGVuQ2xvc2VCdXR0b25IaWRkZW4gPSBjb21wdXRlZCgoKSA9PiAhdGhpcy5kb0NoaWxkcmVuRXhpc3QoKSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0b3JhZ2VJY29uID0gY29tcHV0ZWQ8Q3VpSWNvbj4oKCkgPT5cbiAgICAgICAgdGhpcy5hcmVDaGlsZHJlbk9wZW5lZCgpICYmIHRoaXMuZG9DaGlsZHJlbkV4aXN0KCkgPyAnY3VpSWNvbkZvbGRlck9wZW4nIDogJ2N1aUljb25Gb2xkZXInXG4gICAgKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWxpZ25JdGVtcyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmlzVGl0bGVFZGl0KCkgPyAnZmxleC1zdGFydCcgOiAnY2VudGVyJykpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc1RpdGxlRWRpdCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLmVkaXRpbmdJZCgpID09PSB0aGlzLnN0b3JhZ2UoKS5pZCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzQ3JlYXRlQ2F0ZWdvcnlDb250cm9sVmlzaWJsZSA9IGNvbXB1dGVkKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgKHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLmNyZWF0aW5nUGFyZW50SWQoKSA9PT0gdGhpcy5zdG9yYWdlKCkuaWQgJiYgdGhpcy5pc1N1YmNhdGVnb3J5Q3JlYXRpbmcoKSkgfHxcbiAgICAgICAgICAgIHRoaXMuaXNTdWJjYXRlZ29yeUNyZWF0aW9uTG9hZGluZygpXG4gICAgKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNFbXB0eSA9IGNvbXB1dGVkKFxuICAgICAgICAoKSA9PiAhdGhpcy5zdG9yYWdlKCkuZWxlbWVudHMubGVuZ3RoICYmICF0aGlzLnN0b3JhZ2UoKS5jaGlsZHJlbi5sZW5ndGggJiYgIXRoaXMuc3RvcmFnZUNoaWxkcmVuKCkubGVuZ3RoXG4gICAgKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2F0ZWdvcnlUaXRsZSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2F0ZWdvcnkgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgICAgICAuLi50aGlzLnN0b3JhZ2UoKSxcbiAgICAgICAgdGl0bGU6IHRoaXMuY2F0ZWdvcnlUaXRsZSgpIHx8IHRoaXMuc3RvcmFnZSgpLnRpdGxlXG4gICAgfSkpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IHN0b3JhZ2UgPSBpbnB1dC5yZXF1aXJlZDxUcmVlU3RydWN0PigpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGRlbGV0ZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaW5pdFN0b3JhZ2VDaGlsZHJlbigpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblNlbGVjdENhdGVnb3J5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhdGVnb3J5VHJlZVN0YXRlU2VydmljZS5zZXRDdXJyZW50Q2F0ZWdvcnkodGhpcy5jYXRlZ29yeSgpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Ub2dnbGVDaGlsZHJlbihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLmFyZUNoaWxkcmVuT3BlbmVkLnVwZGF0ZSgodmFsdWUpID0+ICF2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuYXJlQ2hpbGRyZW5PcGVuZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc1N1YmNhdGVnb3J5Q3JlYXRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25UaXRsZUNoYW5nZWQodGl0bGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2FuY2VsVGl0bGVFZGl0KCk7XG5cbiAgICAgICAgaWYgKHRpdGxlID09PSB0aGlzLmNhdGVnb3J5KCkudGl0bGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0RhdGFTb3VyY2VTZXJ2aWNlXG4gICAgICAgICAgICAudXBkYXRlVGl0bGUodGhpcy5zdG9yYWdlKCkuaWQsIHRpdGxlKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhdGVnb3J5VGl0bGUuc2V0KHRpdGxlKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhdGVnb3J5KCkuaWQgPT09IHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLmNhdGVnb3J5KCk/LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLnNldEN1cnJlbnRDYXRlZ29yeSh0aGlzLmNhdGVnb3J5KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblN0YXJ0VGl0bGVFZGl0KGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLnNldEVkaXRpbmdJZCh0aGlzLnN0b3JhZ2UoKS5pZCk7XG4gICAgICAgIHRoaXMub25DcmVhdGluZ1N1YmNhdGVnb3J5Q2FuY2VsZWQoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25DYW5jZWxUaXRsZUVkaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLmNsZWFyRWRpdGluZ0lkKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uU3RhcnRDcmVhdGluZ1N1YmNhdGVnb3J5KGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuaXNTdWJjYXRlZ29yeUNyZWF0aW5nLnNldCh0cnVlKTtcbiAgICAgICAgdGhpcy5hcmVDaGlsZHJlbk9wZW5lZC5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLnN0YXJ0Q3JlYXRpbmdDaGlsZE9mKHRoaXMuc3RvcmFnZSgpLmlkKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25DcmVhdGVOZXdTdWJjYXRlZ29yeSh0aXRsZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNTdWJjYXRlZ29yeUNyZWF0aW5nLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuaXNTdWJjYXRlZ29yeUNyZWF0aW9uTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0RhdGFTb3VyY2VTZXJ2aWNlXG4gICAgICAgICAgICAuY3JlYXRlQ2hpbGQodGhpcy5zdG9yYWdlKCkuaWQsIHRpdGxlKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5pc1N1YmNhdGVnb3J5Q3JlYXRpb25Mb2FkaW5nLnNldChmYWxzZSkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzdG9yYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlQ2hpbGRyZW4udXBkYXRlKCh2YWx1ZSkgPT4gWy4uLnZhbHVlLCBzdG9yYWdlXSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25DcmVhdGluZ1N1YmNhdGVnb3J5Q2FuY2VsZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNTdWJjYXRlZ29yeUNyZWF0aW5nLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLmNsZWFyQ3JlYXRpbmcoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25EZWxldGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgZGVsZXRlUmVxdWVzdCA9IHRoaXMuY2F0ZWdvcmllc0RhdGFTb3VyY2VTZXJ2aWNlLmRlbGV0ZTtcblxuICAgICAgICBpZiAoIWRlbGV0ZVJlcXVlc3QgfHwgIXRoaXMuaXNFbXB0eSgpIHx8IHRoaXMuaXNEZWxldGluZygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzRGVsZXRpbmcuc2V0KHRydWUpO1xuICAgICAgICBkZWxldGVSZXF1ZXN0XG4gICAgICAgICAgICAuY2FsbCh0aGlzLmNhdGVnb3JpZXNEYXRhU291cmNlU2VydmljZSwgdGhpcy5zdG9yYWdlKCkuaWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzRGVsZXRpbmcuc2V0KGZhbHNlKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kZWxldGVkLmVtaXQodGhpcy5zdG9yYWdlKCkuaWQpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25DaGlsZERlbGV0ZWQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JhZ2VDaGlsZHJlbi51cGRhdGUoKGNoaWxkcmVuKSA9PiBjaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC5pZCAhPT0gaWQpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTdG9yYWdlQ2hpbGRyZW4oKTogdm9pZCB7XG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYXJlQ2hpbGRyZW5PcGVuZWQoKSB8fCB0aGlzLnN0b3JhZ2VDaGlsZHJlbigpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuc3RvcmFnZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gc3RvcmFnZS5jaGlsZHJlbjtcblxuICAgICAgICAgICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNoaWxkcmVuWzBdICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2VDaGlsZHJlbi5zZXQoY2hpbGRyZW4gYXMgVHJlZVN0cnVjdFtdKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzRGF0YVNvdXJjZVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLmxvYWRDaGlsZHJlbihzdG9yYWdlLmlkKVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RvcmFnZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZUNoaWxkcmVuLnNldChzdG9yYWdlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKmN1aUxldD1cImNhdGVnb3J5KCkgYXMgc3RhZ2VcIj5cbiAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbc3R5bGUuYWxpZ24taXRlbXNdPVwiYWxpZ25JdGVtcygpXCJcbiAgICAgICAgY2xhc3M9XCJjYXRlZ29yeVwiXG4gICAgICAgIChjbGljayk9XCJvblNlbGVjdENhdGVnb3J5KClcIlxuICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImNhdGVnb3J5X19vcGVuLWNsb3NlLWJ1dHRvblwiXG4gICAgICAgICAgICBbY2xhc3MuY2F0ZWdvcnlfX29wZW4tY2xvc2UtYnV0dG9uX2hpZGRlbl09XCJpc09wZW5DbG9zZUJ1dHRvbkhpZGRlbigpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblRvZ2dsZUNoaWxkcmVuKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8Y3VpLXN2Z1xuICAgICAgICAgICAgICAgIFtpY29uXT1cIm9wZW5DbG9zZUJ1dHRvbkljb24oKVwiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJ2YXIoLS1jdWktYmFzZS01MDApXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8Y3VpLXN2Z1xuICAgICAgICAgICAgW2ljb25dPVwic3RvcmFnZUljb24oKVwiXG4gICAgICAgICAgICBjb2xvcj1cInZhcigtLWN1aS1iYXNlLTUwMClcIlxuICAgICAgICAgICAgY2xhc3M9XCJpY29uXCJcbiAgICAgICAgLz5cbiAgICAgICAgQGlmIChpc1RpdGxlRWRpdCgpKSB7XG4gICAgICAgICAgICA8Y3VpLWNhdGVnb3J5LXRyZWUtZm9ybVxuICAgICAgICAgICAgICAgIFtkZWZhdWx0VGl0bGVdPVwic3RhZ2UudGl0bGVcIlxuICAgICAgICAgICAgICAgIChjcmVhdGVkKT1cIm9uVGl0bGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjYW5jZWxlZCk9XCJvbkNhbmNlbFRpdGxlRWRpdCgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXRlZ29yeV9fdGl0bGVcIj57eyBzdGFnZS50aXRsZSB9fTwvc3Bhbj5cblxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGN1aUJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInh4c1wiXG4gICAgICAgICAgICAgICAgaWNvbj1cImN1aUljb25FZGl0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNhdGVnb3J5X19hZGQtc3ViY2F0ZWdvcnktYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdGFydFRpdGxlRWRpdCgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjdWlCdXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJ4eHNcIlxuICAgICAgICAgICAgICAgIGljb249XCJjdWlJY29uUGx1c1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjYXRlZ29yeV9fYWRkLXN1YmNhdGVnb3J5LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3RhcnRDcmVhdGluZ1N1YmNhdGVnb3J5KCRldmVudClcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgQGlmIChpc0RlbGV0ZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY3VpQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwieHhzXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImN1aUljb25UcmFzaFwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNFbXB0eSgpIHx8IGlzRGVsZXRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2F0ZWdvcnlfX2FkZC1zdWJjYXRlZ29yeS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPC9idXR0b24+XG4gICAgPGRpdlxuICAgICAgICBbaGlkZGVuXT1cIiFhcmVDaGlsZHJlbk9wZW5lZCgpXCJcbiAgICAgICAgY2xhc3M9XCJsaXN0LXdyYXBwZXJcIlxuICAgID5cbiAgICAgICAgPGN1aS1jYXRlZ29yaWVzLXRyZWUtbGlzdFxuICAgICAgICAgICAgW3N0b3JhZ2VzXT1cInN0b3JhZ2VDaGlsZHJlbigpXCJcbiAgICAgICAgICAgIChkZWxldGVkKT1cIm9uQ2hpbGREZWxldGVkKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgICBAaWYgKGlzQ3JlYXRlQ2F0ZWdvcnlDb250cm9sVmlzaWJsZSgpKSB7XG4gICAgICAgICAgICA8Y3VpLWNyZWF0ZS1jYXRlZ29yeS10cmVlLWl0ZW1cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNyZWF0ZS1jYXRlZ29yeVwiXG4gICAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiaXNTdWJjYXRlZ29yeUNyZWF0aW9uTG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAoY3JlYXRlZCk9XCJvbkNyZWF0ZU5ld1N1YmNhdGVnb3J5KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjYW5jZWxlZCk9XCJvbkNyZWF0aW5nU3ViY2F0ZWdvcnlDYW5jZWxlZCgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktdHJlZS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvd2lkZ2V0cy91aS9jYXRlZ29yaWVzLXRyZWUvY29tcG9uZW50cy9jYXRlZ29yeS10cmVlLWl0ZW0vY2F0ZWdvcnktdHJlZS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvd2lkZ2V0cy91aS9jYXRlZ29yaWVzLXRyZWUvY29tcG9uZW50cy9jYXRlZ29yeS10cmVlLWl0ZW0vY2F0ZWdvcnktdHJlZS1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSw2Q0FBNkMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RSxPQUFP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QUMsQ0FBQztZQUVuRCxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQywyQkFBMkI7YUFDM0IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7YUFDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN6QyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQzsrR0F4TFEsNEJBQTRCO21HQUE1Qiw0QkFBNEIsNFBDM0N6QyxxcEZBaUZBLDI1QkRuRFEsZUFBZSw2UUFDZixtQkFBbUIsb0RBQ25CLGVBQWUsNkZBQ2YsWUFBWSxrTkFDWiw0QkFBNEIsa0tBQzVCLGtDQUFrQyx5SkFDakIsOEJBQThCOzs0RkFPMUMsNEJBQTRCO2tCQWhCeEMsU0FBUzsrQkFDSSx3QkFBd0IsV0FDekI7d0JBQ0wsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWiw0QkFBNEI7d0JBQzVCLGtDQUFrQzt3QkFDbEMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDhCQUE4QixDQUFDO3FCQUNuRCxjQUNXLElBQUksbUJBR0MsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgZWZmZWN0LFxuICAgIGZvcndhcmRSZWYsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIG91dHB1dCxcbiAgICBzaWduYWwsXG4gICAgdW50cmFja2VkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQ3VpTGV0RGlyZWN0aXZlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcbmltcG9ydCB0eXBlIHsgVHJlZVN0cnVjdCB9IGZyb20gJ0BjdWJ5LXVpL2FwaSc7XG5pbXBvcnQgdHlwZSB7IEN1aUljb24gfSBmcm9tICdAY3VieS11aS9pY29ucyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDdWlCdXR0b25Nb2R1bGUsIEN1aURpYWxvZ1NlcnZpY2UsIEN1aUljb25CdXR0b25Nb2R1bGUsIEN1aVN2Z01vZHVsZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQ3VpRGVsZXRlTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9kZWxldGUtbW9kYWwnO1xuaW1wb3J0IHsgQ1VJX0NBVEVHT1JJRVNfVFJFRV9EQVRBX1NPVVJDRV9TRVJWSUNFX1RPS0VOIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IEN1aUNhdGVnb3J5VHJlZVN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEN1aUNhdGVnb3JpZXNUcmVlTGlzdENvbXBvbmVudCB9IGZyb20gJy4uL2NhdGVnb3JpZXMtdHJlZS1saXN0JztcbmltcG9ydCB7IEN1aUNhdGVnb3J5VHJlZUZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9jYXRlZ29yeS10cmVlLWZvcm0nO1xuaW1wb3J0IHsgQ3VpQ3JlYXRlQ2F0ZWdvcnlUcmVlSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2NyZWF0ZS1jYXRlZ29yeS10cmVlLWl0ZW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2N1aS1jYXRlZ29yeS10cmVlLWl0ZW0nLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ3VpQnV0dG9uTW9kdWxlLFxuICAgICAgICBDdWlJY29uQnV0dG9uTW9kdWxlLFxuICAgICAgICBDdWlMZXREaXJlY3RpdmUsXG4gICAgICAgIEN1aVN2Z01vZHVsZSxcbiAgICAgICAgQ3VpQ2F0ZWdvcnlUcmVlRm9ybUNvbXBvbmVudCxcbiAgICAgICAgQ3VpQ3JlYXRlQ2F0ZWdvcnlUcmVlSXRlbUNvbXBvbmVudCxcbiAgICAgICAgZm9yd2FyZFJlZigoKSA9PiBDdWlDYXRlZ29yaWVzVHJlZUxpc3RDb21wb25lbnQpXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXRlZ29yeS10cmVlLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jYXRlZ29yeS10cmVlLWl0ZW0uY29tcG9uZW50LnNjc3MnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEN1aUNhdGVnb3J5VHJlZUl0ZW1Db21wb25lbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3JpZXNEYXRhU291cmNlU2VydmljZSA9IGluamVjdChDVUlfQ0FURUdPUklFU19UUkVFX0RBVEFfU09VUkNFX1NFUlZJQ0VfVE9LRU4pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlID0gaW5qZWN0KEN1aUNhdGVnb3J5VHJlZVN0YXRlU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjdWlEaWFsb2dTZXJ2aWNlID0gaW5qZWN0KEN1aURpYWxvZ1NlcnZpY2UpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzRGVsZXRlU3VwcG9ydGVkID0gISF0aGlzLmNhdGVnb3JpZXNEYXRhU291cmNlU2VydmljZS5kZWxldGU7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RvcmFnZUNoaWxkcmVuID0gc2lnbmFsPFRyZWVTdHJ1Y3RbXT4oW10pO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBhcmVDaGlsZHJlbk9wZW5lZCA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzU3ViY2F0ZWdvcnlDcmVhdGluZyA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzU3ViY2F0ZWdvcnlDcmVhdGlvbkxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBvcGVuQ2xvc2VCdXR0b25JY29uID0gY29tcHV0ZWQ8Q3VpSWNvbj4oKCkgPT5cbiAgICAgICAgdGhpcy5hcmVDaGlsZHJlbk9wZW5lZCgpID8gJ2N1aUljb25DaGV2cm9uRG93bicgOiAnY3VpSWNvbkNoZXZyb25SaWdodCdcbiAgICApO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkb0NoaWxkcmVuRXhpc3QgPSBjb21wdXRlZChcbiAgICAgICAgKCkgPT4gdGhpcy5zdG9yYWdlKCkuY2hpbGRyZW4ubGVuZ3RoIHx8IHRoaXMuc3RvcmFnZUNoaWxkcmVuKCkubGVuZ3RoXG4gICAgKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNPcGVuQ2xvc2VCdXR0b25IaWRkZW4gPSBjb21wdXRlZCgoKSA9PiAhdGhpcy5kb0NoaWxkcmVuRXhpc3QoKSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0b3JhZ2VJY29uID0gY29tcHV0ZWQ8Q3VpSWNvbj4oKCkgPT5cbiAgICAgICAgdGhpcy5hcmVDaGlsZHJlbk9wZW5lZCgpICYmIHRoaXMuZG9DaGlsZHJlbkV4aXN0KCkgPyAnY3VpSWNvbkZvbGRlck9wZW4nIDogJ2N1aUljb25Gb2xkZXInXG4gICAgKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWxpZ25JdGVtcyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmlzVGl0bGVFZGl0KCkgPyAnZmxleC1zdGFydCcgOiAnY2VudGVyJykpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc1RpdGxlRWRpdCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLmVkaXRpbmdJZCgpID09PSB0aGlzLnN0b3JhZ2UoKS5pZCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzQ3JlYXRlQ2F0ZWdvcnlDb250cm9sVmlzaWJsZSA9IGNvbXB1dGVkKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgKHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLmNyZWF0aW5nUGFyZW50SWQoKSA9PT0gdGhpcy5zdG9yYWdlKCkuaWQgJiYgdGhpcy5pc1N1YmNhdGVnb3J5Q3JlYXRpbmcoKSkgfHxcbiAgICAgICAgICAgIHRoaXMuaXNTdWJjYXRlZ29yeUNyZWF0aW9uTG9hZGluZygpXG4gICAgKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNFbXB0eSA9IGNvbXB1dGVkKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgIXRoaXMuc3RvcmFnZSgpLmVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICAgICAgKHRoaXMuYXJlQ2hpbGRyZW5PcGVuZWQoKSA/ICF0aGlzLnN0b3JhZ2VDaGlsZHJlbigpLmxlbmd0aCA6ICF0aGlzLnN0b3JhZ2UoKS5jaGlsZHJlbi5sZW5ndGgpXG4gICAgKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2F0ZWdvcnlUaXRsZSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2F0ZWdvcnkgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgICAgICAuLi50aGlzLnN0b3JhZ2UoKSxcbiAgICAgICAgdGl0bGU6IHRoaXMuY2F0ZWdvcnlUaXRsZSgpIHx8IHRoaXMuc3RvcmFnZSgpLnRpdGxlXG4gICAgfSkpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IHN0b3JhZ2UgPSBpbnB1dC5yZXF1aXJlZDxUcmVlU3RydWN0PigpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGRlbGV0ZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaW5pdFN0b3JhZ2VDaGlsZHJlbigpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblNlbGVjdENhdGVnb3J5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhdGVnb3J5VHJlZVN0YXRlU2VydmljZS5zZXRDdXJyZW50Q2F0ZWdvcnkodGhpcy5jYXRlZ29yeSgpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Ub2dnbGVDaGlsZHJlbihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLmFyZUNoaWxkcmVuT3BlbmVkLnVwZGF0ZSgodmFsdWUpID0+ICF2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuYXJlQ2hpbGRyZW5PcGVuZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc1N1YmNhdGVnb3J5Q3JlYXRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25UaXRsZUNoYW5nZWQodGl0bGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2FuY2VsVGl0bGVFZGl0KCk7XG5cbiAgICAgICAgaWYgKHRpdGxlID09PSB0aGlzLmNhdGVnb3J5KCkudGl0bGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0RhdGFTb3VyY2VTZXJ2aWNlXG4gICAgICAgICAgICAudXBkYXRlVGl0bGUodGhpcy5zdG9yYWdlKCkuaWQsIHRpdGxlKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhdGVnb3J5VGl0bGUuc2V0KHRpdGxlKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhdGVnb3J5KCkuaWQgPT09IHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLmNhdGVnb3J5KCk/LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLnNldEN1cnJlbnRDYXRlZ29yeSh0aGlzLmNhdGVnb3J5KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblN0YXJ0VGl0bGVFZGl0KGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLnNldEVkaXRpbmdJZCh0aGlzLnN0b3JhZ2UoKS5pZCk7XG4gICAgICAgIHRoaXMub25DcmVhdGluZ1N1YmNhdGVnb3J5Q2FuY2VsZWQoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25DYW5jZWxUaXRsZUVkaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLmNsZWFyRWRpdGluZ0lkKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uU3RhcnRDcmVhdGluZ1N1YmNhdGVnb3J5KGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuaXNTdWJjYXRlZ29yeUNyZWF0aW5nLnNldCh0cnVlKTtcbiAgICAgICAgdGhpcy5hcmVDaGlsZHJlbk9wZW5lZC5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLnN0YXJ0Q3JlYXRpbmdDaGlsZE9mKHRoaXMuc3RvcmFnZSgpLmlkKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25DcmVhdGVOZXdTdWJjYXRlZ29yeSh0aXRsZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNTdWJjYXRlZ29yeUNyZWF0aW5nLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuaXNTdWJjYXRlZ29yeUNyZWF0aW9uTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0RhdGFTb3VyY2VTZXJ2aWNlXG4gICAgICAgICAgICAuY3JlYXRlQ2hpbGQodGhpcy5zdG9yYWdlKCkuaWQsIHRpdGxlKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5pc1N1YmNhdGVnb3J5Q3JlYXRpb25Mb2FkaW5nLnNldChmYWxzZSkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzdG9yYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlQ2hpbGRyZW4udXBkYXRlKCh2YWx1ZSkgPT4gWy4uLnZhbHVlLCBzdG9yYWdlXSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25DcmVhdGluZ1N1YmNhdGVnb3J5Q2FuY2VsZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNTdWJjYXRlZ29yeUNyZWF0aW5nLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlUcmVlU3RhdGVTZXJ2aWNlLmNsZWFyQ3JlYXRpbmcoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25EZWxldGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgZGVsZXRlUmVxdWVzdCA9IHRoaXMuY2F0ZWdvcmllc0RhdGFTb3VyY2VTZXJ2aWNlLmRlbGV0ZTtcblxuICAgICAgICBpZiAoIWRlbGV0ZVJlcXVlc3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VpRGlhbG9nU2VydmljZVxuICAgICAgICAgICAgLm9wZW4oQ3VpRGVsZXRlTW9kYWxDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnREVMRVRFX0NBVEVHT1JZX1FVRVNUSU9OJyxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogWydBQ1RJT05fV0lMTF9ERUxFVEVfQ0FURUdPUlknXSxcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlOiAoKSA9PiBkZWxldGVSZXF1ZXN0LmNhbGwodGhpcy5jYXRlZ29yaWVzRGF0YVNvdXJjZVNlcnZpY2UsIHRoaXMuc3RvcmFnZSgpLmlkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YT8uY2FuY2VsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlZC5lbWl0KHRoaXMuc3RvcmFnZSgpLmlkKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkNoaWxkRGVsZXRlZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcmFnZUNoaWxkcmVuLnVwZGF0ZSgoY2hpbGRyZW4pID0+IGNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLmlkICE9PSBpZCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFN0b3JhZ2VDaGlsZHJlbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWZmZWN0UmVmID0gZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hcmVDaGlsZHJlbk9wZW5lZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBlZmZlY3RSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLmxvYWRDaGlsZHJlbigpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRDaGlsZHJlbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuc3RvcmFnZSgpO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHN0b3JhZ2UuY2hpbGRyZW47XG5cbiAgICAgICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW5bMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2VDaGlsZHJlbi5zZXQoY2hpbGRyZW4gYXMgVHJlZVN0cnVjdFtdKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzRGF0YVNvdXJjZVNlcnZpY2VcbiAgICAgICAgICAgIC5sb2FkQ2hpbGRyZW4oc3RvcmFnZS5pZClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RvcmFnZXMpID0+IHRoaXMuc3RvcmFnZUNoaWxkcmVuLnNldChzdG9yYWdlcykpO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKmN1aUxldD1cImNhdGVnb3J5KCkgYXMgc3RhZ2VcIj5cbiAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbc3R5bGUuYWxpZ24taXRlbXNdPVwiYWxpZ25JdGVtcygpXCJcbiAgICAgICAgY2xhc3M9XCJjYXRlZ29yeVwiXG4gICAgICAgIChjbGljayk9XCJvblNlbGVjdENhdGVnb3J5KClcIlxuICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInRvZ2dsZS1idXR0b25cIlxuICAgICAgICAgICAgW2NsYXNzLnRvZ2dsZS1idXR0b25faGlkZGVuXT1cImlzT3BlbkNsb3NlQnV0dG9uSGlkZGVuKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlQ2hpbGRyZW4oJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxjdWktc3ZnXG4gICAgICAgICAgICAgICAgW2ljb25dPVwib3BlbkNsb3NlQnV0dG9uSWNvbigpXCJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInZhcigtLWN1aS1iYXNlLTUwMClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxjdWktc3ZnXG4gICAgICAgICAgICBbaWNvbl09XCJzdG9yYWdlSWNvbigpXCJcbiAgICAgICAgICAgIGNvbG9yPVwidmFyKC0tY3VpLWJhc2UtNTAwKVwiXG4gICAgICAgICAgICBjbGFzcz1cImljb25cIlxuICAgICAgICAvPlxuICAgICAgICBAaWYgKGlzVGl0bGVFZGl0KCkpIHtcbiAgICAgICAgICAgIDxjdWktY2F0ZWdvcnktdHJlZS1mb3JtXG4gICAgICAgICAgICAgICAgW2RlZmF1bHRUaXRsZV09XCJzdGFnZS50aXRsZVwiXG4gICAgICAgICAgICAgICAgKGNyZWF0ZWQpPVwib25UaXRsZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNhbmNlbGVkKT1cIm9uQ2FuY2VsVGl0bGVFZGl0KClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+e3sgc3RhZ2UudGl0bGUgfX08L3NwYW4+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjdWlCdXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJ4eHNcIlxuICAgICAgICAgICAgICAgIGljb249XCJjdWlJY29uRWRpdFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gZWRpdC1idXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN0YXJ0VGl0bGVFZGl0KCRldmVudClcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGN1aUJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInh4c1wiXG4gICAgICAgICAgICAgICAgaWNvbj1cImN1aUljb25QbHVzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBhZGQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdGFydENyZWF0aW5nU3ViY2F0ZWdvcnkoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICBAaWYgKGlzRGVsZXRlU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjdWlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJ4eHNcIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiY3VpSWNvblRyYXNoXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gZGVsZXRlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2XG4gICAgICAgIFtoaWRkZW5dPVwiIWFyZUNoaWxkcmVuT3BlbmVkKClcIlxuICAgICAgICBjbGFzcz1cImxpc3Qtd3JhcHBlclwiXG4gICAgPlxuICAgICAgICA8Y3VpLWNhdGVnb3JpZXMtdHJlZS1saXN0XG4gICAgICAgICAgICBbc3RvcmFnZXNdPVwic3RvcmFnZUNoaWxkcmVuKClcIlxuICAgICAgICAgICAgKGRlbGV0ZWQpPVwib25DaGlsZERlbGV0ZWQoJGV2ZW50KVwiXG4gICAgICAgIC8+XG4gICAgICAgIEBpZiAoaXNDcmVhdGVDYXRlZ29yeUNvbnRyb2xWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgIDxjdWktY3JlYXRlLWNhdGVnb3J5LXRyZWUtaXRlbVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3JlYXRlLWNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICBbaXNEaXNhYmxlZF09XCJpc1N1YmNhdGVnb3J5Q3JlYXRpb25Mb2FkaW5nKClcIlxuICAgICAgICAgICAgICAgIChjcmVhdGVkKT1cIm9uQ3JlYXRlTmV3U3ViY2F0ZWdvcnkoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNhbmNlbGVkKT1cIm9uQ3JlYXRpbmdTdWJjYXRlZ29yeUNhbmNlbGVkKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -9876,12 +9876,12 @@ class CuiCategoryTreeItemComponent {
9876
9876
  this.destroyRef = inject(DestroyRef);
9877
9877
  this.categoriesDataSourceService = inject(CUI_CATEGORIES_TREE_DATA_SOURCE_SERVICE_TOKEN);
9878
9878
  this.categoryTreeStateService = inject(CuiCategoryTreeStateService);
9879
+ this.cuiDialogService = inject(CuiDialogService);
9879
9880
  this.isDeleteSupported = !!this.categoriesDataSourceService.delete;
9880
9881
  this.storageChildren = signal([]);
9881
9882
  this.areChildrenOpened = signal(false);
9882
9883
  this.isSubcategoryCreating = signal(false);
9883
9884
  this.isSubcategoryCreationLoading = signal(false);
9884
- this.isDeleting = signal(false);
9885
9885
  this.openCloseButtonIcon = computed(() => this.areChildrenOpened() ? 'cuiIconChevronDown' : 'cuiIconChevronRight');
9886
9886
  this.doChildrenExist = computed(() => this.storage().children.length || this.storageChildren().length);
9887
9887
  this.isOpenCloseButtonHidden = computed(() => !this.doChildrenExist());
@@ -9890,7 +9890,8 @@ class CuiCategoryTreeItemComponent {
9890
9890
  this.isTitleEdit = computed(() => this.categoryTreeStateService.editingId() === this.storage().id);
9891
9891
  this.isCreateCategoryControlVisible = computed(() => (this.categoryTreeStateService.creatingParentId() === this.storage().id && this.isSubcategoryCreating()) ||
9892
9892
  this.isSubcategoryCreationLoading());
9893
- this.isEmpty = computed(() => !this.storage().elements.length && !this.storage().children.length && !this.storageChildren().length);
9893
+ this.isEmpty = computed(() => !this.storage().elements.length &&
9894
+ (this.areChildrenOpened() ? !this.storageChildren().length : !this.storage().children.length));
9894
9895
  this.categoryTitle = signal('');
9895
9896
  this.category = computed(() => ({
9896
9897
  ...this.storage(),
@@ -9957,42 +9958,54 @@ class CuiCategoryTreeItemComponent {
9957
9958
  onDelete(event) {
9958
9959
  event.stopPropagation();
9959
9960
  const deleteRequest = this.categoriesDataSourceService.delete;
9960
- if (!deleteRequest || !this.isEmpty() || this.isDeleting()) {
9961
+ if (!deleteRequest) {
9961
9962
  return;
9962
9963
  }
9963
- this.isDeleting.set(true);
9964
- deleteRequest
9965
- .call(this.categoriesDataSourceService, this.storage().id)
9966
- .pipe(finalize(() => this.isDeleting.set(false)), takeUntilDestroyed(this.destroyRef))
9967
- .subscribe(() => this.deleted.emit(this.storage().id));
9964
+ this.cuiDialogService
9965
+ .open(CuiDeleteModalComponent, {
9966
+ data: {
9967
+ title: 'DELETE_CATEGORY_QUESTION',
9968
+ content: ['ACTION_WILL_DELETE_CATEGORY'],
9969
+ delete: () => deleteRequest.call(this.categoriesDataSourceService, this.storage().id)
9970
+ }
9971
+ })
9972
+ .pipe(takeUntilDestroyed(this.destroyRef))
9973
+ .subscribe((data) => {
9974
+ if (data?.canceled) {
9975
+ return;
9976
+ }
9977
+ this.deleted.emit(this.storage().id);
9978
+ });
9968
9979
  }
9969
9980
  onChildDeleted(id) {
9970
9981
  this.storageChildren.update((children) => children.filter((child) => child.id !== id));
9971
9982
  }
9972
9983
  initStorageChildren() {
9973
- effect(() => {
9974
- if (!this.areChildrenOpened() || this.storageChildren().length) {
9975
- return;
9976
- }
9977
- const storage = this.storage();
9978
- const children = storage.children;
9979
- if (!children.length) {
9980
- return;
9981
- }
9982
- if (typeof children[0] !== 'string') {
9983
- this.storageChildren.set(children);
9984
+ const effectRef = effect(() => {
9985
+ if (!this.areChildrenOpened()) {
9984
9986
  return;
9985
9987
  }
9986
- this.categoriesDataSourceService
9987
- .loadChildren(storage.id)
9988
- .pipe(takeUntilDestroyed(this.destroyRef))
9989
- .subscribe((storages) => {
9990
- this.storageChildren.set(storages);
9991
- });
9988
+ effectRef.destroy();
9989
+ untracked(() => this.loadChildren());
9992
9990
  }, { allowSignalWrites: true });
9993
9991
  }
9992
+ loadChildren() {
9993
+ const storage = this.storage();
9994
+ const children = storage.children;
9995
+ if (!children.length) {
9996
+ return;
9997
+ }
9998
+ if (typeof children[0] !== 'string') {
9999
+ this.storageChildren.set(children);
10000
+ return;
10001
+ }
10002
+ this.categoriesDataSourceService
10003
+ .loadChildren(storage.id)
10004
+ .pipe(takeUntilDestroyed(this.destroyRef))
10005
+ .subscribe((storages) => this.storageChildren.set(storages));
10006
+ }
9994
10007
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiCategoryTreeItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9995
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CuiCategoryTreeItemComponent, isStandalone: true, selector: "cui-category-tree-item", inputs: { storage: { classPropertyName: "storage", publicName: "storage", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { deleted: "deleted" }, ngImport: i0, template: "<ng-container *cuiLet=\"category() as stage\">\n <button\n type=\"button\"\n [style.align-items]=\"alignItems()\"\n class=\"category\"\n (click)=\"onSelectCategory()\"\n >\n <button\n type=\"button\"\n class=\"category__open-close-button\"\n [class.category__open-close-button_hidden]=\"isOpenCloseButtonHidden()\"\n (click)=\"onToggleChildren($event)\"\n >\n <cui-svg\n [icon]=\"openCloseButtonIcon()\"\n color=\"var(--cui-base-500)\"\n />\n </button>\n <cui-svg\n [icon]=\"storageIcon()\"\n color=\"var(--cui-base-500)\"\n class=\"icon\"\n />\n @if (isTitleEdit()) {\n <cui-category-tree-form\n [defaultTitle]=\"stage.title\"\n (created)=\"onTitleChanged($event)\"\n (canceled)=\"onCancelTitleEdit()\"\n />\n } @else {\n <span class=\"category__title\">{{ stage.title }}</span>\n\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconEdit\"\n class=\"category__add-subcategory-button\"\n (click)=\"onStartTitleEdit($event)\"\n ></button>\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconPlus\"\n class=\"category__add-subcategory-button\"\n (click)=\"onStartCreatingSubcategory($event)\"\n ></button>\n @if (isDeleteSupported) {\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconTrash\"\n [disabled]=\"!isEmpty() || isDeleting()\"\n class=\"category__add-subcategory-button\"\n (click)=\"onDelete($event)\"\n ></button>\n }\n }\n </button>\n <div\n [hidden]=\"!areChildrenOpened()\"\n class=\"list-wrapper\"\n >\n <cui-categories-tree-list\n [storages]=\"storageChildren()\"\n (deleted)=\"onChildDeleted($event)\"\n />\n @if (isCreateCategoryControlVisible()) {\n <cui-create-category-tree-item\n class=\"create-category\"\n [isDisabled]=\"isSubcategoryCreationLoading()\"\n (created)=\"onCreateNewSubcategory($event)\"\n (canceled)=\"onCreatingSubcategoryCanceled()\"\n />\n }\n </div>\n</ng-container>\n", styles: [".category{display:flex;flex-direction:row;gap:4px;padding:2px 4px;width:100%;min-height:32px;border-radius:8px}@media (hover: hover){.category:hover{background:var(--cui-base-10)}}.category:active{background:var(--cui-base-10)}.category__open-close-button{display:flex;flex-direction:row;gap:0;padding:2px;border-radius:4px;margin:4px 0}@media (hover: hover){.category__open-close-button:hover{background:var(--cui-base-100)}}.category__open-close-button:active{background:var(--cui-base-100)}.category__open-close-button_hidden{visibility:hidden}.category__title{flex:1;text-align:start;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.category__add-subcategory-button{--cui-base-50: var(--cui-base-200)}.list-wrapper{padding-left:8px}.create-category{margin-left:24px}.icon{padding-right:2px;padding-left:2px;height:28px}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CuiButtonModule) }, { kind: "component", type: i0.forwardRef(() => CuiButtonComponent), selector: "button[cuiButton], a[cuiButton]", inputs: ["shape", "disabled", "isLoaderShown", "icon", "iconRight", "appearance", "theme", "size"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiIconButtonModule) }, { kind: "directive", type: i0.forwardRef(() => CuiLetDirective), selector: "[cuiLet]", inputs: ["cuiLet"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiSvgModule) }, { kind: "component", type: i0.forwardRef(() => CuiSvgComponent), selector: "cui-svg[icon]", inputs: ["width", "height", "strokeWidth", "color", "icon"] }, { kind: "component", type: i0.forwardRef(() => CuiCategoryTreeFormComponent), selector: "cui-category-tree-form", inputs: ["isDisabled", "defaultTitle"], outputs: ["created", "canceled"] }, { kind: "component", type: i0.forwardRef(() => CuiCreateCategoryTreeItemComponent), selector: "cui-create-category-tree-item", inputs: ["isDisabled"], outputs: ["created", "canceled"] }, { kind: "component", type: i0.forwardRef(() => CuiCategoriesTreeListComponent), selector: "cui-categories-tree-list", inputs: ["storages"], outputs: ["deleted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10008
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CuiCategoryTreeItemComponent, isStandalone: true, selector: "cui-category-tree-item", inputs: { storage: { classPropertyName: "storage", publicName: "storage", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { deleted: "deleted" }, ngImport: i0, template: "<ng-container *cuiLet=\"category() as stage\">\n <button\n type=\"button\"\n [style.align-items]=\"alignItems()\"\n class=\"category\"\n (click)=\"onSelectCategory()\"\n >\n <button\n type=\"button\"\n class=\"toggle-button\"\n [class.toggle-button_hidden]=\"isOpenCloseButtonHidden()\"\n (click)=\"onToggleChildren($event)\"\n >\n <cui-svg\n [icon]=\"openCloseButtonIcon()\"\n color=\"var(--cui-base-500)\"\n />\n </button>\n <cui-svg\n [icon]=\"storageIcon()\"\n color=\"var(--cui-base-500)\"\n class=\"icon\"\n />\n @if (isTitleEdit()) {\n <cui-category-tree-form\n [defaultTitle]=\"stage.title\"\n (created)=\"onTitleChanged($event)\"\n (canceled)=\"onCancelTitleEdit()\"\n />\n } @else {\n <span class=\"title\">{{ stage.title }}</span>\n\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconEdit\"\n class=\"button edit-button\"\n (click)=\"onStartTitleEdit($event)\"\n ></button>\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconPlus\"\n class=\"button add-button\"\n (click)=\"onStartCreatingSubcategory($event)\"\n ></button>\n @if (isDeleteSupported) {\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconTrash\"\n class=\"button delete-button\"\n (click)=\"onDelete($event)\"\n ></button>\n }\n }\n </button>\n <div\n [hidden]=\"!areChildrenOpened()\"\n class=\"list-wrapper\"\n >\n <cui-categories-tree-list\n [storages]=\"storageChildren()\"\n (deleted)=\"onChildDeleted($event)\"\n />\n @if (isCreateCategoryControlVisible()) {\n <cui-create-category-tree-item\n class=\"create-category\"\n [isDisabled]=\"isSubcategoryCreationLoading()\"\n (created)=\"onCreateNewSubcategory($event)\"\n (canceled)=\"onCreatingSubcategoryCanceled()\"\n />\n }\n </div>\n</ng-container>\n", styles: [".category{display:flex;flex-direction:row;gap:4px;padding:2px 4px;width:100%;min-height:32px;border-radius:8px}@media (hover: hover){.category:hover{background:var(--cui-base-10)}.category:hover .delete-button{display:inline-block}}.category:active{background:var(--cui-base-10)}.toggle-button{display:flex;flex-direction:row;gap:0;padding:2px;border-radius:4px;margin:4px 0}@media (hover: hover){.toggle-button:hover{background:var(--cui-base-100)}}.toggle-button:active{background:var(--cui-base-100)}.toggle-button_hidden{visibility:hidden}.title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;text-align:start}.button{--cui-base-50: var(--cui-base-200)}@media (hover: hover){.delete-button{display:none}}.list-wrapper{padding-left:8px}.create-category{margin-left:24px}.icon{padding-right:2px;padding-left:2px;height:28px}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CuiButtonModule) }, { kind: "component", type: i0.forwardRef(() => CuiButtonComponent), selector: "button[cuiButton], a[cuiButton]", inputs: ["shape", "disabled", "isLoaderShown", "icon", "iconRight", "appearance", "theme", "size"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiIconButtonModule) }, { kind: "directive", type: i0.forwardRef(() => CuiLetDirective), selector: "[cuiLet]", inputs: ["cuiLet"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiSvgModule) }, { kind: "component", type: i0.forwardRef(() => CuiSvgComponent), selector: "cui-svg[icon]", inputs: ["width", "height", "strokeWidth", "color", "icon"] }, { kind: "component", type: i0.forwardRef(() => CuiCategoryTreeFormComponent), selector: "cui-category-tree-form", inputs: ["isDisabled", "defaultTitle"], outputs: ["created", "canceled"] }, { kind: "component", type: i0.forwardRef(() => CuiCreateCategoryTreeItemComponent), selector: "cui-create-category-tree-item", inputs: ["isDisabled"], outputs: ["created", "canceled"] }, { kind: "component", type: i0.forwardRef(() => CuiCategoriesTreeListComponent), selector: "cui-categories-tree-list", inputs: ["storages"], outputs: ["deleted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
9996
10009
  }
9997
10010
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiCategoryTreeItemComponent, decorators: [{
9998
10011
  type: Component,
@@ -10004,7 +10017,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
10004
10017
  CuiCategoryTreeFormComponent,
10005
10018
  CuiCreateCategoryTreeItemComponent,
10006
10019
  forwardRef(() => CuiCategoriesTreeListComponent)
10007
- ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *cuiLet=\"category() as stage\">\n <button\n type=\"button\"\n [style.align-items]=\"alignItems()\"\n class=\"category\"\n (click)=\"onSelectCategory()\"\n >\n <button\n type=\"button\"\n class=\"category__open-close-button\"\n [class.category__open-close-button_hidden]=\"isOpenCloseButtonHidden()\"\n (click)=\"onToggleChildren($event)\"\n >\n <cui-svg\n [icon]=\"openCloseButtonIcon()\"\n color=\"var(--cui-base-500)\"\n />\n </button>\n <cui-svg\n [icon]=\"storageIcon()\"\n color=\"var(--cui-base-500)\"\n class=\"icon\"\n />\n @if (isTitleEdit()) {\n <cui-category-tree-form\n [defaultTitle]=\"stage.title\"\n (created)=\"onTitleChanged($event)\"\n (canceled)=\"onCancelTitleEdit()\"\n />\n } @else {\n <span class=\"category__title\">{{ stage.title }}</span>\n\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconEdit\"\n class=\"category__add-subcategory-button\"\n (click)=\"onStartTitleEdit($event)\"\n ></button>\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconPlus\"\n class=\"category__add-subcategory-button\"\n (click)=\"onStartCreatingSubcategory($event)\"\n ></button>\n @if (isDeleteSupported) {\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconTrash\"\n [disabled]=\"!isEmpty() || isDeleting()\"\n class=\"category__add-subcategory-button\"\n (click)=\"onDelete($event)\"\n ></button>\n }\n }\n </button>\n <div\n [hidden]=\"!areChildrenOpened()\"\n class=\"list-wrapper\"\n >\n <cui-categories-tree-list\n [storages]=\"storageChildren()\"\n (deleted)=\"onChildDeleted($event)\"\n />\n @if (isCreateCategoryControlVisible()) {\n <cui-create-category-tree-item\n class=\"create-category\"\n [isDisabled]=\"isSubcategoryCreationLoading()\"\n (created)=\"onCreateNewSubcategory($event)\"\n (canceled)=\"onCreatingSubcategoryCanceled()\"\n />\n }\n </div>\n</ng-container>\n", styles: [".category{display:flex;flex-direction:row;gap:4px;padding:2px 4px;width:100%;min-height:32px;border-radius:8px}@media (hover: hover){.category:hover{background:var(--cui-base-10)}}.category:active{background:var(--cui-base-10)}.category__open-close-button{display:flex;flex-direction:row;gap:0;padding:2px;border-radius:4px;margin:4px 0}@media (hover: hover){.category__open-close-button:hover{background:var(--cui-base-100)}}.category__open-close-button:active{background:var(--cui-base-100)}.category__open-close-button_hidden{visibility:hidden}.category__title{flex:1;text-align:start;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.category__add-subcategory-button{--cui-base-50: var(--cui-base-200)}.list-wrapper{padding-left:8px}.create-category{margin-left:24px}.icon{padding-right:2px;padding-left:2px;height:28px}\n"] }]
10020
+ ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *cuiLet=\"category() as stage\">\n <button\n type=\"button\"\n [style.align-items]=\"alignItems()\"\n class=\"category\"\n (click)=\"onSelectCategory()\"\n >\n <button\n type=\"button\"\n class=\"toggle-button\"\n [class.toggle-button_hidden]=\"isOpenCloseButtonHidden()\"\n (click)=\"onToggleChildren($event)\"\n >\n <cui-svg\n [icon]=\"openCloseButtonIcon()\"\n color=\"var(--cui-base-500)\"\n />\n </button>\n <cui-svg\n [icon]=\"storageIcon()\"\n color=\"var(--cui-base-500)\"\n class=\"icon\"\n />\n @if (isTitleEdit()) {\n <cui-category-tree-form\n [defaultTitle]=\"stage.title\"\n (created)=\"onTitleChanged($event)\"\n (canceled)=\"onCancelTitleEdit()\"\n />\n } @else {\n <span class=\"title\">{{ stage.title }}</span>\n\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconEdit\"\n class=\"button edit-button\"\n (click)=\"onStartTitleEdit($event)\"\n ></button>\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconPlus\"\n class=\"button add-button\"\n (click)=\"onStartCreatingSubcategory($event)\"\n ></button>\n @if (isDeleteSupported) {\n <button\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconTrash\"\n class=\"button delete-button\"\n (click)=\"onDelete($event)\"\n ></button>\n }\n }\n </button>\n <div\n [hidden]=\"!areChildrenOpened()\"\n class=\"list-wrapper\"\n >\n <cui-categories-tree-list\n [storages]=\"storageChildren()\"\n (deleted)=\"onChildDeleted($event)\"\n />\n @if (isCreateCategoryControlVisible()) {\n <cui-create-category-tree-item\n class=\"create-category\"\n [isDisabled]=\"isSubcategoryCreationLoading()\"\n (created)=\"onCreateNewSubcategory($event)\"\n (canceled)=\"onCreatingSubcategoryCanceled()\"\n />\n }\n </div>\n</ng-container>\n", styles: [".category{display:flex;flex-direction:row;gap:4px;padding:2px 4px;width:100%;min-height:32px;border-radius:8px}@media (hover: hover){.category:hover{background:var(--cui-base-10)}.category:hover .delete-button{display:inline-block}}.category:active{background:var(--cui-base-10)}.toggle-button{display:flex;flex-direction:row;gap:0;padding:2px;border-radius:4px;margin:4px 0}@media (hover: hover){.toggle-button:hover{background:var(--cui-base-100)}}.toggle-button:active{background:var(--cui-base-100)}.toggle-button_hidden{visibility:hidden}.title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;text-align:start}.button{--cui-base-50: var(--cui-base-200)}@media (hover: hover){.delete-button{display:none}}.list-wrapper{padding-left:8px}.create-category{margin-left:24px}.icon{padding-right:2px;padding-left:2px;height:28px}\n"] }]
10008
10021
  }], ctorParameters: () => [] });
10009
10022
 
10010
10023
  class CuiCategoriesTreeComponent {
@@ -10061,7 +10074,7 @@ class CuiCategoriesTreeComponent {
10061
10074
  }, { allowSignalWrites: true });
10062
10075
  }
10063
10076
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiCategoriesTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10064
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CuiCategoriesTreeComponent, isStandalone: true, selector: "cui-categories-tree", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, providers: [CuiCategoryTreeStateService], viewQueries: [{ propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true, isSignal: true }], ngImport: i0, template: "<button\n #dropdown=\"cuiDropdown\"\n [cuiDropdown]=\"dropdownContent\"\n orientation=\"stretch\"\n type=\"button\"\n class=\"target\"\n [disabled]=\"disabled()\"\n (click)=\"onOpenStorages()\"\n>\n <ng-content />\n</button>\n\n<ng-template #dropdownContent>\n <cui-dropdown-wrapper\n *transloco=\"let t\"\n [title]=\"t('SELECT_OR_CREATE_CATEGORY')\"\n width=\"100%\"\n class=\"dropdown-wrapper\"\n >\n <ng-container *cuiLet=\"storages() as storages\">\n @if (storages && storages.length) {\n <cui-categories-tree-list\n [storages]=\"storages\"\n (deleted)=\"onItemDeleted($event)\"\n />\n }\n @if (isCreateCategoryControlVisible()) {\n <cui-create-category-tree-item\n class=\"create-category\"\n [isDisabled]=\"isCategoryCreationLoading()\"\n (created)=\"onCreateNewCategory($event)\"\n (canceled)=\"onCreatingCategoryCanceled()\"\n />\n } @else if (!storages?.length) {\n <cui-empty-state\n class=\"empty\"\n [subtitle]=\"t('NO_CATEGORY_TO_VIEW_YET')\"\n />\n }\n </ng-container>\n <button\n ccDropdownFooterContent\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconPlus\"\n (click)=\"onStartCreatingNewCategory()\"\n >\n {{ t('NEW_CATEGORY') }}\n </button>\n </cui-dropdown-wrapper>\n</ng-template>\n", styles: ["::ng-deep .dropdown-wrapper .scrollable-content{flex:1;display:flex;flex-direction:column}.target{display:block;padding:0;width:100%;border-radius:8px;border:1px solid transparent}.target:focus{box-shadow:0 0 0 2px var(--cui-focus);border:1px solid var(--cui-info)}.target:disabled{cursor:default}.create-category{margin-left:24px}.empty{margin:auto}.dropdown-wrapper{display:block;height:350px}\n"], dependencies: [{ kind: "ngmodule", type: CuiButtonModule }, { kind: "component", type: CuiButtonComponent, selector: "button[cuiButton], a[cuiButton]", inputs: ["shape", "disabled", "isLoaderShown", "icon", "iconRight", "appearance", "theme", "size"] }, { kind: "directive", type: CuiLetDirective, selector: "[cuiLet]", inputs: ["cuiLet"] }, { kind: "directive", type: CuiDropdownDirective, selector: "[cuiDropdown]", inputs: ["cuiDropdown", "orientation"], outputs: ["isOpened"], exportAs: ["cuiDropdown"] }, { kind: "component", type: CuiDropdownWrapperComponent, selector: "cui-dropdown-wrapper", inputs: ["title", "width", "maxHeight"] }, { kind: "component", type: CuiEmptyStateComponent, selector: "cui-empty-state, [cuiEmptyState]", inputs: ["title", "subtitle"] }, { kind: "component", type: CuiCreateCategoryTreeItemComponent, selector: "cui-create-category-tree-item", inputs: ["isDisabled"], outputs: ["created", "canceled"] }, { kind: "component", type: CuiCategoriesTreeListComponent, selector: "cui-categories-tree-list", inputs: ["storages"], outputs: ["deleted"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10077
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CuiCategoriesTreeComponent, isStandalone: true, selector: "cui-categories-tree", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true, isSignal: true }], ngImport: i0, template: "<button\n #dropdown=\"cuiDropdown\"\n [cuiDropdown]=\"dropdownContent\"\n orientation=\"stretch\"\n type=\"button\"\n class=\"target\"\n [disabled]=\"disabled()\"\n (click)=\"onOpenStorages()\"\n>\n <ng-content />\n</button>\n\n<ng-template #dropdownContent>\n <cui-dropdown-wrapper\n *transloco=\"let t\"\n [title]=\"t('SELECT_OR_CREATE_CATEGORY')\"\n width=\"100%\"\n class=\"dropdown-wrapper\"\n >\n <ng-container *cuiLet=\"storages() as storages\">\n @if (storages && storages.length) {\n <cui-categories-tree-list\n [storages]=\"storages\"\n (deleted)=\"onItemDeleted($event)\"\n />\n }\n @if (isCreateCategoryControlVisible()) {\n <cui-create-category-tree-item\n class=\"create-category\"\n [isDisabled]=\"isCategoryCreationLoading()\"\n (created)=\"onCreateNewCategory($event)\"\n (canceled)=\"onCreatingCategoryCanceled()\"\n />\n } @else if (!storages?.length) {\n <cui-empty-state\n class=\"empty\"\n [subtitle]=\"t('NO_CATEGORY_TO_VIEW_YET')\"\n />\n }\n </ng-container>\n <button\n ccDropdownFooterContent\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconPlus\"\n (click)=\"onStartCreatingNewCategory()\"\n >\n {{ t('NEW_CATEGORY') }}\n </button>\n </cui-dropdown-wrapper>\n</ng-template>\n", styles: ["::ng-deep .dropdown-wrapper .scrollable-content{flex:1;display:flex;flex-direction:column}.target{display:block;padding:0;width:100%;border-radius:8px;border:1px solid transparent}.target:focus{box-shadow:0 0 0 2px var(--cui-focus);border:1px solid var(--cui-info)}.target:disabled{cursor:default}.create-category{margin-left:24px}.empty{margin:auto}.dropdown-wrapper{display:block;height:350px}\n"], dependencies: [{ kind: "ngmodule", type: CuiButtonModule }, { kind: "component", type: CuiButtonComponent, selector: "button[cuiButton], a[cuiButton]", inputs: ["shape", "disabled", "isLoaderShown", "icon", "iconRight", "appearance", "theme", "size"] }, { kind: "directive", type: CuiLetDirective, selector: "[cuiLet]", inputs: ["cuiLet"] }, { kind: "directive", type: CuiDropdownDirective, selector: "[cuiDropdown]", inputs: ["cuiDropdown", "orientation"], outputs: ["isOpened"], exportAs: ["cuiDropdown"] }, { kind: "component", type: CuiDropdownWrapperComponent, selector: "cui-dropdown-wrapper", inputs: ["title", "width", "maxHeight"] }, { kind: "component", type: CuiEmptyStateComponent, selector: "cui-empty-state, [cuiEmptyState]", inputs: ["title", "subtitle"] }, { kind: "component", type: CuiCreateCategoryTreeItemComponent, selector: "cui-create-category-tree-item", inputs: ["isDisabled"], outputs: ["created", "canceled"] }, { kind: "component", type: CuiCategoriesTreeListComponent, selector: "cui-categories-tree-list", inputs: ["storages"], outputs: ["deleted"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10065
10078
  }
10066
10079
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiCategoriesTreeComponent, decorators: [{
10067
10080
  type: Component,
@@ -10074,7 +10087,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
10074
10087
  CuiCreateCategoryTreeItemComponent,
10075
10088
  CuiCategoriesTreeListComponent,
10076
10089
  TranslocoDirective
10077
- ], standalone: true, providers: [CuiCategoryTreeStateService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n #dropdown=\"cuiDropdown\"\n [cuiDropdown]=\"dropdownContent\"\n orientation=\"stretch\"\n type=\"button\"\n class=\"target\"\n [disabled]=\"disabled()\"\n (click)=\"onOpenStorages()\"\n>\n <ng-content />\n</button>\n\n<ng-template #dropdownContent>\n <cui-dropdown-wrapper\n *transloco=\"let t\"\n [title]=\"t('SELECT_OR_CREATE_CATEGORY')\"\n width=\"100%\"\n class=\"dropdown-wrapper\"\n >\n <ng-container *cuiLet=\"storages() as storages\">\n @if (storages && storages.length) {\n <cui-categories-tree-list\n [storages]=\"storages\"\n (deleted)=\"onItemDeleted($event)\"\n />\n }\n @if (isCreateCategoryControlVisible()) {\n <cui-create-category-tree-item\n class=\"create-category\"\n [isDisabled]=\"isCategoryCreationLoading()\"\n (created)=\"onCreateNewCategory($event)\"\n (canceled)=\"onCreatingCategoryCanceled()\"\n />\n } @else if (!storages?.length) {\n <cui-empty-state\n class=\"empty\"\n [subtitle]=\"t('NO_CATEGORY_TO_VIEW_YET')\"\n />\n }\n </ng-container>\n <button\n ccDropdownFooterContent\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconPlus\"\n (click)=\"onStartCreatingNewCategory()\"\n >\n {{ t('NEW_CATEGORY') }}\n </button>\n </cui-dropdown-wrapper>\n</ng-template>\n", styles: ["::ng-deep .dropdown-wrapper .scrollable-content{flex:1;display:flex;flex-direction:column}.target{display:block;padding:0;width:100%;border-radius:8px;border:1px solid transparent}.target:focus{box-shadow:0 0 0 2px var(--cui-focus);border:1px solid var(--cui-info)}.target:disabled{cursor:default}.create-category{margin-left:24px}.empty{margin:auto}.dropdown-wrapper{display:block;height:350px}\n"] }]
10090
+ ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n #dropdown=\"cuiDropdown\"\n [cuiDropdown]=\"dropdownContent\"\n orientation=\"stretch\"\n type=\"button\"\n class=\"target\"\n [disabled]=\"disabled()\"\n (click)=\"onOpenStorages()\"\n>\n <ng-content />\n</button>\n\n<ng-template #dropdownContent>\n <cui-dropdown-wrapper\n *transloco=\"let t\"\n [title]=\"t('SELECT_OR_CREATE_CATEGORY')\"\n width=\"100%\"\n class=\"dropdown-wrapper\"\n >\n <ng-container *cuiLet=\"storages() as storages\">\n @if (storages && storages.length) {\n <cui-categories-tree-list\n [storages]=\"storages\"\n (deleted)=\"onItemDeleted($event)\"\n />\n }\n @if (isCreateCategoryControlVisible()) {\n <cui-create-category-tree-item\n class=\"create-category\"\n [isDisabled]=\"isCategoryCreationLoading()\"\n (created)=\"onCreateNewCategory($event)\"\n (canceled)=\"onCreatingCategoryCanceled()\"\n />\n } @else if (!storages?.length) {\n <cui-empty-state\n class=\"empty\"\n [subtitle]=\"t('NO_CATEGORY_TO_VIEW_YET')\"\n />\n }\n </ng-container>\n <button\n ccDropdownFooterContent\n cuiButton\n type=\"button\"\n appearance=\"ghost\"\n size=\"xxs\"\n icon=\"cuiIconPlus\"\n (click)=\"onStartCreatingNewCategory()\"\n >\n {{ t('NEW_CATEGORY') }}\n </button>\n </cui-dropdown-wrapper>\n</ng-template>\n", styles: ["::ng-deep .dropdown-wrapper .scrollable-content{flex:1;display:flex;flex-direction:column}.target{display:block;padding:0;width:100%;border-radius:8px;border:1px solid transparent}.target:focus{box-shadow:0 0 0 2px var(--cui-focus);border:1px solid var(--cui-info)}.target:disabled{cursor:default}.create-category{margin-left:24px}.empty{margin:auto}.dropdown-wrapper{display:block;height:350px}\n"] }]
10078
10091
  }], ctorParameters: () => [] });
10079
10092
 
10080
10093
  class CuiCheckListBlockService {