@acorex/modules 20.6.0-next.14 → 20.6.0-next.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/common/index.d.ts +1 -0
  2. package/fesm2022/acorex-modules-common.mjs +5 -2
  3. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  4. package/fesm2022/{acorex-modules-form-template-management-template-picker.component-BiCwa7Ww.mjs → acorex-modules-form-template-management-template-picker.component-R6Ijm-97.mjs} +13 -13
  5. package/fesm2022/acorex-modules-form-template-management-template-picker.component-R6Ijm-97.mjs.map +1 -0
  6. package/fesm2022/acorex-modules-form-template-management.mjs +1 -1
  7. package/fesm2022/{acorex-modules-party-management-acorex-modules-party-management-1KGMBDfA.mjs → acorex-modules-party-management-acorex-modules-party-management-DB3H-49E.mjs} +7 -7
  8. package/fesm2022/{acorex-modules-party-management-acorex-modules-party-management-1KGMBDfA.mjs.map → acorex-modules-party-management-acorex-modules-party-management-DB3H-49E.mjs.map} +1 -1
  9. package/fesm2022/{acorex-modules-party-management-industry.entity-DHuE1kt7.mjs → acorex-modules-party-management-industry.entity-E0RPqKYR.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-party-management-industry.entity-DHuE1kt7.mjs.map → acorex-modules-party-management-industry.entity-E0RPqKYR.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-party-management-party-identifier-type.entity-jD8FUA11.mjs → acorex-modules-party-management-party-identifier-type.entity-COMURXUX.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-party-management-party-identifier-type.entity-jD8FUA11.mjs.map → acorex-modules-party-management-party-identifier-type.entity-COMURXUX.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-party-management-party-identifier.entity-BykPw02a.mjs → acorex-modules-party-management-party-identifier.entity-C6b-Vrgs.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-party-management-party-identifier.entity-BykPw02a.mjs.map → acorex-modules-party-management-party-identifier.entity-C6b-Vrgs.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-party-management-party-relationship.entity-DT0eidsI.mjs → acorex-modules-party-management-party-relationship.entity-rZHjByaY.mjs} +2 -2
  16. package/fesm2022/{acorex-modules-party-management-party-relationship.entity-DT0eidsI.mjs.map → acorex-modules-party-management-party-relationship.entity-rZHjByaY.mjs.map} +1 -1
  17. package/fesm2022/{acorex-modules-party-management-party-role.entity-avNIs_Ga.mjs → acorex-modules-party-management-party-role.entity-B_fesIiR.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-party-management-party-role.entity-avNIs_Ga.mjs.map → acorex-modules-party-management-party-role.entity-B_fesIiR.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-party-management-party.entity-CPN2U-mp.mjs → acorex-modules-party-management-party.entity-Czvx5O4_.mjs} +3 -13
  20. package/fesm2022/acorex-modules-party-management-party.entity-Czvx5O4_.mjs.map +1 -0
  21. package/fesm2022/acorex-modules-party-management.mjs +1 -1
  22. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-B0TrJk70.mjs → acorex-modules-platform-management-acorex-modules-platform-management-B99sSLFQ.mjs} +5 -5
  23. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-B0TrJk70.mjs.map → acorex-modules-platform-management-acorex-modules-platform-management-B99sSLFQ.mjs.map} +1 -1
  24. package/fesm2022/{acorex-modules-platform-management-list-version.component-_xsJ6KyX.mjs → acorex-modules-platform-management-list-version.component-um9dTYaN.mjs} +2 -2
  25. package/fesm2022/{acorex-modules-platform-management-list-version.component-_xsJ6KyX.mjs.map → acorex-modules-platform-management-list-version.component-um9dTYaN.mjs.map} +1 -1
  26. package/fesm2022/{acorex-modules-platform-management-menu-list.component-CXlEbNtH.mjs → acorex-modules-platform-management-menu-list.component-DeS8hSoB.mjs} +8 -8
  27. package/fesm2022/acorex-modules-platform-management-menu-list.component-DeS8hSoB.mjs.map +1 -0
  28. package/fesm2022/{acorex-modules-platform-management-permission-definition.provider-BWt2Ib-i.mjs → acorex-modules-platform-management-permission-definition.provider-DHfWGH0p.mjs} +2 -2
  29. package/fesm2022/{acorex-modules-platform-management-permission-definition.provider-BWt2Ib-i.mjs.map → acorex-modules-platform-management-permission-definition.provider-DHfWGH0p.mjs.map} +1 -1
  30. package/fesm2022/acorex-modules-platform-management.mjs +1 -1
  31. package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-BPHpCx1z.mjs → acorex-modules-report-management-report-runner-root-page.component-Cjpx-4Q9.mjs} +5 -9
  32. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-Cjpx-4Q9.mjs.map +1 -0
  33. package/fesm2022/acorex-modules-report-management.mjs +1 -1
  34. package/package.json +6 -6
  35. package/fesm2022/acorex-modules-form-template-management-template-picker.component-BiCwa7Ww.mjs.map +0 -1
  36. package/fesm2022/acorex-modules-party-management-party.entity-CPN2U-mp.mjs.map +0 -1
  37. package/fesm2022/acorex-modules-platform-management-menu-list.component-CXlEbNtH.mjs.map +0 -1
  38. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-BPHpCx1z.mjs.map +0 -1
@@ -28,8 +28,8 @@ import { AXPDeviceService } from '@acorex/platform/core';
28
28
  import { AXPPageStatus } from '@acorex/platform/layout/widget-core';
29
29
  import { signalStore, withState, withComputed, withMethods, patchState, withHooks } from '@ngrx/signals';
30
30
  import { isNil, isEmpty } from 'lodash-es';
31
- import * as i2 from '@acorex/components/tree-view';
32
- import { AXTreeViewModule } from '@acorex/components/tree-view';
31
+ import * as i2 from '@acorex/components/tree-view-legacy';
32
+ import { AXTreeViewLegacyModule } from '@acorex/components/tree-view-legacy';
33
33
  import { AXPWorkflowService } from '@acorex/platform/workflow';
34
34
 
35
35
  const AXPReportRunnerRootViewModel = signalStore(withState(() => ({
@@ -258,15 +258,11 @@ class AXPReportCategoriesTreeComponent {
258
258
  }
259
259
  }
260
260
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPReportCategoriesTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
261
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: AXPReportCategoriesTreeComponent, isStandalone: true, selector: "axp-report-categories-tree", outputs: { categoryClick: "categoryClick", reportClick: "reportClick" }, host: { classAttribute: "axp-report-categories-tree" }, ngImport: i0, template: "<ax-tree-view\n [showCheckbox]=\"false\"\n [itemTemplate]=\"itemTemplate\"\n [textField]=\"'title'\"\n [hasChildField]=\"'hasChild'\"\n [valueField]=\"'id'\"\n [expandedField]=\"'expanded'\"\n [items]=\"provideLazyTreeView\"\n (onNodeClick)=\"handleNodeClick($event)\"\n>\n</ax-tree-view>\n\n<ng-template #itemTemplate let-item>\n @if (item.type === 'category') {\n <ax-icon class=\"fas ax-text-warning fa-folder\"></ax-icon>\n } @else {\n <ax-icon class=\"fas ax-text-accent1 fa-file-chart-column\"></ax-icon>\n }\n {{ item.title }}\n</ng-template>\n", styles: [".axp-report-categories-tree{height:100%;width:100%}.axp-report-categories-tree .__tree-view .__item{display:flex;align-items:center;gap:.5rem}.axp-report-categories-tree .__tree-view .__item .__icon{flex-shrink:0}.axp-report-categories-tree .__tree-view .__item .__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axp-report-categories-tree .__tree-view .__item:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTreeViewModule }, { kind: "component", type: i2.AXTreeViewComponent, selector: "ax-tree-view", inputs: ["items", "showCheckbox", "hasCheckboxField", "selectionMode", "selectionBehavior", "selectionScope", "focusNodeEnabled", "valueField", "textField", "visibleField", "disableField", "hasChildField", "selectedField", "expandedField", "tooltipField", "childrenField", "activeField", "indeterminateField", "parentField", "iconField", "toggleIcons", "look", "showEmptyNodeMassage", "itemTemplate", "emptyTemplate", "expandOn"], outputs: ["onSelectionChanged", "onItemSelectedChanged", "onNodeClick", "onCollapsedChanged", "onNodedbClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
261
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: AXPReportCategoriesTreeComponent, isStandalone: true, selector: "axp-report-categories-tree", outputs: { categoryClick: "categoryClick", reportClick: "reportClick" }, host: { classAttribute: "axp-report-categories-tree" }, ngImport: i0, template: "<ax-tree-view-legacy\n [showCheckbox]=\"false\"\n [itemTemplate]=\"itemTemplate\"\n [textField]=\"'title'\"\n [hasChildField]=\"'hasChild'\"\n [valueField]=\"'id'\"\n [expandedField]=\"'expanded'\"\n [items]=\"provideLazyTreeView\"\n (onNodeClick)=\"handleNodeClick($event)\"\n>\n</ax-tree-view-legacy>\n\n<ng-template #itemTemplate let-item>\n @if (item.type === 'category') {\n <ax-icon class=\"fas ax-text-warning fa-folder\"></ax-icon>\n } @else {\n <ax-icon class=\"fas ax-text-accent1 fa-file-chart-column\"></ax-icon>\n }\n {{ item.title }}\n</ng-template>\n", styles: [".axp-report-categories-tree{height:100%;width:100%}.axp-report-categories-tree .__tree-view .__item{display:flex;align-items:center;gap:.5rem}.axp-report-categories-tree .__tree-view .__item .__icon{flex-shrink:0}.axp-report-categories-tree .__tree-view .__item .__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axp-report-categories-tree .__tree-view .__item:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTreeViewLegacyModule }, { kind: "component", type: i2.AXTreeViewLegacyComponent, selector: "ax-tree-view-legacy", inputs: ["items", "showCheckbox", "hasCheckboxField", "selectionMode", "selectionBehavior", "selectionScope", "focusNodeEnabled", "valueField", "textField", "visibleField", "disableField", "hasChildField", "selectedField", "expandedField", "tooltipField", "childrenField", "activeField", "indeterminateField", "parentField", "iconField", "toggleIcons", "look", "showEmptyNodeMassage", "itemTemplate", "emptyTemplate", "expandOn"], outputs: ["onSelectionChanged", "onItemSelectedChanged", "onNodeClick", "onCollapsedChanged", "onNodedbClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
262
262
  }
263
263
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPReportCategoriesTreeComponent, decorators: [{
264
264
  type: Component,
265
- args: [{ selector: 'axp-report-categories-tree', standalone: true, imports: [
266
- CommonModule,
267
- AXDecoratorModule,
268
- AXTreeViewModule,
269
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'axp-report-categories-tree' }, template: "<ax-tree-view\n [showCheckbox]=\"false\"\n [itemTemplate]=\"itemTemplate\"\n [textField]=\"'title'\"\n [hasChildField]=\"'hasChild'\"\n [valueField]=\"'id'\"\n [expandedField]=\"'expanded'\"\n [items]=\"provideLazyTreeView\"\n (onNodeClick)=\"handleNodeClick($event)\"\n>\n</ax-tree-view>\n\n<ng-template #itemTemplate let-item>\n @if (item.type === 'category') {\n <ax-icon class=\"fas ax-text-warning fa-folder\"></ax-icon>\n } @else {\n <ax-icon class=\"fas ax-text-accent1 fa-file-chart-column\"></ax-icon>\n }\n {{ item.title }}\n</ng-template>\n", styles: [".axp-report-categories-tree{height:100%;width:100%}.axp-report-categories-tree .__tree-view .__item{display:flex;align-items:center;gap:.5rem}.axp-report-categories-tree .__tree-view .__item .__icon{flex-shrink:0}.axp-report-categories-tree .__tree-view .__item .__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axp-report-categories-tree .__tree-view .__item:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}\n"] }]
265
+ args: [{ selector: 'axp-report-categories-tree', standalone: true, imports: [CommonModule, AXDecoratorModule, AXTreeViewLegacyModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'axp-report-categories-tree' }, template: "<ax-tree-view-legacy\n [showCheckbox]=\"false\"\n [itemTemplate]=\"itemTemplate\"\n [textField]=\"'title'\"\n [hasChildField]=\"'hasChild'\"\n [valueField]=\"'id'\"\n [expandedField]=\"'expanded'\"\n [items]=\"provideLazyTreeView\"\n (onNodeClick)=\"handleNodeClick($event)\"\n>\n</ax-tree-view-legacy>\n\n<ng-template #itemTemplate let-item>\n @if (item.type === 'category') {\n <ax-icon class=\"fas ax-text-warning fa-folder\"></ax-icon>\n } @else {\n <ax-icon class=\"fas ax-text-accent1 fa-file-chart-column\"></ax-icon>\n }\n {{ item.title }}\n</ng-template>\n", styles: [".axp-report-categories-tree{height:100%;width:100%}.axp-report-categories-tree .__tree-view .__item{display:flex;align-items:center;gap:.5rem}.axp-report-categories-tree .__tree-view .__item .__icon{flex-shrink:0}.axp-report-categories-tree .__tree-view .__item .__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axp-report-categories-tree .__tree-view .__item:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}\n"] }]
270
266
  }], propDecorators: { categoryClick: [{ type: i0.Output, args: ["categoryClick"] }], reportClick: [{ type: i0.Output, args: ["reportClick"] }] } });
271
267
 
272
268
  class AXMReportRunnerRootPageComponent extends AXPPageLayoutBaseComponent {
@@ -499,4 +495,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
499
495
  }] });
500
496
 
501
497
  export { AXMReportRunnerRootPageComponent };
