@acorex/modules 20.3.0-next.4 → 20.3.0-next.6

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 (86) hide show
  1. package/fesm2022/acorex-modules-content-management.mjs.map +1 -1
  2. package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-DDriJFmP.mjs → acorex-modules-document-management-acorex-modules-document-management-DhEDQZru.mjs} +122 -80
  3. package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-DDriJFmP.mjs.map → acorex-modules-document-management-acorex-modules-document-management-DhEDQZru.mjs.map} +1 -1
  4. package/fesm2022/{acorex-modules-document-management-attachment-widget.component-OYJu4IJz.mjs → acorex-modules-document-management-attachment-widget.component-Bx2Ps7uX.mjs} +2 -2
  5. package/fesm2022/{acorex-modules-document-management-attachment-widget.component-OYJu4IJz.mjs.map → acorex-modules-document-management-attachment-widget.component-Bx2Ps7uX.mjs.map} +1 -1
  6. package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-CZzlGMcu.mjs → acorex-modules-document-management-create-folder-dialog.component-B26m8qWj.mjs} +2 -2
  7. package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-CZzlGMcu.mjs.map → acorex-modules-document-management-create-folder-dialog.component-B26m8qWj.mjs.map} +1 -1
  8. package/fesm2022/{acorex-modules-document-management-details-view.component-VdV7xGPS.mjs → acorex-modules-document-management-details-view.component-3DmulyK_.mjs} +2 -2
  9. package/fesm2022/{acorex-modules-document-management-details-view.component-VdV7xGPS.mjs.map → acorex-modules-document-management-details-view.component-3DmulyK_.mjs.map} +1 -1
  10. package/fesm2022/{acorex-modules-document-management-document-signature-popup.component-Gi0_m0oe.mjs → acorex-modules-document-management-document-signature-popup.component-DmR6gFdD.mjs} +2 -2
  11. package/fesm2022/{acorex-modules-document-management-document-signature-popup.component-Gi0_m0oe.mjs.map → acorex-modules-document-management-document-signature-popup.component-DmR6gFdD.mjs.map} +1 -1
  12. package/fesm2022/{acorex-modules-document-management-drive-choose.component-BgRZ_nhs.mjs → acorex-modules-document-management-drive-choose.component-BNyPOrzl.mjs} +2 -2
  13. package/fesm2022/{acorex-modules-document-management-drive-choose.component-BgRZ_nhs.mjs.map → acorex-modules-document-management-drive-choose.component-BNyPOrzl.mjs.map} +1 -1
  14. package/fesm2022/{acorex-modules-document-management-drive.component-BRCGsnuI.mjs → acorex-modules-document-management-drive.component-D5X_bI5D.mjs} +2 -2
  15. package/fesm2022/{acorex-modules-document-management-drive.component-BRCGsnuI.mjs.map → acorex-modules-document-management-drive.component-D5X_bI5D.mjs.map} +1 -1
  16. package/fesm2022/{acorex-modules-document-management-large-icons-view.component-CnsPx3K3.mjs → acorex-modules-document-management-large-icons-view.component-AzDtXQqt.mjs} +2 -2
  17. package/fesm2022/{acorex-modules-document-management-large-icons-view.component-CnsPx3K3.mjs.map → acorex-modules-document-management-large-icons-view.component-AzDtXQqt.mjs.map} +1 -1
  18. package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-D4OUme1W.mjs → acorex-modules-document-management-large-tiles-view.component-DCG_v9JT.mjs} +2 -2
  19. package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-D4OUme1W.mjs.map → acorex-modules-document-management-large-tiles-view.component-DCG_v9JT.mjs.map} +1 -1
  20. package/fesm2022/{acorex-modules-document-management-list-view.component-C7i4jI9h.mjs → acorex-modules-document-management-list-view.component-Cb2OVElN.mjs} +2 -2
  21. package/fesm2022/{acorex-modules-document-management-list-view.component-C7i4jI9h.mjs.map → acorex-modules-document-management-list-view.component-Cb2OVElN.mjs.map} +1 -1
  22. package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-DHVn7RIv.mjs → acorex-modules-document-management-rename-node-dialog.component-B7gcoDDb.mjs} +2 -2
  23. package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-DHVn7RIv.mjs.map → acorex-modules-document-management-rename-node-dialog.component-B7gcoDDb.mjs.map} +1 -1
  24. package/fesm2022/{acorex-modules-document-management-small-icons-view.component-By36moe5.mjs → acorex-modules-document-management-small-icons-view.component-EN4ttbvx.mjs} +2 -2
  25. package/fesm2022/{acorex-modules-document-management-small-icons-view.component-By36moe5.mjs.map → acorex-modules-document-management-small-icons-view.component-EN4ttbvx.mjs.map} +1 -1
  26. package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-CO6MfsEU.mjs → acorex-modules-document-management-small-tiles-view.component-C-HjbNwe.mjs} +2 -2
  27. package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-CO6MfsEU.mjs.map → acorex-modules-document-management-small-tiles-view.component-C-HjbNwe.mjs.map} +1 -1
  28. package/fesm2022/acorex-modules-document-management.mjs +1 -1
  29. package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-WkDn4mpE.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-BQ_KNd7M.mjs} +23 -12
  30. package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-WkDn4mpE.mjs.map → acorex-modules-human-capital-management-acorex-modules-human-capital-management-BQ_KNd7M.mjs.map} +1 -1
  31. package/fesm2022/{acorex-modules-human-capital-management-employee-skill.entity-DsUYujPr.mjs → acorex-modules-human-capital-management-employee-skill.entity-3wofaUXu.mjs} +2 -2
  32. package/fesm2022/{acorex-modules-human-capital-management-employee-skill.entity-DsUYujPr.mjs.map → acorex-modules-human-capital-management-employee-skill.entity-3wofaUXu.mjs.map} +1 -1
  33. package/fesm2022/{acorex-modules-human-capital-management-employee.entity-CC-LIIki.mjs → acorex-modules-human-capital-management-employee.entity-1fVathnk.mjs} +10 -8
  34. package/fesm2022/acorex-modules-human-capital-management-employee.entity-1fVathnk.mjs.map +1 -0
  35. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-Mgkdm2vo.mjs → acorex-modules-human-capital-management-employment-type.entity-BWrwli0P.mjs} +2 -2
  36. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-Mgkdm2vo.mjs.map → acorex-modules-human-capital-management-employment-type.entity-BWrwli0P.mjs.map} +1 -1
  37. package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-BJyciZGL.mjs → acorex-modules-human-capital-management-leave-request.entity-4ddc6R_K.mjs} +2 -2
  38. package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-BJyciZGL.mjs.map → acorex-modules-human-capital-management-leave-request.entity-4ddc6R_K.mjs.map} +1 -1
  39. package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-IewYlMLV.mjs → acorex-modules-human-capital-management-leave-type.entity-DYYJVRju.mjs} +2 -2
  40. package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-IewYlMLV.mjs.map → acorex-modules-human-capital-management-leave-type.entity-DYYJVRju.mjs.map} +1 -1
  41. package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-BlKFRnO0.mjs → acorex-modules-human-capital-management-position-assignment.entity-DIqdhqk4.mjs} +7 -53
  42. package/fesm2022/acorex-modules-human-capital-management-position-assignment.entity-DIqdhqk4.mjs.map +1 -0
  43. package/fesm2022/{acorex-modules-human-capital-management-skill-level.entity-De1qKpcU.mjs → acorex-modules-human-capital-management-skill-level.entity-BN67pBaa.mjs} +2 -2
  44. package/fesm2022/{acorex-modules-human-capital-management-skill-level.entity-De1qKpcU.mjs.map → acorex-modules-human-capital-management-skill-level.entity-BN67pBaa.mjs.map} +1 -1
  45. package/fesm2022/{acorex-modules-human-capital-management-skill.entity-RrnBU0M5.mjs → acorex-modules-human-capital-management-skill.entity-D4CglCC7.mjs} +2 -2
  46. package/fesm2022/{acorex-modules-human-capital-management-skill.entity-RrnBU0M5.mjs.map → acorex-modules-human-capital-management-skill.entity-D4CglCC7.mjs.map} +1 -1
  47. package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
  48. package/fesm2022/acorex-modules-organization-management-org-chart.page-keZ4Gk7y.mjs +544 -0
  49. package/fesm2022/acorex-modules-organization-management-org-chart.page-keZ4Gk7y.mjs.map +1 -0
  50. package/fesm2022/{acorex-modules-organization-management-position.entity-DK-i78ck.mjs → acorex-modules-organization-management-position.entity-CzBbuApR.mjs} +47 -1
  51. package/fesm2022/acorex-modules-organization-management-position.entity-CzBbuApR.mjs.map +1 -0
  52. package/fesm2022/{acorex-modules-organization-management-settings.provider-feVwZnkw.mjs → acorex-modules-organization-management-settings.provider-BvOAb0jb.mjs} +21 -2
  53. package/fesm2022/acorex-modules-organization-management-settings.provider-BvOAb0jb.mjs.map +1 -0
  54. package/fesm2022/acorex-modules-organization-management.mjs +358 -240
  55. package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
  56. package/fesm2022/acorex-modules-report-management.mjs +76 -16
  57. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  58. package/fesm2022/{acorex-modules-settings-management-setting-page.component-Y-liTcuX.mjs → acorex-modules-settings-management-setting-page.component-IG1o_0Dp.mjs} +17 -14
  59. package/fesm2022/acorex-modules-settings-management-setting-page.component-IG1o_0Dp.mjs.map +1 -0
  60. package/fesm2022/acorex-modules-settings-management.mjs +1 -1
  61. package/fesm2022/acorex-modules-settings-management.mjs.map +1 -1
  62. package/organization-management/README.md +98 -2
  63. package/organization-management/index.d.ts +44 -123
  64. package/package.json +1 -1
  65. package/report-management/index.d.ts +31 -3
  66. package/fesm2022/acorex-modules-human-capital-management-employee.entity-CC-LIIki.mjs.map +0 -1
  67. package/fesm2022/acorex-modules-human-capital-management-position-assignment.entity-BlKFRnO0.mjs.map +0 -1
  68. package/fesm2022/acorex-modules-organization-management-add-item.component-CtuULLkY.mjs +0 -89
  69. package/fesm2022/acorex-modules-organization-management-add-item.component-CtuULLkY.mjs.map +0 -1
  70. package/fesm2022/acorex-modules-organization-management-branch.entity-C4Le6Kv6.mjs +0 -317
  71. package/fesm2022/acorex-modules-organization-management-branch.entity-C4Le6Kv6.mjs.map +0 -1
  72. package/fesm2022/acorex-modules-organization-management-department.entity-BkEbajpN.mjs +0 -288
  73. package/fesm2022/acorex-modules-organization-management-department.entity-BkEbajpN.mjs.map +0 -1
  74. package/fesm2022/acorex-modules-organization-management-division.entity-Cds8jkR5.mjs +0 -515
  75. package/fesm2022/acorex-modules-organization-management-division.entity-Cds8jkR5.mjs.map +0 -1
  76. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DfwjhVRX.mjs +0 -116
  77. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DfwjhVRX.mjs.map +0 -1
  78. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.service-D7NlQXp2.mjs +0 -147
  79. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.service-D7NlQXp2.mjs.map +0 -1
  80. package/fesm2022/acorex-modules-organization-management-org-chart.page-DeqD7PyH.mjs +0 -989
  81. package/fesm2022/acorex-modules-organization-management-org-chart.page-DeqD7PyH.mjs.map +0 -1
  82. package/fesm2022/acorex-modules-organization-management-position.entity-DK-i78ck.mjs.map +0 -1
  83. package/fesm2022/acorex-modules-organization-management-settings.keys-B3cgSi_S.mjs +0 -22
  84. package/fesm2022/acorex-modules-organization-management-settings.keys-B3cgSi_S.mjs.map +0 -1
  85. package/fesm2022/acorex-modules-organization-management-settings.provider-feVwZnkw.mjs.map +0 -1
  86. package/fesm2022/acorex-modules-settings-management-setting-page.component-Y-liTcuX.mjs.map +0 -1
