@acorex/modules 20.0.2 → 20.0.4

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 (49) hide show
  1. package/fesm2022/acorex-modules-content-management.mjs +1 -0
  2. package/fesm2022/acorex-modules-content-management.mjs.map +1 -1
  3. package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-BP-HLvDt.mjs → acorex-modules-document-management-acorex-modules-document-management-ClH75xx1.mjs} +28 -27
  4. package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-BP-HLvDt.mjs.map → acorex-modules-document-management-acorex-modules-document-management-ClH75xx1.mjs.map} +1 -1
  5. package/fesm2022/{acorex-modules-document-management-attachment-widget.component-DiE1iI_0.mjs → acorex-modules-document-management-attachment-widget.component-B_tjfzIn.mjs} +2 -2
  6. package/fesm2022/{acorex-modules-document-management-attachment-widget.component-DiE1iI_0.mjs.map → acorex-modules-document-management-attachment-widget.component-B_tjfzIn.mjs.map} +1 -1
  7. package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-Bq7bRA5y.mjs → acorex-modules-document-management-create-folder-dialog.component-DNdRcCAs.mjs} +2 -2
  8. package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-Bq7bRA5y.mjs.map → acorex-modules-document-management-create-folder-dialog.component-DNdRcCAs.mjs.map} +1 -1
  9. package/fesm2022/{acorex-modules-document-management-details-view.component-C3R3GojY.mjs → acorex-modules-document-management-details-view.component-JsK1UgZh.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-document-management-details-view.component-C3R3GojY.mjs.map → acorex-modules-document-management-details-view.component-JsK1UgZh.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-document-management-drive-choose.component-DnzJ7ujZ.mjs → acorex-modules-document-management-drive-choose.component-DJT9oLek.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-document-management-drive-choose.component-DnzJ7ujZ.mjs.map → acorex-modules-document-management-drive-choose.component-DJT9oLek.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-document-management-drive.component-BW0gVjML.mjs → acorex-modules-document-management-drive.component-DYxpvUWX.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-document-management-drive.component-BW0gVjML.mjs.map → acorex-modules-document-management-drive.component-DYxpvUWX.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-document-management-large-icons-view.component-B02pUo3R.mjs → acorex-modules-document-management-large-icons-view.component-B324V2hL.mjs} +2 -2
  16. package/fesm2022/{acorex-modules-document-management-large-icons-view.component-B02pUo3R.mjs.map → acorex-modules-document-management-large-icons-view.component-B324V2hL.mjs.map} +1 -1
  17. package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-IOgOKZHe.mjs → acorex-modules-document-management-large-tiles-view.component-V5gHyu9X.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-IOgOKZHe.mjs.map → acorex-modules-document-management-large-tiles-view.component-V5gHyu9X.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-document-management-list-view.component-B1tWiewp.mjs → acorex-modules-document-management-list-view.component-Bm2EH2aT.mjs} +2 -2
  20. package/fesm2022/{acorex-modules-document-management-list-view.component-B1tWiewp.mjs.map → acorex-modules-document-management-list-view.component-Bm2EH2aT.mjs.map} +1 -1
  21. package/fesm2022/{acorex-modules-document-management-meta-choose-popup.component-BcwgdkCu.mjs → acorex-modules-document-management-meta-choose-popup.component-q6mDKrFi.mjs} +56 -49
  22. package/fesm2022/acorex-modules-document-management-meta-choose-popup.component-q6mDKrFi.mjs.map +1 -0
  23. package/fesm2022/{acorex-modules-document-management-permission-definition.provider-BxGnnbvr.mjs → acorex-modules-document-management-permission-definition.provider-DGqVDVLJ.mjs} +2 -2
  24. package/fesm2022/{acorex-modules-document-management-permission-definition.provider-BxGnnbvr.mjs.map → acorex-modules-document-management-permission-definition.provider-DGqVDVLJ.mjs.map} +1 -1
  25. package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-BtH4ZteD.mjs → acorex-modules-document-management-rename-node-dialog.component-LgpvDguk.mjs} +2 -2
  26. package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-BtH4ZteD.mjs.map → acorex-modules-document-management-rename-node-dialog.component-LgpvDguk.mjs.map} +1 -1
  27. package/fesm2022/{acorex-modules-document-management-small-icons-view.component-CSZM_GTs.mjs → acorex-modules-document-management-small-icons-view.component-BwFoe1vd.mjs} +2 -2
  28. package/fesm2022/{acorex-modules-document-management-small-icons-view.component-CSZM_GTs.mjs.map → acorex-modules-document-management-small-icons-view.component-BwFoe1vd.mjs.map} +1 -1
  29. package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-CpYgK225.mjs → acorex-modules-document-management-small-tiles-view.component-B5gp0wus.mjs} +2 -2
  30. package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-CpYgK225.mjs.map → acorex-modules-document-management-small-tiles-view.component-B5gp0wus.mjs.map} +1 -1
  31. package/fesm2022/acorex-modules-document-management.mjs +1 -1
  32. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-D0GgVrM1.mjs → acorex-modules-platform-management-acorex-modules-platform-management-DqpAYmHM.mjs} +33 -5
  33. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-D0GgVrM1.mjs.map → acorex-modules-platform-management-acorex-modules-platform-management-DqpAYmHM.mjs.map} +1 -1
  34. package/fesm2022/{acorex-modules-platform-management-list-version.component-ZXM2ZJtt.mjs → acorex-modules-platform-management-list-version.component-DidjxkmH.mjs} +2 -2
  35. package/fesm2022/{acorex-modules-platform-management-list-version.component-ZXM2ZJtt.mjs.map → acorex-modules-platform-management-list-version.component-DidjxkmH.mjs.map} +1 -1
  36. package/fesm2022/{acorex-modules-platform-management-settings.provider-D5WKWolF.mjs → acorex-modules-platform-management-settings.provider-DcHKHrSK.mjs} +2 -2
  37. package/fesm2022/{acorex-modules-platform-management-settings.provider-D5WKWolF.mjs.map → acorex-modules-platform-management-settings.provider-DcHKHrSK.mjs.map} +1 -1
  38. package/fesm2022/acorex-modules-platform-management.mjs +1 -1
  39. package/fesm2022/acorex-modules-project-management.mjs +30 -1
  40. package/fesm2022/acorex-modules-project-management.mjs.map +1 -1
  41. package/fesm2022/acorex-modules-workflow-management-task-board.page-R4x5Rq-D.mjs +494 -0
  42. package/fesm2022/acorex-modules-workflow-management-task-board.page-R4x5Rq-D.mjs.map +1 -0
  43. package/fesm2022/acorex-modules-workflow-management.mjs +17 -3
  44. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  45. package/package.json +1 -1
  46. package/workflow-management/index.d.ts +2 -1
  47. package/fesm2022/acorex-modules-document-management-meta-choose-popup.component-BcwgdkCu.mjs.map +0 -1
  48. package/fesm2022/acorex-modules-workflow-management-task-board.page-BzLr0QnF.mjs +0 -305
  49. package/fesm2022/acorex-modules-workflow-management-task-board.page-BzLr0QnF.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-modules-document-management-meta-choose-popup.component-BcwgdkCu.mjs","sources":["../tmp-esm2022/document-management/lib/features/meta-choose-widget/meta-choose-popup/meta-choose-popup.component.js"],"sourcesContent":["import { Component, signal, ViewEncapsulation, viewChild, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTreeViewModule } from '@acorex/components/tree-view';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXMMetaDataDefinitionCategoryService } from '@acorex/modules/platform-management';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@acorex/components/search-box\";\nimport * as i3 from \"@acorex/components/tree-view\";\nimport * as i4 from \"@acorex/components/decorators\";\nimport * as i5 from \"@acorex/components/button\";\nimport * as i6 from \"@acorex/core/translation\";\nexport class AXPMetaChoosePopupComponent extends AXBasePageComponent {\n constructor() {\n super(...arguments);\n this.categoryService = inject(AXMMetaDataDefinitionCategoryService);\n this.treeRef = viewChild('treeRef');\n /**\n * Holds the complete list of tree items in a flattened structure.\n * This structure makes it easy to:\n * 1) Provide children lazily via `provideLazyTreeView` using `parentId`.\n * 2) Perform search across all levels while still being able to include\n * ancestor nodes of matched items.\n */\n this.treeViewData = signal([]);\n /**\n * Keeps an immutable reference to the original (unfiltered) data so that\n * we can restore the tree when the search box is cleared.\n */\n this.originalTreeData = [];\n this.searchTerm = signal('');\n this.selectedNode = null;\n this.provideLazyTreeView = (selectedItemId) => {\n if (selectedItemId) {\n return Promise.resolve(this.treeViewData().filter((x) => x.parentId === selectedItemId));\n }\n else {\n return Promise.resolve(this.treeViewData().filter((x) => !x.parentId));\n }\n };\n }\n ngOnInit() {\n this.categoryService.getAllWithItems().then((categories) => {\n //#region ---- Helper Functions ----\n const convertCategoryToTreeItem = (category) => {\n const categoryChildren = [\n // Map sub-categories recursively\n ...category.categories.map((c) => convertCategoryToTreeItem(c)),\n // Map items of current category\n ...category.items.map((item) => ({\n id: item.id,\n text: item.name,\n parentId: category.id,\n hasCheckBox: true,\n hasChild: false,\n isSelected: false\n })),\n ];\n return {\n id: category.id,\n text: category.title,\n parentId: category.parentId,\n hasCheckBox: false,\n hasChild: categoryChildren.length > 0,\n children: categoryChildren,\n isSelected: false\n };\n };\n //#endregion\n // Build a flattened list of all categories & items to simplify\n // lazy-loading & search operations.\n const flatList = [];\n const buildTree = (category) => {\n const categoryItem = {\n id: category.id,\n text: category.title,\n parentId: category.parentId,\n hasCheckBox: false,\n hasChild: (category.categories?.length ?? 0) + (category.items?.length ?? 0) > 0,\n isSelected: false\n };\n flatList.push(categoryItem);\n // Recurse into sub-categories\n category.categories.forEach((sub) => buildTree(sub));\n // Push items of current category\n category.items.forEach((item) => {\n flatList.push({\n id: item.id,\n text: item.name,\n parentId: category.id,\n hasCheckBox: true,\n hasChild: false,\n isSelected: false\n });\n });\n };\n categories.forEach((c) => buildTree(c));\n // Persist original data & initialise reactive signal.\n this.originalTreeData = flatList;\n this.treeViewData.set([...flatList]);\n });\n }\n handleNodeClick(e) {\n this.selectedNode = e.data;\n }\n handleSelectClick() {\n if (this.selectedNode) {\n this.close(this.selectedNode);\n }\n else {\n this.close();\n }\n }\n handleCreateNewClick() {\n this.close('create-new');\n }\n handleCloseClick() {\n this.close();\n }\n handleChangeSearchValue(e) {\n const term = (e.value ?? '').trim();\n this.searchTerm.set(term);\n // When search is cleared, simply restore the initial dataset\n if (!term) {\n this.treeViewData.set([...this.originalTreeData]);\n return;\n }\n const loweredTerm = term.toLowerCase();\n // Build a quick lookup map to traverse ancestors efficiently\n const mapById = new Map(this.originalTreeData.map((item) => [item.id, item]));\n // Helper to collect all ancestors of a given node\n const collectAncestors = (node) => {\n const ancestors = [];\n let currentParentId = node.parentId;\n while (currentParentId) {\n const parent = mapById.get(currentParentId);\n if (!parent) {\n break;\n }\n ancestors.push(parent);\n currentParentId = parent.parentId;\n }\n return ancestors;\n };\n // 1) Find all nodes whose text contains the search term\n const matchedNodes = this.originalTreeData.filter((item) => item.text.toLowerCase().includes(loweredTerm));\n // 2) Collect their ancestors to ensure the tree can render correct paths\n const resultSet = new Map();\n matchedNodes.forEach((node) => {\n resultSet.set(node.id, node);\n collectAncestors(node).forEach((ancestor) => resultSet.set(ancestor.id, ancestor));\n });\n this.treeViewData.set(Array.from(resultSet.values()));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXPMetaChoosePopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.2.0\", version: \"20.0.4\", type: AXPMetaChoosePopupComponent, isStandalone: true, selector: \"axp-meta-choose-popup\", providers: [], viewQueries: [{ propertyName: \"treeRef\", first: true, predicate: [\"treeRef\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-p-4 ax-flex ax-flex-col ax-gap-4 ax-overflow-hidden\\\">\\n <div class=\\\"ax-w-full\\\">\\n <ax-search-box\\n [placeholder]=\\\"('widget.lookup.search' | translate | async)\\\"\\n [value]=\\\"searchTerm()\\\"\\n (onValueChanged)=\\\"handleChangeSearchValue($event)\\\"\\n ><ax-clear-button></ax-clear-button\\n ></ax-search-box>\\n </div>\\n <ax-tree-view\\n class=\\\"ax-h-[50vh]\\\"\\n #treeRef\\n [parentField]=\\\"'parentId'\\\"\\n hasChildField=\\\"hasChild\\\"\\n [items]=\\\"provideLazyTreeView\\\"\\n (onNodeClick)=\\\"handleNodeClick($event)\\\"\\n [selectionMode]=\\\"'multiple'\\\"\\n [hasCheckboxField]=\\\"'isSelected'\\\"\\n >\\n \\n </ax-tree-view>\\n </div>\\n <ax-footer>\\n <ax-suffix>\\n <ax-button look=\\\"solid\\\" [text]=\\\"('close' | translate | async)!\\\" (onClick)=\\\"handleCloseClick()\\\"> </ax-button>\\n <ax-button\\n look=\\\"solid\\\"\\n color=\\\"primary\\\"\\n [text]=\\\"('select' | translate | async)!\\\"\\n (onClick)=\\\"handleSelectClick()\\\"\\n >\\n </ax-button>\\n </ax-suffix>\\n </ax-footer>\", styles: [\"\"], dependencies: [{ kind: \"ngmodule\", type: \n // Angular\n CommonModule }, { kind: \"pipe\", type: i1.AsyncPipe, name: \"async\" }, { kind: \"ngmodule\", type: \n // ACoreX\n AXSearchBoxModule }, { kind: \"component\", type: i2.AXSearchBoxComponent, selector: \"ax-search-box\", inputs: [\"disabled\", \"readonly\", \"tabIndex\", \"placeholder\", \"value\", \"state\", \"name\", \"id\", \"look\", \"class\", \"delayTime\", \"type\"], outputs: [\"valueChange\", \"stateChange\", \"onValueChanged\", \"onBlur\", \"onFocus\", \"readonlyChange\", \"disabledChange\", \"onKeyDown\", \"onKeyUp\", \"onKeyPress\"] }, { kind: \"ngmodule\", type: AXTreeViewModule }, { kind: \"component\", type: i3.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: AXDecoratorModule }, { kind: \"component\", type: i4.AXDecoratorClearButtonComponent, selector: \"ax-clear-button\", inputs: [\"icon\"] }, { kind: \"component\", type: i4.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: AXButtonModule }, { kind: \"component\", type: i5.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: AXTranslationModule }, { kind: \"pipe\", type: i6.AXTranslatorPipe, name: \"translate\" }], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXPMetaChoosePopupComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axp-meta-choose-popup', imports: [\n // Angular\n CommonModule,\n // ACoreX\n AXSearchBoxModule,\n AXTreeViewModule,\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule\n // Platform\n ], encapsulation: ViewEncapsulation.None, providers: [], template: \"<div class=\\\"ax-p-4 ax-flex ax-flex-col ax-gap-4 ax-overflow-hidden\\\">\\n <div class=\\\"ax-w-full\\\">\\n <ax-search-box\\n [placeholder]=\\\"('widget.lookup.search' | translate | async)\\\"\\n [value]=\\\"searchTerm()\\\"\\n (onValueChanged)=\\\"handleChangeSearchValue($event)\\\"\\n ><ax-clear-button></ax-clear-button\\n ></ax-search-box>\\n </div>\\n <ax-tree-view\\n class=\\\"ax-h-[50vh]\\\"\\n #treeRef\\n [parentField]=\\\"'parentId'\\\"\\n hasChildField=\\\"hasChild\\\"\\n [items]=\\\"provideLazyTreeView\\\"\\n (onNodeClick)=\\\"handleNodeClick($event)\\\"\\n [selectionMode]=\\\"'multiple'\\\"\\n [hasCheckboxField]=\\\"'isSelected'\\\"\\n >\\n \\n </ax-tree-view>\\n </div>\\n <ax-footer>\\n <ax-suffix>\\n <ax-button look=\\\"solid\\\" [text]=\\\"('close' | translate | async)!\\\" (onClick)=\\\"handleCloseClick()\\\"> </ax-button>\\n <ax-button\\n look=\\\"solid\\\"\\n color=\\\"primary\\\"\\n [text]=\\\"('select' | translate | async)!\\\"\\n (onClick)=\\\"handleSelectClick()\\\"\\n >\\n </ax-button>\\n </ax-suffix>\\n </ax-footer>\" }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YS1jaG9vc2UtcG9wdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2RvY3VtZW50LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9tZXRhLWNob29zZS13aWRnZXQvbWV0YS1jaG9vc2UtcG9wdXAvbWV0YS1jaG9vc2UtcG9wdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2RvY3VtZW50LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9tZXRhLWNob29zZS13aWRnZXQvbWV0YS1jaG9vc2UtcG9wdXAvbWV0YS1jaG9vc2UtcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFpRCxNQUFNLDhCQUE4QixDQUFDO0FBQy9HLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsb0NBQW9DLEVBQXVGLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7O0FBaUNoTCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsbUJBQW1CO0lBcEJwRTs7UUFzQmMsb0JB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QXBCdkMsU0FBUzsrQkFDRyx1QkFBdUIsV0FHdkI7d0JBQ0wsVUFBVTt3QkFDVixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLFdBQVc7cUJBQ2QsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxhQUMxQixFQUVWIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBzaWduYWwsIFZpZXdFbmNhcHN1bGF0aW9uLCB2aWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFYQmFzZVBhZ2VDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcGFnZSc7XG5pbXBvcnQgeyBBWFNlYXJjaEJveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWFyY2gtYm94JztcbmltcG9ydCB7IEFYVHJlZVZpZXdNb2R1bGUsIEFYVHJlZUl0ZW1DbGlja0Jhc2VFdmVudCwgQVhUcmVlVmlld0NvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90cmVlLXZpZXcnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFZhbHVlQ2hhbmdlZEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYTU1ldGFEYXRhRGVmaW5pdGlvbkNhdGVnb3J5U2VydmljZSwgQVhNTWV0YURhdGFEZWZpbml0aW9uQ2F0ZWdvcnlXaXRoSXRlbXNFbnRpdHlNb2RlbCwgQVhNTWV0YURhdGFEZWZpbml0aW9uRW50aXR5TW9kZWwgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvcGxhdGZvcm0tbWFuYWdlbWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQTWV0YVRyZWVJdGVtIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBpY29uPzogc3RyaW5nO1xuICAgIHBhcmVudElkPzogc3RyaW5nO1xuICAgIGhhc0NoaWxkPzogYm9vbGVhbjtcbiAgICBoYXNDaGVja0JveD86IGJvb2xlYW47XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgIGlzU2VsZWN0ZWQgOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjonYXhwLW1ldGEtY2hvb3NlLXBvcHVwJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWV0YS1jaG9vc2UtcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9tZXRhLWNob29zZS1wb3B1cC5jb21wb25lbnQuc2NzcycsXG4gICAgaW1wb3J0czogW1xuICAgICAgICAvLyBBbmd1bGFyXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgLy8gQUNvcmVYXG4gICAgICAgIEFYU2VhcmNoQm94TW9kdWxlLFxuICAgICAgICBBWFRyZWVWaWV3TW9kdWxlLFxuICAgICAgICBBWERlY29yYXRvck1vZHVsZSxcbiAgICAgICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgICAgIEFYVHJhbnNsYXRpb25Nb2R1bGVcbiAgICAgICAgLy8gUGxhdGZvcm1cbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQTWV0YUNob29zZVBvcHVwQ29tcG9uZW50IGV4dGVuZHMgQVhCYXNlUGFnZUNvbXBvbmVudCB7XG5cbiAgICBwcm90ZWN0ZWQgY2F0ZWdvcnlTZXJ2aWNlID0gaW5qZWN0KEFYTU1ldGFEYXRhRGVmaW5pdGlvbkNhdGVnb3J5U2VydmljZSk7XG4gICAgXG4gICAgdHJlZVJlZiA9IHZpZXdDaGlsZDxBWFRyZWVWaWV3Q29tcG9uZW50PigndHJlZVJlZicpO1xuICAgIFxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHRyZWUgaXRlbXMgaW4gYSBmbGF0dGVuZWQgc3RydWN0dXJlLlxuICAgICAqIFRoaXMgc3RydWN0dXJlIG1ha2VzIGl0IGVhc3kgdG86XG4gICAgICogIDEpIFByb3ZpZGUgY2hpbGRyZW4gbGF6aWx5IHZpYSBgcHJvdmlkZUxhenlUcmVlVmlld2AgdXNpbmcgYHBhcmVudElkYC5cbiAgICAgKiAgMikgUGVyZm9ybSBzZWFyY2ggYWNyb3NzIGFsbCBsZXZlbHMgd2hpbGUgc3RpbGwgYmVpbmcgYWJsZSB0byBpbmNsdWRlXG4gICAgICogICAgIGFuY2VzdG9yIG5vZGVzIG9mIG1hdGNoZWQgaXRlbXMuXG4gICAgICovXG4gICAgdHJlZVZpZXdEYXRhID0gc2lnbmFsPEFYUE1ldGFUcmVlSXRlbVtdPihbXSk7XG5cbiAgICAvKipcbiAgICAgKiBLZWVwcyBhbiBpbW11dGFibGUgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCAodW5maWx0ZXJlZCkgZGF0YSBzbyB0aGF0XG4gICAgICogd2UgY2FuIHJlc3RvcmUgdGhlIHRyZWUgd2hlbiB0aGUgc2VhcmNoIGJveCBpcyBjbGVhcmVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgb3JpZ2luYWxUcmVlRGF0YTogQVhQTWV0YVRyZWVJdGVtW10gPSBbXTtcblxuICAgIHByb3RlY3RlZCBzZWFyY2hUZXJtID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZE5vZGU6IEFYUE1ldGFUcmVlSXRlbSB8IG51bGwgPSBudWxsO1xuXG4gICAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlTZXJ2aWNlLmdldEFsbFdpdGhJdGVtcygpLnRoZW4oKGNhdGVnb3JpZXMpID0+IHtcblxuICAgICAgICAgICAgLy8jcmVnaW9uIC0tLS0gICBIZWxwZXIgRnVuY3Rpb25zICAgLS0tLVxuXG4gICAgICAgICAgICBjb25zdCBjb252ZXJ0Q2F0ZWdvcnlUb1RyZWVJdGVtID0gKGNhdGVnb3J5OiBBWE1NZXRhRGF0YURlZmluaXRpb25DYXRlZ29yeVdpdGhJdGVtc0VudGl0eU1vZGVsPHN0cmluZz4pOiBBWFBNZXRhVHJlZUl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5Q2hpbGRyZW46IEFYUE1ldGFUcmVlSXRlbVtdID0gW1xuICAgICAgICAgICAgICAgICAgICAvLyBNYXAgc3ViLWNhdGVnb3JpZXMgcmVjdXJzaXZlbHlcbiAgICAgICAgICAgICAgICAgICAgLi4uY2F0ZWdvcnkuY2F0ZWdvcmllcy5tYXAoKGM6IEFYTU1ldGFEYXRhRGVmaW5pdGlvbkNhdGVnb3J5V2l0aEl0ZW1zRW50aXR5TW9kZWw8c3RyaW5nPikgPT4gY29udmVydENhdGVnb3J5VG9UcmVlSXRlbShjKSksXG4gICAgICAgICAgICAgICAgICAgIC8vIE1hcCBpdGVtcyBvZiBjdXJyZW50IGNhdGVnb3J5XG4gICAgICAgICAgICAgICAgICAgIC4uLmNhdGVnb3J5Lml0ZW1zLm1hcCgoaXRlbTogQVhNTWV0YURhdGFEZWZpbml0aW9uRW50aXR5TW9kZWwpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NoZWNrQm94OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZCA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGNhdGVnb3J5LmlkLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjYXRlZ29yeS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGNhdGVnb3J5LnBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICBoYXNDaGVja0JveDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGhhc0NoaWxkOiBjYXRlZ29yeUNoaWxkcmVuLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjYXRlZ29yeUNoaWxkcmVuLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkIDogZmFsc2VcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8jZW5kcmVnaW9uXG5cbiAgICAgICAgICAgIC8vIEJ1aWxkIGEgZmxhdHRlbmVkIGxpc3Qgb2YgYWxsIGNhdGVnb3JpZXMgJiBpdGVtcyB0byBzaW1wbGlmeVxuICAgICAgICAgICAgLy8gbGF6eS1sb2FkaW5nICYgc2VhcmNoIG9wZXJhdGlvbnMuXG4gICAgICAgICAgICBjb25zdCBmbGF0TGlzdDogQVhQTWV0YVRyZWVJdGVtW10gPSBbXTtcblxuICAgICAgICAgICAgY29uc3QgYnVpbGRUcmVlID0gKGNhdGVnb3J5OiBBWE1NZXRhRGF0YURlZmluaXRpb25DYXRlZ29yeVdpdGhJdGVtc0VudGl0eU1vZGVsPHN0cmluZz4pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYXRlZ29yeUl0ZW06IEFYUE1ldGFUcmVlSXRlbSA9IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGNhdGVnb3J5LmlkLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjYXRlZ29yeS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGNhdGVnb3J5LnBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICBoYXNDaGVja0JveDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGhhc0NoaWxkOiAoY2F0ZWdvcnkuY2F0ZWdvcmllcz8ubGVuZ3RoID8/IDApICsgKGNhdGVnb3J5Lml0ZW1zPy5sZW5ndGggPz8gMCkgPiAwLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkIDogZmFsc2VcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZmxhdExpc3QucHVzaChjYXRlZ29yeUl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgLy8gUmVjdXJzZSBpbnRvIHN1Yi1jYXRlZ29yaWVzXG4gICAgICAgICAgICAgICAgY2F0ZWdvcnkuY2F0ZWdvcmllcy5mb3JFYWNoKChzdWIpID0+IGJ1aWxkVHJlZShzdWIpKTtcblxuICAgICAgICAgICAgICAgIC8vIFB1c2ggaXRlbXMgb2YgY3VycmVudCBjYXRlZ29yeVxuICAgICAgICAgICAgICAgIGNhdGVnb3J5Lml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZmxhdExpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NoZWNrQm94OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZCA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjKSA9PiBidWlsZFRyZWUoYykpO1xuXG4gICAgICAgICAgICAvLyBQZXJzaXN0IG9yaWdpbmFsIGRhdGEgJiBpbml0aWFsaXNlIHJlYWN0aXZlIHNpZ25hbC5cbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxUcmVlRGF0YSA9IGZsYXRMaXN0O1xuICAgICAgICAgICAgdGhpcy50cmVlVmlld0RhdGEuc2V0KFsuLi5mbGF0TGlzdF0pO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgcHJvdmlkZUxhenlUcmVlVmlldyA9IChzZWxlY3RlZEl0ZW1JZD86IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8QVhQTWV0YVRyZWVJdGVtW10+ID0+IHtcbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgICAgIHRoaXMudHJlZVZpZXdEYXRhKCkuZmlsdGVyKCh4KSA9PiB4LnBhcmVudElkID09PSBzZWxlY3RlZEl0ZW1JZClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgICAgIHRoaXMudHJlZVZpZXdEYXRhKCkuZmlsdGVyKCh4KSA9PiAheC5wYXJlbnRJZClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGhhbmRsZU5vZGVDbGljayhlOiBBWFRyZWVJdGVtQ2xpY2tCYXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBlLmRhdGEgYXMgQVhQTWV0YVRyZWVJdGVtO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVTZWxlY3RDbGljaygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWROb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKHRoaXMuc2VsZWN0ZWROb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVDcmVhdGVOZXdDbGljaygpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgnY3JlYXRlLW5ldycpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVDbG9zZUNsaWNrKCkge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZUNoYW5nZVNlYXJjaFZhbHVlKGU6IEFYVmFsdWVDaGFuZ2VkRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGVybSA9IChlLnZhbHVlID8/ICcnKS50cmltKCk7XG4gICAgICAgIHRoaXMuc2VhcmNoVGVybS5zZXQodGVybSk7XG5cbiAgICAgICAgLy8gV2hlbiBzZWFyY2ggaXMgY2xlYXJlZCwgc2ltcGx5IHJlc3RvcmUgdGhlIGluaXRpYWwgZGF0YXNldFxuICAgICAgICBpZiAoIXRlcm0pIHtcbiAgICAgICAgICAgIHRoaXMudHJlZVZpZXdEYXRhLnNldChbLi4udGhpcy5vcmlnaW5hbFRyZWVEYXRhXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb3dlcmVkVGVybSA9IHRlcm0udG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAvLyBCdWlsZCBhIHF1aWNrIGxvb2t1cCBtYXAgdG8gdHJhdmVyc2UgYW5jZXN0b3JzIGVmZmljaWVudGx5XG4gICAgICAgIGNvbnN0IG1hcEJ5SWQgPSBuZXcgTWFwPHN0cmluZywgQVhQTWV0YVRyZWVJdGVtPihcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxUcmVlRGF0YS5tYXAoKGl0ZW0pID0+IFtpdGVtLmlkLCBpdGVtXSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBIZWxwZXIgdG8gY29sbGVjdCBhbGwgYW5jZXN0b3JzIG9mIGEgZ2l2ZW4gbm9kZVxuICAgICAgICBjb25zdCBjb2xsZWN0QW5jZXN0b3JzID0gKG5vZGU6IEFYUE1ldGFUcmVlSXRlbSk6IEFYUE1ldGFUcmVlSXRlbVtdID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yczogQVhQTWV0YVRyZWVJdGVtW10gPSBbXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50UGFyZW50SWQgPSBub2RlLnBhcmVudElkO1xuICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRQYXJlbnRJZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IG1hcEJ5SWQuZ2V0KGN1cnJlbnRQYXJlbnRJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFuY2VzdG9ycy5wdXNoKHBhcmVudCk7XG4gICAgICAgICAgICAgICAgY3VycmVudFBhcmVudElkID0gcGFyZW50LnBhcmVudElkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFuY2VzdG9ycztcbiAgICAgICAgfTtcblxuICAgICAgICAvLyAxKSBGaW5kIGFsbCBub2RlcyB3aG9zZSB0ZXh0IGNvbnRhaW5zIHRoZSBzZWFyY2ggdGVybVxuICAgICAgICBjb25zdCBtYXRjaGVkTm9kZXMgPSB0aGlzLm9yaWdpbmFsVHJlZURhdGEuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICAgICAgaXRlbS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJlZFRlcm0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gMikgQ29sbGVjdCB0aGVpciBhbmNlc3RvcnMgdG8gZW5zdXJlIHRoZSB0cmVlIGNhbiByZW5kZXIgY29ycmVjdCBwYXRoc1xuICAgICAgICBjb25zdCByZXN1bHRTZXQgPSBuZXcgTWFwPHN0cmluZywgQVhQTWV0YVRyZWVJdGVtPigpO1xuICAgICAgICBtYXRjaGVkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0U2V0LnNldChub2RlLmlkLCBub2RlKTtcbiAgICAgICAgICAgIGNvbGxlY3RBbmNlc3RvcnMobm9kZSkuZm9yRWFjaCgoYW5jZXN0b3IpID0+IHJlc3VsdFNldC5zZXQoYW5jZXN0b3IuaWQsIGFuY2VzdG9yKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudHJlZVZpZXdEYXRhLnNldChBcnJheS5mcm9tKHJlc3VsdFNldC52YWx1ZXMoKSkpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1wLTQgYXgtZmxleCBheC1mbGV4LWNvbCBheC1nYXAtNCAgYXgtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtdy1mdWxsXCI+XG4gICAgICAgIDxheC1zZWFyY2gtYm94XG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIignd2lkZ2V0Lmxvb2t1cC5zZWFyY2gnIHwgdHJhbnNsYXRlIHwgYXN5bmMpXCJcbiAgICAgICAgICBbdmFsdWVdPVwic2VhcmNoVGVybSgpXCJcbiAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiaGFuZGxlQ2hhbmdlU2VhcmNoVmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgPjxheC1jbGVhci1idXR0b24+PC9heC1jbGVhci1idXR0b25cbiAgICAgICAgPjwvYXgtc2VhcmNoLWJveD5cbiAgICAgIDwvZGl2PlxuICAgIDxheC10cmVlLXZpZXdcbiAgICAgIGNsYXNzPVwiYXgtaC1bNTB2aF1cIlxuICAgICAgI3RyZWVSZWZcbiAgICAgIFtwYXJlbnRGaWVsZF09XCIncGFyZW50SWQnXCJcbiAgICAgIGhhc0NoaWxkRmllbGQ9XCJoYXNDaGlsZFwiXG4gICAgICBbaXRlbXNdPVwicHJvdmlkZUxhenlUcmVlVmlld1wiXG4gICAgICAob25Ob2RlQ2xpY2spPVwiaGFuZGxlTm9kZUNsaWNrKCRldmVudClcIlxuICAgICAgW3NlbGVjdGlvbk1vZGVdPVwiJ211bHRpcGxlJ1wiXG4gICAgICBbaGFzQ2hlY2tib3hGaWVsZF09XCInaXNTZWxlY3RlZCdcIlxuICAgID5cbiAgICAgIFxuICAgIDwvYXgtdHJlZS12aWV3PlxuICA8L2Rpdj5cbiAgPGF4LWZvb3Rlcj5cbiAgICA8YXgtc3VmZml4PlxuICAgICAgPGF4LWJ1dHRvbiBsb29rPVwic29saWRcIiBbdGV4dF09XCIoJ2Nsb3NlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIiAob25DbGljayk9XCJoYW5kbGVDbG9zZUNsaWNrKClcIj4gPC9heC1idXR0b24+XG4gICAgICA8YXgtYnV0dG9uXG4gICAgICAgIGxvb2s9XCJzb2xpZFwiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIFt0ZXh0XT1cIignc2VsZWN0JyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIlxuICAgICAgICAob25DbGljayk9XCJoYW5kbGVTZWxlY3RDbGljaygpXCJcbiAgICAgID5cbiAgICAgIDwvYXgtYnV0dG9uPlxuICAgIDwvYXgtc3VmZml4PlxuICA8L2F4LWZvb3Rlcj4iXX0="],"names":["i2","i4","i5","i6"],"mappings":";;;;;;;;;;;;;;;;;AAgBO,MAAM,2BAA2B,SAAS,mBAAmB,CAAC;AACrE,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,oCAAoC,CAAC;AAC3E,QAAQ,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC;AACtC;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAClC,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC;AACpC,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI;AAChC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,CAAC,cAAc,KAAK;AACvD,YAAY,IAAI,cAAc,EAAE;AAChC,gBAAgB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,CAAC;AACxG;AACA,iBAAiB;AACjB,gBAAgB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACtF;AACA,SAAS;AACT;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK;AACpE;AACA,YAAY,MAAM,yBAAyB,GAAG,CAAC,QAAQ,KAAK;AAC5D,gBAAgB,MAAM,gBAAgB,GAAG;AACzC;AACA,oBAAoB,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,yBAAyB,CAAC,CAAC,CAAC,CAAC;AACnF;AACA,oBAAoB,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AACrD,wBAAwB,EAAE,EAAE,IAAI,CAAC,EAAE;AACnC,wBAAwB,IAAI,EAAE,IAAI,CAAC,IAAI;AACvC,wBAAwB,QAAQ,EAAE,QAAQ,CAAC,EAAE;AAC7C,wBAAwB,WAAW,EAAE,IAAI;AACzC,wBAAwB,QAAQ,EAAE,KAAK;AACvC,wBAAwB,UAAU,EAAE;AACpC,qBAAqB,CAAC,CAAC;AACvB,iBAAiB;AACjB,gBAAgB,OAAO;AACvB,oBAAoB,EAAE,EAAE,QAAQ,CAAC,EAAE;AACnC,oBAAoB,IAAI,EAAE,QAAQ,CAAC,KAAK;AACxC,oBAAoB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;AAC/C,oBAAoB,WAAW,EAAE,KAAK;AACtC,oBAAoB,QAAQ,EAAE,gBAAgB,CAAC,MAAM,GAAG,CAAC;AACzD,oBAAoB,QAAQ,EAAE,gBAAgB;AAC9C,oBAAoB,UAAU,EAAE;AAChC,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,YAAY,MAAM,QAAQ,GAAG,EAAE;AAC/B,YAAY,MAAM,SAAS,GAAG,CAAC,QAAQ,KAAK;AAC5C,gBAAgB,MAAM,YAAY,GAAG;AACrC,oBAAoB,EAAE,EAAE,QAAQ,CAAC,EAAE;AACnC,oBAAoB,IAAI,EAAE,QAAQ,CAAC,KAAK;AACxC,oBAAoB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;AAC/C,oBAAoB,WAAW,EAAE,KAAK;AACtC,oBAAoB,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;AACpG,oBAAoB,UAAU,EAAE;AAChC,iBAAiB;AACjB,gBAAgB,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;AAC3C;AACA,gBAAgB,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC;AACpE;AACA,gBAAgB,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACjD,oBAAoB,QAAQ,CAAC,IAAI,CAAC;AAClC,wBAAwB,EAAE,EAAE,IAAI,CAAC,EAAE;AACnC,wBAAwB,IAAI,EAAE,IAAI,CAAC,IAAI;AACvC,wBAAwB,QAAQ,EAAE,QAAQ,CAAC,EAAE;AAC7C,wBAAwB,WAAW,EAAE,IAAI;AACzC,wBAAwB,QAAQ,EAAE,KAAK;AACvC,wBAAwB,UAAU,EAAE;AACpC,qBAAqB,CAAC;AACtB,iBAAiB,CAAC;AAClB,aAAa;AACb,YAAY,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC;AACnD;AACA,YAAY,IAAI,CAAC,gBAAgB,GAAG,QAAQ;AAC5C,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AAChD,SAAS,CAAC;AACV;AACA,IAAI,eAAe,CAAC,CAAC,EAAE;AACvB,QAAQ,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI;AAClC;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;AACzC;AACA,aAAa;AACb,YAAY,IAAI,CAAC,KAAK,EAAE;AACxB;AACA;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;AAChC;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,CAAC,KAAK,EAAE;AACpB;AACA,IAAI,uBAAuB,CAAC,CAAC,EAAE;AAC/B,QAAQ,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;AAC3C,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC;AACA,QAAQ,IAAI,CAAC,IAAI,EAAE;AACnB,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC7D,YAAY;AACZ;AACA,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9C;AACA,QAAQ,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACrF;AACA,QAAQ,MAAM,gBAAgB,GAAG,CAAC,IAAI,KAAK;AAC3C,YAAY,MAAM,SAAS,GAAG,EAAE;AAChC,YAAY,IAAI,eAAe,GAAG,IAAI,CAAC,QAAQ;AAC/C,YAAY,OAAO,eAAe,EAAE;AACpC,gBAAgB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;AAC3D,gBAAgB,IAAI,CAAC,MAAM,EAAE;AAC7B,oBAAoB;AACpB;AACA,gBAAgB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AACtC,gBAAgB,eAAe,GAAG,MAAM,CAAC,QAAQ;AACjD;AACA,YAAY,OAAO,SAAS;AAC5B,SAAS;AACT;AACA,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAClH;AACA,QAAQ,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE;AACnC,QAAQ,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACvC,YAAY,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;AACxC,YAAY,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC9F,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7D;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC/L,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,2BAA2B,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,uBAAuB,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,kmCAAkmC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI;AACjgD;AACA,gBAAgB,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI;AAC7G;AACA,gBAAgB,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAEA,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,sBAAsB,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,aAAa,EAAE,oBAAoB,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAEC,IAAE,CAAC,+BAA+B,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAEA,IAAE,CAAC,2BAA2B,EAAE,QAAQ,EAAE,8IAA8I,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAEC,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAEC,IAAE,CAAC,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AAC98D;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,UAAU,EAAE,CAAC;AACrI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,uBAAuB,EAAE,OAAO,EAAE;AACjE;AACA,wBAAwB,YAAY;AACpC;AACA,wBAAwB,iBAAiB;AACzC,wBAAwB,gBAAgB;AACxC,wBAAwB,iBAAiB;AACzC,wBAAwB,cAAc;AACtC,wBAAwB;AACxB;AACA,qBAAqB,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,kmCAAkmC,EAAE;AAC3rC,SAAS,CAAC,EAAE,CAAC;;;;"}