502
- //# sourceMappingURL=acorex-modules-report-management-report-runner-root-page.component-BPHpCx1z.mjs.map
498
+ //# sourceMappingURL=acorex-modules-report-management-report-runner-root-page.component-Cjpx-4Q9.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-modules-report-management-report-runner-root-page.component-Cjpx-4Q9.mjs","sources":["../tmp-esm2022/report-management/lib/features/report-runner/report-runner.viewmodel.js","../tmp-esm2022/report-management/lib/features/report-runner/report-categories-tree/report-categories-tree.component.js","../tmp-esm2022/report-management/lib/features/report-runner/report-runner-root-page/report-runner-root-page.component.js"],"sourcesContent":["import { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPDeviceService } from '@acorex/platform/core';\nimport { AXPPageStatus } from '@acorex/platform/layout/widget-core';\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { isEmpty, isNil } from 'lodash-es';\nimport { merge } from 'rxjs';\nimport { RootConfig } from '../../const';\nimport { AXPReportDefinitionService } from '../../reports';\nexport const AXPReportRunnerRootViewModel = signalStore(withState(() => ({\n activeCategory: undefined,\n categories: [],\n reports: [],\n activeCategoriesPath: [],\n //\n searchExpression: null,\n //\n status: AXPPageStatus.Processing,\n})), withComputed((store, deviceService = inject(AXPDeviceService)) => ({\n searchResults: computed(() => []),\n hasActiveCategory: computed(() => store.activeCategory() != null),\n showSideMenu: computed(() => deviceService.isLarge()),\n isSearching: computed(() => store.searchExpression() != null),\n isBusy: computed(() => store.status() == AXPPageStatus.Processing),\n isLoaded: computed(() => store.activeCategory() != null),\n title: computed(() => store.activeCategory()?.title ?? `@${RootConfig.config.i18n}:report-runner.terms.page-title`),\n description: computed(() => store.activeCategory()?.description ??\n `@${RootConfig.config.i18n}:report-runner.components.report-runner.description`),\n})), withMethods((store, reportDefinitionService = inject(AXPReportDefinitionService)) => ({\n /**\n * Load root categories\n *\n * Optimization: Service caches result, subsequent calls are instant\n */\n async loadRootCategories() {\n patchState(store, {\n activeCategory: undefined,\n reports: [],\n activeCategoriesPath: [],\n status: AXPPageStatus.Processing,\n });\n const categories = await reportDefinitionService.getCategories();\n patchState(store, {\n categories,\n status: AXPPageStatus.Idle,\n });\n },\n /**\n * Get categories by parentId (cached by service)\n */\n async getCategories(parentId) {\n patchState(store, { status: AXPPageStatus.Processing });\n const result = await reportDefinitionService.getCategories(parentId);\n patchState(store, { status: AXPPageStatus.Idle });\n return result;\n },\n /**\n * Get reports for a category\n *\n * Optimization: Service checks itemsCount before querying\n * - If itemsCount = 0, returns empty array (no API call)\n * - If cached, returns instantly\n */\n async getReports(categoryId) {\n patchState(store, { status: AXPPageStatus.Processing });\n const result = await reportDefinitionService.getReportsByCategoryId(categoryId);\n patchState(store, { status: AXPPageStatus.Idle });\n return result;\n },\n /**\n * Set active category and load its data\n *\n * Optimization: All 3 queries benefit from caching\n * - Categories: Cached from previous navigation\n * - Reports: Skipped if itemsCount = 0\n * - Path: Built from cached categories\n */\n async setActiveCategory(category) {\n patchState(store, {\n status: AXPPageStatus.Processing,\n activeCategory: category,\n });\n // ✅ Parallel loading for better performance\n const [categories, reports, activeCategoriesPath] = await Promise.all([\n reportDefinitionService.getCategories(category.id),\n reportDefinitionService.getReportsByCategoryId(category.id),\n reportDefinitionService.getCategoriesPathById(category.id),\n ]);\n patchState(store, {\n categories,\n reports,\n activeCategoriesPath,\n status: AXPPageStatus.Idle,\n });\n },\n /**\n * Set active category by ID\n *\n * Optimization: getCategoryById uses O(1) cache lookup\n */\n async setActiveCategoryById(id) {\n patchState(store, { status: AXPPageStatus.Processing });\n const category = await reportDefinitionService.getCategoryById(id);\n if (category) {\n patchState(store, { activeCategory: category });\n // ✅ Parallel loading\n const [categories, reports, activeCategoriesPath] = await Promise.all([\n reportDefinitionService.getCategories(category.id),\n reportDefinitionService.getReportsByCategoryId(category.id),\n reportDefinitionService.getCategoriesPathById(category.id),\n ]);\n patchState(store, {\n categories,\n reports,\n activeCategoriesPath,\n });\n }\n patchState(store, { status: AXPPageStatus.Idle });\n },\n /**\n * Search for reports (to be implemented)\n */\n async search(expression) {\n if (!isNil(expression) && !isEmpty(expression)) {\n patchState(store, { searchExpression: expression });\n }\n else {\n patchState(store, { searchExpression: null });\n }\n },\n /**\n * Clear search\n */\n clearSearch() {\n patchState(store, { searchExpression: null });\n },\n})), withHooks((store, translationService = inject(AXTranslationService), localeService = inject(AXLocaleService)) => ({\n async onInit() {\n merge(translationService.langChanges$, localeService.profileChanged$).subscribe(async () => { });\n //\n await store.loadRootCategories();\n },\n onDestroy() { },\n})));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXJ1bm5lci52aWV3bW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvcmVwb3J0LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9yZXBvcnQtcnVubmVyL3JlcG9ydC1ydW5uZXIudmlld21vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQTBDLDBCQUEwQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5HLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLFdBQVcsQ0FDckQsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDZixjQUFjLEVBQUUsU0FBMEM7SUFDMUQsVUFBVSxFQUFFLEVBQXlCO0lBQ3JDLE9BQU8sRUFBRSxFQUEyQjtJQUNwQyxvQkFBb0IsRUFBRSxFQUF5QjtJQUMvQyxFQUFFO0lBQ0YsZ0JBQWdCLEVBQUUs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QUFTLENBQUMsS0FBSyxJQUFJLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztRQUNoRyxFQUFFO1FBQ0YsTUFBTSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsU0FBUyxLQUFJLENBQUM7Q0FDZixDQUFDLENBQUMsQ0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2xvY2FsZSc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBEZXZpY2VTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUFBhZ2VTdGF0dXMgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC93aWRnZXQtY29yZSc7XG5pbXBvcnQgeyBjb21wdXRlZCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBwYXRjaFN0YXRlLCBzaWduYWxTdG9yZSwgd2l0aENvbXB1dGVkLCB3aXRoSG9va3MsIHdpdGhNZXRob2RzLCB3aXRoU3RhdGUgfSBmcm9tICdAbmdyeC9zaWduYWxzJztcbmltcG9ydCB7IGlzRW1wdHksIGlzTmlsIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSb290Q29uZmlnIH0gZnJvbSAnLi4vLi4vY29uc3QnO1xuaW1wb3J0IHsgQVhQUmVwb3J0Q2F0ZWdvcnksIEFYUFJlcG9ydERlZmluaXRpb24sIEFYUFJlcG9ydERlZmluaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcmVwb3J0cyc7XG5cbmV4cG9ydCBjb25zdCBBWFBSZXBvcnRSdW5uZXJSb290Vmlld01vZGVsID0gc2lnbmFsU3RvcmUoXG4gIHdpdGhTdGF0ZSgoKSA9PiAoe1xuICAgIGFjdGl2ZUNhdGVnb3J5OiB1bmRlZmluZWQgYXMgQVhQUmVwb3J0Q2F0ZWdvcnkgfCB1bmRlZmluZWQsXG4gICAgY2F0ZWdvcmllczogW10gYXMgQVhQUmVwb3J0Q2F0ZWdvcnlbXSxcbiAgICByZXBvcnRzOiBbXSBhcyBBWFBSZXBvcnREZWZpbml0aW9uW10sXG4gICAgYWN0aXZlQ2F0ZWdvcmllc1BhdGg6IFtdIGFzIEFYUFJlcG9ydENhdGVnb3J5W10sXG4gICAgLy9cbiAgICBzZWFyY2hFeHByZXNzaW9uOiBudWxsIGFzIHN0cmluZyB8IG51bGwsXG4gICAgLy9cbiAgICBzdGF0dXM6IEFYUFBhZ2VTdGF0dXMuUHJvY2Vzc2luZyxcbiAgfSkpLFxuICB3aXRoQ29tcHV0ZWQoKHN0b3JlLCBkZXZpY2VTZXJ2aWNlID0gaW5qZWN0KEFYUERldmljZVNlcnZpY2UpKSA9PiAoe1xuICAgIHNlYXJjaFJlc3VsdHM6IGNvbXB1dGVkKCgpID0+IFtdKSxcbiAgICBoYXNBY3RpdmVDYXRlZ29yeTogY29tcHV0ZWQoKCkgPT4gc3RvcmUuYWN0aXZlQ2F0ZWdvcnkoKSAhPSBudWxsKSxcbiAgICBzaG93U2lkZU1lbnU6IGNvbXB1dGVkKCgpID0+IGRldmljZVNlcnZpY2UuaXNMYXJnZSgpKSxcbiAgICBpc1NlYXJjaGluZzogY29tcHV0ZWQoKCkgPT4gc3RvcmUuc2VhcmNoRXhwcmVzc2lvbigpICE9IG51bGwpLFxuICAgIGlzQnVzeTogY29tcHV0ZWQoKCkgPT4gc3RvcmUuc3RhdHVzKCkgPT0gQVhQUGFnZVN0YXR1cy5Qcm9jZXNzaW5nKSxcbiAgICBpc0xvYWRlZDogY29tcHV0ZWQoKCkgPT4gc3RvcmUuYWN0aXZlQ2F0ZWdvcnkoKSAhPSBudWxsKSxcbiAgICB0aXRsZTogY29tcHV0ZWQoKCkgPT4gc3RvcmUuYWN0aXZlQ2F0ZWdvcnkoKT8udGl0bGUgPz8gYEAke1Jvb3RDb25maWcuY29uZmlnLmkxOG59OnJlcG9ydC1ydW5uZXIudGVybXMucGFnZS10aXRsZWApLFxuICAgIGRlc2NyaXB0aW9uOiBjb21wdXRlZChcbiAgICAgICgpID0+XG4gICAgICAgIHN0b3JlLmFjdGl2ZUNhdGVnb3J5KCk/LmRlc2NyaXB0aW9uID8/XG4gICAgICAgIGBAJHtSb290Q29uZmlnLmNvbmZpZy5pMThufTpyZXBvcnQtcnVubmVyLmNvbXBvbmVudHMucmVwb3J0LXJ1bm5lci5kZXNjcmlwdGlvbmAsXG4gICAgKSxcbiAgfSkpLFxuICB3aXRoTWV0aG9kcygoc3RvcmUsIHJlcG9ydERlZmluaXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYUFJlcG9ydERlZmluaXRpb25TZXJ2aWNlKSkgPT4gKHtcbiAgICAvKipcbiAgICAgKiBMb2FkIHJvb3QgY2F0ZWdvcmllc1xuICAgICAqXG4gICAgICogT3B0aW1pemF0aW9uOiBTZXJ2aWNlIGNhY2hlcyByZXN1bHQsIHN1YnNlcXVlbnQgY2FsbHMgYXJlIGluc3RhbnRcbiAgICAgKi9cbiAgICBhc3luYyBsb2FkUm9vdENhdGVnb3JpZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7XG4gICAgICAgIGFjdGl2ZUNhdGVnb3J5OiB1bmRlZmluZWQsXG4gICAgICAgIHJlcG9ydHM6IFtdLFxuICAgICAgICBhY3RpdmVDYXRlZ29yaWVzUGF0aDogW10sXG4gICAgICAgIHN0YXR1czogQVhQUGFnZVN0YXR1cy5Qcm9jZXNzaW5nLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBhd2FpdCByZXBvcnREZWZpbml0aW9uU2VydmljZS5nZXRDYXRlZ29yaWVzKCk7XG5cbiAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHtcbiAgICAgICAgY2F0ZWdvcmllcyxcbiAgICAgICAgc3RhdHVzOiBBWFBQYWdlU3RhdHVzLklkbGUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IGNhdGVnb3JpZXMgYnkgcGFyZW50SWQgKGNhY2hlZCBieSBzZXJ2aWNlKVxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3JpZXMocGFyZW50SWQ/OiBzdHJpbmcpOiBQcm9taXNlPEFYUFJlcG9ydENhdGVnb3J5W10+IHtcbiAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgc3RhdHVzOiBBWFBQYWdlU3RhdHVzLlByb2Nlc3NpbmcgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcG9ydERlZmluaXRpb25TZXJ2aWNlLmdldENhdGVnb3JpZXMocGFyZW50SWQpO1xuXG4gICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IHN0YXR1czogQVhQUGFnZVN0YXR1cy5JZGxlIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgcmVwb3J0cyBmb3IgYSBjYXRlZ29yeVxuICAgICAqXG4gICAgICogT3B0aW1pemF0aW9uOiBTZXJ2aWNlIGNoZWNrcyBpdGVtc0NvdW50IGJlZm9yZSBxdWVyeWluZ1xuICAgICAqIC0gSWYgaXRlbXNDb3VudCA9IDAsIHJldHVybnMgZW1wdHkgYXJyYXkgKG5vIEFQSSBjYWxsKVxuICAgICAqIC0gSWYgY2FjaGVkLCByZXR1cm5zIGluc3RhbnRseVxuICAgICAqL1xuICAgIGFzeW5jIGdldFJlcG9ydHMoY2F0ZWdvcnlJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBSZXBvcnREZWZpbml0aW9uW10+IHtcbiAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgc3RhdHVzOiBBWFBQYWdlU3RhdHVzLlByb2Nlc3NpbmcgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcG9ydERlZmluaXRpb25TZXJ2aWNlLmdldFJlcG9ydHNCeUNhdGVnb3J5SWQoY2F0ZWdvcnlJZCk7XG5cbiAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgc3RhdHVzOiBBWFBQYWdlU3RhdHVzLklkbGUgfSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCBhY3RpdmUgY2F0ZWdvcnkgYW5kIGxvYWQgaXRzIGRhdGFcbiAgICAgKlxuICAgICAqIE9wdGltaXphdGlvbjogQWxsIDMgcXVlcmllcyBiZW5lZml0IGZyb20gY2FjaGluZ1xuICAgICAqIC0gQ2F0ZWdvcmllczogQ2FjaGVkIGZyb20gcHJldmlvdXMgbmF2aWdhdGlvblxuICAgICAqIC0gUmVwb3J0czogU2tpcHBlZCBpZiBpdGVtc0NvdW50ID0gMFxuICAgICAqIC0gUGF0aDogQnVpbHQgZnJvbSBjYWNoZWQgY2F0ZWdvcmllc1xuICAgICAqL1xuICAgIGFzeW5jIHNldEFjdGl2ZUNhdGVnb3J5KGNhdGVnb3J5OiBBWFBSZXBvcnRDYXRlZ29yeSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwge1xuICAgICAgICBzdGF0dXM6IEFYUFBhZ2VTdGF0dXMuUHJvY2Vzc2luZyxcbiAgICAgICAgYWN0aXZlQ2F0ZWdvcnk6IGNhdGVnb3J5LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIOKchSBQYXJhbGxlbCBsb2FkaW5nIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAgICAgIGNvbnN0IFtjYXRlZ29yaWVzLCByZXBvcnRzLCBhY3RpdmVDYXRlZ29yaWVzUGF0aF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHJlcG9ydERlZmluaXRpb25TZXJ2aWNlLmdldENhdGVnb3JpZXMoY2F0ZWdvcnkuaWQpLFxuICAgICAgICByZXBvcnREZWZpbml0aW9uU2VydmljZS5nZXRSZXBvcnRzQnlDYXRlZ29yeUlkKGNhdGVnb3J5LmlkKSxcbiAgICAgICAgcmVwb3J0RGVmaW5pdGlvblNlcnZpY2UuZ2V0Q2F0ZWdvcmllc1BhdGhCeUlkKGNhdGVnb3J5LmlkKSxcbiAgICAgIF0pO1xuXG4gICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7XG4gICAgICAgIGNhdGVnb3JpZXMsXG4gICAgICAgIHJlcG9ydHMsXG4gICAgICAgIGFjdGl2ZUNhdGVnb3JpZXNQYXRoLFxuICAgICAgICBzdGF0dXM6IEFYUFBhZ2VTdGF0dXMuSWRsZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgYWN0aXZlIGNhdGVnb3J5IGJ5IElEXG4gICAgICpcbiAgICAgKiBPcHRpbWl6YXRpb246IGdldENhdGVnb3J5QnlJZCB1c2VzIE8oMSkgY2FjaGUgbG9va3VwXG4gICAgICovXG4gICAgYXN5bmMgc2V0QWN0aXZlQ2F0ZWdvcnlCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgc3RhdHVzOiBBWFBQYWdlU3RhdHVzLlByb2Nlc3NpbmcgfSk7XG5cbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gYXdhaXQgcmVwb3J0RGVmaW5pdGlvblNlcnZpY2UuZ2V0Q2F0ZWdvcnlCeUlkKGlkKTtcblxuICAgICAgaWYgKGNhdGVnb3J5KSB7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgYWN0aXZlQ2F0ZWdvcnk6IGNhdGVnb3J5IH0pO1xuXG4gICAgICAgIC8vIOKchSBQYXJhbGxlbCBsb2FkaW5nXG4gICAgICAgIGNvbnN0IFtjYXRlZ29yaWVzLCByZXBvcnRzLCBhY3RpdmVDYXRlZ29yaWVzUGF0aF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgcmVwb3J0RGVmaW5pdGlvblNlcnZpY2UuZ2V0Q2F0ZWdvcmllcyhjYXRlZ29yeS5pZCksXG4gICAgICAgICAgcmVwb3J0RGVmaW5pdGlvblNlcnZpY2UuZ2V0UmVwb3J0c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeS5pZCksXG4gICAgICAgICAgcmVwb3J0RGVmaW5pdGlvblNlcnZpY2UuZ2V0Q2F0ZWdvcmllc1BhdGhCeUlkKGNhdGVnb3J5LmlkKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwge1xuICAgICAgICAgIGNhdGVnb3JpZXMsXG4gICAgICAgICAgcmVwb3J0cyxcbiAgICAgICAgICBhY3RpdmVDYXRlZ29yaWVzUGF0aCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgc3RhdHVzOiBBWFBQYWdlU3RhdHVzLklkbGUgfSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBmb3IgcmVwb3J0cyAodG8gYmUgaW1wbGVtZW50ZWQpXG4gICAgICovXG4gICAgYXN5bmMgc2VhcmNoKGV4cHJlc3Npb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgaWYgKCFpc05pbChleHByZXNzaW9uKSAmJiAhaXNFbXB0eShleHByZXNzaW9uKSkge1xuICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IHNlYXJjaEV4cHJlc3Npb246IGV4cHJlc3Npb24gfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IHNlYXJjaEV4cHJlc3Npb246IG51bGwgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENsZWFyIHNlYXJjaFxuICAgICAqL1xuICAgIGNsZWFyU2VhcmNoKCk6IHZvaWQge1xuICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBzZWFyY2hFeHByZXNzaW9uOiBudWxsIH0pO1xuICAgIH0sXG4gIH0pKSxcbiAgd2l0aEhvb2tzKChzdG9yZSwgdHJhbnNsYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKSwgbG9jYWxlU2VydmljZSA9IGluamVjdChBWExvY2FsZVNlcnZpY2UpKSA9PiAoe1xuICAgIGFzeW5jIG9uSW5pdCgpIHtcbiAgICAgIG1lcmdlKHRyYW5zbGF0aW9uU2VydmljZS5sYW5nQ2hhbmdlcyQsIGxvY2FsZVNlcnZpY2UucHJvZmlsZUNoYW5nZWQkKS5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge30pO1xuICAgICAgLy9cbiAgICAgIGF3YWl0IHN0b3JlLmxvYWRSb290Q2F0ZWdvcmllcygpO1xuICAgIH0sXG4gICAgb25EZXN0cm95KCkge30sXG4gIH0pKSxcbik7XG4iXX0=","//#region ---- Imports ----\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTreeViewLegacyModule } from '@acorex/components/tree-view-legacy';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, output, ViewEncapsulation } from '@angular/core';\nimport { AXPReportDefinitionService } from '../../../reports';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/decorators\";\nimport * as i2 from \"@acorex/components/tree-view-legacy\";\n//#endregion\nexport class AXPReportCategoriesTreeComponent {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.reportDefinitionService = inject(AXPReportDefinitionService);\n //#endregion\n //#region ---- Output Events ----\n /**\n * Emitted when a category node is clicked\n */\n this.categoryClick = output();\n /**\n * Emitted when a report node is clicked\n */\n this.reportClick = output();\n //#endregion\n //#region ---- Data Loading Methods ----\n /**\n * Provide lazy loading tree data with optimized queries\n *\n * Optimizations:\n * 1. Uses childrenCount to determine expandability (no extra query)\n * 2. Uses itemsCount to skip report queries when count = 0\n * 3. Returns cached data on subsequent calls (via service layer)\n * 4. Single API call per category includes all metadata\n *\n * Performance: Most navigation is instant (cached), only first visit queries API\n */\n this.provideLazyTreeView = async (selectedItemId) => {\n if (selectedItemId) {\n // ✅ Load child categories (includes childrenCount & itemsCount metadata)\n const categories = await this.reportDefinitionService.getCategories(selectedItemId);\n const categoryItems = categories.map((item) => ({\n id: item.id,\n title: item.title,\n // ✅ Optimization: Use count properties to determine expandability\n hasChild: item.childrenCount > 0 || (item.itemsCount ?? 0) > 0,\n item: item,\n type: 'category',\n expanded: false,\n }));\n // ✅ Load report definitions for this category\n // Optimization: Service checks itemsCount before querying (skip if 0)\n const definitions = await this.reportDefinitionService.getReportsByCategoryId(selectedItemId);\n const definitionItems = definitions.map((item) => ({\n id: item.id,\n title: item.title,\n hasChild: false, // Reports are leaf nodes\n item: item,\n type: 'definition',\n expanded: false,\n }));\n // ✅ Return categories first, then reports (sorted)\n return [...categoryItems, ...definitionItems];\n }\n else {\n // ✅ Root level - load root categories only\n const categories = await this.reportDefinitionService.getCategories();\n return categories.map((item) => ({\n id: item.id,\n title: item.title,\n // ✅ Optimization: Use count properties\n hasChild: item.childrenCount > 0 || (item.itemsCount ?? 0) > 0,\n item: item,\n type: 'category',\n expanded: false,\n }));\n }\n };\n }\n //#endregion\n //#region ---- Event Handlers ----\n /**\n * Handle tree node click events\n *\n * Emits appropriate event based on node type:\n * - category → categoryClick\n * - definition → reportClick\n */\n handleNodeClick(event) {\n const node = event.data;\n if (node.type === 'category') {\n this.categoryClick.emit(node.item);\n }\n else if (node.type === 'definition') {\n this.reportClick.emit(node.item);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPReportCategoriesTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXPReportCategoriesTreeComponent, isStandalone: true, selector: \"axp-report-categories-tree\", outputs: { categoryClick: \"categoryClick\", reportClick: \"reportClick\" }, host: { classAttribute: \"axp-report-categories-tree\" }, ngImport: i0, template: \"<ax-tree-view-legacy\\n [showCheckbox]=\\\"false\\\"\\n [itemTemplate]=\\\"itemTemplate\\\"\\n [textField]=\\\"'title'\\\"\\n [hasChildField]=\\\"'hasChild'\\\"\\n [valueField]=\\\"'id'\\\"\\n [expandedField]=\\\"'expanded'\\\"\\n [items]=\\\"provideLazyTreeView\\\"\\n (onNodeClick)=\\\"handleNodeClick($event)\\\"\\n>\\n</ax-tree-view-legacy>\\n\\n<ng-template #itemTemplate let-item>\\n @if (item.type === 'category') {\\n <ax-icon class=\\\"fas ax-text-warning fa-folder\\\"></ax-icon>\\n } @else {\\n <ax-icon class=\\\"fas ax-text-accent1 fa-file-chart-column\\\"></ax-icon>\\n }\\n {{ item.title }}\\n</ng-template>\\n\", styles: [\".axp-report-categories-tree{height:100%;width:100%}.axp-report-categories-tree .__tree-view .__item{display:flex;align-items:center;gap:.5rem}.axp-report-categories-tree .__tree-view .__item .__icon{flex-shrink:0}.axp-report-categories-tree .__tree-view .__item .__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axp-report-categories-tree .__tree-view .__item:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i1.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"ngmodule\", type: AXTreeViewLegacyModule }, { kind: \"component\", type: i2.AXTreeViewLegacyComponent, selector: \"ax-tree-view-legacy\", inputs: [\"items\", \"showCheckbox\", \"hasCheckboxField\", \"selectionMode\", \"selectionBehavior\", \"selectionScope\", \"focusNodeEnabled\", \"valueField\", \"textField\", \"visibleField\", \"disableField\", \"hasChildField\", \"selectedField\", \"expandedField\", \"tooltipField\", \"childrenField\", \"activeField\", \"indeterminateField\", \"parentField\", \"iconField\", \"toggleIcons\", \"look\", \"showEmptyNodeMassage\", \"itemTemplate\", \"emptyTemplate\", \"expandOn\"], outputs: [\"onSelectionChanged\", \"onItemSelectedChanged\", \"onNodeClick\", \"onCollapsedChanged\", \"onNodedbClick\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPReportCategoriesTreeComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axp-report-categories-tree', standalone: true, imports: [CommonModule, AXDecoratorModule, AXTreeViewLegacyModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'axp-report-categories-tree' }, template: \"<ax-tree-view-legacy\\n [showCheckbox]=\\\"false\\\"\\n [itemTemplate]=\\\"itemTemplate\\\"\\n [textField]=\\\"'title'\\\"\\n [hasChildField]=\\\"'hasChild'\\\"\\n [valueField]=\\\"'id'\\\"\\n [expandedField]=\\\"'expanded'\\\"\\n [items]=\\\"provideLazyTreeView\\\"\\n (onNodeClick)=\\\"handleNodeClick($event)\\\"\\n>\\n</ax-tree-view-legacy>\\n\\n<ng-template #itemTemplate let-item>\\n @if (item.type === 'category') {\\n <ax-icon class=\\\"fas ax-text-warning fa-folder\\\"></ax-icon>\\n } @else {\\n <ax-icon class=\\\"fas ax-text-accent1 fa-file-chart-column\\\"></ax-icon>\\n }\\n {{ item.title }}\\n</ng-template>\\n\", styles: [\".axp-report-categories-tree{height:100%;width:100%}.axp-report-categories-tree .__tree-view .__item{display:flex;align-items:center;gap:.5rem}.axp-report-categories-tree .__tree-view .__item .__icon{flex-shrink:0}.axp-report-categories-tree .__tree-view .__item .__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axp-report-categories-tree .__tree-view .__item:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}\\n\"] }]\n }], propDecorators: { categoryClick: [{ type: i0.Output, args: [\"categoryClick\"] }], reportClick: [{ type: i0.Output, args: [\"reportClick\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWNhdGVnb3JpZXMtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvcmVwb3J0LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9yZXBvcnQtcnVubmVyL3JlcG9ydC1jYXRlZ29yaWVzLXRyZWUvcmVwb3J0LWNhdGVnb3JpZXMtdHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvcmVwb3J0LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9yZXBvcnQtcnVubmVyL3JlcG9ydC1jYXRlZ29yaWVzLXRyZWUvcmVwb3J0LWNhdGVnb3JpZXMtdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFFL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFrQyxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUEwQywwQkFBMEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7O0FBdUJ0RyxZQUFZO0FBWVosTUFBTSxPQUFPLGdDQUFnQztJQVY3QztRQVdFLCtDQUErQztRQUU5Qiw0QkFBdUIsR0FBRyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUU5RSxZQUFZO1FBRVoscUNBQXFDO1FBRXJDOztXQUVHO1FBQ0gsa0JBQWEsR0FBRyxNQUFNLEVBQXFCLENBQUM7UUFFNUM7O1dBRUc7UUFDSCxnQkFBVyxHQUFHLE1BQU0sRUFBdUIsQ0FBQztR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MGdCRGNZLFlBQVksOEJBQUUsaUJBQWlCLCtIQUFFLHNCQUFzQjs7NEZBT3RELGdDQUFnQztrQkFWNUMsU0FBUzsrQkFDRSw0QkFBNEIsY0FDMUIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixDQUFDLG1CQUdqRCx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CLEVBQUUsS0FBSyxFQUFFLDRCQUE0QixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBJbXBvcnRzICAgLS0tLVxuXG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYVHJlZUl0ZW1DbGlja0Jhc2VFdmVudExlZ2FjeSwgQVhUcmVlVmlld0xlZ2FjeU1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90cmVlLXZpZXctbGVnYWN5JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QsIG91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFJlcG9ydENhdGVnb3J5LCBBWFBSZXBvcnREZWZpbml0aW9uLCBBWFBSZXBvcnREZWZpbml0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3JlcG9ydHMnO1xuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBJbnRlcmZhY2UgICAtLS0tXG5cbi8qKlxuICogVHJlZSB2aWV3IGl0ZW0gd2l0aCBvcHRpbWl6ZWQgbWV0YWRhdGFcbiAqXG4gKiBVc2VzIGNvdW50IHByb3BlcnRpZXMgZm9yIGVmZmljaWVudCByZW5kZXJpbmc6XG4gKiAtIGhhc0NoaWxkOiBEZXRlcm1pbmVkIGJ5IGNoaWxkcmVuQ291bnQgKyBpdGVtc0NvdW50XG4gKiAtIE5vIG5lZWQgdG8gcXVlcnkgQVBJIHRvIGtub3cgaWYgZXhwYW5kYWJsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVWaWV3SXRlbSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGhhc0NoaWxkOiBib29sZWFuOyAvLyBjaGlsZHJlbkNvdW50ID4gMCB8fCBpdGVtc0NvdW50ID4gMFxuICBjaGlsZHJlbj86IFRyZWVWaWV3SXRlbVtdO1xuICBpdGVtPzogQVhQUmVwb3J0Q2F0ZWdvcnkgfCBBWFBSZXBvcnREZWZpbml0aW9uO1xuICB0eXBlOiAnY2F0ZWdvcnknIHwgJ2RlZmluaXRpb24nO1xuICBleHBhbmRlZDogYm9vbGVhbjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4cC1yZXBvcnQtY2F0ZWdvcmllcy10cmVlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQVhEZWNvcmF0b3JNb2R1bGUsIEFYVHJlZVZpZXdMZWdhY3lNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVwb3J0LWNhdGVnb3JpZXMtdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9yZXBvcnQtY2F0ZWdvcmllcy10cmVlLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHsgY2xhc3M6ICdheHAtcmVwb3J0LWNhdGVnb3JpZXMtdHJlZScgfSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQUmVwb3J0Q2F0ZWdvcmllc1RyZWVDb21wb25lbnQge1xuICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICYgRGVwZW5kZW5jaWVzICAgLS0tLVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVwb3J0RGVmaW5pdGlvblNlcnZpY2UgPSBpbmplY3QoQVhQUmVwb3J0RGVmaW5pdGlvblNlcnZpY2UpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgT3V0cHV0IEV2ZW50cyAgIC0tLS1cblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgY2F0ZWdvcnkgbm9kZSBpcyBjbGlja2VkXG4gICAqL1xuICBjYXRlZ29yeUNsaWNrID0gb3V0cHV0PEFYUFJlcG9ydENhdGVnb3J5PigpO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYSByZXBvcnQgbm9kZSBpcyBjbGlja2VkXG4gICAqL1xuICByZXBvcnRDbGljayA9IG91dHB1dDxBWFBSZXBvcnREZWZpbml0aW9uPigpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgRGF0YSBMb2FkaW5nIE1ldGhvZHMgICAtLS0tXG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgbGF6eSBsb2FkaW5nIHRyZWUgZGF0YSB3aXRoIG9wdGltaXplZCBxdWVyaWVzXG4gICAqXG4gICAqIE9wdGltaXphdGlvbnM6XG4gICAqIDEuIFVzZXMgY2hpbGRyZW5Db3VudCB0byBkZXRlcm1pbmUgZXhwYW5kYWJpbGl0eSAobm8gZXh0cmEgcXVlcnkpXG4gICAqIDIuIFVzZXMgaXRlbXNDb3VudCB0byBza2lwIHJlcG9ydCBxdWVyaWVzIHdoZW4gY291bnQgPSAwXG4gICAqIDMuIFJldHVybnMgY2FjaGVkIGRhdGEgb24gc3Vic2VxdWVudCBjYWxscyAodmlhIHNlcnZpY2UgbGF5ZXIpXG4gICAqIDQuIFNpbmdsZSBBUEkgY2FsbCBwZXIgY2F0ZWdvcnkgaW5jbHVkZXMgYWxsIG1ldGFkYXRhXG4gICAqXG4gICAqIFBlcmZvcm1hbmNlOiBNb3N0IG5hdmlnYXRpb24gaXMgaW5zdGFudCAoY2FjaGVkKSwgb25seSBmaXJzdCB2aXNpdCBxdWVyaWVzIEFQSVxuICAgKi9cbiAgcHJvdGVjdGVkIHByb3ZpZGVMYXp5VHJlZVZpZXcgPSBhc3luYyAoc2VsZWN0ZWRJdGVtSWQ/OiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPFRyZWVWaWV3SXRlbVtdPiA9PiB7XG4gICAgaWYgKHNlbGVjdGVkSXRlbUlkKSB7XG4gICAgICAvLyDinIUgTG9hZCBjaGlsZCBjYXRlZ29yaWVzIChpbmNsdWRlcyBjaGlsZHJlbkNvdW50ICYgaXRlbXNDb3VudCBtZXRhZGF0YSlcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBhd2FpdCB0aGlzLnJlcG9ydERlZmluaXRpb25TZXJ2aWNlLmdldENhdGVnb3JpZXMoc2VsZWN0ZWRJdGVtSWQgYXMgc3RyaW5nKTtcblxuICAgICAgY29uc3QgY2F0ZWdvcnlJdGVtczogVHJlZVZpZXdJdGVtW10gPSBjYXRlZ29yaWVzLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLFxuICAgICAgICAvLyDinIUgT3B0aW1pemF0aW9uOiBVc2UgY291bnQgcHJvcGVydGllcyB0byBkZXRlcm1pbmUgZXhwYW5kYWJpbGl0eVxuICAgICAgICBoYXNDaGlsZDogaXRlbS5jaGlsZHJlbkNvdW50ID4gMCB8fCAoaXRlbS5pdGVtc0NvdW50ID8/IDApID4gMCxcbiAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgdHlwZTogJ2NhdGVnb3J5JyBhcyBjb25zdCxcbiAgICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgfSkpO1xuXG4gICAgICAvLyDinIUgTG9hZCByZXBvcnQgZGVmaW5pdGlvbnMgZm9yIHRoaXMgY2F0ZWdvcnlcbiAgICAgIC8vIE9wdGltaXphdGlvbjogU2VydmljZSBjaGVja3MgaXRlbXNDb3VudCBiZWZvcmUgcXVlcnlpbmcgKHNraXAgaWYgMClcbiAgICAgIGNvbnN0IGRlZmluaXRpb25zID0gYXdhaXQgdGhpcy5yZXBvcnREZWZpbml0aW9uU2VydmljZS5nZXRSZXBvcnRzQnlDYXRlZ29yeUlkKHNlbGVjdGVkSXRlbUlkIGFzIHN0cmluZyk7XG5cbiAgICAgIGNvbnN0IGRlZmluaXRpb25JdGVtczogVHJlZVZpZXdJdGVtW10gPSBkZWZpbml0aW9ucy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcbiAgICAgICAgaGFzQ2hpbGQ6IGZhbHNlLCAvLyBSZXBvcnRzIGFyZSBsZWFmIG5vZGVzXG4gICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgIHR5cGU6ICdkZWZpbml0aW9uJyBhcyBjb25zdCxcbiAgICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgfSkpO1xuXG4gICAgICAvLyDinIUgUmV0dXJuIGNhdGVnb3JpZXMgZmlyc3QsIHRoZW4gcmVwb3J0cyAoc29ydGVkKVxuICAgICAgcmV0dXJuIFsuLi5jYXRlZ29yeUl0ZW1zLCAuLi5kZWZpbml0aW9uSXRlbXNdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDinIUgUm9vdCBsZXZlbCAtIGxvYWQgcm9vdCBjYXRlZ29yaWVzIG9ubHlcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBhd2FpdCB0aGlzLnJlcG9ydERlZmluaXRpb25TZXJ2aWNlLmdldENhdGVnb3JpZXMoKTtcblxuICAgICAgcmV0dXJuIGNhdGVnb3JpZXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXG4gICAgICAgIC8vIOKchSBPcHRpbWl6YXRpb246IFVzZSBjb3VudCBwcm9wZXJ0aWVzXG4gICAgICAgIGhhc0NoaWxkOiBpdGVtLmNoaWxkcmVuQ291bnQgPiAwIHx8IChpdGVtLml0ZW1zQ291bnQgPz8gMCkgPiAwLFxuICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICB0eXBlOiAnY2F0ZWdvcnknIGFzIGNvbnN0LFxuICAgICAgICBleHBhbmRlZDogZmFsc2UsXG4gICAgICB9KSk7XG4gICAgfVxuICB9O1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgRXZlbnQgSGFuZGxlcnMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEhhbmRsZSB0cmVlIG5vZGUgY2xpY2sgZXZlbnRzXG4gICAqXG4gICAqIEVtaXRzIGFwcHJvcHJpYXRlIGV2ZW50IGJhc2VkIG9uIG5vZGUgdHlwZTpcbiAgICogLSBjYXRlZ29yeSDihpIgY2F0ZWdvcnlDbGlja1xuICAgKiAtIGRlZmluaXRpb24g4oaSIHJlcG9ydENsaWNrXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFuZGxlTm9kZUNsaWNrKGV2ZW50OiBBWFRyZWVJdGVtQ2xpY2tCYXNlRXZlbnRMZWdhY3kpOiB2b2lkIHtcbiAgICBjb25zdCBub2RlID0gZXZlbnQuZGF0YSBhcyBUcmVlVmlld0l0ZW07XG5cbiAgICBpZiAobm9kZS50eXBlID09PSAnY2F0ZWdvcnknKSB7XG4gICAgICB0aGlzLmNhdGVnb3J5Q2xpY2suZW1pdChub2RlLml0ZW0gYXMgQVhQUmVwb3J0Q2F0ZWdvcnkpO1xuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAnZGVmaW5pdGlvbicpIHtcbiAgICAgIHRoaXMucmVwb3J0Q2xpY2suZW1pdChub2RlLml0ZW0gYXMgQVhQUmVwb3J0RGVmaW5pdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG4iLCI8YXgtdHJlZS12aWV3LWxlZ2FjeVxuICBbc2hvd0NoZWNrYm94XT1cImZhbHNlXCJcbiAgW2l0ZW1UZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIlxuICBbdGV4dEZpZWxkXT1cIid0aXRsZSdcIlxuICBbaGFzQ2hpbGRGaWVsZF09XCInaGFzQ2hpbGQnXCJcbiAgW3ZhbHVlRmllbGRdPVwiJ2lkJ1wiXG4gIFtleHBhbmRlZEZpZWxkXT1cIidleHBhbmRlZCdcIlxuICBbaXRlbXNdPVwicHJvdmlkZUxhenlUcmVlVmlld1wiXG4gIChvbk5vZGVDbGljayk9XCJoYW5kbGVOb2RlQ2xpY2soJGV2ZW50KVwiXG4+XG48L2F4LXRyZWUtdmlldy1sZWdhY3k+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbVRlbXBsYXRlIGxldC1pdGVtPlxuICBAaWYgKGl0ZW0udHlwZSA9PT0gJ2NhdGVnb3J5Jykge1xuICAgIDxheC1pY29uIGNsYXNzPVwiZmFzIGF4LXRleHQtd2FybmluZyBmYS1mb2xkZXJcIj48L2F4LWljb24+XG4gIH0gQGVsc2Uge1xuICAgIDxheC1pY29uIGNsYXNzPVwiZmFzIGF4LXRleHQtYWNjZW50MSBmYS1maWxlLWNoYXJ0LWNvbHVtblwiPjwvYXgtaWNvbj5cbiAgfVxuICB7eyBpdGVtLnRpdGxlIH19XG48L25nLXRlbXBsYXRlPlxuIl19","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { AXPReportDefinitionService } from '../../../reports';\nimport { AXPThemeLayoutBlockComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPStateMessageComponent, } from '@acorex/platform/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, firstValueFrom, startWith } from 'rxjs';\nimport { AXPReportRunnerRootViewModel } from '../report-runner.viewmodel';\nimport { AXPReportCategoriesTreeComponent } from '../report-categories-tree/report-categories-tree.component';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"@acorex/components/search-box\";\nimport * as i4 from \"@acorex/components/decorators\";\nimport * as i5 from \"@acorex/core/translation\";\nexport class AXMReportRunnerRootPageComponent extends AXPPageLayoutBaseComponent {\n constructor() {\n super(...arguments);\n this.vm = inject(AXPReportRunnerRootViewModel);\n this.layoutService = inject(AXPLayoutThemeService);\n this.activatedRoute = inject(ActivatedRoute);\n this.unsubscribe = inject(AXUnsubscriber);\n this.reportDefinitionService = inject(AXPReportDefinitionService);\n this.workflow = inject(AXPWorkflowService);\n this.router = inject(Router);\n this.baseRoutes = [this.sessionService.application?.name, 'report-management', 'reports'];\n }\n async ngOnInit() {\n await super.ngOnInit();\n //\n this.router.events\n .pipe(this.unsubscribe.takeUntilDestroy, filter((event) => event instanceof NavigationEnd), startWith(null))\n .subscribe(async () => {\n await this.loadFromRoute();\n });\n }\n async loadFromRoute() {\n const snapshot = this.activatedRoute.snapshot;\n const segments = await firstValueFrom(this.activatedRoute.url);\n let categoryId = segments[segments.length - 1]?.path ?? null;\n if (categoryId) {\n await this.vm.setActiveCategoryById(categoryId);\n }\n else {\n await this.vm.loadRootCategories();\n return;\n }\n //\n let reportId = snapshot.queryParamMap.get('report') ?? null;\n if (reportId) {\n // Navigate directly to viewer instead of showing parameters\n await this.navigateToViewer(reportId);\n }\n }\n //#region ---- Event Handlers ----\n /**\n * Handle category selection from tree\n */\n async onCategoryClick(category) {\n await this.navigateToCategory(category);\n }\n /**\n * Handle report selection from tree\n */\n async onReportClick(report) {\n await this.navigateToReport(report);\n }\n /**\n * Navigate directly to report viewer with the selected report\n */\n async navigateToViewer(reportId) {\n const baseViewerRoute = [this.sessionService.application?.name, 'report-management', 'viewer'];\n await this.router.navigate(baseViewerRoute, {\n queryParams: { reportId }\n });\n }\n //#endregion\n async navigateToCategory(category) {\n // Find the path to this category\n const path = await this.reportDefinitionService.getCategoriesPathById(category.id);\n // Find the index of the target category in the path\n let urlParts = [...this.baseRoutes];\n for (const cat of path) {\n urlParts.push(cat.id);\n }\n await this.router.navigate(urlParts);\n }\n async navigateToReport(report) {\n // Navigate directly to viewer instead of showing parameters in runner\n await this.navigateToViewer(report.id);\n }\n //#region ---- Page Configuration Overrides ----\n async getPageBreadcrumbs() {\n const path = this.vm.activeCategoriesPath();\n const report = {\n name: 'reports',\n title: await this.translateService.translateAsync('@report-management:module.menus.root.title'),\n command: {\n name: 'navigate-to-reports-root',\n },\n };\n if (!path || path.length === 0) {\n return [report];\n }\n const breadcrumbs = [report];\n let urlParts = [...this.baseRoutes];\n for (const cat of path) {\n urlParts = [...urlParts, cat.id];\n breadcrumbs.push({\n name: cat.id,\n title: cat.title,\n command: {\n name: 'navigate-to-category',\n options: {\n category: cat,\n },\n },\n });\n }\n return breadcrumbs;\n }\n async getSecondaryMenuItems() {\n return [];\n }\n async getPageTitle() {\n return this.vm.title();\n }\n async getPageDescription() {\n return this.vm.description();\n }\n async getBackButton() {\n const categoriesPath = this.vm.activeCategoriesPath();\n if (!categoriesPath || categoriesPath.length === 0) {\n // At root level, no back button\n return null;\n }\n if (categoriesPath.length === 1) {\n // At first level category, back to reports root\n return {\n title: await this.translateService.translateAsync('@report-management:module.menus.root.title'),\n };\n }\n // At deeper level, back to parent category\n const parentCategory = categoriesPath[categoriesPath.length - 2];\n return {\n title: parentCategory.title,\n };\n }\n async onBackButtonClick() {\n const categoriesPath = this.vm.activeCategoriesPath();\n if (!categoriesPath || categoriesPath.length <= 1) {\n // Navigate back to reports root\n await this.router.navigate([...this.baseRoutes]);\n }\n else {\n // Navigate to parent category\n const parentCategoriesPath = categoriesPath.slice(0, -1);\n let urlParts = [...this.baseRoutes];\n for (const cat of parentCategoriesPath) {\n urlParts.push(cat.id);\n }\n await this.router.navigate(urlParts);\n }\n }\n async execute(command) {\n switch (command.name) {\n case 'navigate-to-category':\n await this.navigateToCategory(command.options?.['category']);\n break;\n case 'navigate-to-reports-root':\n await this.router.navigate([...this.baseRoutes]);\n break;\n case 'create-report':\n await this.workflow.execute('report-create', {\n data: {\n categoryId: this.vm.activeCategory()?.id ?? null,\n },\n });\n break;\n }\n }\n async getPrimaryMenuItems() {\n return [\n {\n title: '@general:actions.create.title',\n icon: 'fa-light fa-plus',\n color: 'primary',\n command: {\n name: 'create-report',\n },\n },\n ];\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMReportRunnerRootPageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXMReportRunnerRootPageComponent, isStandalone: true, selector: \"ng-component\", host: { classAttribute: \"axp-report-runner-root-page\" }, providers: [\n AXUnsubscriber,\n AXPReportRunnerRootViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMReportRunnerRootPageComponent,\n },\n ], usesInheritance: true, ngImport: i0, template: \"<axp-page-layout *translate=\\\"let t\\\">\\n @if (vm.showSideMenu()) {\\n <axp-layout-start-side>\\n <axp-layout-header>\\n <axp-layout-title>{{ t('@report-management:report-runner.terms.menu-title') | async }}</axp-layout-title>\\n <axp-layout-toolbar>\\n <ax-search-box\\n [delayTime]=\\\"300\\\"\\n [ngModel]=\\\"vm.searchExpression()\\\"\\n (onValueChanged)=\\\"vm.search($event.value)\\\"\\n [placeholder]=\\\"t('@report-management:report-runner.terms.search-placeholder') | async\\\"\\n >\\n <ax-clear-button></ax-clear-button>\\n </ax-search-box>\\n </axp-layout-toolbar>\\n </axp-layout-header>\\n <axp-layout-content>\\n <axp-report-categories-tree (categoryClick)=\\\"onCategoryClick($event)\\\" (reportClick)=\\\"onReportClick($event)\\\" />\\n </axp-layout-content>\\n </axp-layout-start-side>\\n }\\n\\n <axp-page-content>\\n <!-- Desktop and Mobile: Always show desktop template -->\\n <ng-container *ngTemplateOutlet=\\\"desktop\\\"> </ng-container>\\n </axp-page-content>\\n\\n <!-- Desktop: Grid-based browser for main content -->\\n <ng-template #desktop>\\n <div class=\\\"__reports-browser\\\">\\n @if (vm.categories().length > 0) {\\n <div class=\\\"__section\\\">\\n <h3 class=\\\"__section-title\\\">Categories</h3>\\n <div class=\\\"__items-grid\\\">\\n @for (category of vm.categories(); track category.id) {\\n <div class=\\\"__item __category\\\" (click)=\\\"navigateToCategory(category)\\\">\\n <div class=\\\"__item-icon\\\">\\n <ax-icon class=\\\"fa-solid fa-folder\\\"></ax-icon>\\n </div>\\n <div class=\\\"__item-content\\\">\\n <div class=\\\"__item-title\\\">{{ category.title }}</div>\\n @if (category.description) {\\n <div class=\\\"__item-description\\\">{{ category.description }}</div>\\n }\\n </div>\\n </div>\\n }\\n </div>\\n </div>\\n }\\n\\n @if (vm.reports().length > 0) {\\n <div class=\\\"__section\\\">\\n <h3 class=\\\"__section-title\\\">Reports</h3>\\n <div class=\\\"__items-grid\\\">\\n @for (report of vm.reports(); track report.id) {\\n <div class=\\\"__item __report\\\" (click)=\\\"navigateToReport(report)\\\">\\n <div class=\\\"__item-icon\\\">\\n <ax-icon class=\\\"fa-solid fa-file-chart-column\\\"></ax-icon>\\n </div>\\n <div class=\\\"__item-content\\\">\\n <div class=\\\"__item-title\\\">{{ report.title }}</div>\\n @if (report.description) {\\n <div class=\\\"__item-description\\\">{{ report.description }}</div>\\n }\\n </div>\\n </div>\\n }\\n </div>\\n </div>\\n }\\n\\n @if (vm.categories().length === 0 && vm.reports().length === 0) {\\n <axp-state-message\\n icon=\\\"fa-light fa-folder-open\\\"\\n [title]=\\\"'@report-management:report-runner.components.report-runner.empty-states.no-items-found.title'\\\"\\n [description]=\\\"'@report-management:report-runner.components.report-runner.empty-states.no-items-found.description'\\\"\\n >\\n </axp-state-message>\\n }\\n </div>\\n </ng-template>\\n</axp-page-layout>\\n\", styles: [\".axp-report-runner-root-page axp-layout-start-side{height:100%;width:20rem;border-inline-end-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}@media (min-width: 1920px){.axp-report-runner-root-page axp-layout-start-side{width:24rem}}.axp-report-runner-root-page axp-layout-start-side axp-layout-content{overflow-x:auto;padding-left:1rem;padding-right:1rem}.axp-report-runner-root-page .__reports-browser>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.axp-report-runner-root-page .__reports-browser{padding:.75rem}@media (min-width: 1024px){.axp-report-runner-root-page .__reports-browser{padding:1.5rem}}.axp-report-runner-root-page .__reports-browser .__section>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.axp-report-runner-root-page .__reports-browser .__section .__section-title{display:flex;align-items:center;gap:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-report-runner-root-page .__reports-browser .__section .__section-title ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:1rem}@media (min-width: 768px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1280px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1536px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width: 2560px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item{cursor:pointer;border-radius:.5rem;border-width:1px;padding:1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item{display:flex;align-items:flex-start;gap:.75rem}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-icon{display:flex;height:2.5rem;width:2.5rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:.25rem;font-size:1.125rem;line-height:1.75rem}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content{min-width:0px;flex:1 1 0%}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content .__item-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content .__item-description{margin-top:.25rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category .__item-icon{background-color:rgba(var(--ax-sys-color-warning-500),.1)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category .__item-icon ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category:hover{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-warning-500),var(--tw-border-opacity, 1));background-color:rgba(var(--ax-sys-color-warning-500),.05)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report .__item-icon{background-color:rgba(var(--ax-sys-color-primary-500),.1)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report .__item-icon ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report:hover{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));background-color:rgba(var(--ax-sys-color-primary-500),.05)}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: RouterModule }, { kind: \"ngmodule\", type: \n //\n AXSearchBoxModule }, { kind: \"component\", type: i3.AXSearchBoxComponent, selector: \"ax-search-box\", inputs: [\"disabled\", \"readonly\", \"tabIndex\", \"placeholder\", \"value\", \"state\", \"name\", \"id\", \"look\", \"class\", \"delayTime\", \"type\", \"autoSearch\"], outputs: [\"valueChange\", \"stateChange\", \"onValueChanged\", \"onBlur\", \"onFocus\", \"readonlyChange\", \"disabledChange\", \"onKeyDown\", \"onKeyUp\", \"onKeyPress\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i4.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i4.AXDecoratorClearButtonComponent, selector: \"ax-clear-button\", inputs: [\"icon\"] }, { kind: \"ngmodule\", type: AXBreadcrumbsModule }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"directive\", type: i5.AXTranslatorDirective, selector: \"[translate]\" }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"ngmodule\", type: AXTabsModule }, { kind: \"ngmodule\", type: AXBadgeModule }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"ngmodule\", type: AXDropdownButtonModule }, { kind: \"component\", type: \n //\n AXPPageLayoutComponent, selector: \"axp-page-layout\" }, { kind: \"component\", type: AXPThemeLayoutBlockComponent, selector: \" axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, \" }, { kind: \"component\", type: AXPThemeLayoutToolbarComponent, selector: \"axp-layout-toolbar\" }, { kind: \"component\", type: AXPThemeLayoutHeaderComponent, selector: \"axp-layout-header\" }, { kind: \"component\", type: AXPThemeLayoutStartSideComponent, selector: \"axp-layout-page-start-side, axp-layout-start-side\" }, { kind: \"component\", type: \n //\n AXPReportCategoriesTreeComponent, selector: \"axp-report-categories-tree\", outputs: [\"categoryClick\", \"reportClick\"] }, { kind: \"component\", type: AXPStateMessageComponent, selector: \"axp-state-message\", inputs: [\"mode\", \"icon\", \"title\", \"description\", \"variant\"] }, { kind: \"pipe\", type: i1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMReportRunnerRootPageComponent, decorators: [{\n type: Component,\n args: [{ standalone: true, imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n //\n AXSearchBoxModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXTranslationModule,\n AXButtonModule,\n AXTabsModule,\n AXBadgeModule,\n AXLoadingModule,\n AXDropdownButtonModule,\n //\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutToolbarComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n //\n AXPReportCategoriesTreeComponent,\n AXPStateMessageComponent,\n ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n AXUnsubscriber,\n AXPReportRunnerRootViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMReportRunnerRootPageComponent,\n },\n ], host: { class: 'axp-report-runner-root-page' }, template: \"<axp-page-layout *translate=\\\"let t\\\">\\n @if (vm.showSideMenu()) {\\n <axp-layout-start-side>\\n <axp-layout-header>\\n <axp-layout-title>{{ t('@report-management:report-runner.terms.menu-title') | async }}</axp-layout-title>\\n <axp-layout-toolbar>\\n <ax-search-box\\n [delayTime]=\\\"300\\\"\\n [ngModel]=\\\"vm.searchExpression()\\\"\\n (onValueChanged)=\\\"vm.search($event.value)\\\"\\n [placeholder]=\\\"t('@report-management:report-runner.terms.search-placeholder') | async\\\"\\n >\\n <ax-clear-button></ax-clear-button>\\n </ax-search-box>\\n </axp-layout-toolbar>\\n </axp-layout-header>\\n <axp-layout-content>\\n <axp-report-categories-tree (categoryClick)=\\\"onCategoryClick($event)\\\" (reportClick)=\\\"onReportClick($event)\\\" />\\n </axp-layout-content>\\n </axp-layout-start-side>\\n }\\n\\n <axp-page-content>\\n <!-- Desktop and Mobile: Always show desktop template -->\\n <ng-container *ngTemplateOutlet=\\\"desktop\\\"> </ng-container>\\n </axp-page-content>\\n\\n <!-- Desktop: Grid-based browser for main content -->\\n <ng-template #desktop>\\n <div class=\\\"__reports-browser\\\">\\n @if (vm.categories().length > 0) {\\n <div class=\\\"__section\\\">\\n <h3 class=\\\"__section-title\\\">Categories</h3>\\n <div class=\\\"__items-grid\\\">\\n @for (category of vm.categories(); track category.id) {\\n <div class=\\\"__item __category\\\" (click)=\\\"navigateToCategory(category)\\\">\\n <div class=\\\"__item-icon\\\">\\n <ax-icon class=\\\"fa-solid fa-folder\\\"></ax-icon>\\n </div>\\n <div class=\\\"__item-content\\\">\\n <div class=\\\"__item-title\\\">{{ category.title }}</div>\\n @if (category.description) {\\n <div class=\\\"__item-description\\\">{{ category.description }}</div>\\n }\\n </div>\\n </div>\\n }\\n </div>\\n </div>\\n }\\n\\n @if (vm.reports().length > 0) {\\n <div class=\\\"__section\\\">\\n <h3 class=\\\"__section-title\\\">Reports</h3>\\n <div class=\\\"__items-grid\\\">\\n @for (report of vm.reports(); track report.id) {\\n <div class=\\\"__item __report\\\" (click)=\\\"navigateToReport(report)\\\">\\n <div class=\\\"__item-icon\\\">\\n <ax-icon class=\\\"fa-solid fa-file-chart-column\\\"></ax-icon>\\n </div>\\n <div class=\\\"__item-content\\\">\\n <div class=\\\"__item-title\\\">{{ report.title }}</div>\\n @if (report.description) {\\n <div class=\\\"__item-description\\\">{{ report.description }}</div>\\n }\\n </div>\\n </div>\\n }\\n </div>\\n </div>\\n }\\n\\n @if (vm.categories().length === 0 && vm.reports().length === 0) {\\n <axp-state-message\\n icon=\\\"fa-light fa-folder-open\\\"\\n [title]=\\\"'@report-management:report-runner.components.report-runner.empty-states.no-items-found.title'\\\"\\n [description]=\\\"'@report-management:report-runner.components.report-runner.empty-states.no-items-found.description'\\\"\\n >\\n </axp-state-message>\\n }\\n </div>\\n </ng-template>\\n</axp-page-layout>\\n\", styles: [\".axp-report-runner-root-page axp-layout-start-side{height:100%;width:20rem;border-inline-end-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}@media (min-width: 1920px){.axp-report-runner-root-page axp-layout-start-side{width:24rem}}.axp-report-runner-root-page axp-layout-start-side axp-layout-content{overflow-x:auto;padding-left:1rem;padding-right:1rem}.axp-report-runner-root-page .__reports-browser>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.axp-report-runner-root-page .__reports-browser{padding:.75rem}@media (min-width: 1024px){.axp-report-runner-root-page .__reports-browser{padding:1.5rem}}.axp-report-runner-root-page .__reports-browser .__section>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.axp-report-runner-root-page .__reports-browser .__section .__section-title{display:flex;align-items:center;gap:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-report-runner-root-page .__reports-browser .__section .__section-title ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:1rem}@media (min-width: 768px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1280px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1536px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width: 2560px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item{cursor:pointer;border-radius:.5rem;border-width:1px;padding:1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item{display:flex;align-items:flex-start;gap:.75rem}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-icon{display:flex;height:2.5rem;width:2.5rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:.25rem;font-size:1.125rem;line-height:1.75rem}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content{min-width:0px;flex:1 1 0%}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content .__item-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content .__item-description{margin-top:.25rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category .__item-icon{background-color:rgba(var(--ax-sys-color-warning-500),.1)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category .__item-icon ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category:hover{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-warning-500),var(--tw-border-opacity, 1));background-color:rgba(var(--ax-sys-color-warning-500),.05)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report .__item-icon{background-color:rgba(var(--ax-sys-color-primary-500),.1)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report .__item-icon ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report:hover{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));background-color:rgba(var(--ax-sys-color-primary-500),.05)}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXJ1bm5lci1yb290LXBhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3JlcG9ydC1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvcmVwb3J0LXJ1bm5lci9yZXBvcnQtcnVubmVyLXJvb3QtcGFnZS9yZXBvcnQtcnVubmVyLXJvb3QtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvcmVwb3J0LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9yZXBvcnQtcnVubmVyL3JlcG9ydC1ydW5uZXItcm9vdC1wYWdlL3JlcG9ydC1ydW5uZXItcm9vdC1wYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUEwQywwQkFBMEIsRUFBRSxNQUFNLGtCQUFrQixDQUFD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c0JBQXNCO3dCQUN0QixFQUFFO3dCQUNGLHNCQUFzQjt3QkFDdEIsNEJBQTRCO3dCQUM1Qiw4QkFBOEI7d0JBQzlCLDZCQUE2Qjt3QkFDN0IsZ0NBQWdDO3dCQUNoQyxFQUFFO3dCQUNGLGdDQUFnQzt3QkFDaEMsd0JBQXdCO3FCQUMzQixtQkFHZ0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxhQUMxQjt3QkFDUCxjQUFjO3dCQUNkLDRCQUE0Qjt3QkFDNUI7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxrQ0FBa0M7eUJBQ2hEO3FCQUNKLFFBQ0ssRUFBRSxLQUFLLEVBQUUsNkJBQTZCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEJhZGdlTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2JhZGdlJztcbmltcG9ydCB7IEFYQnJlYWRjcnVtYnNNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnJlYWRjcnVtYnMnO1xuaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhEcm9wZG93bkJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kcm9wZG93bi1idXR0b24nO1xuaW1wb3J0IHsgQVhMb2FkaW5nTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2xvYWRpbmcnO1xuaW1wb3J0IHsgQVhTZWFyY2hCb3hNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvc2VhcmNoLWJveCc7XG5pbXBvcnQgeyBBWFRhYnNNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdGFicyc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYVW5zdWJzY3JpYmVyIH0gZnJvbSAnQGFjb3JleC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEFYUFJlcG9ydENhdGVnb3J5LCBBWFBSZXBvcnREZWZpbml0aW9uLCBBWFBSZXBvcnREZWZpbml0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3JlcG9ydHMnO1xuaW1wb3J0IHsgQVhQQWN0aW9uTWVudUl0ZW0sIEFYUEJhY2tCdXR0b24sIEFYUEJyZWFkY3J1bWJJdGVtLCBBWFBFeGVjdXRlQ29tbWFuZCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQge1xuICAgIEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsXG4gICAgQVhQVGhlbWVMYXlvdXRIZWFkZXJDb21wb25lbnQsXG4gICAgQVhQVGhlbWVMYXlvdXRTdGFydFNpZGVDb21wb25lbnQsXG4gICAgQVhQVGhlbWVMYXlvdXRUb29sYmFyQ29tcG9uZW50LFxuICAgIEFYUFN0YXRlTWVzc2FnZUNvbXBvbmVudCxcbn0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWFBQYWdlTGF5b3V0QmFzZSwgQVhQUGFnZUxheW91dEJhc2VDb21wb25lbnQsIEFYUFBhZ2VMYXlvdXRDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC92aWV3cyc7XG5pbXBvcnQgeyBBWFBMYXlvdXRUaGVtZVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3RoZW1lcy9zaGFyZWQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciwgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZpbHRlciwgZmlyc3RWYWx1ZUZyb20sIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhQUmVwb3J0UnVubmVyUm9vdFZpZXdNb2RlbCB9IGZyb20gJy4uL3JlcG9ydC1ydW5uZXIudmlld21vZGVsJztcbmltcG9ydCB7IEFYUFJlcG9ydENhdGVnb3JpZXNUcmVlQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVwb3J0LWNhdGVnb3JpZXMtdHJlZS9yZXBvcnQtY2F0ZWdvcmllcy10cmVlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3dvcmtmbG93JztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi8uLi9jb25zdCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSb3V0ZXJNb2R1bGUsXG4gICAgICAgIC8vXG4gICAgICAgIEFYU2VhcmNoQm94TW9kdWxlLFxuICAgICAgICBBWERlY29yYXRvck1vZHVsZSxcbiAgICAgICAgQVhCcmVhZGNydW1ic01vZHVsZSxcbiAgICAgICAgQVhUcmFuc2xhdGlvbk1vZHVsZSxcbiAgICAgICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgICAgIEFYVGFic01vZHVsZSxcbiAgICAgICAgQVhCYWRnZU1vZHVsZSxcbiAgICAgICAgQVhMb2FkaW5nTW9kdWxlLFxuICAgICAgICBBWERyb3Bkb3duQnV0dG9uTW9kdWxlLFxuICAgICAgICAvL1xuICAgICAgICBBWFBQYWdlTGF5b3V0Q29tcG9uZW50LFxuICAgICAgICBBWFBUaGVtZUxheW91dEJsb2NrQ29tcG9uZW50LFxuICAgICAgICBBWFBUaGVtZUxheW91dFRvb2xiYXJDb21wb25lbnQsXG4gICAgICAgIEFYUFRoZW1lTGF5b3V0SGVhZGVyQ29tcG9uZW50LFxuICAgICAgICBBWFBUaGVtZUxheW91dFN0YXJ0U2lkZUNvbXBvbmVudCxcbiAgICAgICAgLy9cbiAgICAgICAgQVhQUmVwb3J0Q2F0ZWdvcmllc1RyZWVDb21wb25lbnQsXG4gICAgICAgIEFYUFN0YXRlTWVzc2FnZUNvbXBvbmVudCxcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXBvcnQtcnVubmVyLXJvb3QtcGFnZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3JlcG9ydC1ydW5uZXItcm9vdC1wYWdlLmNvbXBvbmVudC5zY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBBWFVuc3Vic2NyaWJlcixcbiAgICAgICAgQVhQUmVwb3J0UnVubmVyUm9vdFZpZXdNb2RlbCxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQVhQUGFnZUxheW91dEJhc2UsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogQVhNUmVwb3J0UnVubmVyUm9vdFBhZ2VDb21wb25lbnQsXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICBob3N0OiB7IGNsYXNzOiAnYXhwLXJlcG9ydC1ydW5uZXItcm9vdC1wYWdlJyB9LFxufSlcbmV4cG9ydCBjbGFzcyBBWE1SZXBvcnRSdW5uZXJSb290UGFnZUNvbXBvbmVudCBleHRlbmRzIEFYUFBhZ2VMYXlvdXRCYXNlQ29tcG9uZW50IHtcbiAgICBwcm90ZWN0ZWQgdm0gPSBpbmplY3QoQVhQUmVwb3J0UnVubmVyUm9vdFZpZXdNb2RlbCk7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGxheW91dFNlcnZpY2UgPSBpbmplY3QoQVhQTGF5b3V0VGhlbWVTZXJ2aWNlKTtcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlID0gaW5qZWN0KEFYVW5zdWJzY3JpYmVyKTtcbiAgICBwcml2YXRlIHJlcG9ydERlZmluaXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYUFJlcG9ydERlZmluaXRpb25TZXJ2aWNlKTtcbiAgICBwcml2YXRlIHdvcmtmbG93ID0gaW5qZWN0KEFYUFdvcmtmbG93U2VydmljZSk7XG4gICAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICAgIHByaXZhdGUgYmFzZVJvdXRlcyA9IFt0aGlzLnNlc3Npb25TZXJ2aWNlLmFwcGxpY2F0aW9uPy5uYW1lLCAncmVwb3J0LW1hbmFnZW1lbnQnLCAncmVwb3J0cyddO1xuXG4gICAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIC8vXG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZS50YWtlVW50aWxEZXN0cm95LFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkRnJvbVJvdXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRGcm9tUm91dGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdDtcbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmFjdGl2YXRlZFJvdXRlLnVybCk7XG5cbiAgICAgICAgbGV0IGNhdGVnb3J5SWQgPSBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXT8ucGF0aCA/PyBudWxsO1xuICAgICAgICBpZiAoY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy52bS5zZXRBY3RpdmVDYXRlZ29yeUJ5SWQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnZtLmxvYWRSb290Q2F0ZWdvcmllcygpO1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgLy9cblxuICAgICAgICBsZXQgcmVwb3J0SWQgPSBzbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgncmVwb3J0JykgPz8gbnVsbDtcblxuICAgICAgICBpZiAocmVwb3J0SWQpIHtcbiAgICAgICAgICAgIC8vIE5hdmlnYXRlIGRpcmVjdGx5IHRvIHZpZXdlciBpbnN0ZWFkIG9mIHNob3dpbmcgcGFyYW1ldGVyc1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0ZVRvVmlld2VyKHJlcG9ydElkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgRXZlbnQgSGFuZGxlcnMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY2F0ZWdvcnkgc2VsZWN0aW9uIGZyb20gdHJlZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyBvbkNhdGVnb3J5Q2xpY2soY2F0ZWdvcnk6IEFYUFJlcG9ydENhdGVnb3J5KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGVUb0NhdGVnb3J5KGNhdGVnb3J5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgcmVwb3J0IHNlbGVjdGlvbiBmcm9tIHRyZWVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYXN5bmMgb25SZXBvcnRDbGljayhyZXBvcnQ6IEFYUFJlcG9ydERlZmluaXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0ZVRvUmVwb3J0KHJlcG9ydCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGUgZGlyZWN0bHkgdG8gcmVwb3J0IHZpZXdlciB3aXRoIHRoZSBzZWxlY3RlZCByZXBvcnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIG5hdmlnYXRlVG9WaWV3ZXIocmVwb3J0SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBiYXNlVmlld2VyUm91dGUgPSBbdGhpcy5zZXNzaW9uU2VydmljZS5hcHBsaWNhdGlvbj8ubmFtZSwgJ3JlcG9ydC1tYW5hZ2VtZW50JywgJ3ZpZXdlciddO1xuICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShiYXNlVmlld2VyUm91dGUsIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHJlcG9ydElkIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgbmF2aWdhdGVUb0NhdGVnb3J5KGNhdGVnb3J5OiBBWFBSZXBvcnRDYXRlZ29yeSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBGaW5kIHRoZSBwYXRoIHRvIHRoaXMgY2F0ZWdvcnlcbiAgICAgICAgY29uc3QgcGF0aCA9IGF3YWl0IHRoaXMucmVwb3J0RGVmaW5pdGlvblNlcnZpY2UuZ2V0Q2F0ZWdvcmllc1BhdGhCeUlkKGNhdGVnb3J5LmlkKTtcbiAgICAgICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIHRhcmdldCBjYXRlZ29yeSBpbiB0aGUgcGF0aFxuICAgICAgICBsZXQgdXJsUGFydHMgPSBbLi4udGhpcy5iYXNlUm91dGVzXTtcbiAgICAgICAgZm9yIChjb25zdCBjYXQgb2YgcGF0aCkge1xuICAgICAgICAgICAgdXJsUGFydHMucHVzaChjYXQuaWQpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKHVybFBhcnRzKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgbmF2aWdhdGVUb1JlcG9ydChyZXBvcnQ6IEFYUFJlcG9ydERlZmluaXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gTmF2aWdhdGUgZGlyZWN0bHkgdG8gdmlld2VyIGluc3RlYWQgb2Ygc2hvd2luZyBwYXJhbWV0ZXJzIGluIHJ1bm5lclxuICAgICAgICBhd2FpdCB0aGlzLm5hdmlnYXRlVG9WaWV3ZXIocmVwb3J0LmlkKTtcbiAgICB9XG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFBhZ2UgQ29uZmlndXJhdGlvbiBPdmVycmlkZXMgICAtLS0tXG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgZ2V0UGFnZUJyZWFkY3J1bWJzKCk6IFByb21pc2U8QVhQQnJlYWRjcnVtYkl0ZW1bXT4ge1xuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy52bS5hY3RpdmVDYXRlZ29yaWVzUGF0aCgpO1xuICAgICAgICBjb25zdCByZXBvcnQgPSB7XG4gICAgICAgICAgICBuYW1lOiAncmVwb3J0cycsXG4gICAgICAgICAgICB0aXRsZTogYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAcmVwb3J0LW1hbmFnZW1lbnQ6bW9kdWxlLm1lbnVzLnJvb3QudGl0bGUnKSxcbiAgICAgICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbmF2aWdhdGUtdG8tcmVwb3J0cy1yb290JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGlmICghcGF0aCB8fCBwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtyZXBvcnRdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJzOiBBWFBCcmVhZGNydW1iSXRlbVtdID0gW3JlcG9ydF07XG4gICAgICAgIGxldCB1cmxQYXJ0cyA9IFsuLi50aGlzLmJhc2VSb3V0ZXNdO1xuICAgICAgICBmb3IgKGNvbnN0IGNhdCBvZiBwYXRoKSB7XG4gICAgICAgICAgICB1cmxQYXJ0cyA9IFsuLi51cmxQYXJ0cywgY2F0LmlkXTtcbiAgICAgICAgICAgIGJyZWFkY3J1bWJzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IGNhdC5pZCxcbiAgICAgICAgICAgICAgICB0aXRsZTogY2F0LnRpdGxlLFxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ25hdmlnYXRlLXRvLWNhdGVnb3J5JyxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IGNhdCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJyZWFkY3J1bWJzO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGFzeW5jIGdldFNlY29uZGFyeU1lbnVJdGVtcygpOiBQcm9taXNlPEFYUEFjdGlvbk1lbnVJdGVtW10+IHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGFzeW5jIGdldFBhZ2VUaXRsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy52bS50aXRsZSgpITtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBhc3luYyBnZXRQYWdlRGVzY3JpcHRpb24oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZtLmRlc2NyaXB0aW9uKCkhO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGFzeW5jIGdldEJhY2tCdXR0b24oKTogUHJvbWlzZTxBWFBCYWNrQnV0dG9uIHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBjYXRlZ29yaWVzUGF0aCA9IHRoaXMudm0uYWN0aXZlQ2F0ZWdvcmllc1BhdGgoKTtcblxuICAgICAgICBpZiAoIWNhdGVnb3JpZXNQYXRoIHx8IGNhdGVnb3JpZXNQYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQXQgcm9vdCBsZXZlbCwgbm8gYmFjayBidXR0b25cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhdGVnb3JpZXNQYXRoLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gQXQgZmlyc3QgbGV2ZWwgY2F0ZWdvcnksIGJhY2sgdG8gcmVwb3J0cyByb290XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0ByZXBvcnQtbWFuYWdlbWVudDptb2R1bGUubWVudXMucm9vdC50aXRsZScpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEF0IGRlZXBlciBsZXZlbCwgYmFjayB0byBwYXJlbnQgY2F0ZWdvcnlcbiAgICAgICAgY29uc3QgcGFyZW50Q2F0ZWdvcnkgPSBjYXRlZ29yaWVzUGF0aFtjYXRlZ29yaWVzUGF0aC5sZW5ndGggLSAyXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRpdGxlOiBwYXJlbnRDYXRlZ29yeS50aXRsZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBhc3luYyBvbkJhY2tCdXR0b25DbGljaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllc1BhdGggPSB0aGlzLnZtLmFjdGl2ZUNhdGVnb3JpZXNQYXRoKCk7XG5cbiAgICAgICAgaWYgKCFjYXRlZ29yaWVzUGF0aCB8fCBjYXRlZ29yaWVzUGF0aC5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgLy8gTmF2aWdhdGUgYmFjayB0byByZXBvcnRzIHJvb3RcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsuLi50aGlzLmJhc2VSb3V0ZXNdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHBhcmVudCBjYXRlZ29yeVxuICAgICAgICAgICAgY29uc3QgcGFyZW50Q2F0ZWdvcmllc1BhdGggPSBjYXRlZ29yaWVzUGF0aC5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICBsZXQgdXJsUGFydHMgPSBbLi4udGhpcy5iYXNlUm91dGVzXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2F0IG9mIHBhcmVudENhdGVnb3JpZXNQYXRoKSB7XG4gICAgICAgICAgICAgICAgdXJsUGFydHMucHVzaChjYXQuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUodXJsUGFydHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgYXN5bmMgZXhlY3V0ZShjb21tYW5kOiBBWFBFeGVjdXRlQ29tbWFuZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBzd2l0Y2ggKGNvbW1hbmQubmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnbmF2aWdhdGUtdG8tY2F0ZWdvcnknOlxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGVUb0NhdGVnb3J5KGNvbW1hbmQub3B0aW9ucz8uWydjYXRlZ29yeSddIGFzIEFYUFJlcG9ydENhdGVnb3J5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25hdmlnYXRlLXRvLXJlcG9ydHMtcm9vdCc6XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWy4uLnRoaXMuYmFzZVJvdXRlc10pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY3JlYXRlLXJlcG9ydCc6XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy53b3JrZmxvdy5leGVjdXRlKCdyZXBvcnQtY3JlYXRlJywge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeUlkOiB0aGlzLnZtLmFjdGl2ZUNhdGVnb3J5KCk/LmlkID8/IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvdmVycmlkZSBhc3luYyBnZXRQcmltYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnQGdlbmVyYWw6YWN0aW9ucy5jcmVhdGUudGl0bGUnLFxuICAgICAgICAgICAgICAgIGljb246ICdmYS1saWdodCBmYS1wbHVzJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NyZWF0ZS1yZXBvcnQnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxufVxuIiwiPGF4cC1wYWdlLWxheW91dCAqdHJhbnNsYXRlPVwibGV0IHRcIj5cbiAgQGlmICh2bS5zaG93U2lkZU1lbnUoKSkge1xuICAgIDxheHAtbGF5b3V0LXN0YXJ0LXNpZGU+XG4gICAgICA8YXhwLWxheW91dC1oZWFkZXI+XG4gICAgICAgIDxheHAtbGF5b3V0LXRpdGxlPnt7IHQoJ0ByZXBvcnQtbWFuYWdlbWVudDpyZXBvcnQtcnVubmVyLnRlcm1zLm1lbnUtdGl0bGUnKSB8IGFzeW5jIH19PC9heHAtbGF5b3V0LXRpdGxlPlxuICAgICAgICA8YXhwLWxheW91dC10b29sYmFyPlxuICAgICAgICAgIDxheC1zZWFyY2gtYm94XG4gICAgICAgICAgICBbZGVsYXlUaW1lXT1cIjMwMFwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJ2bS5zZWFyY2hFeHByZXNzaW9uKClcIlxuICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cInZtLnNlYXJjaCgkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJ0KCdAcmVwb3J0LW1hbmFnZW1lbnQ6cmVwb3J0LXJ1bm5lci50ZXJtcy5zZWFyY2gtcGxhY2Vob2xkZXInKSB8IGFzeW5jXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YXgtY2xlYXItYnV0dG9uPjwvYXgtY2xlYXItYnV0dG9uPlxuICAgICAgICAgIDwvYXgtc2VhcmNoLWJveD5cbiAgICAgICAgPC9heHAtbGF5b3V0LXRvb2xiYXI+XG4gICAgICA8L2F4cC1sYXlvdXQtaGVhZGVyPlxuICAgICAgPGF4cC1sYXlvdXQtY29udGVudD5cbiAgICAgICAgPGF4cC1yZXBvcnQtY2F0ZWdvcmllcy10cmVlIChjYXRlZ29yeUNsaWNrKT1cIm9uQ2F0ZWdvcnlDbGljaygkZXZlbnQpXCIgKHJlcG9ydENsaWNrKT1cIm9uUmVwb3J0Q2xpY2soJGV2ZW50KVwiIC8+XG4gICAgICA8L2F4cC1sYXlvdXQtY29udGVudD5cbiAgICA8L2F4cC1sYXlvdXQtc3RhcnQtc2lkZT5cbiAgfVxuXG4gIDxheHAtcGFnZS1jb250ZW50PlxuICAgIDwhLS0gRGVza3RvcCBhbmQgTW9iaWxlOiBBbHdheXMgc2hvdyBkZXNrdG9wIHRlbXBsYXRlIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZXNrdG9wXCI+IDwvbmctY29udGFpbmVyPlxuICA8L2F4cC1wYWdlLWNvbnRlbnQ+XG5cbiAgPCEtLSBEZXNrdG9wOiBHcmlkLWJhc2VkIGJyb3dzZXIgZm9yIG1haW4gY29udGVudCAtLT5cbiAgPG5nLXRlbXBsYXRlICNkZXNrdG9wPlxuICAgIDxkaXYgY2xhc3M9XCJfX3JlcG9ydHMtYnJvd3NlclwiPlxuICAgICAgQGlmICh2bS5jYXRlZ29yaWVzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiX19zZWN0aW9uXCI+XG4gICAgICAgICAgPGgzIGNsYXNzPVwiX19zZWN0aW9uLXRpdGxlXCI+Q2F0ZWdvcmllczwvaDM+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIl9faXRlbXMtZ3JpZFwiPlxuICAgICAgICAgICAgQGZvciAoY2F0ZWdvcnkgb2Ygdm0uY2F0ZWdvcmllcygpOyB0cmFjayBjYXRlZ29yeS5pZCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiX19pdGVtIF9fY2F0ZWdvcnlcIiAoY2xpY2spPVwibmF2aWdhdGVUb0NhdGVnb3J5KGNhdGVnb3J5KVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX2l0ZW0taWNvblwiPlxuICAgICAgICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS1mb2xkZXJcIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9faXRlbS1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiX19pdGVtLXRpdGxlXCI+e3sgY2F0ZWdvcnkudGl0bGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoY2F0ZWdvcnkuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9faXRlbS1kZXNjcmlwdGlvblwiPnt7IGNhdGVnb3J5LmRlc2NyaXB0aW9uIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgQGlmICh2bS5yZXBvcnRzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiX19zZWN0aW9uXCI+XG4gICAgICAgICAgPGgzIGNsYXNzPVwiX19zZWN0aW9uLXRpdGxlXCI+UmVwb3J0czwvaDM+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIl9faXRlbXMtZ3JpZFwiPlxuICAgICAgICAgICAgQGZvciAocmVwb3J0IG9mIHZtLnJlcG9ydHMoKTsgdHJhY2sgcmVwb3J0LmlkKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX2l0ZW0gX19yZXBvcnRcIiAoY2xpY2spPVwibmF2aWdhdGVUb1JlcG9ydChyZXBvcnQpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9faXRlbS1pY29uXCI+XG4gICAgICAgICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWZpbGUtY2hhcnQtY29sdW1uXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX2l0ZW0tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9faXRlbS10aXRsZVwiPnt7IHJlcG9ydC50aXRsZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgQGlmIChyZXBvcnQuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9faXRlbS1kZXNjcmlwdGlvblwiPnt7IHJlcG9ydC5kZXNjcmlwdGlvbiB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAodm0uY2F0ZWdvcmllcygpLmxlbmd0aCA9PT0gMCAmJiB2bS5yZXBvcnRzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIDxheHAtc3RhdGUtbWVzc2FnZVxuICAgICAgICAgIGljb249XCJmYS1saWdodCBmYS1mb2xkZXItb3BlblwiXG4gICAgICAgICAgW3RpdGxlXT1cIidAcmVwb3J0LW1hbmFnZW1lbnQ6cmVwb3J0LXJ1bm5lci5jb21wb25lbnRzLnJlcG9ydC1ydW5uZXIuZW1wdHktc3RhdGVzLm5vLWl0ZW1zLWZvdW5kLnRpdGxlJ1wiXG4gICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidAcmVwb3J0LW1hbmFnZW1lbnQ6cmVwb3J0LXJ1bm5lci5jb21wb25lbnRzLnJlcG9ydC1ydW5uZXIuZW1wdHktc3RhdGVzLm5vLWl0ZW1zLWZvdW5kLmRlc2NyaXB0aW9uJ1wiXG4gICAgICAgID5cbiAgICAgICAgPC9heHAtc3RhdGUtbWVzc2FnZT5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvYXhwLXBhZ2UtbGF5b3V0PlxuIl19"],"names":["i1","i2","i3","i4","i5"],"mappings":"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"}
@@ -1547,7 +1547,7 @@ function routesFacory() {
1547
1547
  children: [
1548
1548
  {
1549
1549
  path: '**',
1550
- loadComponent: () => import('./acorex-modules-report-management-report-runner-root-page.component-BPHpCx1z.mjs').then((c) => c.AXMReportRunnerRootPageComponent),
1550
+ loadComponent: () => import('./acorex-modules-report-management-report-runner-root-page.component-Cjpx-4Q9.mjs').then((c) => c.AXMReportRunnerRootPageComponent),
1551
1551
  data: { reuse: true },
1552
1552
  },
1553
1553
  ],
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@acorex/modules",
3
- "version": "20.6.0-next.14",
3
+ "version": "20.6.0-next.16",
4
4
  "peerDependencies": {
5
- "@acorex/platform": "20.6.0-next.14",
5
+ "@acorex/platform": "20.6.0-next.16",
6
6
  "@angular/service-worker": "^20.0.0",
7
7
  "angular-oauth2-oidc": "^15.0.0",
8
8
  "d3": "^7.0.0",
@@ -116,6 +116,10 @@
116
116
  "types": "./notification-management/index.d.ts",
117
117
  "default": "./fesm2022/acorex-modules-notification-management.mjs"
118
118
  },
119
+ "./organization-management": {
120
+ "types": "./organization-management/index.d.ts",
121
+ "default": "./fesm2022/acorex-modules-organization-management.mjs"
122
+ },
119
123
  "./party-management": {
120
124
  "types": "./party-management/index.d.ts",
121
125
  "default": "./fesm2022/acorex-modules-party-management.mjs"
@@ -156,10 +160,6 @@
156
160
  "types": "./training-management/index.d.ts",
157
161
  "default": "./fesm2022/acorex-modules-training-management.mjs"
158
162
  },
159
- "./organization-management": {
160
- "types": "./organization-management/index.d.ts",
161
- "default": "./fesm2022/acorex-modules-organization-management.mjs"
162
- },
163
163
  "./workflow-management": {
164
164
  "types": "./workflow-management/index.d.ts",
165
165
  "default": "./fesm2022/acorex-modules-workflow-management.mjs"
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-modules-form-template-management-template-picker.component-BiCwa7Ww.mjs","sources":["../tmp-esm2022/form-template-management/lib/features/designer/components/template-picker/template-picker.component.js"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXCommonModule } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXPSettingService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, inject, Injector, model, runInInjectionContext, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { orderBy } from 'lodash-es';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXTreeViewModule } from '@acorex/components/tree-view';\nimport { AXPStateMessageComponent, AXPWidgetItemComponent } from '@acorex/platform/layout/components';\nimport { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../../../const';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nimport * as i2 from \"@acorex/components/button\";\nimport * as i3 from \"@acorex/components/decorators\";\nimport * as i4 from \"@acorex/components/search-box\";\nimport * as i5 from \"@acorex/components/tree-view\";\nimport * as i6 from \"@angular/common\";\nimport * as i7 from \"@acorex/core/translation\";\n/**\n * Maps AXPDisplayWidgetProvided to generic AXPWidgetItemData\n */\nfunction mapToWidgetItemData(widget) {\n return {\n title: widget.title,\n description: widget.description,\n icon: widget.icon ?? 'fa-solid fa-cube',\n isPinned: widget.pinned,\n data: widget\n };\n}\nexport class AXPTemplateWidgetPickerComponent extends AXBasePageComponent {\n constructor() {\n super(...arguments);\n this.settingService = inject(AXPSettingService);\n this.injector = inject(Injector);\n this.categoryEntityService = runInInjectionContext(this.injector, () => new AXMEntityCrudServiceImpl(`${RootConfig.module.name}.Category`));\n this.expandedCategoriesKey = 'forms:templates:picker:expandedCategories';\n // Track expanded category IDs\n this.expandedCategoryIds = signal([], ...(ngDevMode ? [{ debugName: \"expandedCategoryIds\" }] : []));\n this.pinnedSettingKey = 'forms:templates:picker:pinned';\n this.searchTerm = model('', ...(ngDevMode ? [{ debugName: \"searchTerm\" }] : []));\n // Data properties - populated by popup service\n this.widgets = [];\n // Signals\n this.displayWidgets = signal([], ...(ngDevMode ? [{ debugName: \"displayWidgets\" }] : []));\n // Signal to track selected widgets\n this.selectedWidgets = signal([], ...(ngDevMode ? [{ debugName: \"selectedWidgets\" }] : []));\n // Computed for filtered and ordered widget list\n this.orderedList = computed(() => {\n const search = this.searchTerm().toLowerCase();\n const selectedCategory = this.selectedCategory();\n const selectedCategoryId = selectedCategory ? selectedCategory.id : null;\n const filterByCategory = (widget) => {\n if (!selectedCategoryId || selectedCategoryId == 'all')\n return true;\n return selectedCategoryId === widget.group.name;\n };\n return orderBy(this.displayWidgets().filter((w) => {\n const matchesCategory = filterByCategory(w);\n const matchesSearch = !search || w.title.toLowerCase().includes(search) || w.description?.toLowerCase().includes(search);\n return matchesCategory && matchesSearch;\n }), ['pinned', 'title'], ['desc', 'asc']);\n }, ...(ngDevMode ? [{ debugName: \"orderedList\" }] : []));\n // Pinned and regular lists\n this.pinnedList = computed(() => this.orderedList().filter((c) => c.pinned), ...(ngDevMode ? [{ debugName: \"pinnedList\" }] : []));\n this.regularList = computed(() => this.orderedList().filter((c) => !c.pinned), ...(ngDevMode ? [{ debugName: \"regularList\" }] : []));\n // Mapped data for generic widget items\n this.pinnedWidgetItems = computed(() => this.pinnedList().map(mapToWidgetItemData), ...(ngDevMode ? [{ debugName: \"pinnedWidgetItems\" }] : []));\n this.regularWidgetItems = computed(() => this.regularList().map(mapToWidgetItemData), ...(ngDevMode ? [{ debugName: \"regularWidgetItems\" }] : []));\n // Computed property to check if we're in search mode\n this.isSearchMode = computed(() => this.searchTerm().trim().length > 0, ...(ngDevMode ? [{ debugName: \"isSearchMode\" }] : []));\n // Computed property to check if there are any results\n this.hasResults = computed(() => this.orderedList().length > 0, ...(ngDevMode ? [{ debugName: \"hasResults\" }] : []));\n //#region Category Tree\n this.provideLazyTreeView = async (selectedItemId) => {\n if (selectedItemId == 'all') {\n const categories = await this.categoryEntityService.getRoots({});\n const items = categories.items.map((item) => ({\n id: item.id,\n title: item.title,\n hasChild: item.childrenCount > 0,\n expanded: this.expandedCategoryIds().includes(item.id),\n }));\n return items;\n }\n else if (selectedItemId) {\n const categories = (await this.categoryEntityService.getChildren({ parentId: selectedItemId }))?.items.map((item) => ({\n id: item.id,\n title: item.title,\n parentId: item.parentId,\n hasChild: item.childrenCount > 0,\n expanded: this.expandedCategoryIds().includes(item.id),\n }));\n return categories;\n }\n else {\n return [\n {\n hasChild: true,\n id: \"all\",\n title: \"All Items\",\n expanded: true,\n }\n ];\n }\n };\n this.selectedCategory = signal(null, ...(ngDevMode ? [{ debugName: \"selectedCategory\" }] : []));\n }\n async ngOnInit() {\n super.ngOnInit();\n // Load expanded categories from settings\n const savedExpandedIds = (await this.settingService.get(this.expandedCategoriesKey)) || [];\n this.expandedCategoryIds.set(savedExpandedIds);\n //\n const pinnedWidgets = (await this.settingService.get(this.pinnedSettingKey)) || [];\n this.displayWidgets.set(this.widgets.map((c) => ({\n ...c,\n pinned: pinnedWidgets.includes(c.id),\n icon: c.icon ?? 'fa-solid fa-file-invoice',\n })));\n }\n handleWidgetClick(clickEvent) {\n const { event, widget } = clickEvent;\n const originalWidget = widget.data;\n if (event.ctrlKey) {\n const currentSelection = this.selectedWidgets();\n const isAlreadySelected = currentSelection.some((w) => w === originalWidget);\n if (isAlreadySelected) {\n // Deselect widget if already selected\n this.selectedWidgets.set(currentSelection.filter((w) => w !== originalWidget));\n }\n else {\n // Add widget to selection\n this.selectedWidgets.set([...currentSelection, originalWidget]);\n }\n }\n else {\n // If CTRL is not pressed, select only the clicked widget\n this.close({ widgets: [originalWidget] });\n }\n }\n async handleWidgetPinClick(clickEvent) {\n const { widget } = clickEvent;\n const originalWidget = widget.data;\n originalWidget.pinned = !originalWidget.pinned;\n // Get the current list of pinned widgets from settings\n let pinnedWidgets = (await this.settingService.get(this.pinnedSettingKey)) || [];\n // Update the list of pinned widgets based on the pinned status\n if (originalWidget.pinned) {\n if (!pinnedWidgets.includes(originalWidget.id)) {\n pinnedWidgets.push(originalWidget.id);\n }\n }\n else {\n pinnedWidgets = pinnedWidgets.filter((name) => name !== originalWidget.id);\n }\n // Save the updated list of pinned widgets\n await this.settingService.scope(AXPPlatformScope.User).set(this.pinnedSettingKey, pinnedWidgets);\n // Trigger a re-render of the widgets\n this.displayWidgets.set([...this.displayWidgets()]);\n }\n // Check if a widget is selected\n isWidgetSelected(widget) {\n return this.selectedWidgets().includes(widget);\n }\n // Check if a generic widget item is selected\n isWidgetItemSelected(widgetItem) {\n const originalWidget = widgetItem.data;\n return this.isWidgetSelected(originalWidget);\n }\n handleConfirmSelection() {\n this.close({ widgets: this.selectedWidgets() });\n }\n handleNodeClick(event) {\n const item = event.data;\n this.selectedCategory.set(item);\n }\n async handleCollapseChanged(event) {\n const item = event.data;\n const currentExpanded = this.expandedCategoryIds();\n if (item.expanded) {\n // Category was expanded - add to expanded list\n if (!currentExpanded.includes(item.id)) {\n const newExpanded = [...currentExpanded, item.id];\n this.expandedCategoryIds.set(newExpanded);\n await this.settingService.scope(AXPPlatformScope.User).set(this.expandedCategoriesKey, newExpanded);\n }\n }\n else {\n // Category was collapsed - remove from expanded list\n const newExpanded = currentExpanded.filter(id => id !== item.id);\n this.expandedCategoryIds.set(newExpanded);\n await this.settingService.scope(AXPPlatformScope.User).set(this.expandedCategoriesKey, newExpanded);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPTemplateWidgetPickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXPTemplateWidgetPickerComponent, isStandalone: true, selector: \"ng-component\", inputs: { searchTerm: { classPropertyName: \"searchTerm\", publicName: \"searchTerm\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchTerm: \"searchTermChange\" }, usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-flex ax-flex-col lg:ax-h-[60vh]\\\">\\n <div class=\\\"ax-p-2 ax-surface-lowest ax-border-b ax-flex-none\\\">\\n <ax-search-box\\n look=\\\"fill\\\"\\n placeholder=\\\"e.g. Button, Text, ...\\\"\\n class=\\\"ax-sm\\\"\\n [(ngModel)]=\\\"searchTerm\\\"\\n [delayTime]=\\\"300\\\"\\n >\\n <ax-clear-button></ax-clear-button>\\n </ax-search-box>\\n </div>\\n <div class=\\\"ax-flex ax-flex-grow ax-h-full\\\">\\n <!-- Category Tree - Hidden in search mode -->\\n @if (!isSearchMode()) {\\n <div\\n class=\\\"ax-flex ax-h-full ax-p-2 ax-overflow-auto ax-w-1/3 ax-justify-start ax-items-start ax-surface-lowest ax-border-e\\\"\\n >\\n <ax-tree-view\\n [showCheckbox]=\\\"false\\\"\\n [itemTemplate]=\\\"categoryTemplate\\\"\\n [textField]=\\\"'title'\\\"\\n [hasChildField]=\\\"'hasChild'\\\"\\n [valueField]=\\\"'id'\\\"\\n [expandedField]=\\\"'expanded'\\\"\\n [items]=\\\"provideLazyTreeView\\\"\\n (onNodeClick)=\\\"handleNodeClick($event)\\\"\\n (onCollapsedChanged)=\\\"handleCollapseChanged($event)\\\"\\n class=\\\"ax-w-full\\\"\\n >\\n </ax-tree-view>\\n\\n <ng-template #categoryTemplate let-item>\\n <ax-icon class=\\\"fa-solid fa-folder ax-text-yellow-500 fa-fw\\\"></ax-icon>\\n {{ item.title | translate | async }}\\n </ng-template>\\n </div>\\n }\\n\\n <!-- Widget Grid - Full width in search mode, 2/3 width otherwise -->\\n <div\\n [class]=\\\"\\n isSearchMode()\\n ? 'ax-flex ax-h-full ax-flex-col ax-w-full ax-overflow-hidden'\\n : 'ax-flex ax-h-full ax-flex-col ax-w-2/3 ax-overflow-hidden'\\n \\\"\\n >\\n @if (hasResults()) {\\n <div class=\\\"ax-flex ax-flex-col ax-p-4\\\">\\n <div class=\\\"ax-grid ax-grid-cols-2 ax-gap-2\\\">\\n @for (widgetItem of pinnedWidgetItems(); track widgetItem.title) {\\n <axp-widget-item\\n [widget]=\\\"widgetItem\\\"\\n [isSelected]=\\\"isWidgetItemSelected(widgetItem)\\\"\\n (onWidgetClick)=\\\"handleWidgetClick($event)\\\"\\n (onPinClick)=\\\"handleWidgetPinClick($event)\\\"\\n >\\n </axp-widget-item>\\n }\\n </div>\\n @if (pinnedWidgetItems().length) {\\n <hr class=\\\"ax-my-4 ax-border-dashed\\\" />\\n }\\n <div class=\\\"ax-grid ax-grid-cols-2 ax-gap-2\\\">\\n @for (widgetItem of regularWidgetItems(); track widgetItem.title) {\\n <axp-widget-item\\n [widget]=\\\"widgetItem\\\"\\n [isSelected]=\\\"isWidgetItemSelected(widgetItem)\\\"\\n (onWidgetClick)=\\\"handleWidgetClick($event)\\\"\\n (onPinClick)=\\\"handleWidgetPinClick($event)\\\"\\n >\\n </axp-widget-item>\\n }\\n </div>\\n </div>\\n } @else {\\n <!-- Empty State -->\\n <axp-state-message\\n icon=\\\"fa-light fa-search\\\"\\n [title]=\\\"\\n isSearchMode()\\n ? '@form-template-management:designer.components.template-picker.empty-states.no-search-results.title'\\n : '@form-template-management:designer.components.template-picker.empty-states.no-category-results.title'\\n \\\"\\n [description]=\\\"\\n isSearchMode()\\n ? '@form-template-management:designer.components.template-picker.empty-states.no-search-results.description'\\n : '@form-template-management:designer.components.template-picker.empty-states.no-category-results.description'\\n \\\"\\n >\\n @if (isSearchMode()) {\\n <ax-button\\n look=\\\"blank\\\"\\n [text]=\\\"'@form-template-management:designer.components.template-picker.clear-search' | translate | async\\\"\\n class=\\\"ax-mt-4\\\"\\n (onClick)=\\\"searchTerm.set('')\\\"\\n ></ax-button>\\n }\\n </axp-state-message>\\n }\\n </div>\\n </div>\\n</div>\\n\\n@if (selectedWidgets().length) {\\n <ax-footer>\\n <ax-suffix>\\n <ax-button\\n look=\\\"solid\\\"\\n color=\\\"primary\\\"\\n text=\\\"{{ selectedWidgets().length }} Selected\\\"\\n (onClick)=\\\"handleConfirmSelection()\\\"\\n ></ax-button>\\n </ax-suffix>\\n </ax-footer>\\n}\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: \n //\n AXCommonModule }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i2.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i3.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i3.AXDecoratorClearButtonComponent, selector: \"ax-clear-button\", inputs: [\"icon\"] }, { kind: \"component\", type: i3.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXSearchBoxModule }, { kind: \"component\", type: i4.AXSearchBoxComponent, selector: \"ax-search-box\", inputs: [\"disabled\", \"readonly\", \"tabIndex\", \"placeholder\", \"value\", \"state\", \"name\", \"id\", \"look\", \"class\", \"delayTime\", \"type\", \"autoSearch\"], outputs: [\"valueChange\", \"stateChange\", \"onValueChanged\", \"onBlur\", \"onFocus\", \"readonlyChange\", \"disabledChange\", \"onKeyDown\", \"onKeyUp\", \"onKeyPress\"] }, { kind: \"ngmodule\", type: AXTreeViewModule }, { kind: \"component\", type: i5.AXTreeViewComponent, selector: \"ax-tree-view\", inputs: [\"items\", \"showCheckbox\", \"hasCheckboxField\", \"selectionMode\", \"selectionBehavior\", \"selectionScope\", \"focusNodeEnabled\", \"valueField\", \"textField\", \"visibleField\", \"disableField\", \"hasChildField\", \"selectedField\", \"expandedField\", \"tooltipField\", \"childrenField\", \"activeField\", \"indeterminateField\", \"parentField\", \"iconField\", \"toggleIcons\", \"look\", \"showEmptyNodeMassage\", \"itemTemplate\", \"emptyTemplate\", \"expandOn\"], outputs: [\"onSelectionChanged\", \"onItemSelectedChanged\", \"onNodeClick\", \"onCollapsedChanged\", \"onNodedbClick\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"component\", type: AXPWidgetItemComponent, selector: \"axp-widget-item\", inputs: [\"widget\", \"isSelected\", \"showPinButton\", \"customClasses\"], outputs: [\"onWidgetClick\", \"onPinClick\"] }, { kind: \"component\", type: AXPStateMessageComponent, selector: \"axp-state-message\", inputs: [\"mode\", \"icon\", \"title\", \"description\", \"variant\"] }, { kind: \"pipe\", type: i6.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i7.AXTranslatorPipe, name: \"translate\" }], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPTemplateWidgetPickerComponent, decorators: [{\n type: Component,\n args: [{ imports: [\n CommonModule,\n FormsModule,\n //\n AXCommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXSearchBoxModule,\n AXTreeViewModule,\n AXTranslationModule,\n AXPWidgetItemComponent,\n AXPStateMessageComponent,\n ], encapsulation: ViewEncapsulation.None, template: \"<div class=\\\"ax-flex ax-flex-col lg:ax-h-[60vh]\\\">\\n <div class=\\\"ax-p-2 ax-surface-lowest ax-border-b ax-flex-none\\\">\\n <ax-search-box\\n look=\\\"fill\\\"\\n placeholder=\\\"e.g. Button, Text, ...\\\"\\n class=\\\"ax-sm\\\"\\n [(ngModel)]=\\\"searchTerm\\\"\\n [delayTime]=\\\"300\\\"\\n >\\n <ax-clear-button></ax-clear-button>\\n </ax-search-box>\\n </div>\\n <div class=\\\"ax-flex ax-flex-grow ax-h-full\\\">\\n <!-- Category Tree - Hidden in search mode -->\\n @if (!isSearchMode()) {\\n <div\\n class=\\\"ax-flex ax-h-full ax-p-2 ax-overflow-auto ax-w-1/3 ax-justify-start ax-items-start ax-surface-lowest ax-border-e\\\"\\n >\\n <ax-tree-view\\n [showCheckbox]=\\\"false\\\"\\n [itemTemplate]=\\\"categoryTemplate\\\"\\n [textField]=\\\"'title'\\\"\\n [hasChildField]=\\\"'hasChild'\\\"\\n [valueField]=\\\"'id'\\\"\\n [expandedField]=\\\"'expanded'\\\"\\n [items]=\\\"provideLazyTreeView\\\"\\n (onNodeClick)=\\\"handleNodeClick($event)\\\"\\n (onCollapsedChanged)=\\\"handleCollapseChanged($event)\\\"\\n class=\\\"ax-w-full\\\"\\n >\\n </ax-tree-view>\\n\\n <ng-template #categoryTemplate let-item>\\n <ax-icon class=\\\"fa-solid fa-folder ax-text-yellow-500 fa-fw\\\"></ax-icon>\\n {{ item.title | translate | async }}\\n </ng-template>\\n </div>\\n }\\n\\n <!-- Widget Grid - Full width in search mode, 2/3 width otherwise -->\\n <div\\n [class]=\\\"\\n isSearchMode()\\n ? 'ax-flex ax-h-full ax-flex-col ax-w-full ax-overflow-hidden'\\n : 'ax-flex ax-h-full ax-flex-col ax-w-2/3 ax-overflow-hidden'\\n \\\"\\n >\\n @if (hasResults()) {\\n <div class=\\\"ax-flex ax-flex-col ax-p-4\\\">\\n <div class=\\\"ax-grid ax-grid-cols-2 ax-gap-2\\\">\\n @for (widgetItem of pinnedWidgetItems(); track widgetItem.title) {\\n <axp-widget-item\\n [widget]=\\\"widgetItem\\\"\\n [isSelected]=\\\"isWidgetItemSelected(widgetItem)\\\"\\n (onWidgetClick)=\\\"handleWidgetClick($event)\\\"\\n (onPinClick)=\\\"handleWidgetPinClick($event)\\\"\\n >\\n </axp-widget-item>\\n }\\n </div>\\n @if (pinnedWidgetItems().length) {\\n <hr class=\\\"ax-my-4 ax-border-dashed\\\" />\\n }\\n <div class=\\\"ax-grid ax-grid-cols-2 ax-gap-2\\\">\\n @for (widgetItem of regularWidgetItems(); track widgetItem.title) {\\n <axp-widget-item\\n [widget]=\\\"widgetItem\\\"\\n [isSelected]=\\\"isWidgetItemSelected(widgetItem)\\\"\\n (onWidgetClick)=\\\"handleWidgetClick($event)\\\"\\n (onPinClick)=\\\"handleWidgetPinClick($event)\\\"\\n >\\n </axp-widget-item>\\n }\\n </div>\\n </div>\\n } @else {\\n <!-- Empty State -->\\n <axp-state-message\\n icon=\\\"fa-light fa-search\\\"\\n [title]=\\\"\\n isSearchMode()\\n ? '@form-template-management:designer.components.template-picker.empty-states.no-search-results.title'\\n : '@form-template-management:designer.components.template-picker.empty-states.no-category-results.title'\\n \\\"\\n [description]=\\\"\\n isSearchMode()\\n ? '@form-template-management:designer.components.template-picker.empty-states.no-search-results.description'\\n : '@form-template-management:designer.components.template-picker.empty-states.no-category-results.description'\\n \\\"\\n >\\n @if (isSearchMode()) {\\n <ax-button\\n look=\\\"blank\\\"\\n [text]=\\\"'@form-template-management:designer.components.template-picker.clear-search' | translate | async\\\"\\n class=\\\"ax-mt-4\\\"\\n (onClick)=\\\"searchTerm.set('')\\\"\\n ></ax-button>\\n }\\n </axp-state-message>\\n }\\n </div>\\n </div>\\n</div>\\n\\n@if (selectedWidgets().length) {\\n <ax-footer>\\n <ax-suffix>\\n <ax-button\\n look=\\\"solid\\\"\\n color=\\\"primary\\\"\\n text=\\\"{{ selectedWidgets().length }} Selected\\\"\\n (onClick)=\\\"handleConfirmSelection()\\\"\\n ></ax-button>\\n </ax-suffix>\\n </ax-footer>\\n}\\n\" }]\n }], propDecorators: { searchTerm: [{ type: i0.Input, args: [{ isSignal: true, alias: \"searchTerm\", required: false }] }, { type: i0.Output, args: [\"searchTermChange\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9mb3JtLXRlbXBsYXRlLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9kZXNpZ25lci9jb21wb25lbnRzL3RlbXBsYXRlLXBpY2tlci90ZW1wbGF0ZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2Zvcm0tdGVtcGxhdGUtbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL2Rlc2lnbmVyL2NvbXBvbmVudHMvdGVtcGxhdGUtcGlja2VyL3RlbXBsYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBUyxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUE4QyxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xKLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7O0FBYy9DOztHQUVHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxNQUFnQztJQUMzRCxPQUFPO1FBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1FBQ25CLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztRQUMvQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxrQkFBa0I7UUFDdkMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3ZCLElBQUksRUFBRSxNQUFNO0tBQ2IsQ0FBQztBQUNKLENBQUM7QUFtQkQsTUFBTSxPQUFPLGdDQUFpQyxTQUFRLG1CQUFtQjtJQWpCekU7O1FBa0JVLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDM0MsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QiwwQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksd0JBQXdCLENBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQztRQUV4SSwwQkFBcUIsR0FBRywyQ0FBMkMsQ0FBQztRQUVyRiw4QkFBOEI7UUFDdEIsd0JBQW1CLEdBQUcsTUFBTSxDQUFXLEVBQUUsK0RBQUMsQ0FBQztRQXFCbEMscUJBQWdCLEdBQUcsK0JBQStCLENBQUM7UUFFMUQsZUFBVSxHQUFHLEtBQUssQ0FBQyxFQUFFLHNEQUFDLENBQUM7UUFFakMsK0NBQStDO1FBQy9DLFlBQU8sR0FBZ0MsRUFBRSxDQUFDO1FBRTFDLFVBQVU7UUFDRixtQkFBYyxHQUFHLE1BQU0sQ0FBNkIsRUFBRSwwREFBQyxDQUFDO1FBRWhFLG1DQUFtQztRQUN6QixvQkFBZSxHQUFHLE1BQU0sQ0FBNkIsRUFBRSwyREFBQyxDQUFDO1FBRW5FLGdEQUFnRDtRQUN4QyxnQkFBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQy9DLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDakQsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFFekUsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE1BQWdDLEVBQUUsRUFBRTtnQkFDNUQsSUFBSSxDQUFDLGtCQUFrQixJQUFJLGtCQUFrQixJQUFJLEtBQUs7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQ3BFLE9BQU8sa0JBQWtCLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDbEQsQ0FBQyxDQUFDO1lBRUYsT0FBTyxPQUFPLENBQ1osSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNqQyxNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxhQUFhLEdBQ2pCLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNyRyxPQUFPLGVBQWUsSUFBSSxhQUFhLENBQUM7WUFDMUMsQ0FBQyxDQUFDLEVBQ0YsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQ25CLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUNoQixDQUFDO1FBQ0osQ0FBQyx1REFBQyxDQUFDO1FBRUgsMkJBQTJCO1FBQ2pCLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxzREFBQyxDQUFDO1FBQ3hFLGdCQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyx1REFBQyxDQUFDO1FBRXBGLHVDQUF1QztRQUM3QixzQkFBaUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyw2REFBQyxDQUFDO1FBQy9FLHVCQUFrQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLDhEQUFDLENBQUM7UUFFM0YscURBQXFEO1FBQzNDLGlCQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyx3REFBQyxDQUFDO1FBRTdFLHNEQUFzRDtRQUM1QyxlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxzREFBQyxDQUFDO1FBaUVyRSx1QkFBdUI7UUFHYix3QkFBbUIsR0FBRyxLQUFLLEVBQUUsY0FBZ0MsRUFBc0MsRUFBRTtZQUM3RyxJQUFJLGNBQWMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDNUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQztvQkFDaEMsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2lCQUN2RCxDQUFDLENBQUMsQ0FBQztnQkFDSixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7aUJBQ0ksSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsY0FBd0IsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM5SCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7b0JBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUM7b0JBQ2hDLFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztpQkFDdkQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0osT0FBTyxVQUFVLENBQUM7WUFDcEIsQ0FBQztpQkFDSSxDQUFDO2dCQUNKLE9BQU87b0JBQ0w7d0JBQ0UsUUFBUSxFQUFFLElBQUk7d0JBQ2QsRUFBRSxFQUFFLEtBQUs7d0JBQ1QsS0FBSyxFQUFFLFdBQVc7d0JBQ2xCLFFBQVEsRUFBRSxJQUFJO3FCQUNZO2lCQUM3QixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQztRQUdRLHFCQUFnQixHQUFHLE1BQU0sQ0FBaUMsSUFBSSw0REFBQyxDQUFDO0tBMkIzRTtJQXBNb0IsS0FBSyxDQUFDLFFBQVE7UUFDL0IsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLHlDQUF5QztRQUN6QyxNQUFNLGdCQUFnQixHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBVyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDL0MsRUFBRTtRQUNGLE1BQU0sYUFBYSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBVyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3RixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkIsR0FBRyxDQUFDO1lBQ0osTUFBTSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSwwQkFBMEI7U0FDM0MsQ0FBQyxDQUFDLENBQ0osQ0FBQztJQUdKLENBQUM7SUF1RFMsaUJBQWlCLENBQUMsVUFBbUM7UUFDN0QsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7UUFDckMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQWdDLENBQUM7UUFFL0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDaEQsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxjQUFjLENBQUMsQ0FBQztZQUU3RSxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3RCLHNDQUFzQztnQkFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNqRixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sMEJBQTBCO2dCQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNsRSxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTix5REFBeUQ7WUFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztJQUVTLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxVQUFtQztRQUN0RSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO1FBQzlCLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFnQyxDQUFDO1FBRS9ELGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBRS9DLHVEQUF1RDtRQUN2RCxJQUFJLGFBQWEsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQVcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFM0YsK0RBQStEO1FBQy9ELElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBRUQsMENBQTBDO1FBQzFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVqRyxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELGdDQUFnQztJQUN0QixnQkFBZ0IsQ0FBQyxNQUFnQztRQUN6RCxPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELDZDQUE2QztJQUNuQyxvQkFBb0IsQ0FBQyxVQUE2QjtRQUMxRCxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsSUFBZ0MsQ0FBQztRQUNuRSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRVMsc0JBQXNCO1FBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBeUNTLGVBQWUsQ0FBQyxLQUFVO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUErQixDQUFDO1FBQ25ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVTLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxLQUFVO1FBQzlDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUErQixDQUFDO1FBQ25ELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRW5ELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLCtDQUErQztZQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLGVBQWUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN0RyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixxREFBcUQ7WUFDckQsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMxQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdEcsQ0FBQztJQUNILENBQUM7K0dBM01VLGdDQUFnQzttR0FBaEMsZ0NBQWdDLCtSQzdEN0Msb3RJQW9IQSwyQ0R0RUksWUFBWSw4QkFDWixXQUFXO2dCQUNYLEVBQUU7Z0JBQ0YsY0FBYyw4QkFDZCxjQUFjLDZYQUNkLGlCQUFpQixzY0FDakIsaUJBQWlCLDBaQUNqQixnQkFBZ0IsNG9CQUNoQixtQkFBbUIsK0JBQ25CLHNCQUFzQiwwS0FDdEIsd0JBQXdCOzs0RkFLZixnQ0FBZ0M7a0JBakI1QyxTQUFTOzhCQUNDO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxFQUFFO3dCQUNGLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLHNCQUFzQjt3QkFDdEIsd0JBQXdCO3FCQUN6QixpQkFFYyxpQkFBaUIsQ0FBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhCYXNlUGFnZUNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wYWdlJztcbmltcG9ydCB7IEFYU2VhcmNoQm94TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3NlYXJjaC1ib3gnO1xuaW1wb3J0IHsgQVhQU2V0dGluZ1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBQbGF0Zm9ybVNjb3BlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIEluamVjdG9yLCBtb2RlbCwgcnVuSW5JbmplY3Rpb25Db250ZXh0LCBzaWduYWwsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzTmlsLCBvcmRlckJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEFYUFRlbXBsYXRlV2lkZ2V0TGlzdEl0ZW0gfSBmcm9tICcuL3RlbXBsYXRlLnByb3ZpZGVyJztcblxuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFRyZWVWaWV3TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3RyZWUtdmlldyc7XG5pbXBvcnQgeyBBWFBTdGF0ZU1lc3NhZ2VDb21wb25lbnQsIEFYUFdpZGdldEl0ZW1Db21wb25lbnQsIEFYUFdpZGdldEl0ZW1EYXRhLCBBWFBXaWRnZXRJdGVtQ2xpY2tFdmVudCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQVhNRW50aXR5Q3J1ZFNlcnZpY2VJbXBsIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9jb25zdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRGlzcGxheVdpZGdldFByb3ZpZGVkIGV4dGVuZHMgQVhQVGVtcGxhdGVXaWRnZXRMaXN0SXRlbSB7XG4gIHBpbm5lZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBDYXRlZ29yeURpc3BsYXlNb2RlbCB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHBhcmVudElkPzogc3RyaW5nO1xuICBoYXNDaGlsZDogYm9vbGVhbjtcbiAgZXhwYW5kZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1hcHMgQVhQRGlzcGxheVdpZGdldFByb3ZpZGVkIHRvIGdlbmVyaWMgQVhQV2lkZ2V0SXRlbURhdGFcbiAqL1xuZnVuY3Rpb24gbWFwVG9XaWRnZXRJdGVtRGF0YSh3aWRnZXQ6IEFYUERpc3BsYXlXaWRnZXRQcm92aWRlZCk6IEFYUFdpZGdldEl0ZW1EYXRhIHtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogd2lkZ2V0LnRpdGxlLFxuICAgIGRlc2NyaXB0aW9uOiB3aWRnZXQuZGVzY3JpcHRpb24sXG4gICAgaWNvbjogd2lkZ2V0Lmljb24gPz8gJ2ZhLXNvbGlkIGZhLWN1YmUnLFxuICAgIGlzUGlubmVkOiB3aWRnZXQucGlubmVkLFxuICAgIGRhdGE6IHdpZGdldFxuICB9O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICAvL1xuICAgIEFYQ29tbW9uTW9kdWxlLFxuICAgIEFYQnV0dG9uTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYU2VhcmNoQm94TW9kdWxlLFxuICAgIEFYVHJlZVZpZXdNb2R1bGUsXG4gICAgQVhUcmFuc2xhdGlvbk1vZHVsZSxcbiAgICBBWFBXaWRnZXRJdGVtQ29tcG9uZW50LFxuICAgIEFYUFN0YXRlTWVzc2FnZUNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RlbXBsYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEFYUFRlbXBsYXRlV2lkZ2V0UGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQVhCYXNlUGFnZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgc2V0dGluZ1NlcnZpY2UgPSBpbmplY3QoQVhQU2V0dGluZ1NlcnZpY2UpO1xuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSBjYXRlZ29yeUVudGl0eVNlcnZpY2UgPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT4gbmV3IEFYTUVudGl0eUNydWRTZXJ2aWNlSW1wbDxhbnksIGFueT4oYCR7Um9vdENvbmZpZy5tb2R1bGUubmFtZX0uQ2F0ZWdvcnlgKSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBleHBhbmRlZENhdGVnb3JpZXNLZXkgPSAnZm9ybXM6dGVtcGxhdGVzOnBpY2tlcjpleHBhbmRlZENhdGVnb3JpZXMnO1xuXG4gIC8vIFRyYWNrIGV4cGFuZGVkIGNhdGVnb3J5IElEc1xuICBwcml2YXRlIGV4cGFuZGVkQ2F0ZWdvcnlJZHMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAvLyBMb2FkIGV4cGFuZGVkIGNhdGVnb3JpZXMgZnJvbSBzZXR0aW5nc1xuICAgIGNvbnN0IHNhdmVkRXhwYW5kZWRJZHMgPSAoYXdhaXQgdGhpcy5zZXR0aW5nU2VydmljZS5nZXQ8c3RyaW5nW10+KHRoaXMuZXhwYW5kZWRDYXRlZ29yaWVzS2V5KSkgfHwgW107XG4gICAgdGhpcy5leHBhbmRlZENhdGVnb3J5SWRzLnNldChzYXZlZEV4cGFuZGVkSWRzKTtcbiAgICAvL1xuICAgIGNvbnN0IHBpbm5lZFdpZGdldHMgPSAoYXdhaXQgdGhpcy5zZXR0aW5nU2VydmljZS5nZXQ8c3RyaW5nW10+KHRoaXMucGlubmVkU2V0dGluZ0tleSkpIHx8IFtdO1xuICAgIHRoaXMuZGlzcGxheVdpZGdldHMuc2V0KFxuICAgICAgdGhpcy53aWRnZXRzLm1hcCgoYykgPT4gKHtcbiAgICAgICAgLi4uYyxcbiAgICAgICAgcGlubmVkOiBwaW5uZWRXaWRnZXRzLmluY2x1ZGVzKGMuaWQpLFxuICAgICAgICBpY29uOiBjLmljb24gPz8gJ2ZhLXNvbGlkIGZhLWZpbGUtaW52b2ljZScsXG4gICAgICB9KSksXG4gICAgKTtcblxuXG4gIH1cblxuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGlubmVkU2V0dGluZ0tleSA9ICdmb3Jtczp0ZW1wbGF0ZXM6cGlja2VyOnBpbm5lZCc7XG5cbiAgcHJvdGVjdGVkIHNlYXJjaFRlcm0gPSBtb2RlbCgnJyk7XG5cbiAgLy8gRGF0YSBwcm9wZXJ0aWVzIC0gcG9wdWxhdGVkIGJ5IHBvcHVwIHNlcnZpY2VcbiAgd2lkZ2V0czogQVhQVGVtcGxhdGVXaWRnZXRMaXN0SXRlbVtdID0gW107XG5cbiAgLy8gU2lnbmFsc1xuICBwcml2YXRlIGRpc3BsYXlXaWRnZXRzID0gc2lnbmFsPEFYUERpc3BsYXlXaWRnZXRQcm92aWRlZFtdPihbXSk7XG5cbiAgLy8gU2lnbmFsIHRvIHRyYWNrIHNlbGVjdGVkIHdpZGdldHNcbiAgcHJvdGVjdGVkIHNlbGVjdGVkV2lkZ2V0cyA9IHNpZ25hbDxBWFBEaXNwbGF5V2lkZ2V0UHJvdmlkZWRbXT4oW10pO1xuXG4gIC8vIENvbXB1dGVkIGZvciBmaWx0ZXJlZCBhbmQgb3JkZXJlZCB3aWRnZXQgbGlzdFxuICBwcml2YXRlIG9yZGVyZWRMaXN0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuc2VhcmNoVGVybSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRDYXRlZ29yeSA9IHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSgpO1xuICAgIGNvbnN0IHNlbGVjdGVkQ2F0ZWdvcnlJZCA9IHNlbGVjdGVkQ2F0ZWdvcnkgPyBzZWxlY3RlZENhdGVnb3J5LmlkIDogbnVsbDtcblxuICAgIGNvbnN0IGZpbHRlckJ5Q2F0ZWdvcnkgPSAod2lkZ2V0OiBBWFBEaXNwbGF5V2lkZ2V0UHJvdmlkZWQpID0+IHtcbiAgICAgIGlmICghc2VsZWN0ZWRDYXRlZ29yeUlkIHx8IHNlbGVjdGVkQ2F0ZWdvcnlJZCA9PSAnYWxsJykgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRDYXRlZ29yeUlkID09PSB3aWRnZXQuZ3JvdXAubmFtZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG9yZGVyQnkoXG4gICAgICB0aGlzLmRpc3BsYXlXaWRnZXRzKCkuZmlsdGVyKCh3KSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXNDYXRlZ29yeSA9IGZpbHRlckJ5Q2F0ZWdvcnkodyk7XG4gICAgICAgIGNvbnN0IG1hdGNoZXNTZWFyY2ggPVxuICAgICAgICAgICFzZWFyY2ggfHwgdy50aXRsZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkgfHwgdy5kZXNjcmlwdGlvbj8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpO1xuICAgICAgICByZXR1cm4gbWF0Y2hlc0NhdGVnb3J5ICYmIG1hdGNoZXNTZWFyY2g7XG4gICAgICB9KSxcbiAgICAgIFsncGlubmVkJywgJ3RpdGxlJ10sXG4gICAgICBbJ2Rlc2MnLCAnYXNjJ10sXG4gICAgKTtcbiAgfSk7XG5cbiAgLy8gUGlubmVkIGFuZCByZWd1bGFyIGxpc3RzXG4gIHByb3RlY3RlZCBwaW5uZWRMaXN0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcmRlcmVkTGlzdCgpLmZpbHRlcigoYykgPT4gYy5waW5uZWQpKTtcbiAgcHJvdGVjdGVkIHJlZ3VsYXJMaXN0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcmRlcmVkTGlzdCgpLmZpbHRlcigoYykgPT4gIWMucGlubmVkKSk7XG5cbiAgLy8gTWFwcGVkIGRhdGEgZm9yIGdlbmVyaWMgd2lkZ2V0IGl0ZW1zXG4gIHByb3RlY3RlZCBwaW5uZWRXaWRnZXRJdGVtcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGlubmVkTGlzdCgpLm1hcChtYXBUb1dpZGdldEl0ZW1EYXRhKSk7XG4gIHByb3RlY3RlZCByZWd1bGFyV2lkZ2V0SXRlbXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZ3VsYXJMaXN0KCkubWFwKG1hcFRvV2lkZ2V0SXRlbURhdGEpKTtcblxuICAvLyBDb21wdXRlZCBwcm9wZXJ0eSB0byBjaGVjayBpZiB3ZSdyZSBpbiBzZWFyY2ggbW9kZVxuICBwcm90ZWN0ZWQgaXNTZWFyY2hNb2RlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWFyY2hUZXJtKCkudHJpbSgpLmxlbmd0aCA+IDApO1xuXG4gIC8vIENvbXB1dGVkIHByb3BlcnR5IHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgcmVzdWx0c1xuICBwcm90ZWN0ZWQgaGFzUmVzdWx0cyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3JkZXJlZExpc3QoKS5sZW5ndGggPiAwKTtcblxuXG5cbiAgcHJvdGVjdGVkIGhhbmRsZVdpZGdldENsaWNrKGNsaWNrRXZlbnQ6IEFYUFdpZGdldEl0ZW1DbGlja0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgeyBldmVudCwgd2lkZ2V0IH0gPSBjbGlja0V2ZW50O1xuICAgIGNvbnN0IG9yaWdpbmFsV2lkZ2V0ID0gd2lkZ2V0LmRhdGEgYXMgQVhQRGlzcGxheVdpZGdldFByb3ZpZGVkO1xuXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cygpO1xuICAgICAgY29uc3QgaXNBbHJlYWR5U2VsZWN0ZWQgPSBjdXJyZW50U2VsZWN0aW9uLnNvbWUoKHcpID0+IHcgPT09IG9yaWdpbmFsV2lkZ2V0KTtcblxuICAgICAgaWYgKGlzQWxyZWFkeVNlbGVjdGVkKSB7XG4gICAgICAgIC8vIERlc2VsZWN0IHdpZGdldCBpZiBhbHJlYWR5IHNlbGVjdGVkXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzLnNldChjdXJyZW50U2VsZWN0aW9uLmZpbHRlcigodykgPT4gdyAhPT0gb3JpZ2luYWxXaWRnZXQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFkZCB3aWRnZXQgdG8gc2VsZWN0aW9uXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzLnNldChbLi4uY3VycmVudFNlbGVjdGlvbiwgb3JpZ2luYWxXaWRnZXRdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgQ1RSTCBpcyBub3QgcHJlc3NlZCwgc2VsZWN0IG9ubHkgdGhlIGNsaWNrZWQgd2lkZ2V0XG4gICAgICB0aGlzLmNsb3NlKHsgd2lkZ2V0czogW29yaWdpbmFsV2lkZ2V0XSB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlV2lkZ2V0UGluQ2xpY2soY2xpY2tFdmVudDogQVhQV2lkZ2V0SXRlbUNsaWNrRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHdpZGdldCB9ID0gY2xpY2tFdmVudDtcbiAgICBjb25zdCBvcmlnaW5hbFdpZGdldCA9IHdpZGdldC5kYXRhIGFzIEFYUERpc3BsYXlXaWRnZXRQcm92aWRlZDtcblxuICAgIG9yaWdpbmFsV2lkZ2V0LnBpbm5lZCA9ICFvcmlnaW5hbFdpZGdldC5waW5uZWQ7XG5cbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgbGlzdCBvZiBwaW5uZWQgd2lkZ2V0cyBmcm9tIHNldHRpbmdzXG4gICAgbGV0IHBpbm5lZFdpZGdldHMgPSAoYXdhaXQgdGhpcy5zZXR0aW5nU2VydmljZS5nZXQ8c3RyaW5nW10+KHRoaXMucGlubmVkU2V0dGluZ0tleSkpIHx8IFtdO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBsaXN0IG9mIHBpbm5lZCB3aWRnZXRzIGJhc2VkIG9uIHRoZSBwaW5uZWQgc3RhdHVzXG4gICAgaWYgKG9yaWdpbmFsV2lkZ2V0LnBpbm5lZCkge1xuICAgICAgaWYgKCFwaW5uZWRXaWRnZXRzLmluY2x1ZGVzKG9yaWdpbmFsV2lkZ2V0LmlkKSkge1xuICAgICAgICBwaW5uZWRXaWRnZXRzLnB1c2gob3JpZ2luYWxXaWRnZXQuaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwaW5uZWRXaWRnZXRzID0gcGlubmVkV2lkZ2V0cy5maWx0ZXIoKG5hbWUpID0+IG5hbWUgIT09IG9yaWdpbmFsV2lkZ2V0LmlkKTtcbiAgICB9XG5cbiAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIGxpc3Qgb2YgcGlubmVkIHdpZGdldHNcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdTZXJ2aWNlLnNjb3BlKEFYUFBsYXRmb3JtU2NvcGUuVXNlcikuc2V0KHRoaXMucGlubmVkU2V0dGluZ0tleSwgcGlubmVkV2lkZ2V0cyk7XG5cbiAgICAvLyBUcmlnZ2VyIGEgcmUtcmVuZGVyIG9mIHRoZSB3aWRnZXRzXG4gICAgdGhpcy5kaXNwbGF5V2lkZ2V0cy5zZXQoWy4uLnRoaXMuZGlzcGxheVdpZGdldHMoKV0pO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgYSB3aWRnZXQgaXMgc2VsZWN0ZWRcbiAgcHJvdGVjdGVkIGlzV2lkZ2V0U2VsZWN0ZWQod2lkZ2V0OiBBWFBEaXNwbGF5V2lkZ2V0UHJvdmlkZWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFdpZGdldHMoKS5pbmNsdWRlcyh3aWRnZXQpO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgYSBnZW5lcmljIHdpZGdldCBpdGVtIGlzIHNlbGVjdGVkXG4gIHByb3RlY3RlZCBpc1dpZGdldEl0ZW1TZWxlY3RlZCh3aWRnZXRJdGVtOiBBWFBXaWRnZXRJdGVtRGF0YSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9yaWdpbmFsV2lkZ2V0ID0gd2lkZ2V0SXRlbS5kYXRhIGFzIEFYUERpc3BsYXlXaWRnZXRQcm92aWRlZDtcbiAgICByZXR1cm4gdGhpcy5pc1dpZGdldFNlbGVjdGVkKG9yaWdpbmFsV2lkZ2V0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVDb25maXJtU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2UoeyB3aWRnZXRzOiB0aGlzLnNlbGVjdGVkV2lkZ2V0cygpIH0pO1xuICB9XG5cbiAgLy8jcmVnaW9uIENhdGVnb3J5IFRyZWVcblxuXG4gIHByb3RlY3RlZCBwcm92aWRlTGF6eVRyZWVWaWV3ID0gYXN5bmMgKHNlbGVjdGVkSXRlbUlkPzogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxBWFBDYXRlZ29yeURpc3BsYXlNb2RlbFtdPiA9PiB7XG4gICAgaWYgKHNlbGVjdGVkSXRlbUlkID09ICdhbGwnKSB7XG4gICAgICBjb25zdCBjYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5jYXRlZ29yeUVudGl0eVNlcnZpY2UuZ2V0Um9vdHMoe30pO1xuICAgICAgY29uc3QgaXRlbXMgPSBjYXRlZ29yaWVzLml0ZW1zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLFxuICAgICAgICBoYXNDaGlsZDogaXRlbS5jaGlsZHJlbkNvdW50ID4gMCxcbiAgICAgICAgZXhwYW5kZWQ6IHRoaXMuZXhwYW5kZWRDYXRlZ29yeUlkcygpLmluY2x1ZGVzKGl0ZW0uaWQpLFxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICBlbHNlIGlmIChzZWxlY3RlZEl0ZW1JZCkge1xuICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IChhd2FpdCB0aGlzLmNhdGVnb3J5RW50aXR5U2VydmljZS5nZXRDaGlsZHJlbih7IHBhcmVudElkOiBzZWxlY3RlZEl0ZW1JZCBhcyBzdHJpbmcgfSkpPy5pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcbiAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXG4gICAgICAgIGhhc0NoaWxkOiBpdGVtLmNoaWxkcmVuQ291bnQgPiAwLFxuICAgICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZENhdGVnb3J5SWRzKCkuaW5jbHVkZXMoaXRlbS5pZCksXG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gY2F0ZWdvcmllcztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgaGFzQ2hpbGQ6IHRydWUsXG4gICAgICAgICAgaWQ6IFwiYWxsXCIsXG4gICAgICAgICAgdGl0bGU6IFwiQWxsIEl0ZW1zXCIsXG4gICAgICAgICAgZXhwYW5kZWQ6IHRydWUsXG4gICAgICAgIH0gYXMgQVhQQ2F0ZWdvcnlEaXNwbGF5TW9kZWxcbiAgICAgIF07XG4gICAgfVxuICB9O1xuXG5cbiAgcHJvdGVjdGVkIHNlbGVjdGVkQ2F0ZWdvcnkgPSBzaWduYWw8QVhQQ2F0ZWdvcnlEaXNwbGF5TW9kZWwgfCBudWxsPihudWxsKTtcblxuICBwcm90ZWN0ZWQgaGFuZGxlTm9kZUNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpdGVtID0gZXZlbnQuZGF0YSBhcyBBWFBDYXRlZ29yeURpc3BsYXlNb2RlbDtcbiAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkuc2V0KGl0ZW0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZUNvbGxhcHNlQ2hhbmdlZChldmVudDogYW55KSB7XG4gICAgY29uc3QgaXRlbSA9IGV2ZW50LmRhdGEgYXMgQVhQQ2F0ZWdvcnlEaXNwbGF5TW9kZWw7XG4gICAgY29uc3QgY3VycmVudEV4cGFuZGVkID0gdGhpcy5leHBhbmRlZENhdGVnb3J5SWRzKCk7XG5cbiAgICBpZiAoaXRlbS5leHBhbmRlZCkge1xuICAgICAgLy8gQ2F0ZWdvcnkgd2FzIGV4cGFuZGVkIC0gYWRkIHRvIGV4cGFuZGVkIGxpc3RcbiAgICAgIGlmICghY3VycmVudEV4cGFuZGVkLmluY2x1ZGVzKGl0ZW0uaWQpKSB7XG4gICAgICAgIGNvbnN0IG5ld0V4cGFuZGVkID0gWy4uLmN1cnJlbnRFeHBhbmRlZCwgaXRlbS5pZF07XG4gICAgICAgIHRoaXMuZXhwYW5kZWRDYXRlZ29yeUlkcy5zZXQobmV3RXhwYW5kZWQpO1xuICAgICAgICBhd2FpdCB0aGlzLnNldHRpbmdTZXJ2aWNlLnNjb3BlKEFYUFBsYXRmb3JtU2NvcGUuVXNlcikuc2V0KHRoaXMuZXhwYW5kZWRDYXRlZ29yaWVzS2V5LCBuZXdFeHBhbmRlZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENhdGVnb3J5IHdhcyBjb2xsYXBzZWQgLSByZW1vdmUgZnJvbSBleHBhbmRlZCBsaXN0XG4gICAgICBjb25zdCBuZXdFeHBhbmRlZCA9IGN1cnJlbnRFeHBhbmRlZC5maWx0ZXIoaWQgPT4gaWQgIT09IGl0ZW0uaWQpO1xuICAgICAgdGhpcy5leHBhbmRlZENhdGVnb3J5SWRzLnNldChuZXdFeHBhbmRlZCk7XG4gICAgICBhd2FpdCB0aGlzLnNldHRpbmdTZXJ2aWNlLnNjb3BlKEFYUFBsYXRmb3JtU2NvcGUuVXNlcikuc2V0KHRoaXMuZXhwYW5kZWRDYXRlZ29yaWVzS2V5LCBuZXdFeHBhbmRlZCk7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kIHJlZ2lvblxufVxuIiwiPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgbGc6YXgtaC1bNjB2aF1cIj5cbiAgPGRpdiBjbGFzcz1cImF4LXAtMiBheC1zdXJmYWNlLWxvd2VzdCBheC1ib3JkZXItYiBheC1mbGV4LW5vbmVcIj5cbiAgICA8YXgtc2VhcmNoLWJveFxuICAgICAgbG9vaz1cImZpbGxcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIEJ1dHRvbiwgVGV4dCwgLi4uXCJcbiAgICAgIGNsYXNzPVwiYXgtc21cIlxuICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCJcbiAgICAgIFtkZWxheVRpbWVdPVwiMzAwXCJcbiAgICA+XG4gICAgICA8YXgtY2xlYXItYnV0dG9uPjwvYXgtY2xlYXItYnV0dG9uPlxuICAgIDwvYXgtc2VhcmNoLWJveD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtZ3JvdyBheC1oLWZ1bGxcIj5cbiAgICA8IS0tIENhdGVnb3J5IFRyZWUgLSBIaWRkZW4gaW4gc2VhcmNoIG1vZGUgLS0+XG4gICAgQGlmICghaXNTZWFyY2hNb2RlKCkpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWgtZnVsbCBheC1wLTIgYXgtb3ZlcmZsb3ctYXV0byBheC13LTEvMyBheC1qdXN0aWZ5LXN0YXJ0IGF4LWl0ZW1zLXN0YXJ0IGF4LXN1cmZhY2UtbG93ZXN0IGF4LWJvcmRlci1lXCJcbiAgICAgID5cbiAgICAgICAgPGF4LXRyZWUtdmlld1xuICAgICAgICAgIFtzaG93Q2hlY2tib3hdPVwiZmFsc2VcIlxuICAgICAgICAgIFtpdGVtVGVtcGxhdGVdPVwiY2F0ZWdvcnlUZW1wbGF0ZVwiXG4gICAgICAgICAgW3RleHRGaWVsZF09XCIndGl0bGUnXCJcbiAgICAgICAgICBbaGFzQ2hpbGRGaWVsZF09XCInaGFzQ2hpbGQnXCJcbiAgICAgICAgICBbdmFsdWVGaWVsZF09XCInaWQnXCJcbiAgICAgICAgICBbZXhwYW5kZWRGaWVsZF09XCInZXhwYW5kZWQnXCJcbiAgICAgICAgICBbaXRlbXNdPVwicHJvdmlkZUxhenlUcmVlVmlld1wiXG4gICAgICAgICAgKG9uTm9kZUNsaWNrKT1cImhhbmRsZU5vZGVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAob25Db2xsYXBzZWRDaGFuZ2VkKT1cImhhbmRsZUNvbGxhcHNlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICBjbGFzcz1cImF4LXctZnVsbFwiXG4gICAgICAgID5cbiAgICAgICAgPC9heC10cmVlLXZpZXc+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNjYXRlZ29yeVRlbXBsYXRlIGxldC1pdGVtPlxuICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtZm9sZGVyIGF4LXRleHQteWVsbG93LTUwMCBmYS1md1wiPjwvYXgtaWNvbj5cbiAgICAgICAgICB7eyBpdGVtLnRpdGxlIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0gV2lkZ2V0IEdyaWQgLSBGdWxsIHdpZHRoIGluIHNlYXJjaCBtb2RlLCAyLzMgd2lkdGggb3RoZXJ3aXNlIC0tPlxuICAgIDxkaXZcbiAgICAgIFtjbGFzc109XCJcbiAgICAgICAgaXNTZWFyY2hNb2RlKClcbiAgICAgICAgICA/ICdheC1mbGV4IGF4LWgtZnVsbCBheC1mbGV4LWNvbCBheC13LWZ1bGwgYXgtb3ZlcmZsb3ctaGlkZGVuJ1xuICAgICAgICAgIDogJ2F4LWZsZXggYXgtaC1mdWxsIGF4LWZsZXgtY29sIGF4LXctMi8zIGF4LW92ZXJmbG93LWhpZGRlbidcbiAgICAgIFwiXG4gICAgPlxuICAgICAgQGlmIChoYXNSZXN1bHRzKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgYXgtcC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWdyaWQgYXgtZ3JpZC1jb2xzLTIgYXgtZ2FwLTJcIj5cbiAgICAgICAgICAgIEBmb3IgKHdpZGdldEl0ZW0gb2YgcGlubmVkV2lkZ2V0SXRlbXMoKTsgdHJhY2sgd2lkZ2V0SXRlbS50aXRsZSkge1xuICAgICAgICAgICAgICA8YXhwLXdpZGdldC1pdGVtXG4gICAgICAgICAgICAgICAgW3dpZGdldF09XCJ3aWRnZXRJdGVtXCJcbiAgICAgICAgICAgICAgICBbaXNTZWxlY3RlZF09XCJpc1dpZGdldEl0ZW1TZWxlY3RlZCh3aWRnZXRJdGVtKVwiXG4gICAgICAgICAgICAgICAgKG9uV2lkZ2V0Q2xpY2spPVwiaGFuZGxlV2lkZ2V0Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uUGluQ2xpY2spPVwiaGFuZGxlV2lkZ2V0UGluQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9heHAtd2lkZ2V0LWl0ZW0+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChwaW5uZWRXaWRnZXRJdGVtcygpLmxlbmd0aCkge1xuICAgICAgICAgICAgPGhyIGNsYXNzPVwiYXgtbXktNCBheC1ib3JkZXItZGFzaGVkXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWdyaWQgYXgtZ3JpZC1jb2xzLTIgYXgtZ2FwLTJcIj5cbiAgICAgICAgICAgIEBmb3IgKHdpZGdldEl0ZW0gb2YgcmVndWxhcldpZGdldEl0ZW1zKCk7IHRyYWNrIHdpZGdldEl0ZW0udGl0bGUpIHtcbiAgICAgICAgICAgICAgPGF4cC13aWRnZXQtaXRlbVxuICAgICAgICAgICAgICAgIFt3aWRnZXRdPVwid2lkZ2V0SXRlbVwiXG4gICAgICAgICAgICAgICAgW2lzU2VsZWN0ZWRdPVwiaXNXaWRnZXRJdGVtU2VsZWN0ZWQod2lkZ2V0SXRlbSlcIlxuICAgICAgICAgICAgICAgIChvbldpZGdldENsaWNrKT1cImhhbmRsZVdpZGdldENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvblBpbkNsaWNrKT1cImhhbmRsZVdpZGdldFBpbkNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvYXhwLXdpZGdldC1pdGVtPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8IS0tIEVtcHR5IFN0YXRlIC0tPlxuICAgICAgICA8YXhwLXN0YXRlLW1lc3NhZ2VcbiAgICAgICAgICBpY29uPVwiZmEtbGlnaHQgZmEtc2VhcmNoXCJcbiAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICBpc1NlYXJjaE1vZGUoKVxuICAgICAgICAgICAgICA/ICdAZm9ybS10ZW1wbGF0ZS1tYW5hZ2VtZW50OmRlc2lnbmVyLmNvbXBvbmVudHMudGVtcGxhdGUtcGlja2VyLmVtcHR5LXN0YXRlcy5uby1zZWFyY2gtcmVzdWx0cy50aXRsZSdcbiAgICAgICAgICAgICAgOiAnQGZvcm0tdGVtcGxhdGUtbWFuYWdlbWVudDpkZXNpZ25lci5jb21wb25lbnRzLnRlbXBsYXRlLXBpY2tlci5lbXB0eS1zdGF0ZXMubm8tY2F0ZWdvcnktcmVzdWx0cy50aXRsZSdcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCJcbiAgICAgICAgICAgIGlzU2VhcmNoTW9kZSgpXG4gICAgICAgICAgICAgID8gJ0Bmb3JtLXRlbXBsYXRlLW1hbmFnZW1lbnQ6ZGVzaWduZXIuY29tcG9uZW50cy50ZW1wbGF0ZS1waWNrZXIuZW1wdHktc3RhdGVzLm5vLXNlYXJjaC1yZXN1bHRzLmRlc2NyaXB0aW9uJ1xuICAgICAgICAgICAgICA6ICdAZm9ybS10ZW1wbGF0ZS1tYW5hZ2VtZW50OmRlc2lnbmVyLmNvbXBvbmVudHMudGVtcGxhdGUtcGlja2VyLmVtcHR5LXN0YXRlcy5uby1jYXRlZ29yeS1yZXN1bHRzLmRlc2NyaXB0aW9uJ1xuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKGlzU2VhcmNoTW9kZSgpKSB7XG4gICAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICAgIGxvb2s9XCJibGFua1wiXG4gICAgICAgICAgICAgIFt0ZXh0XT1cIidAZm9ybS10ZW1wbGF0ZS1tYW5hZ2VtZW50OmRlc2lnbmVyLmNvbXBvbmVudHMudGVtcGxhdGUtcGlja2VyLmNsZWFyLXNlYXJjaCcgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtbXQtNFwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cInNlYXJjaFRlcm0uc2V0KCcnKVwiXG4gICAgICAgICAgICA+PC9heC1idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2F4cC1zdGF0ZS1tZXNzYWdlPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG5AaWYgKHNlbGVjdGVkV2lkZ2V0cygpLmxlbmd0aCkge1xuICA8YXgtZm9vdGVyPlxuICAgIDxheC1zdWZmaXg+XG4gICAgICA8YXgtYnV0dG9uXG4gICAgICAgIGxvb2s9XCJzb2xpZFwiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIHRleHQ9XCJ7eyBzZWxlY3RlZFdpZGdldHMoKS5sZW5ndGggfX0gU2VsZWN0ZWRcIlxuICAgICAgICAob25DbGljayk9XCJoYW5kbGVDb25maXJtU2VsZWN0aW9uKClcIlxuICAgICAgPjwvYXgtYnV0dG9uPlxuICAgIDwvYXgtc3VmZml4PlxuICA8L2F4LWZvb3Rlcj5cbn1cbiJdfQ=="],"names":["i6","i7"],"mappings":"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"}