@@ -1,116 +0,0 @@
1
- import * as i5 from '@acorex/components/alert';
2
- import { AXAlertModule } from '@acorex/components/alert';
3
- import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
4
- import * as i3 from '@acorex/components/button';
5
- import { AXButtonModule } from '@acorex/components/button';
6
- import { AXCheckBoxModule } from '@acorex/components/check-box';
7
- import * as i3$1 from '@acorex/components/decorators';
8
- import { AXDecoratorModule } from '@acorex/components/decorators';
9
- import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
10
- import * as i4$1 from '@acorex/components/loading';
11
- import { AXLoadingModule } from '@acorex/components/loading';
12
- import { AXMenuModule } from '@acorex/components/menu';
13
- import * as i4 from '@acorex/core/translation';
14
- import { AXTranslationModule } from '@acorex/core/translation';
15
- import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPageLayoutBase } from '@acorex/platform/layout/views';
16
- import { AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';
17
- import * as i0 from '@angular/core';
18
- import { inject, signal, ChangeDetectionStrategy, Component } from '@angular/core';
19
- import { FormsModule } from '@angular/forms';
20
- import { RouterModule } from '@angular/router';
21
- import { RootConfig } from './acorex-modules-organization-management.mjs';
22
- import { A as AXMOrgChartConfigService } from './acorex-modules-organization-management-org-chart-configuration.service-D7NlQXp2.mjs';
23
-
24
- class AXMOrgChartConfigurationPage extends AXPPageLayoutBaseComponent {
25
- constructor() {
26
- super(...arguments);
27
- this.chartService = inject(AXMOrgChartConfigService);
28
- this.loadingStates = signal({}, ...(ngDevMode ? [{ debugName: "loadingStates" }] : []));
29
- this.rootConfig = RootConfig;
30
- }
31
- async ngOnInit() {
32
- await super.ngOnInit();
33
- await this.chartService.load();
34
- }
35
- async togglePermission(parent, child) {
36
- //TODO: Check the async and loading
37
- // Set the loading state for this cell to true.
38
- this.loadingStates.update((states) => {
39
- if (!states[parent]) {
40
- states[parent] = {};
41
- }
42
- states[parent][child] = true;
43
- return states;
44
- });
45
- this.chartService.set(parent, child, !this.chartService.get(parent, child));
46
- await this.chartService.update();
47
- // Turn off the loading state.
48
- this.loadingStates.update((states) => {
49
- if (!states[parent]) {
50
- states[parent] = {};
51
- }
52
- states[parent][child] = false;
53
- return states;
54
- });
55
- }
56
- async getPageTitle() {
57
- return await this.translateService.translateAsync('chart-configuration.page-title', { scope: this.rootConfig.config.i18n });
58
- }
59
- async getPageDescription() {
60
- return await this.translateService.translateAsync('chart-configuration.page-description', { scope: this.rootConfig.config.i18n });
61
- }
62
- async getSecondaryMenuItems() {
63
- return [
64
- {
65
- title: await this.translateService.translateAsync('chart-configuration.actions.reset', { scope: this.rootConfig.config.i18n }),
66
- icon: 'fa-light fa-rotate-left',
67
- color: 'primary',
68
- command: {
69
- name: 'reset',
70
- }
71
- }
72
- ];
73
- }
74
- async getPageBreadcrumbs() {
75
- return [
76
- {
77
- title: await this.translateService.translateAsync('root-menu', { scope: this.rootConfig.config.i18n })
78
- },
79
- ];
80
- }
81
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXMOrgChartConfigurationPage, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
82
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.8", type: AXMOrgChartConfigurationPage, isStandalone: true, selector: "ng-component", providers: [
83
- AXMOrgChartConfigService,
84
- {
85
- provide: AXPPageLayoutBase,
86
- useExisting: AXMOrgChartConfigurationPage
87
- }
88
- ], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n <axp-page-content>\n <div class=\"ax-flex ax-flex-col ax-gap-6 ax-w-full\">\n <div>\n <h3 class=\"ax-font-semibold ax-text-xl\">Relations Permissions</h3>\n <p class=\"ax-text-sm ax-opacity-85\">\n This matrix sets the relationships between nodes in your organization chart. Click a cell to toggle the\n relation between <span class=\"ax-text-danger-500\">Allowed</span> and\n <span class=\"ax-text-success-500\">Denied</span>.\n </p>\n </div>\n <!---------------- Matrix Table ---------------->\n <div class=\"ax-w-full ax-overflow-auto\">\n <table class=\"ax-table-auto ax-border-collapse ax-max-w-fit ax-border-surface ax-rounded-md\">\n <thead>\n <tr class=\"ax-dark-surface\">\n <!-- Top-left empty cell -->\n <th class=\"ax-border ax-dark-surface ax-p-4 ax-font-semibold ax-text-start\">Parent \\ Child</th>\n <!-- Horizontal headers -->\n @for ( type of chartService.types; track $index) {\n <th class=\"ax-border ax-dark-surface ax-p-4 ax-min-w-32 ax-text-center ax-font-semibold\">{{ type }}</th>\n }\n </tr>\n </thead>\n <tbody>\n <!-- For each parent type, render a row with alternating backgrounds -->\n @for ( parent of chartService.types; track $index) {\n <tr>\n <!-- Vertical header cell with custom header colors -->\n <td class=\"ax-border ax-dark-surface ax-p-4 ax-font-semibold ax-text-start\">{{ parent }}</td>\n <!-- Render a cell for each potential child type -->\n @for ( child of chartService.types; track $index) {\n <td class=\"ax-border ax-lightest-surface ax-border-surface ax-p-2\">\n <div class=\"ax-flex ax-justify-center ax-cursor-pointer ax-sm\">\n @let isLoading = loadingStates()[parent]?.[child];\n <ax-button\n look=\"blank\"\n [color]=\"chartService.isAllowed(parent, child) ? 'success' : 'danger'\"\n [text]=\"chartService.isAllowed(parent, child) ? 'Allowed' : 'Denied'\"\n [disabled]=\"isLoading\"\n (onClick)=\"togglePermission(parent, child)\"\n >\n @if(isLoading) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n <div>\n <ax-alert [color]=\"'warning'\" class=\"ax-max-w-fit\">\n <ax-icon></ax-icon>\n <ax-title>Attention</ax-title>\n <ax-content>\n Changes made here will not update your current organization chart. They will only affect future charts or\n updates.\n </ax-content>\n </ax-alert>\n </div>\n </div>\n </axp-page-content>\n</axp-page-layout>\n", dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: FormsModule }, { 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: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "ngmodule", type: AXMenuModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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: AXDropdownButtonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i4.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3$1.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: "component", type: i4$1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXAlertModule }, { kind: "component", type: i5.AXAlertComponent, selector: "ax-alert", inputs: ["color", "timeOut"], outputs: ["colorChange", "onClosed", "timeOutChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
89
- }
90
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXMOrgChartConfigurationPage, decorators: [{
91
- type: Component,
92
- args: [{ imports: [
93
- RouterModule,
94
- FormsModule,
95
- AXPThemeLayoutBlockComponent,
96
- AXPPageLayoutComponent,
97
- AXMenuModule,
98
- AXButtonModule,
99
- AXDropdownButtonModule,
100
- AXTranslationModule,
101
- AXDecoratorModule,
102
- AXLoadingModule,
103
- AXCheckBoxModule,
104
- AXBreadcrumbsModule,
105
- AXAlertModule
106
- ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
107
- AXMOrgChartConfigService,
108
- {
109
- provide: AXPPageLayoutBase,
110
- useExisting: AXMOrgChartConfigurationPage
111
- }
112
- ], template: "<axp-page-layout *translate=\"let t\">\n <axp-page-content>\n <div class=\"ax-flex ax-flex-col ax-gap-6 ax-w-full\">\n <div>\n <h3 class=\"ax-font-semibold ax-text-xl\">Relations Permissions</h3>\n <p class=\"ax-text-sm ax-opacity-85\">\n This matrix sets the relationships between nodes in your organization chart. Click a cell to toggle the\n relation between <span class=\"ax-text-danger-500\">Allowed</span> and\n <span class=\"ax-text-success-500\">Denied</span>.\n </p>\n </div>\n <!---------------- Matrix Table ---------------->\n <div class=\"ax-w-full ax-overflow-auto\">\n <table class=\"ax-table-auto ax-border-collapse ax-max-w-fit ax-border-surface ax-rounded-md\">\n <thead>\n <tr class=\"ax-dark-surface\">\n <!-- Top-left empty cell -->\n <th class=\"ax-border ax-dark-surface ax-p-4 ax-font-semibold ax-text-start\">Parent \\ Child</th>\n <!-- Horizontal headers -->\n @for ( type of chartService.types; track $index) {\n <th class=\"ax-border ax-dark-surface ax-p-4 ax-min-w-32 ax-text-center ax-font-semibold\">{{ type }}</th>\n }\n </tr>\n </thead>\n <tbody>\n <!-- For each parent type, render a row with alternating backgrounds -->\n @for ( parent of chartService.types; track $index) {\n <tr>\n <!-- Vertical header cell with custom header colors -->\n <td class=\"ax-border ax-dark-surface ax-p-4 ax-font-semibold ax-text-start\">{{ parent }}</td>\n <!-- Render a cell for each potential child type -->\n @for ( child of chartService.types; track $index) {\n <td class=\"ax-border ax-lightest-surface ax-border-surface ax-p-2\">\n <div class=\"ax-flex ax-justify-center ax-cursor-pointer ax-sm\">\n @let isLoading = loadingStates()[parent]?.[child];\n <ax-button\n look=\"blank\"\n [color]=\"chartService.isAllowed(parent, child) ? 'success' : 'danger'\"\n [text]=\"chartService.isAllowed(parent, child) ? 'Allowed' : 'Denied'\"\n [disabled]=\"isLoading\"\n (onClick)=\"togglePermission(parent, child)\"\n >\n @if(isLoading) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n <div>\n <ax-alert [color]=\"'warning'\" class=\"ax-max-w-fit\">\n <ax-icon></ax-icon>\n <ax-title>Attention</ax-title>\n <ax-content>\n Changes made here will not update your current organization chart. They will only affect future charts or\n updates.\n </ax-content>\n </ax-alert>\n </div>\n </div>\n </axp-page-content>\n</axp-page-layout>\n" }]
113
- }] });
114
-
115
- export { AXMOrgChartConfigurationPage };
116
- //# sourceMappingURL=acorex-modules-organization-management-org-chart-configuration.page-DfwjhVRX.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-modules-organization-management-org-chart-configuration.page-DfwjhVRX.mjs","sources":["../tmp-esm2022/organization-management/lib/features/organization-chart/org-chart-configuration.page.js"],"sourcesContent":["import { AXAlertModule } from '@acorex/components/alert';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';\nimport { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { RootConfig } from '../../const';\nimport { AXMOrgChartConfigService } from './org-chart-configuration.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/button\";\nimport * as i2 from \"@acorex/core/translation\";\nimport * as i3 from \"@acorex/components/decorators\";\nimport * as i4 from \"@acorex/components/loading\";\nimport * as i5 from \"@acorex/components/alert\";\nexport class AXMOrgChartConfigurationPage extends AXPPageLayoutBaseComponent {\n constructor() {\n super(...arguments);\n this.chartService = inject(AXMOrgChartConfigService);\n this.loadingStates = signal({}, ...(ngDevMode ? [{ debugName: \"loadingStates\" }] : []));\n this.rootConfig = RootConfig;\n }\n async ngOnInit() {\n await super.ngOnInit();\n await this.chartService.load();\n }\n async togglePermission(parent, child) {\n //TODO: Check the async and loading\n // Set the loading state for this cell to true.\n this.loadingStates.update((states) => {\n if (!states[parent]) {\n states[parent] = {};\n }\n states[parent][child] = true;\n return states;\n });\n this.chartService.set(parent, child, !this.chartService.get(parent, child));\n await this.chartService.update();\n // Turn off the loading state.\n this.loadingStates.update((states) => {\n if (!states[parent]) {\n states[parent] = {};\n }\n states[parent][child] = false;\n return states;\n });\n }\n async getPageTitle() {\n return await this.translateService.translateAsync('chart-configuration.page-title', { scope: this.rootConfig.config.i18n });\n }\n async getPageDescription() {\n return await this.translateService.translateAsync('chart-configuration.page-description', { scope: this.rootConfig.config.i18n });\n }\n async getSecondaryMenuItems() {\n return [\n {\n title: await this.translateService.translateAsync('chart-configuration.actions.reset', { scope: this.rootConfig.config.i18n }),\n icon: 'fa-light fa-rotate-left',\n color: 'primary',\n command: {\n name: 'reset',\n }\n }\n ];\n }\n async getPageBreadcrumbs() {\n return [\n {\n title: await this.translateService.translateAsync('root-menu', { scope: this.rootConfig.config.i18n })\n },\n ];\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AXMOrgChartConfigurationPage, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: AXMOrgChartConfigurationPage, isStandalone: true, selector: \"ng-component\", providers: [\n AXMOrgChartConfigService,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMOrgChartConfigurationPage\n }\n ], usesInheritance: true, ngImport: i0, template: \"<axp-page-layout *translate=\\\"let t\\\">\\n <axp-page-content>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-6 ax-w-full\\\">\\n <div>\\n <h3 class=\\\"ax-font-semibold ax-text-xl\\\">Relations Permissions</h3>\\n <p class=\\\"ax-text-sm ax-opacity-85\\\">\\n This matrix sets the relationships between nodes in your organization chart. Click a cell to toggle the\\n relation between <span class=\\\"ax-text-danger-500\\\">Allowed</span> and\\n <span class=\\\"ax-text-success-500\\\">Denied</span>.\\n </p>\\n </div>\\n <!---------------- Matrix Table ---------------->\\n <div class=\\\"ax-w-full ax-overflow-auto\\\">\\n <table class=\\\"ax-table-auto ax-border-collapse ax-max-w-fit ax-border-surface ax-rounded-md\\\">\\n <thead>\\n <tr class=\\\"ax-dark-surface\\\">\\n <!-- Top-left empty cell -->\\n <th class=\\\"ax-border ax-dark-surface ax-p-4 ax-font-semibold ax-text-start\\\">Parent \\\\ Child</th>\\n <!-- Horizontal headers -->\\n @for ( type of chartService.types; track $index) {\\n <th class=\\\"ax-border ax-dark-surface ax-p-4 ax-min-w-32 ax-text-center ax-font-semibold\\\">{{ type }}</th>\\n }\\n </tr>\\n </thead>\\n <tbody>\\n <!-- For each parent type, render a row with alternating backgrounds -->\\n @for ( parent of chartService.types; track $index) {\\n <tr>\\n <!-- Vertical header cell with custom header colors -->\\n <td class=\\\"ax-border ax-dark-surface ax-p-4 ax-font-semibold ax-text-start\\\">{{ parent }}</td>\\n <!-- Render a cell for each potential child type -->\\n @for ( child of chartService.types; track $index) {\\n <td class=\\\"ax-border ax-lightest-surface ax-border-surface ax-p-2\\\">\\n <div class=\\\"ax-flex ax-justify-center ax-cursor-pointer ax-sm\\\">\\n @let isLoading = loadingStates()[parent]?.[child];\\n <ax-button\\n look=\\\"blank\\\"\\n [color]=\\\"chartService.isAllowed(parent, child) ? 'success' : 'danger'\\\"\\n [text]=\\\"chartService.isAllowed(parent, child) ? 'Allowed' : 'Denied'\\\"\\n [disabled]=\\\"isLoading\\\"\\n (onClick)=\\\"togglePermission(parent, child)\\\"\\n >\\n @if(isLoading) {\\n <ax-loading></ax-loading>\\n }\\n </ax-button>\\n </div>\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n </div>\\n <div>\\n <ax-alert [color]=\\\"'warning'\\\" class=\\\"ax-max-w-fit\\\">\\n <ax-icon></ax-icon>\\n <ax-title>Attention</ax-title>\\n <ax-content>\\n Changes made here will not update your current organization chart. They will only affect future charts or\\n updates.\\n </ax-content>\\n </ax-alert>\\n </div>\\n </div>\\n </axp-page-content>\\n</axp-page-layout>\\n\", dependencies: [{ kind: \"ngmodule\", type: RouterModule }, { kind: \"ngmodule\", type: FormsModule }, { 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: AXPPageLayoutComponent, selector: \"axp-page-layout\" }, { kind: \"ngmodule\", type: AXMenuModule }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i1.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: AXDropdownButtonModule }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"directive\", type: i2.AXTranslatorDirective, selector: \"[translate]\" }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i3.AXDecoratorIconComponent, selector: \"ax-icon\", 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: AXLoadingModule }, { kind: \"component\", type: i4.AXLoadingComponent, selector: \"ax-loading\", inputs: [\"visible\", \"type\", \"context\"], outputs: [\"visibleChange\"] }, { kind: \"ngmodule\", type: AXCheckBoxModule }, { kind: \"ngmodule\", type: AXBreadcrumbsModule }, { kind: \"ngmodule\", type: AXAlertModule }, { kind: \"component\", type: i5.AXAlertComponent, selector: \"ax-alert\", inputs: [\"color\", \"timeOut\"], outputs: [\"colorChange\", \"onClosed\", \"timeOutChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AXMOrgChartConfigurationPage, decorators: [{\n type: Component,\n args: [{ imports: [\n RouterModule,\n FormsModule,\n AXPThemeLayoutBlockComponent,\n AXPPageLayoutComponent,\n AXMenuModule,\n AXButtonModule,\n AXDropdownButtonModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXCheckBoxModule,\n AXBreadcrumbsModule,\n AXAlertModule\n ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [\n AXMOrgChartConfigService,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMOrgChartConfigurationPage\n }\n ], template: \"<axp-page-layout *translate=\\\"let t\\\">\\n <axp-page-content>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-6 ax-w-full\\\">\\n <div>\\n <h3 class=\\\"ax-font-semibold ax-text-xl\\\">Relations Permissions</h3>\\n <p class=\\\"ax-text-sm ax-opacity-85\\\">\\n This matrix sets the relationships between nodes in your organization chart. Click a cell to toggle the\\n relation between <span class=\\\"ax-text-danger-500\\\">Allowed</span> and\\n <span class=\\\"ax-text-success-500\\\">Denied</span>.\\n </p>\\n </div>\\n <!---------------- Matrix Table ---------------->\\n <div class=\\\"ax-w-full ax-overflow-auto\\\">\\n <table class=\\\"ax-table-auto ax-border-collapse ax-max-w-fit ax-border-surface ax-rounded-md\\\">\\n <thead>\\n <tr class=\\\"ax-dark-surface\\\">\\n <!-- Top-left empty cell -->\\n <th class=\\\"ax-border ax-dark-surface ax-p-4 ax-font-semibold ax-text-start\\\">Parent \\\\ Child</th>\\n <!-- Horizontal headers -->\\n @for ( type of chartService.types; track $index) {\\n <th class=\\\"ax-border ax-dark-surface ax-p-4 ax-min-w-32 ax-text-center ax-font-semibold\\\">{{ type }}</th>\\n }\\n </tr>\\n </thead>\\n <tbody>\\n <!-- For each parent type, render a row with alternating backgrounds -->\\n @for ( parent of chartService.types; track $index) {\\n <tr>\\n <!-- Vertical header cell with custom header colors -->\\n <td class=\\\"ax-border ax-dark-surface ax-p-4 ax-font-semibold ax-text-start\\\">{{ parent }}</td>\\n <!-- Render a cell for each potential child type -->\\n @for ( child of chartService.types; track $index) {\\n <td class=\\\"ax-border ax-lightest-surface ax-border-surface ax-p-2\\\">\\n <div class=\\\"ax-flex ax-justify-center ax-cursor-pointer ax-sm\\\">\\n @let isLoading = loadingStates()[parent]?.[child];\\n <ax-button\\n look=\\\"blank\\\"\\n [color]=\\\"chartService.isAllowed(parent, child) ? 'success' : 'danger'\\\"\\n [text]=\\\"chartService.isAllowed(parent, child) ? 'Allowed' : 'Denied'\\\"\\n [disabled]=\\\"isLoading\\\"\\n (onClick)=\\\"togglePermission(parent, child)\\\"\\n >\\n @if(isLoading) {\\n <ax-loading></ax-loading>\\n }\\n </ax-button>\\n </div>\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n </div>\\n <div>\\n <ax-alert [color]=\\\"'warning'\\\" class=\\\"ax-max-w-fit\\\">\\n <ax-icon></ax-icon>\\n <ax-title>Attention</ax-title>\\n <ax-content>\\n Changes made here will not update your current organization chart. They will only affect future charts or\\n updates.\\n </ax-content>\\n </ax-alert>\\n </div>\\n </div>\\n </axp-page-content>\\n</axp-page-layout>\\n\" }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LWNvbmZpZ3VyYXRpb24ucGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9vcmdhbml6YXRpb24tbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL29yZ2FuaXphdGlvbi1jaGFydC9vcmctY2hhcnQtY29uZmlndXJhdGlvbi5wYWdlLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL29yZ2FuaXphdGlvbi1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvb3JnYW5pemF0aW9uLWNoYXJ0L29yZy1jaGFydC1jb25maWd1cmF0aW9uLnBhZ2UuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLDBCQUEwQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbEYsT0FBTyxFQUFFLHVCQUF1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ICdAYWNvcmV4L2NvbXBvbmVudHMvYWxlcnQnO1xuaW1wb3J0IHsgQVhCcmVhZGNydW1ic01vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9icmVhZGNydW1icyc7XG5pbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhDaGVja0JveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jaGVjay1ib3gnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWERyb3Bkb3duQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duLWJ1dHRvbic7XG5pbXBvcnQgeyBBWExvYWRpbmdNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbG9hZGluZyc7XG5pbXBvcnQgeyBBWE1lbnVNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbWVudSc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYUFBhZ2VMYXlvdXRCYXNlLCBBWFBQYWdlTGF5b3V0QmFzZUNvbXBvbmVudCwgQVhQUGFnZUxheW91dENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3ZpZXdzJztcbmltcG9ydCB7IEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9jb21wb25lbnRzJztcblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBBWE1PcmdDaGFydENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL29yZy1jaGFydC1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhQQWN0aW9uTWVudUl0ZW0sIEFYUEJyZWFkY3J1bWJJdGVtIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9vcmctY2hhcnQtY29uZmlndXJhdGlvbi5wYWdlLmh0bWwnLFxuICBpbXBvcnRzOiBbXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsXG4gICAgQVhQUGFnZUxheW91dENvbXBvbmVudCxcbiAgICBBWE1lbnVNb2R1bGUsXG4gICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgQVhEcm9wZG93bkJ1dHRvbk1vZHVsZSxcbiAgICBBWFRyYW5zbGF0aW9uTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYTG9hZGluZ01vZHVsZSxcbiAgICBBWENoZWNrQm94TW9kdWxlLFxuICAgIEFYQnJlYWRjcnVtYnNNb2R1bGUsXG4gICAgQVhBbGVydE1vZHVsZVxuXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIEFYTU9yZ0NoYXJ0Q29uZmlnU2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFBQYWdlTGF5b3V0QmFzZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBBWE1PcmdDaGFydENvbmZpZ3VyYXRpb25QYWdlXG4gICAgfVxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1PcmdDaGFydENvbmZpZ3VyYXRpb25QYWdlIGV4dGVuZHMgQVhQUGFnZUxheW91dEJhc2VDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2hhcnRTZXJ2aWNlID0gaW5qZWN0KEFYTU9yZ0NoYXJ0Q29uZmlnU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIGxvYWRpbmdTdGF0ZXMgPSBzaWduYWw8eyBbcGFyZW50OiBzdHJpbmddOiB7IFtjaGlsZDogc3RyaW5nXTogYm9vbGVhbiB9IHwgdW5kZWZpbmVkIH0+KHt9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm9vdENvbmZpZyA9IFJvb3RDb25maWc7XG5cbiAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgYXdhaXQgc3VwZXIubmdPbkluaXQoKTtcbiAgICBhd2FpdCB0aGlzLmNoYXJ0U2VydmljZS5sb2FkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgdG9nZ2xlUGVybWlzc2lvbihwYXJlbnQ6IHN0cmluZywgY2hpbGQ6IHN0cmluZykge1xuICAgIC8vVE9ETzogQ2hlY2sgdGhlIGFzeW5jIGFuZCBsb2FkaW5nXG5cbiAgICAvLyBTZXQgdGhlIGxvYWRpbmcgc3RhdGUgZm9yIHRoaXMgY2VsbCB0byB0cnVlLlxuICAgIHRoaXMubG9hZGluZ1N0YXRlcy51cGRhdGUoKHN0YXRlcykgPT4ge1xuICAgICAgaWYgKCFzdGF0ZXNbcGFyZW50XSkge1xuICAgICAgICBzdGF0ZXNbcGFyZW50XSA9IHt9O1xuICAgICAgfVxuICAgICAgc3RhdGVzW3BhcmVudF1bY2hpbGRdID0gdHJ1ZTtcbiAgICAgIHJldHVybiBzdGF0ZXM7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNoYXJ0U2VydmljZS5zZXQocGFyZW50LCBjaGlsZCwgIXRoaXMuY2hhcnRTZXJ2aWNlLmdldChwYXJlbnQsIGNoaWxkKSk7XG5cbiAgICBhd2FpdCB0aGlzLmNoYXJ0U2VydmljZS51cGRhdGUoKTtcblxuICAgIC8vIFR1cm4gb2ZmIHRoZSBsb2FkaW5nIHN0YXRlLlxuICAgIHRoaXMubG9hZGluZ1N0YXRlcy51cGRhdGUoKHN0YXRlcykgPT4ge1xuICAgICAgaWYgKCFzdGF0ZXNbcGFyZW50XSkge1xuICAgICAgICBzdGF0ZXNbcGFyZW50XSA9IHt9O1xuICAgICAgfVxuICAgICAgc3RhdGVzW3BhcmVudF1bY2hpbGRdID0gZmFsc2U7XG4gICAgICByZXR1cm4gc3RhdGVzO1xuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0UGFnZVRpdGxlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnY2hhcnQtY29uZmlndXJhdGlvbi5wYWdlLXRpdGxlJywgeyBzY29wZTogdGhpcy5yb290Q29uZmlnLmNvbmZpZy5pMThuIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0UGFnZURlc2NyaXB0aW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnY2hhcnQtY29uZmlndXJhdGlvbi5wYWdlLWRlc2NyaXB0aW9uJywgeyBzY29wZTogdGhpcy5yb290Q29uZmlnLmNvbmZpZy5pMThuIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0U2Vjb25kYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ2NoYXJ0LWNvbmZpZ3VyYXRpb24uYWN0aW9ucy5yZXNldCcsIHsgc2NvcGU6IHRoaXMucm9vdENvbmZpZy5jb25maWcuaTE4biB9KSxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXJvdGF0ZS1sZWZ0JyxcbiAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgIG5hbWU6ICdyZXNldCcsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdO1xuICB9XG4gIG92ZXJyaWRlIGFzeW5jIGdldFBhZ2VCcmVhZGNydW1icygpOiBQcm9taXNlPEFYUEJyZWFkY3J1bWJJdGVtW10+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0aXRsZTogYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdyb290LW1lbnUnLCB7IHNjb3BlOiB0aGlzLnJvb3RDb25maWcuY29uZmlnLmkxOG4gfSlcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxufVxuIiwiPGF4cC1wYWdlLWxheW91dCAqdHJhbnNsYXRlPVwibGV0IHRcIj5cbiAgPGF4cC1wYWdlLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgYXgtZ2FwLTYgYXgtdy1mdWxsXCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8aDMgY2xhc3M9XCJheC1mb250LXNlbWlib2xkIGF4LXRleHQteGxcIj5SZWxhdGlvbnMgUGVybWlzc2lvbnM8L2gzPlxuICAgICAgICA8cCBjbGFzcz1cImF4LXRleHQtc20gYXgtb3BhY2l0eS04NVwiPlxuICAgICAgICAgIFRoaXMgbWF0cml4IHNldHMgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBub2RlcyBpbiB5b3VyIG9yZ2FuaXphdGlvbiBjaGFydC4gQ2xpY2sgYSBjZWxsIHRvIHRvZ2dsZSB0aGVcbiAgICAgICAgICByZWxhdGlvbiBiZXR3ZWVuIDxzcGFuIGNsYXNzPVwiYXgtdGV4dC1kYW5nZXItNTAwXCI+QWxsb3dlZDwvc3Bhbj4gYW5kXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10ZXh0LXN1Y2Nlc3MtNTAwXCI+RGVuaWVkPC9zcGFuPi5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tLS0tLS0tLS0tLS0tLS0gTWF0cml4IFRhYmxlIC0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtdy1mdWxsIGF4LW92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwiYXgtdGFibGUtYXV0byBheC1ib3JkZXItY29sbGFwc2UgYXgtbWF4LXctZml0IGF4LWJvcmRlci1zdXJmYWNlIGF4LXJvdW5kZWQtbWRcIj5cbiAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJheC1kYXJrLXN1cmZhY2VcIj5cbiAgICAgICAgICAgICAgPCEtLSBUb3AtbGVmdCBlbXB0eSBjZWxsIC0tPlxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJheC1ib3JkZXIgYXgtZGFyay1zdXJmYWNlIGF4LXAtNCBheC1mb250LXNlbWlib2xkIGF4LXRleHQtc3RhcnRcIj5QYXJlbnQgXFwgQ2hpbGQ8L3RoPlxuICAgICAgICAgICAgICA8IS0tIEhvcml6b250YWwgaGVhZGVycyAtLT5cbiAgICAgICAgICAgICAgQGZvciAoIHR5cGUgb2YgY2hhcnRTZXJ2aWNlLnR5cGVzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiYXgtYm9yZGVyIGF4LWRhcmstc3VyZmFjZSBheC1wLTQgYXgtbWluLXctMzIgYXgtdGV4dC1jZW50ZXIgYXgtZm9udC1zZW1pYm9sZFwiPnt7IHR5cGUgfX08L3RoPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgPCEtLSBGb3IgZWFjaCBwYXJlbnQgdHlwZSwgcmVuZGVyIGEgcm93IHdpdGggYWx0ZXJuYXRpbmcgYmFja2dyb3VuZHMgLS0+XG4gICAgICAgICAgICBAZm9yICggcGFyZW50IG9mIGNoYXJ0U2VydmljZS50eXBlczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDwhLS0gVmVydGljYWwgaGVhZGVyIGNlbGwgd2l0aCBjdXN0b20gaGVhZGVyIGNvbG9ycyAtLT5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYXgtYm9yZGVyIGF4LWRhcmstc3VyZmFjZSBheC1wLTQgYXgtZm9udC1zZW1pYm9sZCBheC10ZXh0LXN0YXJ0XCI+e3sgcGFyZW50IH19PC90ZD5cbiAgICAgICAgICAgICAgPCEtLSBSZW5kZXIgYSBjZWxsIGZvciBlYWNoIHBvdGVudGlhbCBjaGlsZCB0eXBlIC0tPlxuICAgICAgICAgICAgICBAZm9yICggY2hpbGQgb2YgY2hhcnRTZXJ2aWNlLnR5cGVzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYXgtYm9yZGVyIGF4LWxpZ2h0ZXN0LXN1cmZhY2UgYXgtYm9yZGVyLXN1cmZhY2UgYXgtcC0yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtanVzdGlmeS1jZW50ZXIgYXgtY3Vyc29yLXBvaW50ZXIgYXgtc21cIj5cbiAgICAgICAgICAgICAgICAgIEBsZXQgaXNMb2FkaW5nID0gbG9hZGluZ1N0YXRlcygpW3BhcmVudF0/LltjaGlsZF07XG4gICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGxvb2s9XCJibGFua1wiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJjaGFydFNlcnZpY2UuaXNBbGxvd2VkKHBhcmVudCwgY2hpbGQpID8gJ3N1Y2Nlc3MnIDogJ2RhbmdlcidcIlxuICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJjaGFydFNlcnZpY2UuaXNBbGxvd2VkKHBhcmVudCwgY2hpbGQpID8gJ0FsbG93ZWQnIDogJ0RlbmllZCdcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwidG9nZ2xlUGVybWlzc2lvbihwYXJlbnQsIGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBpZihpc0xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgPGF4LWxvYWRpbmc+PC9heC1sb2FkaW5nPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8YXgtYWxlcnQgW2NvbG9yXT1cIid3YXJuaW5nJ1wiIGNsYXNzPVwiYXgtbWF4LXctZml0XCI+XG4gICAgICAgICAgPGF4LWljb24+PC9heC1pY29uPlxuICAgICAgICAgIDxheC10aXRsZT5BdHRlbnRpb248L2F4LXRpdGxlPlxuICAgICAgICAgIDxheC1jb250ZW50PlxuICAgICAgICAgICAgQ2hhbmdlcyBtYWRlIGhlcmUgd2lsbCBub3QgdXBkYXRlIHlvdXIgY3VycmVudCBvcmdhbml6YXRpb24gY2hhcnQuIFRoZXkgd2lsbCBvbmx5IGFmZmVjdCBmdXR1cmUgY2hhcnRzIG9yXG4gICAgICAgICAgICB1cGRhdGVzLlxuICAgICAgICAgIDwvYXgtY29udGVudD5cbiAgICAgICAgPC9heC1hbGVydD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2F4cC1wYWdlLWNvbnRlbnQ+XG48L2F4cC1wYWdlLWxheW91dD5cbiJdfQ=="],"names":["i1","i2","i3","i4"],"mappings":"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"}
@@ -1,147 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, signal, Injectable } from '@angular/core';
3
- import { AXPSettingService } from '@acorex/platform/common';
4
- import { AXPPlatformScope } from '@acorex/platform/core';
5
- import { A as AXPOrganizationSetting } from './acorex-modules-organization-management-settings.keys-B3cgSi_S.mjs';
6
- import { AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS } from './acorex-modules-organization-management.mjs';
7
-
8
- class AXMOrgChartConfigService {
9
- constructor() {
10
- this.settingService = inject(AXPSettingService);
11
- //
12
- this._types = Object.entries(AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS).map(c => c[1].type);
13
- this._defaultPermissioEncoded = '011111100001011100000111100000011100011111110011111110011111110000000011000000000';
14
- this.permissions = signal(this.defaultPermissions(), ...(ngDevMode ? [{ debugName: "permissions" }] : []));
15
- }
16
- get types() {
17
- return this._types;
18
- }
19
- defaultPermissions() {
20
- return this.decode(this._defaultPermissioEncoded);
21
- }
22
- encode(permissions) {
23
- let str = '';
24
- for (const parent of this.types) {
25
- for (const child of this.types) {
26
- str += (permissions[parent]?.[child] ?? 0).toString();
27
- }
28
- }
29
- return str;
30
- }
31
- decode(encoded) {
32
- const result = {};
33
- const expectedLength = this.types.length * this.types.length;
34
- if (encoded.length !== expectedLength) {
35
- throw new Error(`Invalid permissions string length. Expected ${expectedLength} but got ${encoded.length}`);
36
- }
37
- let index = 0;
38
- for (const parent of this.types) {
39
- result[parent] = {};
40
- for (const child of this.types) {
41
- const char = encoded.charAt(index);
42
- result[parent][child] = parseInt(char, 10);
43
- index++;
44
- }
45
- }
46
- return result;
47
- }
48
- decodeMatrix(matrix) {
49
- const newPermissions = {};
50
- this.types.forEach((parent, rowIndex) => {
51
- newPermissions[parent] = {};
52
- this.types.forEach((child, colIndex) => {
53
- newPermissions[parent][child] = matrix[rowIndex][colIndex];
54
- });
55
- });
56
- return newPermissions;
57
- }
58
- validateEncodedValue(storedValue) {
59
- try {
60
- if (typeof storedValue === 'string') {
61
- const expectedLength = this.types.length * this.types.length;
62
- // Check that the string is the correct length and only contains 0s and 1s.
63
- if (storedValue.length === expectedLength && /^[01]+$/.test(storedValue)) {
64
- return this.decode(storedValue);
65
- }
66
- }
67
- else if (Array.isArray(storedValue)) {
68
- // Validate the 2D array dimensions and values.
69
- if (storedValue.length === this.types.length &&
70
- storedValue.every(row => Array.isArray(row) &&
71
- row.length === this.types.length &&
72
- row.every(val => val === 0 || val === 1))) {
73
- return this.decodeMatrix(storedValue);
74
- }
75
- }
76
- else if (typeof storedValue === 'object' && storedValue !== null) {
77
- // Validate that the object has all the required keys and that their values are 0 or 1.
78
- let valid = true;
79
- for (const parent of this.types) {
80
- if (!(parent in storedValue)) {
81
- valid = false;
82
- break;
83
- }
84
- const childPermissions = storedValue[parent];
85
- for (const child of this.types) {
86
- if (!(child in childPermissions) || (childPermissions[child] !== 0 && childPermissions[child] !== 1)) {
87
- valid = false;
88
- break;
89
- }
90
- }
91
- if (!valid)
92
- break;
93
- }
94
- if (valid) {
95
- return storedValue;
96
- }
97
- }
98
- }
99
- catch (error) {
100
- // In case of any errors during validation, fall back to default permissions.
101
- }
102
- // Return the default permissions if validation fails.
103
- return this.defaultPermissions();
104
- }
105
- isAllowed(parent, child) {
106
- return (this.permissions()[parent]?.[child] ?? 0) === 1;
107
- }
108
- set(parent, child, value) {
109
- this.permissions.update((p) => {
110
- if (!p[parent]) {
111
- p[parent] = {};
112
- }
113
- p[parent][child] = value ? 1 : 0;
114
- return p;
115
- });
116
- }
117
- get(parent, child) {
118
- return this.permissions()[parent]?.[child] === 1;
119
- }
120
- async load() {
121
- const storedValue = await this.settingService
122
- .scope(AXPPlatformScope.Tenant)
123
- .get(AXPOrganizationSetting.Relations);
124
- // Use the validation method to ensure the stored value is correct.
125
- if (storedValue) {
126
- const validatedPermissions = this.validateEncodedValue(storedValue);
127
- this.permissions.set(validatedPermissions);
128
- }
129
- else {
130
- this.permissions.set(this.defaultPermissions());
131
- }
132
- }
133
- async update() {
134
- const matrix = this.encode(this.permissions());
135
- await this.settingService
136
- .scope(AXPPlatformScope.Tenant)
137
- .set(AXPOrganizationSetting.Relations, matrix);
138
- }
139
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXMOrgChartConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
140
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXMOrgChartConfigService }); }
141
- }
142
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXMOrgChartConfigService, decorators: [{
143
- type: Injectable
144
- }] });
145
-
146
- export { AXMOrgChartConfigService as A };
147
- //# sourceMappingURL=acorex-modules-organization-management-org-chart-configuration.service-D7NlQXp2.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-modules-organization-management-org-chart-configuration.service-D7NlQXp2.mjs","sources":["../tmp-esm2022/organization-management/lib/features/organization-chart/org-chart-configuration.service.js"],"sourcesContent":["import { inject, Injectable, signal } from '@angular/core';\nimport { AXPSettingService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { AXPOrganizationSetting } from '../../settings.keys';\nimport { AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS } from './org-chart.type';\nimport * as i0 from \"@angular/core\";\nexport class AXMOrgChartConfigService {\n constructor() {\n this.settingService = inject(AXPSettingService);\n //\n this._types = Object.entries(AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS).map(c => c[1].type);\n this._defaultPermissioEncoded = '011111100001011100000111100000011100011111110011111110011111110000000011000000000';\n this.permissions = signal(this.defaultPermissions(), ...(ngDevMode ? [{ debugName: \"permissions\" }] : []));\n }\n get types() {\n return this._types;\n }\n defaultPermissions() {\n return this.decode(this._defaultPermissioEncoded);\n }\n encode(permissions) {\n let str = '';\n for (const parent of this.types) {\n for (const child of this.types) {\n str += (permissions[parent]?.[child] ?? 0).toString();\n }\n }\n return str;\n }\n decode(encoded) {\n const result = {};\n const expectedLength = this.types.length * this.types.length;\n if (encoded.length !== expectedLength) {\n throw new Error(`Invalid permissions string length. Expected ${expectedLength} but got ${encoded.length}`);\n }\n let index = 0;\n for (const parent of this.types) {\n result[parent] = {};\n for (const child of this.types) {\n const char = encoded.charAt(index);\n result[parent][child] = parseInt(char, 10);\n index++;\n }\n }\n return result;\n }\n decodeMatrix(matrix) {\n const newPermissions = {};\n this.types.forEach((parent, rowIndex) => {\n newPermissions[parent] = {};\n this.types.forEach((child, colIndex) => {\n newPermissions[parent][child] = matrix[rowIndex][colIndex];\n });\n });\n return newPermissions;\n }\n validateEncodedValue(storedValue) {\n try {\n if (typeof storedValue === 'string') {\n const expectedLength = this.types.length * this.types.length;\n // Check that the string is the correct length and only contains 0s and 1s.\n if (storedValue.length === expectedLength && /^[01]+$/.test(storedValue)) {\n return this.decode(storedValue);\n }\n }\n else if (Array.isArray(storedValue)) {\n // Validate the 2D array dimensions and values.\n if (storedValue.length === this.types.length &&\n storedValue.every(row => Array.isArray(row) &&\n row.length === this.types.length &&\n row.every(val => val === 0 || val === 1))) {\n return this.decodeMatrix(storedValue);\n }\n }\n else if (typeof storedValue === 'object' && storedValue !== null) {\n // Validate that the object has all the required keys and that their values are 0 or 1.\n let valid = true;\n for (const parent of this.types) {\n if (!(parent in storedValue)) {\n valid = false;\n break;\n }\n const childPermissions = storedValue[parent];\n for (const child of this.types) {\n if (!(child in childPermissions) || (childPermissions[child] !== 0 && childPermissions[child] !== 1)) {\n valid = false;\n break;\n }\n }\n if (!valid)\n break;\n }\n if (valid) {\n return storedValue;\n }\n }\n }\n catch (error) {\n // In case of any errors during validation, fall back to default permissions.\n }\n // Return the default permissions if validation fails.\n return this.defaultPermissions();\n }\n isAllowed(parent, child) {\n return (this.permissions()[parent]?.[child] ?? 0) === 1;\n }\n set(parent, child, value) {\n this.permissions.update((p) => {\n if (!p[parent]) {\n p[parent] = {};\n }\n p[parent][child] = value ? 1 : 0;\n return p;\n });\n }\n get(parent, child) {\n return this.permissions()[parent]?.[child] === 1;\n }\n async load() {\n const storedValue = await this.settingService\n .scope(AXPPlatformScope.Tenant)\n .get(AXPOrganizationSetting.Relations);\n // Use the validation method to ensure the stored value is correct.\n if (storedValue) {\n const validatedPermissions = this.validateEncodedValue(storedValue);\n this.permissions.set(validatedPermissions);\n }\n else {\n this.permissions.set(this.defaultPermissions());\n }\n }\n async update() {\n const matrix = this.encode(this.permissions());\n await this.settingService\n .scope(AXPPlatformScope.Tenant)\n .set(AXPOrganizationSetting.Relations, matrix);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AXMOrgChartConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AXMOrgChartConfigService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AXMOrgChartConfigService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LWNvbmZpZ3VyYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9vcmdhbml6YXRpb24tbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL29yZ2FuaXphdGlvbi1jaGFydC9vcmctY2hhcnQtY29uZmlndXJhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUNBQXVDLEVBQTZCLE1BQU0sa0JBQWtCLENBQUM7O0FBTXRHLE1BQU0sT0FBTyx3QkFBd0I7SUFEckM7UUFHcUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM1RCxFQUFFO1FBQ1EsV0FBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsdUNBQXVDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFNdkYsNkJBQXdCLEdBQUcsbUZBQW1GLENBQUM7UUFFaEgsZ0JBQVcsR0FBRyxNQUFNLENBQTRCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSx1REFBQyxDQUFDO0tBOElyRjtJQXBKRyxJQUFXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQU9PLGtCQUFrQjtRQUN0QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHdC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O2FBQzlCLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzQyxtRUFBbUU7UUFDbkUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNkLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDL0MsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU07UUFDZixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sSUFBSSxDQUFDLGNBQWM7YUFDcEIsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQzthQUM5QixHQUFHLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7OEdBeEpRLHdCQUF3QjtrSEFBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFNldHRpbmdTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuaW1wb3J0IHsgQVhQUGxhdGZvcm1TY29wZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBPcmdhbml6YXRpb25TZXR0aW5nIH0gZnJvbSAnLi4vLi4vc2V0dGluZ3Mua2V5cyc7XG5pbXBvcnQgeyBBWE1fT1JHX0NIQVJUX05PREVfVFlQRV9FTlRJVFlfTUFQUElOR1MsIEFYTU9yZ0NoYXJ0Tm9kZVBlcm1pc3Npb24gfSBmcm9tICcuL29yZy1jaGFydC50eXBlJztcblxuXG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYTU9yZ0NoYXJ0Q29uZmlnU2VydmljZSB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdTZXJ2aWNlID0gaW5qZWN0KEFYUFNldHRpbmdTZXJ2aWNlKTtcbiAgICAvL1xuICAgIHByb3RlY3RlZCBfdHlwZXMgPSBPYmplY3QuZW50cmllcyhBWE1fT1JHX0NIQVJUX05PREVfVFlQRV9FTlRJVFlfTUFQUElOR1MpLm1hcChjID0+IGNbMV0udHlwZSk7XG5cbiAgICBwdWJsaWMgZ2V0IHR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2RlZmF1bHRQZXJtaXNzaW9FbmNvZGVkID0gJzAxMTExMTEwMDAwMTAxMTEwMDAwMDExMTEwMDAwMDAxMTEwMDAxMTExMTExMDAxMTExMTExMDAxMTExMTExMDAwMDAwMDAxMTAwMDAwMDAwMCc7XG5cbiAgICBwdWJsaWMgcGVybWlzc2lvbnMgPSBzaWduYWw8QVhNT3JnQ2hhcnROb2RlUGVybWlzc2lvbj4odGhpcy5kZWZhdWx0UGVybWlzc2lvbnMoKSk7XG5cblxuICAgIHByaXZhdGUgZGVmYXVsdFBlcm1pc3Npb25zKCk6IEFYTU9yZ0NoYXJ0Tm9kZVBlcm1pc3Npb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUodGhpcy5fZGVmYXVsdFBlcm1pc3Npb0VuY29kZWQpO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBlbmNvZGUoXG4gICAgICAgIHBlcm1pc3Npb25zOiBBWE1PcmdDaGFydE5vZGVQZXJtaXNzaW9uXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHN0ciA9ICcnO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiB0aGlzLnR5cGVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMudHlwZXMpIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gKHBlcm1pc3Npb25zW3BhcmVudF0/LltjaGlsZF0gPz8gMCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBkZWNvZGUoZW5jb2RlZDogc3RyaW5nKTogQVhNT3JnQ2hhcnROb2RlUGVybWlzc2lvbiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogQVhNT3JnQ2hhcnROb2RlUGVybWlzc2lvbiA9IHt9O1xuICAgICAgICBjb25zdCBleHBlY3RlZExlbmd0aCA9IHRoaXMudHlwZXMubGVuZ3RoICogdGhpcy50eXBlcy5sZW5ndGg7XG4gICAgICAgIGlmIChlbmNvZGVkLmxlbmd0aCAhPT0gZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwZXJtaXNzaW9ucyBzdHJpbmcgbGVuZ3RoLiBFeHBlY3RlZCAke2V4cGVjdGVkTGVuZ3RofSBidXQgZ290ICR7ZW5jb2RlZC5sZW5ndGh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBwYXJlbnQgb2YgdGhpcy50eXBlcykge1xuICAgICAgICAgICAgcmVzdWx0W3BhcmVudF0gPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy50eXBlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBlbmNvZGVkLmNoYXJBdChpbmRleCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3BhcmVudF1bY2hpbGRdID0gcGFyc2VJbnQoY2hhciwgMTApO1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgZGVjb2RlTWF0cml4KG1hdHJpeDogbnVtYmVyW11bXSk6IEFYTU9yZ0NoYXJ0Tm9kZVBlcm1pc3Npb24ge1xuICAgICAgICBjb25zdCBuZXdQZXJtaXNzaW9uczogQVhNT3JnQ2hhcnROb2RlUGVybWlzc2lvbiA9IHt9O1xuICAgICAgICB0aGlzLnR5cGVzLmZvckVhY2goKHBhcmVudCwgcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgIG5ld1Blcm1pc3Npb25zW3BhcmVudF0gPSB7fTtcbiAgICAgICAgICAgIHRoaXMudHlwZXMuZm9yRWFjaCgoY2hpbGQsIGNvbEluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgbmV3UGVybWlzc2lvbnNbcGFyZW50XVtjaGlsZF0gPSBtYXRyaXhbcm93SW5kZXhdW2NvbEluZGV4XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ld1Blcm1pc3Npb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVFbmNvZGVkVmFsdWUoc3RvcmVkVmFsdWU6IHVua25vd24pOiBBWE1PcmdDaGFydE5vZGVQZXJtaXNzaW9uIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RvcmVkVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSB0aGlzLnR5cGVzLmxlbmd0aCAqIHRoaXMudHlwZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHN0cmluZyBpcyB0aGUgY29ycmVjdCBsZW5ndGggYW5kIG9ubHkgY29udGFpbnMgMHMgYW5kIDFzLlxuICAgICAgICAgICAgICAgIGlmIChzdG9yZWRWYWx1ZS5sZW5ndGggPT09IGV4cGVjdGVkTGVuZ3RoICYmIC9eWzAxXSskLy50ZXN0KHN0b3JlZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUoc3RvcmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzdG9yZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSB0aGUgMkQgYXJyYXkgZGltZW5zaW9ucyBhbmQgdmFsdWVzLlxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVkVmFsdWUubGVuZ3RoID09PSB0aGlzLnR5cGVzLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICBzdG9yZWRWYWx1ZS5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocm93KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5sZW5ndGggPT09IHRoaXMudHlwZXMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmV2ZXJ5KHZhbCA9PiB2YWwgPT09IDAgfHwgdmFsID09PSAxKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZU1hdHJpeChzdG9yZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RvcmVkVmFsdWUgPT09ICdvYmplY3QnICYmIHN0b3JlZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgb2JqZWN0IGhhcyBhbGwgdGhlIHJlcXVpcmVkIGtleXMgYW5kIHRoYXQgdGhlaXIgdmFsdWVzIGFyZSAwIG9yIDEuXG4gICAgICAgICAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiB0aGlzLnR5cGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHBhcmVudCBpbiBzdG9yZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFBlcm1pc3Npb25zID0gKHN0b3JlZFZhbHVlIGFzIGFueSlbcGFyZW50XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLnR5cGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjaGlsZCBpbiBjaGlsZFBlcm1pc3Npb25zKSB8fCAoY2hpbGRQZXJtaXNzaW9uc1tjaGlsZF0gIT09IDAgJiYgY2hpbGRQZXJtaXNzaW9uc1tjaGlsZF0gIT09IDEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKSBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZWRWYWx1ZSBhcyBBWE1PcmdDaGFydE5vZGVQZXJtaXNzaW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgYW55IGVycm9ycyBkdXJpbmcgdmFsaWRhdGlvbiwgZmFsbCBiYWNrIHRvIGRlZmF1bHQgcGVybWlzc2lvbnMuXG4gICAgICAgIH1cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIGlmIHZhbGlkYXRpb24gZmFpbHMuXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQZXJtaXNzaW9ucygpO1xuICAgIH1cblxuXG4gICAgcHVibGljIGlzQWxsb3dlZChwYXJlbnQ6IHN0cmluZywgY2hpbGQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMucGVybWlzc2lvbnMoKVtwYXJlbnRdPy5bY2hpbGRdID8/IDApID09PSAxO1xuICAgIH1cblxuXG4gICAgcHVibGljIHNldChwYXJlbnQ6IHN0cmluZywgY2hpbGQ6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucy51cGRhdGUoKHApID0+IHtcbiAgICAgICAgICAgIGlmICghcFtwYXJlbnRdKSB7XG4gICAgICAgICAgICAgICAgcFtwYXJlbnRdID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwW3BhcmVudF1bY2hpbGRdID0gdmFsdWUgPyAxIDogMDtcbiAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHBhcmVudDogc3RyaW5nLCBjaGlsZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zKClbcGFyZW50XT8uW2NoaWxkXSA9PT0gMTtcbiAgICB9XG5cblxuICAgIHB1YmxpYyBhc3luYyBsb2FkKCkge1xuICAgICAgICBjb25zdCBzdG9yZWRWYWx1ZSA9IGF3YWl0IHRoaXMuc2V0dGluZ1NlcnZpY2VcbiAgICAgICAgICAgIC5zY29wZShBWFBQbGF0Zm9ybVNjb3BlLlRlbmFudClcbiAgICAgICAgICAgIC5nZXQoQVhQT3JnYW5pemF0aW9uU2V0dGluZy5SZWxhdGlvbnMpO1xuXG4gICAgICAgIC8vIFVzZSB0aGUgdmFsaWRhdGlvbiBtZXRob2QgdG8gZW5zdXJlIHRoZSBzdG9yZWQgdmFsdWUgaXMgY29ycmVjdC5cbiAgICAgICAgaWYgKHN0b3JlZFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRQZXJtaXNzaW9ucyA9IHRoaXMudmFsaWRhdGVFbmNvZGVkVmFsdWUoc3RvcmVkVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucy5zZXQodmFsaWRhdGVkUGVybWlzc2lvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucy5zZXQodGhpcy5kZWZhdWx0UGVybWlzc2lvbnMoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgdXBkYXRlKCkge1xuICAgICAgICBjb25zdCBtYXRyaXggPSB0aGlzLmVuY29kZSh0aGlzLnBlcm1pc3Npb25zKCkpO1xuICAgICAgICBhd2FpdCB0aGlzLnNldHRpbmdTZXJ2aWNlXG4gICAgICAgICAgICAuc2NvcGUoQVhQUGxhdGZvcm1TY29wZS5UZW5hbnQpXG4gICAgICAgICAgICAuc2V0KEFYUE9yZ2FuaXphdGlvblNldHRpbmcuUmVsYXRpb25zLCBtYXRyaXgpO1xuICAgIH1cblxufVxuIl19"],"names":[],"mappings":";;;;;;;AAMO,MAAM,wBAAwB,CAAC;AACtC,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACvD;AACA,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjG,QAAQ,IAAI,CAAC,wBAAwB,GAAG,mFAAmF;AAC3H,QAAQ,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAClH,IAAI;AACJ,IAAI,IAAI,KAAK,GAAG;AAChB,QAAQ,OAAO,IAAI,CAAC,MAAM;AAC1B,IAAI;AACJ,IAAI,kBAAkB,GAAG;AACzB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC;AACzD,IAAI;AACJ,IAAI,MAAM,CAAC,WAAW,EAAE;AACxB,QAAQ,IAAI,GAAG,GAAG,EAAE;AACpB,QAAQ,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;AACzC,YAAY,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;AAC5C,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE;AACrE,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,GAAG;AAClB,IAAI;AACJ,IAAI,MAAM,CAAC,OAAO,EAAE;AACpB,QAAQ,MAAM,MAAM,GAAG,EAAE;AACzB,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AACpE,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,EAAE;AAC/C,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,4CAA4C,EAAE,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACtH,QAAQ;AACR,QAAQ,IAAI,KAAK,GAAG,CAAC;AACrB,QAAQ,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;AACzC,YAAY,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;AAC/B,YAAY,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;AAC5C,gBAAgB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AAClD,gBAAgB,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;AAC1D,gBAAgB,KAAK,EAAE;AACvB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,MAAM;AACrB,IAAI;AACJ,IAAI,YAAY,CAAC,MAAM,EAAE;AACzB,QAAQ,MAAM,cAAc,GAAG,EAAE;AACjC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,QAAQ,KAAK;AACjD,YAAY,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE;AACvC,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAK;AACpD,gBAAgB,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;AAC1E,YAAY,CAAC,CAAC;AACd,QAAQ,CAAC,CAAC;AACV,QAAQ,OAAO,cAAc;AAC7B,IAAI;AACJ,IAAI,oBAAoB,CAAC,WAAW,EAAE;AACtC,QAAQ,IAAI;AACZ,YAAY,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACjD,gBAAgB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AAC5E;AACA,gBAAgB,IAAI,WAAW,CAAC,MAAM,KAAK,cAAc,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAC1F,oBAAoB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,gBAAgB;AAChB,YAAY;AACZ,iBAAiB,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACjD;AACA,gBAAgB,IAAI,WAAW,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;AAC5D,oBAAoB,WAAW,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAC/D,wBAAwB,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;AACxD,wBAAwB,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE;AACnE,oBAAoB,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;AACzD,gBAAgB;AAChB,YAAY;AACZ,iBAAiB,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,EAAE;AAC9E;AACA,gBAAgB,IAAI,KAAK,GAAG,IAAI;AAChC,gBAAgB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;AACjD,oBAAoB,IAAI,EAAE,MAAM,IAAI,WAAW,CAAC,EAAE;AAClD,wBAAwB,KAAK,GAAG,KAAK;AACrC,wBAAwB;AACxB,oBAAoB;AACpB,oBAAoB,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC;AAChE,oBAAoB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;AACpD,wBAAwB,IAAI,EAAE,KAAK,IAAI,gBAAgB,CAAC,KAAK,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;AAC9H,4BAA4B,KAAK,GAAG,KAAK;AACzC,4BAA4B;AAC5B,wBAAwB;AACxB,oBAAoB;AACpB,oBAAoB,IAAI,CAAC,KAAK;AAC9B,wBAAwB;AACxB,gBAAgB;AAChB,gBAAgB,IAAI,KAAK,EAAE;AAC3B,oBAAoB,OAAO,WAAW;AACtC,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB;AACA,QAAQ;AACR;AACA,QAAQ,OAAO,IAAI,CAAC,kBAAkB,EAAE;AACxC,IAAI;AACJ,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE;AAC7B,QAAQ,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/D,IAAI;AACJ,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9B,QAAQ,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;AACvC,YAAY,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;AAC5B,gBAAgB,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;AAC9B,YAAY;AACZ,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC;AAC5C,YAAY,OAAO,CAAC;AACpB,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE;AACvB,QAAQ,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;AACxD,IAAI;AACJ,IAAI,MAAM,IAAI,GAAG;AACjB,QAAQ,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AACvC,aAAa,KAAK,CAAC,gBAAgB,CAAC,MAAM;AAC1C,aAAa,GAAG,CAAC,sBAAsB,CAAC,SAAS,CAAC;AAClD;AACA,QAAQ,IAAI,WAAW,EAAE;AACzB,YAAY,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;AAC/E,YAAY,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,oBAAoB,CAAC;AACtD,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC3D,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,MAAM,GAAG;AACnB,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACtD,QAAQ,MAAM,IAAI,CAAC;AACnB,aAAa,KAAK,CAAC,gBAAgB,CAAC,MAAM;AAC1C,aAAa,GAAG,CAAC,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC;AAC1D,IAAI;AACJ,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,wBAAwB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAC3L,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC;AAC9I;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,UAAU,EAAE,CAAC;AAClI,YAAY,IAAI,EAAE;AAClB,SAAS,CAAC,EAAE,CAAC;;;;"}