@@ -1,305 +0,0 @@
1
- import { AXBadgeModule } from '@acorex/components/badge';
2
- import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
3
- import * as i4 from '@acorex/components/button';
4
- import { AXButtonModule } from '@acorex/components/button';
5
- import { AXCalendarComponent } from '@acorex/components/calendar';
6
- import * as i6 from '@acorex/components/decorators';
7
- import { AXDecoratorModule } from '@acorex/components/decorators';
8
- import { AXDropdownPanelComponent } from '@acorex/components/dropdown';
9
- import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
10
- import { AXLoadingModule } from '@acorex/components/loading';
11
- import * as i3 from '@acorex/components/menu';
12
- import { AXMenuModule } from '@acorex/components/menu';
13
- import * as i7 from '@acorex/components/popover';
14
- import { AXPopoverModule } from '@acorex/components/popover';
15
- import { AXLocaleService } from '@acorex/core/locale';
16
- import * as i5 from '@acorex/core/translation';
17
- import { AXTranslationModule } from '@acorex/core/translation';
18
- import { AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';
19
- import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPageLayoutBase } from '@acorex/platform/layout/views';
20
- import * as i2 from '@angular/common';
21
- import { CommonModule } from '@angular/common';
22
- import * as i0 from '@angular/core';
23
- import { computed, inject, viewChild, input, model, output, ViewEncapsulation, ChangeDetectionStrategy, Component, signal } from '@angular/core';
24
- import * as i1 from '@angular/forms';
25
- import { FormsModule } from '@angular/forms';
26
- import { RouterModule } from '@angular/router';
27
- import { AXPTaskBoardService } from './acorex-modules-workflow-management.mjs';
28
- import { AXPSettingService } from '@acorex/platform/common';
29
- import { AXPPlatformScope } from '@acorex/platform/core';
30
- import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
31
- import { AXSchedulerComponent } from '@acorex/components/scheduler';
32
-
33
- const config = {
34
- i18n: 'workflow-management',
35
- };
36
- const RootConfig = {
37
- config,
38
- module: {
39
- module: 'WorkflowManagement',
40
- name: 'WorkflowManagement',
41
- title: `t('module-name', {scope:"${config.i18n}"})`,
42
- icon: 'fa-light fa-clipboard-list-check',
43
- },
44
- };
45
-
46
- var AXMTaskBoardSettings;
47
- (function (AXMTaskBoardSettings) {
48
- AXMTaskBoardSettings["CalendarViewMode"] = "taskboard.calendar.viewMode";
49
- AXMTaskBoardSettings["CurrentDate"] = "taskboard.calendar.currentDate";
50
- AXMTaskBoardSettings["SelectedTaskTypeFilter"] = "taskboard.filter.selectedTaskType";
51
- })(AXMTaskBoardSettings || (AXMTaskBoardSettings = {}));
52
-
53
- const AXMTaskBoardViewModel = signalStore({ providedIn: 'root' }, withState(() => ({
54
- isLoading: true, // Start with loading true until initialized
55
- calendarViewMode: 'month', // Default value
56
- currentDate: new Date(), // Default to today
57
- selectedTaskTypeName: null, // Store the name/ID of the task type for persistence
58
- taskTypes: [],
59
- })), withComputed((store) => ({
60
- // Computed property to get the actual AXPWorkflowTaskProvider object
61
- selectedTaskType: computed(() => {
62
- const name = store.selectedTaskTypeName();
63
- if (!name) {
64
- return null;
65
- }
66
- return store.taskTypes().find((tt) => tt.name === name) || null;
67
- }),
68
- // Example computed (you can add more as needed):
69
- // isMonthView: computed(() => store.calendarViewMode() === 'month'),
70
- })), withMethods((store, settingService = inject(AXPSettingService), // Inject the main service
71
- taskBoardService = inject(AXPTaskBoardService)) => ({
72
- async initialize() {
73
- patchState(store, { isLoading: true });
74
- const userScopedSettings = settingService.scope(AXPPlatformScope.User); // Get user scope once
75
- try {
76
- // 1. Load Task Types first
77
- const taskTypes = await taskBoardService.getTaskTypes();
78
- patchState(store, { taskTypes });
79
- // 2. Load Persisted Settings individually
80
- const [savedViewMode, savedDateString, savedTaskTypeName] = await Promise.all([
81
- userScopedSettings.get(AXMTaskBoardSettings.CalendarViewMode),
82
- userScopedSettings.get(AXMTaskBoardSettings.CurrentDate),
83
- userScopedSettings.get(AXMTaskBoardSettings.SelectedTaskTypeFilter),
84
- ]);
85
- patchState(store, {
86
- calendarViewMode: savedViewMode || 'month', // Fallback to default
87
- currentDate: savedDateString ? new Date(savedDateString) : new Date(), // Parse stored date string
88
- selectedTaskTypeName: savedTaskTypeName || null, // Load persisted task type name
89
- isLoading: false,
90
- });
91
- }
92
- catch (error) {
93
- console.error('Error initializing TaskBoard ViewModel:', error);
94
- // Fallback to defaults on error to ensure the app is usable
95
- patchState(store, {
96
- calendarViewMode: 'month',
97
- currentDate: new Date(),
98
- selectedTaskTypeName: null,
99
- taskTypes: store.taskTypes(), // Retain loaded task types if any, or empty if error was before taskTypes load
100
- isLoading: false,
101
- });
102
- }
103
- },
104
- setCalendarViewMode(mode) {
105
- patchState(store, { calendarViewMode: mode });
106
- settingService
107
- .scope(AXPPlatformScope.User)
108
- .set(AXMTaskBoardSettings.CalendarViewMode, mode)
109
- .catch((error) => console.error('Error saving calendar view mode:', error));
110
- },
111
- setCurrentDate(date) {
112
- patchState(store, { currentDate: new Date(date) }); // Ensure it's a new Date object
113
- settingService
114
- .scope(AXPPlatformScope.User)
115
- .set(AXMTaskBoardSettings.CurrentDate, date.toISOString()) // Store as ISO string
116
- .catch((error) => console.error('Error saving current date:', error));
117
- },
118
- setSelectedTaskTypeProvider(taskType) {
119
- const taskTypeName = taskType ? taskType.name : null;
120
- patchState(store, { selectedTaskTypeName: taskTypeName });
121
- settingService
122
- .scope(AXPPlatformScope.User)
123
- .set(AXMTaskBoardSettings.SelectedTaskTypeFilter, taskTypeName)
124
- .catch((error) => console.error('Error saving selected task type filter:', error));
125
- },
126
- })));
127
-
128
- /**
129
- * Component for displaying and interacting with an organizational chart.
130
- */
131
- class AXMTaskBoardCalendarViewComponent {
132
- constructor() {
133
- this.taskBoardService = inject(AXPTaskBoardService);
134
- this.schedulerComponent = viewChild(AXSchedulerComponent);
135
- this.startingDate = input(new Date());
136
- this.selectedView = model('day');
137
- this.dataSource = input.required();
138
- this.onTaskChanged = output();
139
- this.onMonthSlotDblClicked = output();
140
- this.component = output();
141
- this.onTaskRightClick = output();
142
- }
143
- ngAfterViewInit() {
144
- if (this.schedulerComponent()) {
145
- this.component.emit(this.schedulerComponent());
146
- }
147
- }
148
- onTaskDrop(event) {
149
- this.taskBoardService
150
- .updateTask(event.appointment, {
151
- from: event.slot.startDate.date,
152
- end: event.slot.endDate.date,
153
- })
154
- .then((task) => {
155
- this.onTaskChanged.emit(task);
156
- this.schedulerComponent()?.refresh([task]);
157
- });
158
- }
159
- onTaskRightClickHandler(event) {
160
- this.onTaskRightClick.emit(event);
161
- }
162
- onSlotDblClicked(event) {
163
- if (event.sender.selectedView() === 'month') {
164
- this.onMonthSlotDblClicked.emit(event.slot.startDate.date);
165
- }
166
- }
167
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: AXMTaskBoardCalendarViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
168
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.4", type: AXMTaskBoardCalendarViewComponent, isStandalone: true, selector: "axm-task-board-calendar-view", inputs: { startingDate: { classPropertyName: "startingDate", publicName: "startingDate", isSignal: true, isRequired: false, transformFunction: null }, selectedView: { classPropertyName: "selectedView", publicName: "selectedView", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { selectedView: "selectedViewChange", onTaskChanged: "onTaskChanged", onMonthSlotDblClicked: "onMonthSlotDblClicked", component: "component", onTaskRightClick: "onTaskRightClick" }, viewQueries: [{ propertyName: "schedulerComponent", first: true, predicate: AXSchedulerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ax-scheduler\n [hasHeader]=\"false\"\n [dataSource]=\"dataSource()\"\n [startingDate]=\"startingDate()\"\n [selectedView]=\"selectedView()\"\n (onAppointmentDrop)=\"onTaskDrop($event)\"\n (onSlotDblClicked)=\"onSlotDblClicked($event)\"\n (onAppointmentRightClick)=\"onTaskRightClickHandler($event)\"\n></ax-scheduler>\n", styles: ["ax-scheduler{line-height:1.5;background-color:rgba(var(--ax-sys-color-lightest-surface))!important}\n"], dependencies: [{ kind: "component", type: AXSchedulerComponent, selector: "ax-scheduler", inputs: ["calendar", "startingDate", "endDayHour", "startDayHour", "hasHeader", "readonly", "draggable", "allowFullScreen", "multiDayViewDaysCount", "dataSource", "firstDayOfWeek", "views", "selectedView"], outputs: ["selectedViewChange", "onDataLoaded", "onRangeChanged", "onSlotClicked", "onSlotDblClicked", "onSlotRightClick", "onAppointmentDrop", "onAppointmentClicked", "onAppointmentDblClicked", "onAppointmentRightClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
169
- }
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: AXMTaskBoardCalendarViewComponent, decorators: [{
171
- type: Component,
172
- args: [{ selector: 'axm-task-board-calendar-view', imports: [AXSchedulerComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ax-scheduler\n [hasHeader]=\"false\"\n [dataSource]=\"dataSource()\"\n [startingDate]=\"startingDate()\"\n [selectedView]=\"selectedView()\"\n (onAppointmentDrop)=\"onTaskDrop($event)\"\n (onSlotDblClicked)=\"onSlotDblClicked($event)\"\n (onAppointmentRightClick)=\"onTaskRightClickHandler($event)\"\n></ax-scheduler>\n", styles: ["ax-scheduler{line-height:1.5;background-color:rgba(var(--ax-sys-color-lightest-surface))!important}\n"] }]
173
- }] });
174
-
175
- /**
176
- * Component for displaying and interacting with an organizational chart.
177
- */
178
- class AXMTaskBoardPage extends AXPPageLayoutBaseComponent {
179
- constructor() {
180
- super(...arguments);
181
- this.rootConfig = RootConfig;
182
- this.localeService = inject(AXLocaleService);
183
- this.taskBoardService = inject(AXPTaskBoardService);
184
- this.vm = inject(AXMTaskBoardViewModel);
185
- this.currentTask = signal(null);
186
- this.schedulerComponent = signal(null);
187
- this.viewsItems = signal([
188
- { key: 'day', text: 'daily', icon: 'fa-light fa-calendar-day' },
189
- { key: 'week', text: 'weekly', icon: 'fa-light fa-calendar-week' },
190
- { key: 'month', text: 'monthly', icon: 'fa-light fa-calendar-alt' },
191
- { key: 'agenda', text: 'agenda', icon: 'fa-light fa-calendar-range' },
192
- ]);
193
- this.calendarType = computed(() => this.localeService.activeProfile().calendar.system);
194
- this.contextMenu = viewChild('rootContextMenu');
195
- this.selectedViewMode = computed(() => this.viewsItems().find((item) => item.key === this.vm.calendarViewMode()) || this.viewsItems()[0]);
196
- this.dataSource = (filter) => {
197
- const taskTypeProvider = this.vm.selectedTaskType();
198
- const types = taskTypeProvider ? [taskTypeProvider.name] : undefined;
199
- return this.taskBoardService.getTasks({ ...filter, types });
200
- };
201
- }
202
- async ngOnInit() {
203
- await super.ngOnInit();
204
- await this.vm.initialize();
205
- }
206
- async getPageTitle() {
207
- return await this.translateService.translateAsync('task-board.page-title', { scope: this.rootConfig.config.i18n });
208
- }
209
- async getPageBreadcrumbs() {
210
- return [
211
- {
212
- title: await this.translateService.translateAsync('root-menu', { scope: this.rootConfig.config.i18n }),
213
- },
214
- ];
215
- }
216
- schedulerComponentChanged(component) {
217
- this.schedulerComponent.set(component);
218
- }
219
- handleContextMenuOnOpening(event) {
220
- for (const item of this.currentTask()?.data?.actions || []) {
221
- event.items.push({
222
- text: item.title,
223
- icon: item.icon,
224
- data: {
225
- command: item.command,
226
- },
227
- });
228
- }
229
- }
230
- handleTaskRightClick(event) {
231
- this.currentTask.set(event.appointment);
232
- const x = event.nativeEvent.clientX;
233
- const y = event.nativeEvent.clientY;
234
- const element = event.sender.nativeElement;
235
- this.contextMenu()?.showAt({ x, y }, element);
236
- }
237
- handleMonthSlotDblClicked(date) {
238
- this.vm.setCurrentDate(date);
239
- this.vm.setCalendarViewMode('day');
240
- }
241
- handleCalendarViewChange(view) {
242
- this.vm.setCalendarViewMode(view);
243
- }
244
- handleSelectedTaskTypeChange(taskType) {
245
- this.vm.setSelectedTaskTypeProvider(taskType);
246
- this.schedulerComponent()?.refresh();
247
- }
248
- handleSchedulerDateChanged(event) {
249
- if (this.vm.isLoading()) {
250
- return;
251
- }
252
- const newDate = event.value;
253
- const currentDateInVm = this.vm.currentDate();
254
- const dateToSet = newDate || new Date();
255
- if (!currentDateInVm || currentDateInVm.getTime() !== dateToSet.getTime()) {
256
- this.vm.setCurrentDate(dateToSet);
257
- }
258
- }
259
- handleContextMenuItemClick(event) {
260
- this.taskBoardService.executeCommand(event.item.data?.command, this.currentTask()?.data?.provider ?? '');
261
- }
262
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: AXMTaskBoardPage, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
263
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.4", type: AXMTaskBoardPage, isStandalone: true, selector: "ng-component", providers: [
264
- {
265
- provide: AXPPageLayoutBase,
266
- useExisting: AXMTaskBoardPage,
267
- },
268
- ], viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["rootContextMenu"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n <axp-page-toolbar>\n <axp-layout-prefix>\n <ax-button\n [text]=\"t(vm.selectedTaskType()?.title || 'task-board.all', { scope: rootConfig.config.i18n }) | async\"\n >\n <ax-prefix><ax-icon icon=\"fa-light {{vm.selectedTaskType()?.icon || 'fa-tasks'}}\"></ax-icon></ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list class=\"ax-p-2\">\n <ax-button-item\n (onClick)=\"handleSelectedTaskTypeChange(null)\"\n [text]=\"(t('task-board.all', { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix><ax-icon icon=\"fa-light fa-tasks\"></ax-icon></ax-prefix>\n </ax-button-item>\n @for(item of vm.taskTypes(); track item.name) {\n <ax-button-item\n (onClick)=\"handleSelectedTaskTypeChange(item)\"\n [text]=\"(t(item.title, { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix><ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon></ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <div class=\"ax-scheduler-header\">\n <ax-button look=\"blank\" (onClick)=\"schedulerComponent()?.prevClick()\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-left arrow-icon\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"schedulerComponent()?.currentDateText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"schedulerComponent()?.nextClick()\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-right arrow-icon\"></ax-icon>\n </ax-button>\n <ax-popover [target]=\"date\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n [type]=\"calendarType()\"\n [ngModel]=\"vm.currentDate()\"\n [depth]=\"schedulerComponent()?.calendarDepth()\"\n (onValueChanged)=\"handleSchedulerDateChanged($event)\"\n ></ax-calendar>\n </div>\n </ax-popover>\n </div>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <ax-button>\n <ax-icon icon=\"fa-light {{ selectedViewMode().icon }}\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for(item of viewsItems(); track item.key) {\n <ax-button-item\n [text]=\"(t('dateTime.duration.' + item.text, { scope: 'common' }) | async)!\"\n [selected]=\"vm.calendarViewMode() === item.key\"\n (onClick)=\"handleCalendarViewChange(item.key)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if(item.break) {\n <ax-divider></ax-divider>\n } }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </axp-layout-suffix>\n </axp-page-toolbar>\n <axp-page-content class=\"ax-overflow-hidden\">\n <axm-task-board-calendar-view\n class=\"axp-scheduler-container\"\n [dataSource]=\"dataSource\"\n [startingDate]=\"vm.currentDate()\"\n [selectedView]=\"vm.calendarViewMode()\"\n (component)=\"schedulerComponentChanged($event)\"\n (onTaskRightClick)=\"handleTaskRightClick($event)\"\n (onMonthSlotDblClicked)=\"handleMonthSlotDblClicked($event)\"\n ></axm-task-board-calendar-view>\n <ax-context-menu\n #rootContextMenu\n [closeOn]=\"'leave'\"\n [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n >\n </ax-context-menu>\n </axp-page-content>\n</axp-page-layout>\n", styles: ["axm-task-board-calendar-view{height:100%}html[dir=rtl] axp-page-layout axp-page-toolbar axp-layout-prefix .ax-scheduler-header .arrow-icon:before{-moz-transform:scale(-1,1);-webkit-transform:scale(-1,1);-o-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scaleX(-1)}\n"], dependencies: [{ 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: CommonModule }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type:
269
- //
270
- AXMenuModule }, { kind: "component", type: i3.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "items", "target"], outputs: ["onItemClick", "onOpening"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i4.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: "component", type: i4.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i4.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i6.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i6.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: AXLoadingModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type:
271
- //
272
- 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: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXMTaskBoardCalendarViewComponent, selector: "axm-task-board-calendar-view", inputs: ["startingDate", "selectedView", "dataSource"], outputs: ["selectedViewChange", "onTaskChanged", "onMonthSlotDblClicked", "component", "onTaskRightClick"] }, { kind: "component", type: AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i7.AXPopoverComponent, selector: "ax-popover", inputs: ["offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXCalendarComponent, selector: "ax-calendar", inputs: ["rtl", "readonly", "value", "name", "disabled", "depth", "activeView", "minValue", "maxValue", "disabledDates", "holidayDates", "type", "cellTemplate", "cellClass", "showNavigation", "count", "id"], outputs: ["onOptionChanged", "valueChange", "onValueChanged", "minValueChange", "maxValueChange", "onBlur", "onFocus", "depthChange", "typeChange", "activeViewChange", "disabledDatesChange", "holidayDatesChange", "onNavigate", "onSlotClick", "countChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
273
- }
274
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: AXMTaskBoardPage, decorators: [{
275
- type: Component,
276
- args: [{ imports: [
277
- FormsModule,
278
- CommonModule,
279
- RouterModule,
280
- //
281
- AXMenuModule,
282
- AXButtonModule,
283
- AXDropdownButtonModule,
284
- AXTranslationModule,
285
- AXDecoratorModule,
286
- AXLoadingModule,
287
- AXBreadcrumbsModule,
288
- AXBadgeModule,
289
- //
290
- AXPThemeLayoutBlockComponent,
291
- AXPPageLayoutComponent,
292
- AXMTaskBoardCalendarViewComponent,
293
- AXDropdownPanelComponent,
294
- AXPopoverModule,
295
- AXCalendarComponent,
296
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
297
- {
298
- provide: AXPPageLayoutBase,
299
- useExisting: AXMTaskBoardPage,
300
- },
301
- ], template: "<axp-page-layout *translate=\"let t\">\n <axp-page-toolbar>\n <axp-layout-prefix>\n <ax-button\n [text]=\"t(vm.selectedTaskType()?.title || 'task-board.all', { scope: rootConfig.config.i18n }) | async\"\n >\n <ax-prefix><ax-icon icon=\"fa-light {{vm.selectedTaskType()?.icon || 'fa-tasks'}}\"></ax-icon></ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list class=\"ax-p-2\">\n <ax-button-item\n (onClick)=\"handleSelectedTaskTypeChange(null)\"\n [text]=\"(t('task-board.all', { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix><ax-icon icon=\"fa-light fa-tasks\"></ax-icon></ax-prefix>\n </ax-button-item>\n @for(item of vm.taskTypes(); track item.name) {\n <ax-button-item\n (onClick)=\"handleSelectedTaskTypeChange(item)\"\n [text]=\"(t(item.title, { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix><ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon></ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <div class=\"ax-scheduler-header\">\n <ax-button look=\"blank\" (onClick)=\"schedulerComponent()?.prevClick()\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-left arrow-icon\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"schedulerComponent()?.currentDateText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"schedulerComponent()?.nextClick()\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-right arrow-icon\"></ax-icon>\n </ax-button>\n <ax-popover [target]=\"date\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n [type]=\"calendarType()\"\n [ngModel]=\"vm.currentDate()\"\n [depth]=\"schedulerComponent()?.calendarDepth()\"\n (onValueChanged)=\"handleSchedulerDateChanged($event)\"\n ></ax-calendar>\n </div>\n </ax-popover>\n </div>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <ax-button>\n <ax-icon icon=\"fa-light {{ selectedViewMode().icon }}\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for(item of viewsItems(); track item.key) {\n <ax-button-item\n [text]=\"(t('dateTime.duration.' + item.text, { scope: 'common' }) | async)!\"\n [selected]=\"vm.calendarViewMode() === item.key\"\n (onClick)=\"handleCalendarViewChange(item.key)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if(item.break) {\n <ax-divider></ax-divider>\n } }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </axp-layout-suffix>\n </axp-page-toolbar>\n <axp-page-content class=\"ax-overflow-hidden\">\n <axm-task-board-calendar-view\n class=\"axp-scheduler-container\"\n [dataSource]=\"dataSource\"\n [startingDate]=\"vm.currentDate()\"\n [selectedView]=\"vm.calendarViewMode()\"\n (component)=\"schedulerComponentChanged($event)\"\n (onTaskRightClick)=\"handleTaskRightClick($event)\"\n (onMonthSlotDblClicked)=\"handleMonthSlotDblClicked($event)\"\n ></axm-task-board-calendar-view>\n <ax-context-menu\n #rootContextMenu\n [closeOn]=\"'leave'\"\n [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n >\n </ax-context-menu>\n </axp-page-content>\n</axp-page-layout>\n", styles: ["axm-task-board-calendar-view{height:100%}html[dir=rtl] axp-page-layout axp-page-toolbar axp-layout-prefix .ax-scheduler-header .arrow-icon:before{-moz-transform:scale(-1,1);-webkit-transform:scale(-1,1);-o-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scaleX(-1)}\n"] }]
302
- }] });
303
-
304
- export { AXMTaskBoardPage };
305
- //# sourceMappingURL=acorex-modules-workflow-management-task-board.page-BzLr0QnF.mjs.map