@acorex-platform/module-organization-management-client 0.0.25 → 0.0.30
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.
- package/fesm2022/{acorex-platform-module-organization-management-client-acorex-platform-module-organization-management-client-Dn8Ss1nL.mjs → acorex-platform-module-organization-management-client-acorex-platform-module-organization-management-client-C01dBcYi.mjs} +9 -9
- package/fesm2022/{acorex-platform-module-organization-management-client-acorex-platform-module-organization-management-client-Dn8Ss1nL.mjs.map → acorex-platform-module-organization-management-client-acorex-platform-module-organization-management-client-C01dBcYi.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-organization-management-client-org-chart-employee-flyout-contribution.provider-Bz8nVm04.mjs → acorex-platform-module-organization-management-client-org-chart-employee-flyout-contribution.provider-B-PC-9aB.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-organization-management-client-org-chart-employee-flyout-contribution.provider-Bz8nVm04.mjs.map → acorex-platform-module-organization-management-client-org-chart-employee-flyout-contribution.provider-B-PC-9aB.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-organization-management-client-org-chart-ux-node-contribution.provider-C5TItnOp.mjs → acorex-platform-module-organization-management-client-org-chart-ux-node-contribution.provider-DB8ki5My.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-organization-management-client-org-chart-ux-node-contribution.provider-C5TItnOp.mjs.map → acorex-platform-module-organization-management-client-org-chart-ux-node-contribution.provider-DB8ki5My.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-organization-management-client-org-chart.page-g_3oPPH0.mjs → acorex-platform-module-organization-management-client-org-chart.page-DlpHwt9h.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-organization-management-client-org-chart.page-g_3oPPH0.mjs.map → acorex-platform-module-organization-management-client-org-chart.page-DlpHwt9h.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-organization-management-client-settings.provider-Dnrkq9Ku.mjs → acorex-platform-module-organization-management-client-settings.provider-C2VaHJ4K.mjs} +4 -4
- package/fesm2022/{acorex-platform-module-organization-management-client-settings.provider-Dnrkq9Ku.mjs.map → acorex-platform-module-organization-management-client-settings.provider-C2VaHJ4K.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-organization-management-client.mjs +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-organization-management-client-org-chart.page-g_3oPPH0.mjs","sources":["../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/tokens/org-chart-host.token.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/business-unit/org-chart-business-unit-node.component.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/business-unit/org-chart-business-unit-node.component.html","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/company/org-chart-company-node.component.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/company/org-chart-company-node.component.html","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/employee/org-chart-employee-node.component.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/employee/org-chart-employee-node.component.html","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/position/org-chart-position-node.component.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/position/org-chart-position-node.component.html","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/org-chart-node-outlet.component.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/org-chart-node-outlet.component.html","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/services/org-chart-node-contribution.service.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/utils/org-chart-vacant-filter.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/org-chart.types.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/org-chart-labels.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/builders/location.builder.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/org-chart-assignment-representatives.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/employee-manager-resolution.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/builders/structure.builder.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/builders/reporting.builder.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/builders/factory.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/org-chart-stats.helper.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/org-chart-compose.helper.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/services/org-chart-local-generate.service.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/services/org-chart.service.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/page/org-chart.page.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/page/org-chart.page.html"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXMOrganizationNode } from '../model/org-chart.type';\n\n/**\n * Injected by org chart node components to access colors, i18n labels, and expand/collapse.\n */\nexport interface AXMOrgChartHostApi {\n getNodeColors(color: string): Record<string, string>;\n isNodeSelected(data: AXMOrganizationNode): boolean;\n selectNode(data: AXMOrganizationNode): void;\n openNodeContextMenuFromMore(event: unknown, data: AXMOrganizationNode): void;\n readonly chartML: {\n vacant: AXPMultiLanguageString;\n directReports: AXPMultiLanguageString;\n teams: AXPMultiLanguageString;\n people: AXPMultiLanguageString;\n positions: AXPMultiLanguageString;\n chiefExecutive: AXPMultiLanguageString;\n /** Business unit detail rows: unit head display name and role title from `metadata.unitHead`. */\n buHead: AXPMultiLanguageString;\n buPosition: AXPMultiLanguageString;\n unitType: AXPMultiLanguageString;\n businessUnit: AXPMultiLanguageString;\n location: AXPMultiLanguageString;\n code: AXPMultiLanguageString;\n capacity: AXPMultiLanguageString;\n level: AXPMultiLanguageString;\n email: AXPMultiLanguageString;\n phone: AXPMultiLanguageString;\n employmentType: AXPMultiLanguageString;\n workMode: AXPMultiLanguageString;\n /** i18n key for the node “more” control (translate pipe). */\n more: string;\n /** i18n key when the context menu has no runnable actions. */\n noActionsAvailable: string;\n };\n getTeamsMembershipCount(data: AXMOrganizationNode): number | null;\n /** When the card body already shows the assignee (merged unit / manager seat), hide `subtitle` so it is not duplicated. */\n shouldShowOrgCardSubtitle(data: AXMOrganizationNode): boolean;\n /** Subtree / seat strip: BU & company snapshot stats, or `position-ic` seats (1 position; people from vacant state or subtree). */\n getSubtreeRosterCounts(data: AXMOrganizationNode): { people: number; positions: number } | null;\n /** Key-value rows for the side detail panel only (not rendered on node cards). */\n getNodeInfoItems(data: AXMOrganizationNode): Array<{ label: AXPMultiLanguageString; value: string }>;\n toggleNode(data: AXMOrganizationNode, el?: HTMLDivElement | null): void;\n /** Shows or hides the chart detail panel. */\n toggleDetailPanel(): void;\n /**\n * Sets explicit expand/collapse for a branch and redraws the chart.\n * @param expanded When false, children are hidden on the next layout (`isExpanded === false`).\n */\n setNodeBranchExpanded(data: AXMOrganizationNode, expanded: boolean): void;\n}\n\nexport const AXM_ORG_CHART_HOST = new InjectionToken<AXMOrgChartHostApi>('AXM_ORG_CHART_HOST');\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPAvatarComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { AXM_ORG_CHART_HOST, type AXMOrgChartHostApi } from '../../tokens/org-chart-host.token';\nimport { AXMOrgChartNodeFooterMetric, AXMOrganizationNode } from '../../model/org-chart.type';\n\n//#endregion\n\n//#region ---- Component ----\n\n/** Business unit node: merged unit (head slot) or compact card. */\n@Component({\n selector: 'axm-org-chart-business-unit-node',\n templateUrl: './org-chart-business-unit-node.component.html',\n imports: [AXButtonModule, AXDecoratorModule, AXPAvatarComponent, AXTranslationModule, AsyncPipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXMOrgChartBusinessUnitNodeComponent {\n protected readonly host: AXMOrgChartHostApi = inject(AXM_ORG_CHART_HOST);\n\n readonly data = input.required<AXMOrganizationNode>();\n\n protected readonly unitFooterMetrics = computed((): AXMOrgChartNodeFooterMetric[] => {\n const node = this.data();\n const items: AXMOrgChartNodeFooterMetric[] = [];\n const roster = this.host.getSubtreeRosterCounts(node);\n if (roster) {\n items.push({\n icon: 'fa-users',\n value: String(roster.people),\n title: this.host.chartML.people,\n });\n items.push({\n icon: 'fa-briefcase',\n value: String(roster.positions),\n title: this.host.chartML.positions,\n });\n }\n const teams = this.host.getTeamsMembershipCount(node);\n if (teams != null && teams > 0) {\n items.push({\n icon: 'fa-people-group',\n value: String(teams),\n title: this.host.chartML.teams,\n });\n }\n return items;\n });\n\n protected isRegional(): boolean {\n return this.data().metadata?.['isRegional'] === true;\n }\n\n protected getColorKey(): string {\n return this.isRegional() ? 'accent1' : 'accent2';\n }\n\n protected resolveNodeColorToken(): string {\n const raw = this.data().metadata?.['unitTypeColor'];\n if (typeof raw === 'string' && raw.trim().length > 0) {\n return raw.trim();\n }\n return this.getColorKey();\n }\n}\n\n//#endregion\n","<div>\n @if (data().metadata?.['chartTemplate'] === 'merged-unit') {\n @let leadIcon = data().icon ?? 'fa-building';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--business-unit\"\n [class.axm-org-chart-card--vacant]=\"\n !!data().metadata?.['unitHead']?.['vacant']\n \"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors(resolveNodeColorToken())\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--org\"\n >\n <div class=\"axm-org-chart-card__leading-icon\">\n <i [class]=\"'fa-light fa-xl fa-fw ' + leadIcon\"></i>\n </div>\n <div class=\"axm-org-chart-card__title-block\">\n <span\n class=\"axm-org-chart-card__title\"\n [title]=\"(data().title | translate | async) ?? ''\"\n >{{ data().title | translate | async }}</span\n >\n @if (data().subtitle && host.shouldShowOrgCardSubtitle(data())) {\n <span\n class=\"axm-org-chart-card__subtitle\"\n [title]=\"(data().subtitle! | translate | async) ?? ''\"\n >{{ data().subtitle! | translate | async }}</span\n >\n }\n @if (data().description) {\n <span class=\"axm-org-chart-card__desc\">{{\n data().description | translate | async\n }}</span>\n }\n </div>\n </div>\n @if (data().metadata?.['unitHead']; as unitHead) {\n <section class=\"axm-org-chart-card__person\">\n <div class=\"axm-org-chart-card__person-label\">\n {{ host.chartML.buHead | translate | async }}\n </div>\n <div class=\"axm-org-chart-card__person-row\">\n <axp-avatar\n [fullName]=\"unitHead['employeeName'] ?? ''\"\n [placeholder]=\"\n unitHead['vacant'] || !unitHead['employeeName']\n \"\n [size]=\"44\"\n />\n <div class=\"axm-org-chart-card__person-text\">\n @if (unitHead['vacant'] || !unitHead['employeeName']) {\n <span class=\"axm-org-chart-card__person-vacant\">{{\n host.chartML.vacant | translate | async\n }}</span>\n } @else {\n <span class=\"axm-org-chart-card__person-name\">{{\n unitHead['employeeName']\n }}</span>\n }\n @if (unitHead['positionTitle']) {\n <span class=\"axm-org-chart-card__person-role\">{{\n unitHead['positionTitle'] | translate | async\n }}</span>\n }\n </div>\n </div>\n </section>\n }\n </div>\n @if (unitFooterMetrics().length > 0) {\n <div class=\"axm-org-chart-card__footer\">\n @for (m of unitFooterMetrics(); track $index) {\n <div class=\"axm-org-chart-card__metric\">\n <i\n [class]=\"\n 'fa-light fa-fw axm-org-chart-card__metric-icon ' + m.icon\n \"\n ></i>\n <div class=\"axm-org-chart-card__metric-col\">\n <span class=\"axm-org-chart-card__metric-value\">{{\n m.value\n }}</span>\n <span\n class=\"axm-org-chart-card__metric-title\"\n [title]=\"(m.title | translate | async) ?? ''\"\n >{{ m.title | translate | async }}</span\n >\n </div>\n </div>\n }\n </div>\n }\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n } @else {\n @let leadIcon = data().icon ?? 'fa-building';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--business-unit\"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors(resolveNodeColorToken())\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--org\"\n >\n <div class=\"axm-org-chart-card__leading-icon\">\n <i [class]=\"'fa-light fa-xl fa-fw ' + leadIcon\"></i>\n </div>\n <div class=\"axm-org-chart-card__title-block\">\n <span\n class=\"axm-org-chart-card__title\"\n [title]=\"(data().title | translate | async) ?? ''\"\n >{{ data().title | translate | async }}</span\n >\n @if (data().subtitle && host.shouldShowOrgCardSubtitle(data())) {\n <span\n class=\"axm-org-chart-card__subtitle\"\n [title]=\"(data().subtitle! | translate | async) ?? ''\"\n >{{ data().subtitle! | translate | async }}</span\n >\n }\n @if (data().description) {\n <span class=\"axm-org-chart-card__desc\">{{\n data().description | translate | async\n }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n }\n</div>\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPAvatarComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { AXM_ORG_CHART_HOST, type AXMOrgChartHostApi } from '../../tokens/org-chart-host.token';\nimport { AXMOrgChartNodeFooterMetric, AXMOrganizationNode } from '../../model/org-chart.type';\n\n//#endregion\n\n//#region ---- Component ----\n\n/** Company node: merged executive (Chief executive slot) or compact company card. */\n@Component({\n selector: 'axm-org-chart-company-node',\n templateUrl: './org-chart-company-node.component.html',\n imports: [AXButtonModule, AXDecoratorModule, AXPAvatarComponent, AXTranslationModule, AsyncPipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXMOrgChartCompanyNodeComponent {\n protected readonly host: AXMOrgChartHostApi = inject(AXM_ORG_CHART_HOST);\n\n readonly data = input.required<AXMOrganizationNode>();\n\n protected readonly companyFooterMetrics = computed((): AXMOrgChartNodeFooterMetric[] => {\n const node = this.data();\n const items: AXMOrgChartNodeFooterMetric[] = [];\n const roster = this.host.getSubtreeRosterCounts(node);\n if (roster) {\n items.push({\n icon: 'fa-users',\n value: String(roster.people),\n title: this.host.chartML.people,\n });\n items.push({\n icon: 'fa-briefcase',\n value: String(roster.positions),\n title: this.host.chartML.positions,\n });\n }\n const teams = this.host.getTeamsMembershipCount(node);\n if (teams != null && teams > 0) {\n items.push({\n icon: 'fa-people-group',\n value: String(teams),\n title: this.host.chartML.teams,\n });\n }\n return items;\n });\n}\n\n//#endregion\n","<div>\n @if (data().metadata?.['chartTemplate'] === 'merged-executive') {\n @let leadIcon = data().icon ?? 'fa-building';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--company\"\n [class.axm-org-chart-card--vacant]=\"\n !!data().metadata?.['topRole']?.['vacant']\n \"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors('primary')\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--org\"\n >\n <div class=\"axm-org-chart-card__leading-icon\">\n <i [class]=\"'fa-light fa-xl fa-fw ' + leadIcon\"></i>\n </div>\n <div class=\"axm-org-chart-card__title-block\">\n <span\n class=\"axm-org-chart-card__title\"\n [title]=\"(data().title | translate | async) ?? ''\"\n >{{ data().title | translate | async }}</span\n >\n @if (data().subtitle) {\n <span\n class=\"axm-org-chart-card__subtitle\"\n [title]=\"(data().subtitle! | translate | async) ?? ''\"\n >{{ data().subtitle! | translate | async }}</span\n >\n }\n @if (data().description) {\n <span class=\"axm-org-chart-card__desc\">{{\n data().description | translate | async\n }}</span>\n }\n </div>\n </div>\n @if (data().metadata?.['topRole']; as topRole) {\n <section class=\"axm-org-chart-card__person\">\n <div class=\"axm-org-chart-card__person-label\">\n {{ host.chartML.chiefExecutive | translate | async }}\n </div>\n <div class=\"axm-org-chart-card__person-row\">\n <axp-avatar\n [fullName]=\"topRole['employeeName'] ?? ''\"\n [placeholder]=\"topRole['vacant'] || !topRole['employeeName']\"\n [size]=\"44\"\n />\n <div class=\"axm-org-chart-card__person-text\">\n @if (topRole['vacant'] || !topRole['employeeName']) {\n <span class=\"axm-org-chart-card__person-vacant\">{{\n host.chartML.vacant | translate | async\n }}</span>\n } @else {\n <span class=\"axm-org-chart-card__person-name\">{{\n topRole['employeeName']\n }}</span>\n }\n @if (topRole['positionTitle']) {\n <span class=\"axm-org-chart-card__person-role\">{{\n topRole['positionTitle'] | translate | async\n }}</span>\n }\n </div>\n </div>\n </section>\n }\n </div>\n @if (companyFooterMetrics().length > 0) {\n <div class=\"axm-org-chart-card__footer\">\n @for (m of companyFooterMetrics(); track $index) {\n <div class=\"axm-org-chart-card__metric\">\n <i\n [class]=\"\n 'fa-light fa-fw axm-org-chart-card__metric-icon ' + m.icon\n \"\n ></i>\n <div class=\"axm-org-chart-card__metric-col\">\n <span class=\"axm-org-chart-card__metric-value\">{{\n m.value\n }}</span>\n <span\n class=\"axm-org-chart-card__metric-title\"\n [title]=\"(m.title | translate | async) ?? ''\"\n >{{ m.title | translate | async }}</span\n >\n </div>\n </div>\n }\n </div>\n }\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n } @else {\n @let leadIcon = data().icon ?? 'fa-building';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--company\"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors('primary')\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--org\"\n >\n <div class=\"axm-org-chart-card__leading-icon\">\n <i [class]=\"'fa-light fa-xl fa-fw ' + leadIcon\"></i>\n </div>\n <div class=\"axm-org-chart-card__title-block\">\n <span\n class=\"axm-org-chart-card__title\"\n [title]=\"(data().title | translate | async) ?? ''\"\n >{{ data().title | translate | async }}</span\n >\n @if (data().subtitle) {\n <span\n class=\"axm-org-chart-card__subtitle\"\n [title]=\"(data().subtitle! | translate | async) ?? ''\"\n >{{ data().subtitle! | translate | async }}</span\n >\n }\n @if (data().description) {\n <span class=\"axm-org-chart-card__desc\">{{\n data().description | translate | async\n }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n }\n</div>\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPAvatarComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { AXM_ORG_CHART_HOST, type AXMOrgChartHostApi } from '../../tokens/org-chart-host.token';\nimport { AXMOrgChartNodeFooterMetric, AXMOrganizationNode } from '../../model/org-chart.type';\n\n//#endregion\n\n//#region ---- Component ----\n\n/** Employee node: person-forward card or compact icon card. */\n@Component({\n selector: 'axm-org-chart-employee-node',\n templateUrl: './org-chart-employee-node.component.html',\n imports: [AXButtonModule, AXDecoratorModule, AXPAvatarComponent, AXTranslationModule, AsyncPipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXMOrgChartEmployeeNodeComponent {\n protected readonly host: AXMOrgChartHostApi = inject(AXM_ORG_CHART_HOST);\n\n readonly data = input.required<AXMOrganizationNode>();\n\n protected readonly employeeFooterMetrics = computed((): AXMOrgChartNodeFooterMetric[] => {\n const teams = this.host.getTeamsMembershipCount(this.data());\n if (teams == null || teams <= 0) {\n return [];\n }\n return [\n {\n icon: 'fa-people-group',\n value: String(teams),\n title: this.host.chartML.teams,\n },\n ];\n });\n\n /** Frame color for employee merged cards — distinct from business units (`accent2`). */\n protected getColorKey(): string {\n return 'accent3';\n }\n}\n\n//#endregion\n","<div>\n @if (data().metadata?.['chartTemplate'] === 'employee-card') {\n @let titleText = (data().title | translate | async) ?? '';\n @let subtitleText =\n data().subtitle ? ((data().subtitle | translate | async) ?? '') : '';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--employee\"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors(getColorKey())\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--person\"\n >\n <axp-avatar\n [fullName]=\"titleText\"\n [placeholder]=\"!titleText.trim()\"\n [size]=\"56\"\n />\n <div class=\"axm-org-chart-card__person-text\">\n @if (titleText.trim()) {\n <span\n class=\"axm-org-chart-card__person-name\"\n [title]=\"titleText\"\n >{{ titleText }}</span\n >\n }\n @if (subtitleText) {\n <span class=\"axm-org-chart-card__person-role\">{{\n subtitleText\n }}</span>\n }\n </div>\n </div>\n </div>\n @if (employeeFooterMetrics().length > 0) {\n <div class=\"axm-org-chart-card__footer\">\n @for (m of employeeFooterMetrics(); track $index) {\n <div class=\"axm-org-chart-card__metric\">\n <i\n [class]=\"\n 'fa-light fa-fw axm-org-chart-card__metric-icon ' + m.icon\n \"\n ></i>\n <div class=\"axm-org-chart-card__metric-col\">\n <span class=\"axm-org-chart-card__metric-value\">{{\n m.value\n }}</span>\n <span\n class=\"axm-org-chart-card__metric-title\"\n [title]=\"(m.title | translate | async) ?? ''\"\n >{{ m.title | translate | async }}</span\n >\n </div>\n </div>\n }\n </div>\n }\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n } @else {\n @let leadIcon = data().icon ?? 'fa-address-card';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--employee\"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors('surface')\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--org\"\n >\n <div class=\"axm-org-chart-card__leading-icon\">\n <i [class]=\"'fa-light fa-xl fa-fw ' + leadIcon\"></i>\n </div>\n <div class=\"axm-org-chart-card__title-block\">\n <span\n class=\"axm-org-chart-card__title\"\n [title]=\"(data().title | translate | async) ?? ''\"\n >{{ data().title | translate | async }}</span\n >\n @if (data().subtitle) {\n <span\n class=\"axm-org-chart-card__subtitle\"\n [title]=\"(data().subtitle! | translate | async) ?? ''\"\n >{{ data().subtitle! | translate | async }}</span\n >\n }\n @if (data().description) {\n <span class=\"axm-org-chart-card__desc\">{{\n data().description | translate | async\n }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n }\n</div>\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPAvatarComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { AXM_ORG_CHART_HOST, type AXMOrgChartHostApi } from '../../tokens/org-chart-host.token';\nimport { AXMOrgChartNodeFooterMetric, AXMOrganizationNode } from '../../model/org-chart.type';\n\n//#endregion\n\n//#region ---- Component ----\n\n/** Position node: merged manager (occupant slot), IC seat, or compact card. */\n@Component({\n selector: 'axm-org-chart-position-node',\n templateUrl: './org-chart-position-node.component.html',\n imports: [AXButtonModule, AXDecoratorModule, AXPAvatarComponent, AXTranslationModule, AsyncPipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXMOrgChartPositionNodeComponent {\n protected readonly host: AXMOrgChartHostApi = inject(AXM_ORG_CHART_HOST);\n\n readonly data = input.required<AXMOrganizationNode>();\n\n protected readonly icFooterMetrics = computed((): AXMOrgChartNodeFooterMetric[] => {\n const roster = this.host.getSubtreeRosterCounts(this.data());\n if (!roster) {\n return [];\n }\n return [\n {\n icon: 'fa-users',\n value: String(roster.people),\n title: this.host.chartML.people,\n },\n {\n icon: 'fa-briefcase',\n value: String(roster.positions),\n title: this.host.chartML.positions,\n },\n ];\n });\n\n protected readonly managerFooterMetrics = computed((): AXMOrgChartNodeFooterMetric[] => {\n const stats = this.data().metadata?.['stats'] as Record<string, unknown> | undefined;\n const directReports = stats?.['directReports'];\n if (typeof directReports !== 'number' || !Number.isFinite(directReports) || directReports <= 0) {\n return [];\n }\n return [\n {\n icon: 'fa-users',\n value: String(Math.max(0, Math.floor(directReports))),\n title: this.host.chartML.directReports,\n },\n ];\n });\n}\n\n//#endregion\n","<div>\n @if (data().metadata?.['chartTemplate'] === 'merged-manager') {\n @let leadIcon = 'fa-user-tie';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--position\"\n [class.axm-org-chart-card--vacant]=\"!!data().metadata?.['vacant']\"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors('accent3')\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--org\"\n >\n <div class=\"axm-org-chart-card__leading-icon\">\n <i [class]=\"'fa-light fa-xl fa-fw ' + leadIcon\"></i>\n </div>\n <div class=\"axm-org-chart-card__title-block\">\n <span\n class=\"axm-org-chart-card__title\"\n [title]=\"(data().title | translate | async) ?? ''\"\n >{{ data().title | translate | async }}</span\n >\n @if (data().subtitle && host.shouldShowOrgCardSubtitle(data())) {\n <span\n class=\"axm-org-chart-card__subtitle\"\n [title]=\"(data().subtitle! | translate | async) ?? ''\"\n >{{ data().subtitle! | translate | async }}</span\n >\n }\n </div>\n </div>\n <section class=\"axm-org-chart-card__person\">\n <div class=\"axm-org-chart-card__person-row\">\n <axp-avatar\n [fullName]=\"\n data().metadata?.['occupant']?.['displayName'] ?? ''\n \"\n [placeholder]=\"\n !!data().metadata?.['vacant'] ||\n !data().metadata?.['occupant']?.['displayName']\n \"\n [size]=\"44\"\n />\n <div class=\"axm-org-chart-card__person-text\">\n @if (\n !!data().metadata?.['vacant'] ||\n !data().metadata?.['occupant']?.['displayName']\n ) {\n <span class=\"axm-org-chart-card__person-vacant\">{{\n host.chartML.vacant | translate | async\n }}</span>\n } @else {\n <span class=\"axm-org-chart-card__person-name\">{{\n data().metadata?.['occupant']?.['displayName']\n }}</span>\n }\n @if (\n data().description &&\n !data().metadata?.['vacant'] &&\n data().metadata?.['occupant']?.['displayName']\n ) {\n <span class=\"axm-org-chart-card__person-role\">{{\n data().description! | translate | async\n }}</span>\n }\n </div>\n </div>\n </section>\n </div>\n @if (managerFooterMetrics().length > 0) {\n <div class=\"axm-org-chart-card__footer\">\n @for (m of managerFooterMetrics(); track $index) {\n <div class=\"axm-org-chart-card__metric\">\n <i\n [class]=\"\n 'fa-light fa-fw axm-org-chart-card__metric-icon ' + m.icon\n \"\n ></i>\n <div class=\"axm-org-chart-card__metric-col\">\n <span class=\"axm-org-chart-card__metric-value\">{{\n m.value\n }}</span>\n <span\n class=\"axm-org-chart-card__metric-title\"\n [title]=\"(m.title | translate | async) ?? ''\"\n >{{ m.title | translate | async }}</span\n >\n </div>\n </div>\n }\n </div>\n }\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n } @else if (data().metadata?.['chartTemplate'] === 'position-ic') {\n @let leadIcon = data().icon ?? 'fa-user-tie';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--position\"\n [class.axm-org-chart-card--vacant]=\"!!data().metadata?.['vacant']\"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors('accent3')\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--org\"\n >\n <div class=\"axm-org-chart-card__leading-icon\">\n <i [class]=\"'fa-light fa-xl fa-fw ' + leadIcon\"></i>\n </div>\n <div class=\"axm-org-chart-card__title-block\">\n <span\n class=\"axm-org-chart-card__title\"\n [title]=\"(data().title | translate | async) ?? ''\"\n >{{ data().title | translate | async }}</span\n >\n @if (data().subtitle) {\n <span\n class=\"axm-org-chart-card__subtitle\"\n [title]=\"(data().subtitle! | translate | async) ?? ''\"\n >{{ data().subtitle! | translate | async }}</span\n >\n } @else if (data().metadata?.['vacant']) {\n <span class=\"axm-org-chart-card__subtitle\">{{\n host.chartML.vacant | translate | async\n }}</span>\n }\n </div>\n </div>\n </div>\n @if (icFooterMetrics().length > 0) {\n <div class=\"axm-org-chart-card__footer\">\n @for (m of icFooterMetrics(); track $index) {\n <div class=\"axm-org-chart-card__metric\">\n <i\n [class]=\"\n 'fa-light fa-fw axm-org-chart-card__metric-icon ' + m.icon\n \"\n ></i>\n <div class=\"axm-org-chart-card__metric-col\">\n <span class=\"axm-org-chart-card__metric-value\">{{\n m.value\n }}</span>\n <span\n class=\"axm-org-chart-card__metric-title\"\n [title]=\"(m.title | translate | async) ?? ''\"\n >{{ m.title | translate | async }}</span\n >\n </div>\n </div>\n }\n </div>\n }\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n } @else {\n @let leadIcon = data().icon ?? 'fa-user-tie';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--position\"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors('accent3')\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--org\"\n >\n <div class=\"axm-org-chart-card__leading-icon\">\n <i [class]=\"'fa-light fa-xl fa-fw ' + leadIcon\"></i>\n </div>\n <div class=\"axm-org-chart-card__title-block\">\n <span\n class=\"axm-org-chart-card__title\"\n [title]=\"(data().title | translate | async) ?? ''\"\n >{{ data().title | translate | async }}</span\n >\n @if (data().subtitle) {\n <span\n class=\"axm-org-chart-card__subtitle\"\n [title]=\"(data().subtitle! | translate | async) ?? ''\"\n >{{ data().subtitle! | translate | async }}</span\n >\n }\n @if (data().description) {\n <span class=\"axm-org-chart-card__desc\">{{\n data().description | translate | async\n }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n }\n</div>\n","//#region ---- Imports ----\n\nimport { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { AXMOrgChartNodeType, type AXMOrganizationNode } from '../model/org-chart.type';\nimport { AXMOrgChartBusinessUnitNodeComponent } from './business-unit/org-chart-business-unit-node.component';\nimport { AXMOrgChartCompanyNodeComponent } from './company/org-chart-company-node.component';\nimport { AXMOrgChartEmployeeNodeComponent } from './employee/org-chart-employee-node.component';\nimport { AXMOrgChartPositionNodeComponent } from './position/org-chart-position-node.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Picks the org chart card by node type. Uses a static @switch (not NgComponentOutlet) so\n * components render reliably when the host is created in code and moved into an SVG foreignObject.\n */\n@Component({\n selector: 'axm-org-chart-node-outlet',\n templateUrl: './org-chart-node-outlet.component.html',\n styleUrls: ['./org-chart-node-outlet.component.css'],\n imports: [\n AXMOrgChartCompanyNodeComponent,\n AXMOrgChartBusinessUnitNodeComponent,\n AXMOrgChartPositionNodeComponent,\n AXMOrgChartEmployeeNodeComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axm-org-chart-node-outlet',\n },\n})\nexport class AXMOrgChartNodeOutletComponent {\n protected readonly NodeTypes = AXMOrgChartNodeType;\n\n readonly data = input.required<AXMOrganizationNode>();\n}\n\n//#endregion\n","@switch (data().type) {\n@case (NodeTypes.Company) {\n<axm-org-chart-company-node [data]=\"data()\" />\n} @case (NodeTypes.BusinessUnit) {\n<axm-org-chart-business-unit-node [data]=\"data()\" />\n} @case (NodeTypes.Position) {\n<axm-org-chart-position-node [data]=\"data()\" />\n} @case (NodeTypes.Employee) {\n<axm-org-chart-employee-node [data]=\"data()\" />\n} @default {\n<axm-org-chart-company-node [data]=\"data()\" />\n} }","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport {\n AXM_ORG_CHART_NODE_CONTRIBUTOR,\n AXMOrgChartNodeContributionContext,\n AXMOrgChartNodeContributionProvider,\n AXMOrgChartNodeContributorRef,\n AXMOrgChartNodeInfoContribution,\n AXMOrgChartNodeMenuAction,\n} from '../tokens/org-chart-node-contribution.token';\n\n//#endregion\n\n//#region ---- Service ----\n\n@Injectable()\nexport class AXMOrgChartNodeContributionService {\n /** `inject` typings for this multi-token omit the array wrapper; runtime value is always `T[]`. */\n private readonly contributorSlots: AXMOrgChartNodeContributorRef[] =\n (inject(AXM_ORG_CHART_NODE_CONTRIBUTOR, { optional: true }) as AXMOrgChartNodeContributorRef[] | null) ?? [];\n\n /**\n * Resolves eager contributors and lazy `provideLazyProvider` slots (factory returns a Promise).\n */\n private async resolveContributors(): Promise<AXMOrgChartNodeContributionProvider[]> {\n return Promise.all(this.contributorSlots.map((slot) => Promise.resolve(slot)));\n }\n\n /**\n * Collects and sorts menu actions contributed by all providers for the current node context.\n */\n async getMenuActions(context: AXMOrgChartNodeContributionContext): Promise<AXMOrgChartNodeMenuAction[]> {\n const contributors = await this.resolveContributors();\n const buckets = await Promise.all(contributors.map((provider) => provider.getMenuActions(context)));\n return buckets\n .flat()\n .sort((a, b) => (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER));\n }\n\n /**\n * Collects and sorts related info blocks contributed for the selected node.\n * This is used by the upcoming node detail drawer.\n */\n async getInfoContributions(context: AXMOrgChartNodeContributionContext): Promise<AXMOrgChartNodeInfoContribution[]> {\n const contributors = await this.resolveContributors();\n const buckets = await Promise.all(\n contributors.map((provider) => provider.getInfoContributions?.(context) ?? Promise.resolve([])),\n );\n return buckets\n .flat()\n .sort((a, b) => (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER));\n }\n}\n\n//#endregion\n","import { AXMOrganizationNode, AXMOrgChartNodeType } from '../model/org-chart.type';\n\n/**\n * Drops leaf vacant seat position nodes from the persisted chart tree (matches generator behavior when\n * `showVacantLeafSeats` is false).\n */\nexport function omitVacantLeafSeatNodes(root: AXMOrganizationNode): AXMOrganizationNode {\n const clone = structuredClone(root);\n const visit = (node: AXMOrganizationNode): void => {\n if (!node.children?.length) {\n return;\n }\n node.children = node.children.filter((child) => {\n const hideVacantSeat =\n child.type === AXMOrgChartNodeType.Position && child.metadata?.['vacant'] === true;\n return !hideVacantSeat;\n });\n for (const child of node.children) {\n visit(child);\n }\n };\n visit(clone);\n return clone;\n}\n","import type { AXMOrganizationManagementChartNodeEntityModel } from '@acorex-platform/module-organization-management-client/contracts';\n\nexport type OrgChartMode = 'location' | 'structure' | 'reporting' | 'positionHierarchy';\n\nexport enum OrgChartNodeType {\n Company = 'Company',\n BusinessUnit = 'BusinessUnit',\n Position = 'Position',\n Employee = 'Employee',\n}\n\nexport type OrgChartNode = AXMOrganizationManagementChartNodeEntityModel;\n\nexport interface OrgChartTenantContext {\n id: string;\n title?: unknown;\n}\n\nexport type OrgChartGenerateResult = {\n id: string;\n version: string;\n};\n","import {type AXPMultiLanguageString} from '@acorex-platform/framework-shared/core';\nimport { createMultiLanguageString } from '@acorex-platform/framework-shared/core';\n\n/**\n * System labels embedded in generated chart JSON. Must stay aligned with demo i18n:\n * `organization-management.organization-chart.nodes` (en-US / fa-IR).\n */\nexport const AXM_ORG_CHART_NODE_LABELS = {\n company: createMultiLanguageString('Company', 'شرکت'),\n vacant: createMultiLanguageString('Vacant', 'خالی'),\n headPrefix: createMultiLanguageString('Head', 'مسئول'),\n demoOrganization: createMultiLanguageString('Demo Organization', 'سازمان نمونه'),\n employee: createMultiLanguageString('Employee', 'کارمند'),\n position: createMultiLanguageString('Position', 'سمت'),\n region: createMultiLanguageString('Region', 'منطقه'),\n assign: createMultiLanguageString('Assign', 'تخصیص'),\n reassign: createMultiLanguageString('Reassign', 'تغییر تخصیص'),\n directReports: createMultiLanguageString('Direct reports', 'گزارش مستقیم'),\n} as const;\n\nexport function axmNormalizeChartTitle(value: unknown, fallback: AXPMultiLanguageString): AXPMultiLanguageString {\n if (value == null || value === '') {\n return fallback;\n }\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n return value as AXPMultiLanguageString;\n }\n return fallback;\n}\n","import { AXPDataGenerator } from '@acorex-platform/framework-client/core';\nimport { getOrgChartMergedBusinessUnitId } from '@acorex-platform/module-organization-management-client/contracts';\nimport { OrgChartNode, OrgChartNodeType } from '../org-chart.types';\n\nimport { OrgChartBuilder, OrgChartBuildContext } from './types';\nimport { AXM_ORG_CHART_NODE_LABELS, axmNormalizeChartTitle } from '../org-chart-labels';\nexport class LocationOrgChartBuilder implements OrgChartBuilder {\n build(context: OrgChartBuildContext): OrgChartNode {\n const { root, indices, helpers, orgRootConfig } = context;\n const mergedCorporateBusinessUnitId = getOrgChartMergedBusinessUnitId();\n\n for (const bu of context.data.businessUnits as any[]) {\n // Enterprise-root BU is merged into the company node on structure charts; here it has no region — omit to avoid a duplicate CEO card on the root.\n if (mergedCorporateBusinessUnitId != null && String(bu.id) === mergedCorporateBusinessUnitId) {\n continue;\n }\n const type = indices.buTypeById.get(bu.typeId);\n const typeCode: string = type?.name ?? '';\n const allowsDirectPositions = type?.allowsDirectPositions !== false;\n const typeColor = typeof type?.color === 'string' ? type.color.trim() : '';\n const typeIcon =\n typeof type?.icon === 'string' && type.icon.trim().length > 0\n ? type.icon.trim()\n : typeCode === 'division'\n ? 'fa-sitemap'\n : typeCode === 'department'\n ? 'fa-building-user'\n : 'fa-network-wired';\n const regionNode = helpers.ensureRegionPath(bu.geographicRegionId);\n\n const buAssignments = indices.assignmentsByBU.get(String(bu.id)) || [];\n const headPositionId = bu.headPositionId != null ? String(bu.headPositionId) : null;\n const children = allowsDirectPositions\n ? helpers.buildPositionNodes(buAssignments, bu, headPositionId)\n : [];\n const subtitle = helpers.buildBusinessUnitHeadSubtitle(bu, buAssignments);\n\n const headPos = headPositionId ? indices.positionById.get(headPositionId) : null;\n const headTitleMl = headPos ? axmNormalizeChartTitle(headPos.title, AXM_ORG_CHART_NODE_LABELS.position) : undefined;\n const headAssignments = headPositionId\n ? buAssignments.filter((a: any) => String(a.positionId) === headPositionId)\n : [];\n const headRep = helpers.chooseRepresentativeAssignment(headAssignments);\n const headEmp = headRep ? indices.employeeById.get(headRep.employeeId) : null;\n const headName = headEmp ? helpers.getEmployeeDisplayName(headEmp) : undefined;\n const headEmpId = headEmp ? String(headEmp.id) : undefined;\n const vacantHead = !!(headPositionId && !headName);\n\n const buNode: OrgChartNode = {\n id: AXPDataGenerator.uuid(),\n title: bu.title,\n subtitle,\n description: bu.description,\n type: OrgChartNodeType.BusinessUnit,\n icon: typeIcon,\n entity: { id: bu.id, type: orgRootConfig.entities.businessUnit.source },\n children,\n metadata: {\n isRegional: false,\n businessUnitKind: typeCode,\n typeAllowsDirectPositions: allowsDirectPositions,\n chartTemplate: 'merged-unit',\n ...(typeColor.length > 0 ? { unitTypeColor: typeColor } : {}),\n unitHead:\n headTitleMl != null\n ? {\n positionTitle: headTitleMl,\n positionId: headPositionId ?? undefined,\n employeeName: headName,\n employeeId: headEmpId,\n vacant: vacantHead,\n }\n : undefined,\n stats: { directChildren: children.length },\n },\n };\n\n if (regionNode) {\n regionNode.children = regionNode.children || [];\n regionNode.children.push(buNode);\n } else {\n root.children!.push(buNode);\n }\n }\n\n return root;\n }\n}\n\n","//#region ---- Assignment ordering / multi-incumbent support ----\n\n/**\n * Sort assignments for representative pick: primary first, then latest {@link startDate}.\n */\nexport function axcOrderAssignmentsForRepresentative(list: any[]): any[] {\n if (!list?.length) {\n return [];\n }\n return [...list].sort((a, b) => {\n const ap = a?.isPrimary === true ? 1 : 0;\n const bp = b?.isPrimary === true ? 1 : 0;\n if (bp !== ap) {\n return bp - ap;\n }\n const ad = a?.startDate ? new Date(a.startDate).getTime() : 0;\n const bd = b?.startDate ? new Date(b.startDate).getTime() : 0;\n return bd - ad;\n });\n}\n\n/**\n * One row per employee (same position / BU can have multiple people).\n */\nexport function axcDistinctAssignmentsByEmployee(ordered: any[]): any[] {\n const seen = new Set<string>();\n const out: any[] = [];\n for (const a of ordered) {\n const id = String(a?.employeeId ?? '');\n if (!id || seen.has(id)) {\n continue;\n }\n seen.add(id);\n out.push(a);\n }\n return out;\n}\n\n//#endregion\n","const POSITION_ASSIGNMENT_ACTIVE_STATUS = 'active';\n\nexport interface AXCEmployeeManagerResolutionContext {\n now: Date;\n preferPrimary: boolean;\n businessUnitById: Map<string, any>;\n positionById: Map<string, any>;\n assignments: any[];\n}\n\nexport function axcIsActiveAssignment(a: any, now: Date, preferPrimary: boolean): boolean {\n if (a?.statusId !== POSITION_ASSIGNMENT_ACTIVE_STATUS) return false;\n if (preferPrimary) return a?.isPrimary === true;\n return true;\n}\n\nexport function axcIsAssignmentRowDiscarded(a: any): boolean {\n if (a == null || typeof a !== 'object') {\n return true;\n }\n if (a.auditInfo?.deleted != null) {\n return true;\n }\n if ('isArchived' in a && a.isArchived === true) {\n return true;\n }\n if ('archived' in a && a.archived === true) {\n return true;\n }\n if (typeof a.status === 'string' && a.status.toLowerCase().includes('archived')) {\n return true;\n }\n return false;\n}\n\nexport function axcBuildEmployeeEligibleActiveAssignmentCount(assignments: any[], now: Date): Map<string, number> {\n const map = new Map<string, number>();\n for (const a of assignments) {\n if (axcIsAssignmentRowDiscarded(a)) {\n continue;\n }\n if (!axcIsActiveAssignment(a, now, false)) {\n continue;\n }\n const id = String(a.employeeId ?? '');\n if (!id) {\n continue;\n }\n map.set(id, (map.get(id) ?? 0) + 1);\n }\n return map;\n}\n\nexport function axcIsAssignmentIncludedInOrgChartPrimarySlice(\n a: any,\n now: Date,\n eligibleCountByEmployeeId: Map<string, number>,\n): boolean {\n if (axcIsAssignmentRowDiscarded(a)) {\n return false;\n }\n if (!axcIsActiveAssignment(a, now, false)) {\n return false;\n }\n if (a?.isPrimary === true) {\n return true;\n }\n const empId = String(a.employeeId ?? '');\n return (eligibleCountByEmployeeId.get(empId) ?? 0) === 1;\n}\n\nexport function axcChooseRepresentativeAssignment(list: any[], now: Date, preferPrimary: boolean): any | null {\n if (!list?.length) return null;\n const primaries = list.filter((x) => x?.isPrimary === true);\n const pool = primaries.length ? primaries : list;\n return pool.sort((a, b) => new Date(b.startDate).getTime() - new Date(a.startDate).getTime())[0];\n}\n\nexport function axcBuildManagerResolutionContext(\n businessUnits: any[],\n positions: any[],\n assignments: any[],\n now: Date,\n preferPrimary: boolean,\n): AXCEmployeeManagerResolutionContext {\n return {\n now,\n preferPrimary,\n businessUnitById: new Map(businessUnits.map((b) => [String(b.id), b])),\n positionById: new Map(positions.map((p) => [String(p.id), p])),\n assignments,\n };\n}\n\nexport function axcResolveManagerEmployeeId(\n employeeId: string,\n ctx: AXCEmployeeManagerResolutionContext,\n): string | null {\n const { now, preferPrimary, businessUnitById, assignments } = ctx;\n const employeeAssignments = assignments.filter(\n (a) => String(a.employeeId) === String(employeeId) && axcIsActiveAssignment(a, now, false),\n );\n if (!employeeAssignments.length) return null;\n const primary = axcChooseRepresentativeAssignment(employeeAssignments, now, preferPrimary);\n if (!primary?.businessUnitId || !primary?.positionId) return null;\n const buId = String(primary.businessUnitId);\n\n const bu = businessUnitById.get(buId);\n const headPosId = bu?.headPositionId != null ? String(bu.headPositionId) : undefined;\n if (headPosId && headPosId !== String(primary.positionId)) {\n const headPool = assignments.filter(\n (a) =>\n String(a.businessUnitId) === buId &&\n String(a.positionId) === headPosId &&\n axcIsActiveAssignment(a, now, false) &&\n String(a.employeeId) !== String(employeeId),\n );\n const headAsg = axcChooseRepresentativeAssignment(headPool, now, false);\n if (headAsg?.employeeId) return String(headAsg.employeeId);\n }\n\n let parentBu = bu?.parentId ? businessUnitById.get(String(bu.parentId)) : null;\n while (parentBu) {\n const pHead = parentBu.headPositionId != null ? String(parentBu.headPositionId) : undefined;\n if (pHead) {\n const pPool = assignments.filter(\n (a) =>\n String(a.businessUnitId) === String(parentBu.id) &&\n String(a.positionId) === pHead &&\n axcIsActiveAssignment(a, now, false) &&\n String(a.employeeId) !== String(employeeId),\n );\n const pAsg = axcChooseRepresentativeAssignment(pPool, now, false);\n if (pAsg?.employeeId) return String(pAsg.employeeId);\n }\n parentBu = parentBu.parentId ? businessUnitById.get(String(parentBu.parentId)) : null;\n }\n\n return null;\n}\n\nexport function axcChooseActivePrimaryAssignmentRow(\n employeeId: string,\n assignments: any[],\n now: Date,\n): any | null {\n const list = assignments.filter((x) => String(x?.employeeId) === String(employeeId));\n if (!list.length) {\n return null;\n }\n const dateActive = (a: any) => axcIsActiveAssignment(a, now, false);\n const primaryMatches = list.filter((a) => a?.isPrimary === true && dateActive(a));\n const pool = primaryMatches.length ? primaryMatches : list.filter(dateActive);\n if (!pool.length) {\n return null;\n }\n return pool.sort((a, b) => new Date(b.startDate).getTime() - new Date(a.startDate).getTime())[0];\n}\n\nexport function axcResolveActivePrimaryPositionId(employeeId: string, assignments: any[], now: Date): string | null {\n const pick = axcChooseActivePrimaryAssignmentRow(employeeId, assignments, now);\n return pick?.positionId != null ? String(pick.positionId) : null;\n}\n","import {AXPMultiLanguageString} from '@acorex-platform/framework-shared/core';\nimport { AXPDataGenerator } from '@acorex-platform/framework-client/core';\nimport { OrgChartNode, OrgChartNodeType } from '../org-chart.types';\nimport {\n getOrgChartMergedBusinessUnitId,\n RootConfig as OrgRootConfig,\n} from '@acorex-platform/module-organization-management-client/contracts';\n\nimport {\n axcDistinctAssignmentsByEmployee,\n axcOrderAssignmentsForRepresentative,\n} from '../org-chart-assignment-representatives';\nimport {\n axcBuildManagerResolutionContext,\n axcResolveManagerEmployeeId,\n} from '../employee-manager-resolution';\nimport { AXM_ORG_CHART_NODE_LABELS, axmNormalizeChartTitle } from '../org-chart-labels';\nimport { OrgChartBuilder, OrgChartBuildContext } from './types';\n\nexport class StructureOrgChartBuilder implements OrgChartBuilder {\n build(context: OrgChartBuildContext): OrgChartNode {\n const { root, indices, helpers, orgRootConfig } = context;\n const mergedCorporateBusinessUnitId = getOrgChartMergedBusinessUnitId();\n\n // Build BU hierarchy by parent reference if exists; otherwise group by type\n const childrenByParent = new Map<string | undefined, any[]>();\n for (const bu of context.data.businessUnits as any[]) {\n const parentId: string | undefined = (bu as any).parentId ?? undefined;\n const list = childrenByParent.get(parentId) || [];\n list.push(bu);\n childrenByParent.set(parentId, list);\n }\n\n const createBuNode = (bu: any): OrgChartNode => {\n const type = indices.buTypeById.get(bu.typeId);\n const typeCode: string = type?.name ?? '';\n const allowsDirectPositions = type?.allowsDirectPositions !== false;\n const typeColor = typeof type?.color === 'string' ? type.color.trim() : '';\n const typeIcon =\n typeof type?.icon === 'string' && type.icon.trim().length > 0\n ? type.icon.trim()\n : typeCode === 'division'\n ? 'fa-sitemap'\n : typeCode === 'department'\n ? 'fa-building-user'\n : 'fa-network-wired';\n const buAssignments = indices.assignmentsByBU.get(String(bu.id)) || [];\n const headPositionId = bu.headPositionId != null ? String(bu.headPositionId) : null;\n const children = allowsDirectPositions\n ? helpers.buildPositionNodes(buAssignments, bu, headPositionId)\n : [];\n const subtitle = helpers.buildBusinessUnitHeadSubtitle(bu, buAssignments);\n\n const headPos = headPositionId ? indices.positionById.get(headPositionId) : null;\n const headTitleMl = headPos ? axmNormalizeChartTitle(headPos.title, AXM_ORG_CHART_NODE_LABELS.position) : undefined;\n const headAssignments = headPositionId\n ? buAssignments.filter((a: any) => String(a.positionId) === headPositionId)\n : [];\n const headRep = helpers.chooseRepresentativeAssignment(headAssignments);\n const headEmp = headRep ? indices.employeeById.get(headRep.employeeId) : null;\n const headName = headEmp ? helpers.getEmployeeDisplayName(headEmp) : undefined;\n const headEmpId = headEmp ? String(headEmp.id) : undefined;\n const vacantHead = !!(headPositionId && !headName);\n\n const node: OrgChartNode = {\n id: AXPDataGenerator.uuid(),\n title: bu.title,\n subtitle,\n description: bu.description,\n type: OrgChartNodeType.BusinessUnit,\n icon: typeIcon,\n entity: { id: bu.id, type: orgRootConfig.entities.businessUnit.source },\n children,\n metadata: {\n isRegional: false,\n businessUnitKind: typeCode,\n typeAllowsDirectPositions: allowsDirectPositions,\n chartTemplate: 'merged-unit',\n ...(typeColor.length > 0 ? { unitTypeColor: typeColor } : {}),\n unitHead:\n headTitleMl != null\n ? {\n positionTitle: headTitleMl,\n positionId: headPositionId ?? undefined,\n employeeName: headName,\n employeeId: headEmpId,\n vacant: vacantHead,\n }\n : undefined,\n },\n };\n\n const childrenList = childrenByParent.get(String(bu.id)) || [];\n for (const childBu of childrenList) {\n node.children = node.children || [];\n node.children.push(createBuNode(childBu));\n }\n if (node.metadata) {\n node.metadata['stats'] = { directChildren: node.children?.length ?? 0 };\n }\n return node;\n };\n\n // Roots: undefined parent or explicit null. Built-in corporate HQ is merged into the company root in the UI — skip a chart node and attach its child BUs here.\n const pushRootBusinessUnitNodes = (tops: any[]) => {\n for (const top of tops) {\n if (mergedCorporateBusinessUnitId != null && String(top.id) === mergedCorporateBusinessUnitId) {\n const nested = childrenByParent.get(String(top.id)) || [];\n for (const childBu of nested) {\n root.children!.push(createBuNode(childBu));\n }\n } else {\n root.children!.push(createBuNode(top));\n }\n }\n };\n\n const rootCandidates = childrenByParent.get(undefined) || childrenByParent.get(null as unknown as undefined) || [];\n if (rootCandidates.length) {\n pushRootBusinessUnitNodes(rootCandidates);\n } else {\n // Fallback: group by type order Division -> Department -> Branch\n const divisions = (context.data.businessUnits as any[]).filter(bu => (indices.buTypeById.get(bu.typeId)?.name ?? '') === 'division');\n const departments = (context.data.businessUnits as any[]).filter(bu => (indices.buTypeById.get(bu.typeId)?.name ?? '') === 'department');\n const branches = (context.data.businessUnits as any[]).filter(bu => (indices.buTypeById.get(bu.typeId)?.name ?? '') === 'branch');\n const addAll = (list: any[]) => list.forEach(bu => root.children!.push(createBuNode(bu)));\n const corporate =\n mergedCorporateBusinessUnitId != null\n ? divisions.find((bu) => String(bu.id) === mergedCorporateBusinessUnitId)\n : undefined;\n if (corporate) {\n pushRootBusinessUnitNodes([corporate]);\n } else {\n addAll(divisions);\n }\n addAll(departments);\n addAll(branches);\n }\n\n return root;\n }\n}\n\n//#region ---- Position hierarchy builder (BU + head + assignments) ----\n\n/**\n * Collects position ids that participate in the hierarchy (catalog seats per BU plus actively assigned seats).\n */\nfunction collectPositionIdsForHierarchy(params: {\n businessUnits: any[];\n assignments: any[];\n isActiveAssignment: (a: any, now: Date) => boolean;\n now: Date;\n positionById: Map<string, any>;\n}): Set<string> {\n const ids = new Set<string>();\n for (const bu of params.businessUnits) {\n for (const raw of bu.positionIds ?? []) {\n const id = String(raw);\n if (params.positionById.has(id)) {\n ids.add(id);\n }\n }\n }\n for (const a of params.assignments) {\n if (!params.isActiveAssignment(a, params.now)) {\n continue;\n }\n const id = String(a.positionId ?? '');\n if (id && params.positionById.has(id)) {\n ids.add(id);\n }\n }\n return ids;\n}\n\n/**\n * Resolves which business unit anchors a position for hierarchy edges: primary active assignment BU when present,\n * otherwise a deterministic catalog BU (stable id sort).\n */\nfunction resolveCanonicalBusinessUnitIdForPosition(params: {\n positionId: string;\n businessUnits: any[];\n assignments: any[];\n isActiveAssignment: (a: any, now: Date) => boolean;\n now: Date;\n}): string | undefined {\n const pid = String(params.positionId);\n const catalogMatches = params.businessUnits.filter((bu) =>\n (bu.positionIds ?? []).map(String).includes(pid),\n );\n\n const activeAssignments = params.assignments.filter(\n (a) => String(a.positionId) === pid && params.isActiveAssignment(a, params.now),\n );\n\n if (activeAssignments.length > 0) {\n const primary = activeAssignments.find((a) => a.isPrimary === true);\n const pool = primary ? [primary] : activeAssignments;\n const chosen = [...pool].sort(\n (a, b) => new Date(b.startDate ?? 0).getTime() - new Date(a.startDate ?? 0).getTime(),\n )[0];\n return chosen ? String(chosen.businessUnitId) : undefined;\n }\n\n if (!catalogMatches.length) {\n return undefined;\n }\n\n const sorted = [...catalogMatches].sort((a, b) => String(a.id).localeCompare(String(b.id)));\n return sorted[0] ? String(sorted[0].id) : undefined;\n}\n\n/**\n * BU head seats report to the parent BU head; other seats in the BU report to the BU head.\n */\nfunction deriveReportsToParentPositionId(params: {\n positionId: string;\n canonicalBusinessUnitId: string;\n businessUnitById: Map<string, any>;\n}): string | null {\n const pid = String(params.positionId);\n const bu = params.businessUnitById.get(params.canonicalBusinessUnitId);\n if (!bu) {\n return null;\n }\n\n const headRaw = bu.headPositionId;\n const headId = headRaw != null && headRaw !== '' ? String(headRaw) : null;\n\n const parentBu =\n bu.parentId != null && bu.parentId !== ''\n ? params.businessUnitById.get(String(bu.parentId))\n : undefined;\n\n const parentHeadRaw = parentBu?.headPositionId;\n const parentHeadId =\n parentHeadRaw != null && parentHeadRaw !== '' ? String(parentHeadRaw) : null;\n\n if (headId && pid === headId) {\n return parentHeadId;\n }\n if (headId) {\n return headId;\n }\n return parentHeadId;\n}\n\n/**\n * **Position hierarchy:** derives formal reporting edges from **business units**, **BU head positions**, and\n * **assignments**, then renders a position-centric tree under the company root (merged-manager cards).\n */\nexport class PositionHierarchyOrgChartBuilder implements OrgChartBuilder {\n build(context: OrgChartBuildContext): OrgChartNode {\n const { root, indices, helpers, data, hcmRootConfig, now } = context;\n const assignments = data.assignments as any[];\n const positions = data.positions as any[];\n const businessUnits = data.businessUnits as any[];\n const positionById = indices.positionById;\n const employeeById = indices.employeeById;\n const businessUnitById = indices.businessUnitById;\n\n const mgrCtx = axcBuildManagerResolutionContext(\n businessUnits,\n positions,\n assignments,\n now,\n true,\n );\n const managerByEmployeeId = new Map<string, { id: string; fullName: string }>();\n for (const employee of data.employees as any[]) {\n const mid = axcResolveManagerEmployeeId(String(employee.id), mgrCtx);\n if (!mid) {\n continue;\n }\n const manager = employeeById.get(mid);\n if (manager) {\n managerByEmployeeId.set(String(employee.id), {\n id: String(manager.id),\n fullName: helpers.getEmployeeDisplayName(manager),\n });\n }\n }\n\n const positionIdsInChart = collectPositionIdsForHierarchy({\n businessUnits,\n assignments,\n isActiveAssignment: helpers.isActiveAssignment,\n now,\n positionById,\n });\n\n const canonicalBuByPositionId = new Map<string, string>();\n for (const pid of positionIdsInChart) {\n const buId = resolveCanonicalBusinessUnitIdForPosition({\n positionId: pid,\n businessUnits,\n assignments,\n isActiveAssignment: helpers.isActiveAssignment,\n now,\n });\n if (buId) {\n canonicalBuByPositionId.set(pid, buId);\n }\n }\n\n const parentPositionByChildId = new Map<string, string | null>();\n for (const pid of positionIdsInChart) {\n const buId = canonicalBuByPositionId.get(pid);\n if (!buId) {\n parentPositionByChildId.set(pid, null);\n continue;\n }\n parentPositionByChildId.set(\n pid,\n deriveReportsToParentPositionId({\n positionId: pid,\n canonicalBusinessUnitId: buId,\n businessUnitById,\n }),\n );\n }\n\n const childrenOfParent = new Map<string | null, string[]>();\n for (const pid of positionIdsInChart) {\n let parentKey = parentPositionByChildId.get(pid) ?? null;\n if (parentKey != null && !positionIdsInChart.has(parentKey)) {\n parentKey = null;\n }\n const bucket = childrenOfParent.get(parentKey) ?? [];\n bucket.push(pid);\n childrenOfParent.set(parentKey, bucket);\n }\n\n const titleSortKey = (positionId: string): string => {\n const pos = positionById.get(positionId);\n const ml = axmNormalizeChartTitle(pos?.title, AXM_ORG_CHART_NODE_LABELS.position);\n const resolved =\n typeof ml === 'string'\n ? ml\n : (ml as { 'en-US'?: string })?.['en-US'] ?? JSON.stringify(ml);\n return resolved.toLowerCase();\n };\n\n const sortPositionIds = (ids: string[]): string[] =>\n [...ids].sort((a, b) => {\n const cmp = titleSortKey(a).localeCompare(titleSortKey(b), undefined, { sensitivity: 'base' });\n return cmp !== 0 ? cmp : a.localeCompare(b);\n });\n\n const toEmployeeChildNode = (\n asg: any,\n posTitleMl: ReturnType<typeof axmNormalizeChartTitle>,\n ): OrgChartNode | null => {\n const emp = employeeById.get(asg.employeeId);\n if (!emp) {\n return null;\n }\n const name = helpers.getEmployeeDisplayName(emp);\n const role = emp.role?.title ?? null;\n const mgr = managerByEmployeeId.get(String(emp.id));\n const node: OrgChartNode = {\n id: AXPDataGenerator.uuid(),\n title: name || AXM_ORG_CHART_NODE_LABELS.employee,\n subtitle: posTitleMl,\n description: role ?? undefined,\n type: OrgChartNodeType.Employee,\n icon: 'fa-address-card',\n entity: {\n id: String(emp.id),\n type: hcmRootConfig.entities.employee.source,\n },\n metadata: {\n chartTemplate: 'employee-card',\n parentPositionTitle: posTitleMl,\n ...(mgr ? { manager: mgr } : {}),\n },\n isExpanded: true,\n };\n return node;\n };\n\n const buildSubtree = (positionId: string, visiting: Set<string>): OrgChartNode | null => {\n if (visiting.has(positionId)) {\n return null;\n }\n visiting.add(positionId);\n try {\n const pos = positionById.get(positionId);\n if (!pos) {\n return null;\n }\n\n const list = assignments.filter(\n (a: any) =>\n String(a.positionId) === positionId && helpers.isActiveAssignment(a, now),\n );\n const distinctAssignees = axcDistinctAssignmentsByEmployee(\n axcOrderAssignmentsForRepresentative(list),\n );\n const hasAnyIncumbent = distinctAssignees.length > 0;\n const posTitleMl = axmNormalizeChartTitle(pos.title, AXM_ORG_CHART_NODE_LABELS.position);\n\n const childPids = sortPositionIds(childrenOfParent.get(positionId) ?? []);\n const positionChildNodes: OrgChartNode[] = [];\n for (const cid of childPids) {\n const n = buildSubtree(cid, visiting);\n if (n) {\n positionChildNodes.push(n);\n }\n }\n\n const directReportsCount = positionChildNodes.length;\n\n const rep = distinctAssignees[0] ?? null;\n const employee = rep ? employeeById.get(rep.employeeId) : null;\n const employeeName = employee ? helpers.getEmployeeDisplayName(employee) : null;\n const employeeRole = employee?.role?.title ?? null;\n const manager = employee ? managerByEmployeeId.get(String(employee.id)) : undefined;\n\n const employeeExtras: OrgChartNode[] = [];\n for (const asg of distinctAssignees.slice(1)) {\n const child = toEmployeeChildNode(asg, posTitleMl);\n if (child) {\n employeeExtras.push(child);\n }\n }\n\n const canonicalBuId = canonicalBuByPositionId.get(positionId);\n const buForNode = canonicalBuId ? businessUnitById.get(canonicalBuId) : undefined;\n\n const positionMetadata: Record<string, unknown> = {\n chartTemplate: 'merged-manager',\n occupant: employeeName\n ? {\n displayName: employeeName,\n employeeId: String(employee!.id),\n roleTitle: employeeRole ?? undefined,\n }\n : undefined,\n vacant: !hasAnyIncumbent,\n stats: { directReports: directReportsCount },\n };\n if (manager) {\n positionMetadata['manager'] = manager;\n }\n if (buForNode?.title != null) {\n positionMetadata['organizationalUnitTitle'] = buForNode.title as AXPMultiLanguageString;\n }\n if (buForNode?.id != null) {\n const buId = String(buForNode.id);\n positionMetadata['organizationalUnitId'] = buId;\n positionMetadata['businessUnitId'] = buId;\n }\n\n const subtitleWhenCompact = employeeName ?? AXM_ORG_CHART_NODE_LABELS.vacant;\n const combinedChildren = [...positionChildNodes, ...employeeExtras];\n\n return {\n id: AXPDataGenerator.uuid(),\n title: posTitleMl,\n subtitle: employeeName ? undefined : subtitleWhenCompact,\n description: employeeRole ?? undefined,\n type: OrgChartNodeType.Position,\n icon: 'fa-user-tie',\n entity: { id: positionId, type: OrgRootConfig.entities.position.source },\n metadata: positionMetadata,\n children: combinedChildren.length ? combinedChildren : undefined,\n isExpanded: true,\n };\n } finally {\n visiting.delete(positionId);\n }\n };\n\n root.children = [];\n const roots = sortPositionIds(childrenOfParent.get(null) ?? []);\n for (const rid of roots) {\n const n = buildSubtree(rid, new Set());\n if (n) {\n root.children.push(n);\n }\n }\n\n return root;\n }\n}\n\n//#endregion\n\n","import { AXPDataGenerator } from '@acorex-platform/framework-client/core';\nimport { OrgChartNode, OrgChartNodeType } from '../org-chart.types';\n\nimport {\n axcBuildEmployeeEligibleActiveAssignmentCount,\n axcBuildManagerResolutionContext,\n axcIsAssignmentIncludedInOrgChartPrimarySlice,\n axcResolveActivePrimaryPositionId,\n axcResolveManagerEmployeeId,\n} from '../employee-manager-resolution';\nimport { AXM_ORG_CHART_NODE_LABELS, axmNormalizeChartTitle } from '../org-chart-labels';\nimport { OrgChartBuilder, OrgChartBuildContext } from './types';\n\n/**\n * **Reporting hierarchy:** company root → employee nodes linked by resolved line managers\n * ({@link axcResolveManagerEmployeeId}), not by business-unit spine.\n *\n * Only employees with at least one assignment in the same primary slice as the org chart are included.\n */\nexport class ReportingOrgChartBuilder implements OrgChartBuilder {\n //#region ---- Build ----\n\n build(context: OrgChartBuildContext): OrgChartNode {\n const { root, indices, helpers, data, hcmRootConfig } = context;\n const now = context.now;\n const assignments = data.assignments as any[];\n const businessUnits = data.businessUnits as any[];\n const positions = data.positions as any[];\n\n const eligibleAssignmentCountByEmployee = axcBuildEmployeeEligibleActiveAssignmentCount(assignments, now);\n const isInSlice = (a: any) =>\n axcIsAssignmentIncludedInOrgChartPrimarySlice(a, now, eligibleAssignmentCountByEmployee);\n\n const mgrCtx = axcBuildManagerResolutionContext(businessUnits, positions, assignments, now, true);\n\n const employeeIdsInChart = new Set<string>();\n for (const a of assignments) {\n if (!isInSlice(a)) {\n continue;\n }\n const eid = String(a.employeeId ?? '');\n if (eid) {\n employeeIdsInChart.add(eid);\n }\n }\n\n const effectiveManagerId = new Map<string, string | null>();\n for (const empId of employeeIdsInChart) {\n const resolved = axcResolveManagerEmployeeId(empId, mgrCtx);\n const mgr =\n resolved != null && employeeIdsInChart.has(String(resolved)) ? String(resolved) : null;\n effectiveManagerId.set(empId, mgr);\n }\n\n const directReportsByManager = new Map<string | null, string[]>();\n for (const empId of employeeIdsInChart) {\n const mgr = effectiveManagerId.get(empId) ?? null;\n const list = directReportsByManager.get(mgr) ?? [];\n list.push(empId);\n directReportsByManager.set(mgr, list);\n }\n\n const sortEmpIds = (ids: string[]): string[] =>\n [...ids].sort((a, b) => {\n const na = helpers.getEmployeeDisplayName(indices.employeeById.get(a)) || a;\n const nb = helpers.getEmployeeDisplayName(indices.employeeById.get(b)) || b;\n return na.localeCompare(nb, undefined, { sensitivity: 'base' });\n });\n\n const buildNode = (empId: string, path: Set<string>): OrgChartNode | null => {\n if (path.has(empId)) {\n return null;\n }\n path.add(empId);\n try {\n const emp = indices.employeeById.get(empId);\n const name = emp ? helpers.getEmployeeDisplayName(emp) : '';\n const role = emp?.role?.title ?? null;\n const posId = axcResolveActivePrimaryPositionId(empId, assignments, now);\n const pos = posId ? indices.positionById.get(posId) : null;\n const posTitleMl = axmNormalizeChartTitle(pos?.title, AXM_ORG_CHART_NODE_LABELS.position);\n\n const rawChildren = sortEmpIds(directReportsByManager.get(empId) ?? []);\n const childNodes: OrgChartNode[] = [];\n for (const cid of rawChildren) {\n const n = buildNode(cid, path);\n if (n) {\n childNodes.push(n);\n }\n }\n\n return {\n id: AXPDataGenerator.uuid(),\n title: name || AXM_ORG_CHART_NODE_LABELS.employee,\n subtitle: posTitleMl,\n description: role ?? undefined,\n type: OrgChartNodeType.Employee,\n icon: 'fa-address-card',\n entity: { id: empId, type: hcmRootConfig.entities.employee.source },\n metadata: {\n chartTemplate: 'employee-card',\n parentPositionTitle: posTitleMl,\n },\n children: childNodes.length ? childNodes : undefined,\n isExpanded: true,\n };\n } finally {\n path.delete(empId);\n }\n };\n\n root.children = [];\n const roots = sortEmpIds(directReportsByManager.get(null) ?? []);\n for (const empId of roots) {\n const n = buildNode(empId, new Set());\n if (n) {\n root.children.push(n);\n }\n }\n\n return root;\n }\n\n //#endregion\n}\n","import { OrgChartBuilder } from './types';\nimport { LocationOrgChartBuilder } from './location.builder';\nimport { PositionHierarchyOrgChartBuilder, StructureOrgChartBuilder } from './structure.builder';\nimport { ReportingOrgChartBuilder } from './reporting.builder';\nimport type { OrgChartMode } from '../org-chart.types';\n\nexport const createBuilder = (mode?: OrgChartMode): OrgChartBuilder => {\n switch (mode) {\n case 'structure':\n return new StructureOrgChartBuilder();\n case 'reporting':\n return new ReportingOrgChartBuilder();\n case 'positionHierarchy':\n return new PositionHierarchyOrgChartBuilder();\n case 'location':\n default:\n return new LocationOrgChartBuilder();\n }\n};\n","//#region ---- Types ----\n\nimport { resolveMultiLanguageString } from '@acorex-platform/framework-shared/core';\n\nimport { axcBuildManagerResolutionContext, axcResolveManagerEmployeeId } from './employee-manager-resolution';\nimport { OrgChartNode, OrgChartNodeType } from './org-chart.types';\n\n/** Subset passed from {@link loadOrgChartGenerationWorkspace} — kept local to avoid circular imports with compose. */\nexport interface OrgChartStatsWorkspaceInput {\n now: Date;\n businessUnits: any[];\n assignments: any[];\n positions: any[];\n teams: any[];\n businessUnitById: Map<string, any>;\n buTypeById: Map<string, any>;\n positionById: Map<string, any>;\n employeeById: Map<string, any>;\n isAssignmentInOrgChartSlice: (a: any, at: Date) => boolean;\n geographicRegionSource: string;\n}\n\nexport interface OrgChartAggregateContext {\n now: Date;\n businessUnits: any[];\n buTypeById: Map<string, any>;\n businessUnitById: Map<string, any>;\n positionById: Map<string, any>;\n employeeById: Map<string, any>;\n assignmentsInSlice: any[];\n teamMembershipCountByEmployeeId: Map<string, number>;\n directReportEmployeeIdsByManagerId: Map<string, Set<string>>;\n descendantBuIdsByBuId: Map<string, ReadonlySet<string>>;\n distinctPeopleByBuSubtree: Map<string, number>;\n geographicRegionSource: string;\n}\n\n//#endregion\n\n//#region ---- Build maps ----\n\n/** Maps **parent BU id** → direct child BU ids (same as `businessUnit.parentId` edges). */\nfunction buildChildrenByParentId(businessUnits: any[]): Map<string, string[]> {\n const byParentKey = new Map<string, string[]>();\n for (const bu of businessUnits) {\n const parentKey = bu.parentId != null && bu.parentId !== '' ? String(bu.parentId) : '__root__';\n const list = byParentKey.get(parentKey) ?? [];\n list.push(String(bu.id));\n byParentKey.set(parentKey, list);\n }\n return byParentKey;\n}\n\nfunction collectDescendantBuIds(\n buId: string,\n childrenByParent: Map<string, string[]>,\n memo: Map<string, ReadonlySet<string>>,\n): ReadonlySet<string> {\n const cached = memo.get(buId);\n if (cached) {\n return cached;\n }\n const set = new Set<string>([buId]);\n for (const childId of childrenByParent.get(buId) ?? []) {\n for (const x of collectDescendantBuIds(childId, childrenByParent, memo)) {\n set.add(x);\n }\n }\n const frozen = set as ReadonlySet<string>;\n memo.set(buId, frozen);\n return frozen;\n}\n\nfunction countDistinctPeopleInBuClosure(\n closure: ReadonlySet<string>,\n assignmentsInSlice: any[],\n): number {\n const employeeIds = new Set<string>();\n for (const a of assignmentsInSlice) {\n const bu = String(a.businessUnitId ?? '');\n if (bu && closure.has(bu)) {\n const e = String(a.employeeId ?? '');\n if (e) {\n employeeIds.add(e);\n }\n }\n }\n return employeeIds.size;\n}\n\nexport function buildTeamMembershipCountByEmployeeId(teams: any[]): Map<string, number> {\n const map = new Map<string, number>();\n for (const t of teams) {\n const seen = new Set<string>();\n const leader = t.leaderId != null ? String(t.leaderId) : '';\n if (leader) {\n seen.add(leader);\n }\n for (const raw of t.memberIds ?? []) {\n const id = String(raw);\n if (id) {\n seen.add(id);\n }\n }\n for (const empId of seen) {\n map.set(empId, (map.get(empId) ?? 0) + 1);\n }\n }\n return map;\n}\n\nfunction buildDirectReportEmployeeIdsByManagerId(\n employeeIdsInSlice: Set<string>,\n businessUnits: any[],\n positions: any[],\n assignments: any[],\n now: Date,\n): Map<string, Set<string>> {\n const map = new Map<string, Set<string>>();\n const ctx = axcBuildManagerResolutionContext(businessUnits, positions, assignments, now, true);\n for (const empId of employeeIdsInSlice) {\n const resolved = axcResolveManagerEmployeeId(empId, ctx);\n if (resolved == null || !employeeIdsInSlice.has(String(resolved))) {\n continue;\n }\n const mgr = String(resolved);\n const bucket = map.get(mgr) ?? new Set<string>();\n bucket.add(empId);\n map.set(mgr, bucket);\n }\n return map;\n}\n\nfunction firstEmailFromPerson(person: any): string | undefined {\n const emails = person?.emails;\n if (!Array.isArray(emails) || !emails.length) {\n return undefined;\n }\n const v = emails[0]?.value ?? emails[0]?.email;\n return typeof v === 'string' && v.trim() ? v.trim() : undefined;\n}\n\nfunction firstPhoneFromPerson(person: any): string | undefined {\n const phones = person?.phones;\n if (!Array.isArray(phones) || !phones.length) {\n return undefined;\n }\n const v = phones[0]?.value ?? phones[0]?.phone;\n return typeof v === 'string' && v.trim() ? v.trim() : undefined;\n}\n\nfunction pickLocaleString(value: unknown, localeId: string): string | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value === 'string') {\n const t = value.trim();\n return t.length ? t : undefined;\n }\n if (typeof value === 'object') {\n const resolved = resolveMultiLanguageString(value as any, localeId);\n const t = String(resolved ?? '').trim();\n return t.length ? t : undefined;\n }\n return undefined;\n}\n\n//#endregion\n\n//#region ---- Public API ----\n\nexport function createOrgChartAggregateContext(workspace: OrgChartStatsWorkspaceInput): OrgChartAggregateContext {\n const businessUnits = workspace.businessUnits as any[];\n const assignmentsInSlice: any[] = [];\n for (const a of workspace.assignments as any[]) {\n if (workspace.isAssignmentInOrgChartSlice(a, workspace.now)) {\n assignmentsInSlice.push(a);\n }\n }\n\n const employeeIdsInSlice = new Set<string>();\n for (const a of assignmentsInSlice) {\n const e = String(a.employeeId ?? '');\n if (e) {\n employeeIdsInSlice.add(e);\n }\n }\n\n const directReportEmployeeIdsByManagerId = buildDirectReportEmployeeIdsByManagerId(\n employeeIdsInSlice,\n businessUnits,\n workspace.positions as any[],\n workspace.assignments as any[],\n workspace.now,\n );\n\n const childrenByParent = buildChildrenByParentId(businessUnits);\n const descendantMemo = new Map<string, ReadonlySet<string>>();\n const descendantBuIdsByBuId = new Map<string, ReadonlySet<string>>();\n for (const bu of businessUnits) {\n const id = String(bu.id);\n descendantBuIdsByBuId.set(id, collectDescendantBuIds(id, childrenByParent, descendantMemo));\n }\n\n const distinctPeopleByBuSubtree = new Map<string, number>();\n for (const bu of businessUnits) {\n const id = String(bu.id);\n const closure = descendantBuIdsByBuId.get(id);\n if (closure) {\n distinctPeopleByBuSubtree.set(id, countDistinctPeopleInBuClosure(closure, assignmentsInSlice));\n }\n }\n\n return {\n now: workspace.now,\n businessUnits,\n buTypeById: workspace.buTypeById,\n businessUnitById: workspace.businessUnitById,\n positionById: workspace.positionById,\n employeeById: workspace.employeeById,\n assignmentsInSlice,\n teamMembershipCountByEmployeeId: buildTeamMembershipCountByEmployeeId(workspace.teams as any[]),\n directReportEmployeeIdsByManagerId,\n descendantBuIdsByBuId,\n distinctPeopleByBuSubtree,\n geographicRegionSource: workspace.geographicRegionSource,\n };\n}\n\n/**\n * Walks the composed chart tree and fills `metadata` / `stats` used by org chart cards (snapshot at generate time).\n */\nexport function augmentOrgChartTreeWithAggregates(\n root: OrgChartNode,\n ctx: OrgChartAggregateContext,\n localeId: string,\n): void {\n const companyDistinctPeople = (() => {\n const set = new Set<string>();\n for (const a of ctx.assignmentsInSlice) {\n const e = String(a.employeeId ?? '');\n if (e) {\n set.add(e);\n }\n }\n return set.size;\n })();\n\n const childrenByParent = buildChildrenByParentId(ctx.businessUnits);\n\n const visit = (node: OrgChartNode): number => {\n let employeeNodesBelow = 0;\n for (const ch of node.children ?? []) {\n employeeNodesBelow += visit(ch);\n }\n\n const meta = node.metadata ?? {};\n node.metadata = meta;\n\n const isEmployeeNode =\n node.type === OrgChartNodeType.Employee || meta['chartTemplate'] === 'employee-card';\n\n if (isEmployeeNode) {\n const empIdRaw = node.entity?.id ?? (meta['occupant'] as any)?.['employeeId'];\n const empId = empIdRaw != null ? String(empIdRaw) : '';\n employeeNodesBelow += 1;\n\n const teamCount = empId ? ctx.teamMembershipCountByEmployeeId.get(empId) : undefined;\n const mgrSet = empId ? ctx.directReportEmployeeIdsByManagerId.get(empId) : undefined;\n\n const emp = empId ? ctx.employeeById.get(empId) : undefined;\n if (emp) {\n if (typeof emp.employeeCode === 'string' && emp.employeeCode.trim()) {\n meta['employeeCode'] = emp.employeeCode.trim();\n }\n if (emp.hireDate != null) {\n const d =\n emp.hireDate instanceof Date\n ? emp.hireDate\n : typeof emp.hireDate === 'string'\n ? new Date(emp.hireDate)\n : null;\n if (d && !Number.isNaN(d.getTime())) {\n meta['hireDate'] = d.toISOString().slice(0, 10);\n }\n }\n const employmentTypeResolved = emp.employmentType ?? null;\n const etStr =\n pickLocaleString(employmentTypeResolved?.title ?? employmentTypeResolved, localeId);\n if (etStr) {\n meta['employmentTypeTitle'] = etStr;\n }\n const person = emp.person;\n if (person && typeof person === 'object') {\n const mail = firstEmailFromPerson(person);\n const tel = firstPhoneFromPerson(person);\n if (mail) {\n meta['workEmail'] = mail;\n }\n if (tel) {\n meta['phone'] = tel;\n }\n }\n }\n\n const statsPrev =\n typeof meta['stats'] === 'object' && meta['stats'] != null ? (meta['stats'] as Record<string, unknown>) : {};\n meta['stats'] = {\n ...statsPrev,\n subtreePeople: employeeNodesBelow,\n ...(typeof teamCount === 'number' ? { teamMembershipCount: teamCount } : {}),\n ...(mgrSet?.size ? { directReports: mgrSet.size } : {}),\n };\n\n return employeeNodesBelow;\n }\n\n if (node.type === OrgChartNodeType.Company) {\n const allBuIds = new Set<string>((ctx.businessUnits as any[]).map((b) => String(b.id)));\n const orgSeatCount =\n allBuIds.size > 0\n ? countDistinctSeatsInBuClosure(\n allBuIds,\n ctx.businessUnitById,\n ctx.assignmentsInSlice,\n ctx.positionById,\n )\n : 0;\n const statsPrev =\n typeof meta['stats'] === 'object' && meta['stats'] != null\n ? (meta['stats'] as Record<string, unknown>)\n : {};\n meta['stats'] = {\n ...statsPrev,\n subtreePeople: companyDistinctPeople,\n subtreePositionSeatCount: orgSeatCount,\n directChildren: node.children?.length ?? 0,\n };\n return employeeNodesBelow;\n }\n\n if (node.type === OrgChartNodeType.BusinessUnit) {\n const isRegional =\n meta['isRegional'] === true || node.entity?.type === ctx.geographicRegionSource;\n\n if (isRegional) {\n const statsPrev =\n typeof meta['stats'] === 'object' && meta['stats'] != null\n ? (meta['stats'] as Record<string, unknown>)\n : {};\n meta['stats'] = {\n ...statsPrev,\n subtreePeople: employeeNodesBelow,\n directChildren: node.children?.length ?? 0,\n };\n return employeeNodesBelow;\n }\n\n const buId = node.entity?.id != null ? String(node.entity.id) : '';\n if (buId) {\n const bu = ctx.businessUnitById.get(buId);\n if (bu?.code != null && String(bu.code).trim()) {\n meta['code'] = String(bu.code).trim();\n }\n\n const kind = ctx.buTypeById.get(bu?.typeId)?.name ?? meta['businessUnitKind'];\n if (typeof kind === 'string' && kind) {\n meta['unitType'] = kind;\n meta['businessUnitKind'] = kind;\n }\n\n const typeTitle = ctx.buTypeById.get(bu?.typeId)?.title;\n const typeStr = pickLocaleString(typeTitle, localeId);\n if (typeStr) {\n meta['unitTypeTitle'] = typeStr;\n }\n\n const closureCount = ctx.distinctPeopleByBuSubtree.get(buId) ?? 0;\n\n const childKindCounts: Record<string, number> = {};\n const directKids = childrenByParent.get(buId) ?? [];\n for (const childBuId of directKids) {\n const childBu = ctx.businessUnitById.get(childBuId);\n const code = String(ctx.buTypeById.get(childBu?.typeId)?.name ?? 'unknown');\n childKindCounts[code] = (childKindCounts[code] ?? 0) + 1;\n }\n\n const filledVacant =\n bu != null ? countFilledAndVacantSeatsForBu(bu, ctx.assignmentsInSlice, ctx.positionById) : { filled: 0, vacant: 0 };\n\n const closure = ctx.descendantBuIdsByBuId.get(buId) ?? new Set<string>([buId]);\n const subtreeSeatCount = countDistinctSeatsInBuClosure(\n closure,\n ctx.businessUnitById,\n ctx.assignmentsInSlice,\n ctx.positionById,\n );\n\n const statsPrev =\n typeof meta['stats'] === 'object' && meta['stats'] != null\n ? (meta['stats'] as Record<string, unknown>)\n : {};\n meta['stats'] = {\n ...statsPrev,\n subtreePeople: closureCount,\n subtreePositionSeatCount: subtreeSeatCount,\n directChildBusinessUnits: directKids.length,\n childCountsByBusinessUnitKind: childKindCounts,\n filledSeats: filledVacant.filled,\n vacantSeats: filledVacant.vacant,\n };\n }\n\n return employeeNodesBelow;\n }\n\n if (node.type === OrgChartNodeType.Position) {\n const occId =\n meta['occupant'] != null && typeof meta['occupant'] === 'object'\n ? String((meta['occupant'] as { employeeId?: string }).employeeId ?? '')\n : '';\n const dr = occId ? ctx.directReportEmployeeIdsByManagerId.get(occId)?.size ?? 0 : 0;\n const posId = node.entity?.id != null ? String(node.entity.id) : '';\n const pos = posId ? ctx.positionById.get(posId) : undefined;\n if (typeof pos?.code === 'string' && pos.code.trim()) {\n meta['code'] = pos.code.trim();\n meta['positionCode'] = pos.code.trim();\n }\n\n const occupantAdds = meta['vacant'] === true ? 0 : occId ? 1 : meta['occupant'] != null ? 1 : 0;\n const subtreePeopleForCard = employeeNodesBelow + occupantAdds;\n const statsPrev =\n typeof meta['stats'] === 'object' && meta['stats'] != null ? (meta['stats'] as Record<string, unknown>) : {};\n meta['stats'] = {\n ...statsPrev,\n directReports: dr,\n subtreePeople: subtreePeopleForCard,\n };\n\n return employeeNodesBelow + occupantAdds;\n }\n\n return employeeNodesBelow;\n };\n\n visit(root);\n}\n\n//#endregion\n\n//#region ---- Seat counts per BU catalog ----\n\nfunction countFilledAndVacantSeatsForBu(\n bu: any,\n assignmentsInSlice: any[],\n positionById: Map<string, any>,\n): { filled: number; vacant: number } {\n const buId = String(bu.id);\n let filled = 0;\n let vacant = 0;\n const seatIds = new Set<string>(\n [...(bu.positionIds ?? []).map((x: any) => String(x))].filter(Boolean),\n );\n for (const a of assignmentsInSlice) {\n if (String(a.businessUnitId) === buId) {\n seatIds.add(String(a.positionId));\n }\n }\n const excludedHead =\n bu.headPositionId != null && bu.headPositionId !== '' ? String(bu.headPositionId) : '';\n\n for (const pid of seatIds) {\n if (!pid || pid === excludedHead || !positionById.has(pid)) {\n continue;\n }\n const hasIncumbent = assignmentsInSlice.some(\n (a) => String(a.businessUnitId) === buId && String(a.positionId) === pid,\n );\n if (hasIncumbent) {\n filled++;\n } else {\n vacant++;\n }\n }\n return { filled, vacant };\n}\n\n/**\n * Seat slots anchored to business units inside `closure`: each **(business unit, position)** pair counts once,\n * excluding the unit **head position** catalog slot (aligned with vacant/filled rollup rules).\n */\nfunction countDistinctSeatsInBuClosure(\n closure: ReadonlySet<string>,\n businessUnitById: Map<string, any>,\n assignmentsInSlice: any[],\n positionById: Map<string, any>,\n): number {\n const seatKeys = new Set<string>();\n\n const addSeatIfEligible = (buId: string, positionIdRaw: string): void => {\n const pid = String(positionIdRaw ?? '');\n if (!pid || !positionById.has(pid)) {\n return;\n }\n const bu = businessUnitById.get(buId);\n const excludedHead = bu?.headPositionId != null && bu.headPositionId !== '' ? String(bu.headPositionId) : '';\n if (pid === excludedHead) {\n return;\n }\n seatKeys.add(`${buId}:${pid}`);\n };\n\n for (const buId of closure) {\n const bu = businessUnitById.get(buId);\n if (!bu) {\n continue;\n }\n for (const raw of bu.positionIds ?? []) {\n addSeatIfEligible(buId, String(raw));\n }\n }\n for (const a of assignmentsInSlice) {\n const buId = String(a.businessUnitId ?? '');\n if (!buId || !closure.has(buId)) {\n continue;\n }\n addSeatIfEligible(buId, String(a.positionId ?? ''));\n }\n return seatKeys.size;\n}\n\n//#endregion\n","import { AXPDataGenerator } from '@acorex-platform/framework-client/core';\nimport { resolveMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport type { AXPEntityAccessPort } from '@acorex-platform/framework-client/layout/entity';\n\nimport { RootConfig as HcmRootConfig } from '@acorex-platform/module-human-capital-management-client/contracts';\nimport { RootConfig as LocationRootConfig } from '@acorex-platform/module-location-management-client/contracts';\nimport {\n getOrgChartMergedBusinessUnitId,\n RootConfig as OrgRootConfig,\n} from '@acorex-platform/module-organization-management-client/contracts';\nimport { createBuilder, OrgChartBuildContext, OrgChartMode } from './builders';\nimport {\n axcDistinctAssignmentsByEmployee,\n axcOrderAssignmentsForRepresentative,\n} from './org-chart-assignment-representatives';\nimport { AXM_ORG_CHART_NODE_LABELS, axmNormalizeChartTitle } from './org-chart-labels';\nimport { augmentOrgChartTreeWithAggregates, createOrgChartAggregateContext } from './org-chart-stats.helper';\nimport { OrgChartNode, OrgChartNodeType, OrgChartTenantContext } from './org-chart.types';\nimport {\n axcBuildEmployeeEligibleActiveAssignmentCount,\n axcBuildManagerResolutionContext,\n axcIsAssignmentIncludedInOrgChartPrimarySlice,\n axcResolveManagerEmployeeId,\n} from './employee-manager-resolution';\n\n//#region ---- Workspace Types ----\n\nexport interface OrgChartGenerationWorkspace {\n now: Date;\n tenant: OrgChartTenantContext | null;\n geographicRegionSource: string;\n businessUnits: any[];\n businessUnitTypes: any[];\n positions: any[];\n geographicRegions: any[];\n employees: any[];\n assignments: any[];\n teams: any[];\n businessUnitById: Map<string, any>;\n buTypeById: Map<string, any>;\n geographicRegionById: Map<string, any>;\n positionById: Map<string, any>;\n employeeById: Map<string, any>;\n assignmentsByBU: Map<string, any[]>;\n isAssignmentInOrgChartSlice: (a: any, at: Date) => boolean;\n}\n\n//#endregion\n\n//#region ---- Load sources once ----\n\nasync function queryAllEntities(\n storage: AXPEntityAccessPort,\n entityName: string,\n): Promise<any[]> {\n const result = await storage.query(entityName, { skip: 0, take: 100_000 });\n return (result.items ?? []) as any[];\n}\n\nexport async function loadOrgChartGenerationWorkspace(\n storage: AXPEntityAccessPort,\n tenant: OrgChartTenantContext | null,\n): Promise<OrgChartGenerationWorkspace> {\n const now = new Date();\n const geographicRegionSource = `${LocationRootConfig.module.name}.${LocationRootConfig.entities.geographicRegion.name}`;\n const [businessUnits, businessUnitTypes, positions, geographicRegions] = await Promise.all([\n queryAllEntities(storage, OrgRootConfig.entities.businessUnit.source),\n queryAllEntities(storage, OrgRootConfig.entities.businessUnitType.source),\n queryAllEntities(storage, OrgRootConfig.entities.position.source),\n queryAllEntities(storage, geographicRegionSource)]);\n\n const [employees, assignments, teams] = await Promise.all([\n queryAllEntities(storage, HcmRootConfig.entities.employee.source),\n queryAllEntities(storage, HcmRootConfig.entities.positionAssignment.source),\n queryAllEntities(storage, OrgRootConfig.entities.team.source)]);\n\n const businessUnitById = new Map<string, any>((businessUnits as any[]).map((d) => [d.id, d]));\n const buTypeById = new Map<string, any>((businessUnitTypes as any[]).map((t) => [t.id, t]));\n const geographicRegionById = new Map<string, any>((geographicRegions as any[]).map((r) => [r.id, r]));\n const positionById = new Map<string, any>((positions as any[]).map((p) => [p.id, p]));\n const employeeById = new Map<string, any>((employees as any[]).map((e) => [e.id, e]));\n\n const eligibleAssignmentCountByEmployee = axcBuildEmployeeEligibleActiveAssignmentCount(assignments as any[], now);\n const isAssignmentInOrgChartSlice = (a: any, at: Date) =>\n axcIsAssignmentIncludedInOrgChartPrimarySlice(a, at, eligibleAssignmentCountByEmployee);\n\n const assignmentsByBU = new Map<string, any[]>();\n for (const a of assignments as any[]) {\n if (!isAssignmentInOrgChartSlice(a, now)) continue;\n const key = String(a.businessUnitId);\n const list = assignmentsByBU.get(key) || [];\n list.push(a);\n assignmentsByBU.set(key, list);\n }\n\n return {\n now,\n tenant,\n geographicRegionSource,\n businessUnits,\n businessUnitTypes,\n positions,\n geographicRegions,\n employees,\n assignments,\n teams,\n businessUnitById,\n buTypeById,\n geographicRegionById,\n positionById,\n employeeById,\n assignmentsByBU,\n isAssignmentInOrgChartSlice,\n };\n}\n\n//#endregion\n\n//#region ---- Compose one mode ----\n\nexport function composeOrgChartTreeForMode(\n workspace: OrgChartGenerationWorkspace,\n mode: OrgChartMode,\n showVacantLeafSeats: boolean,\n): OrgChartNode {\n const {\n now,\n tenant,\n geographicRegionSource,\n businessUnits,\n businessUnitTypes,\n positions,\n employees,\n assignments,\n teams,\n businessUnitById,\n buTypeById,\n geographicRegionById,\n positionById,\n employeeById,\n assignmentsByBU,\n isAssignmentInOrgChartSlice,\n } = workspace;\n\n const mergedCorporateBusinessUnitId = getOrgChartMergedBusinessUnitId();\n\n const root: OrgChartNode = {\n id: AXPDataGenerator.uuid(),\n title: axmNormalizeChartTitle(tenant?.title, AXM_ORG_CHART_NODE_LABELS.demoOrganization),\n type: OrgChartNodeType.Company,\n entity: tenant ? { id: tenant.id, type: 'tenant' } : undefined,\n isExpanded: true,\n icon: 'fa-building',\n children: [],\n };\n\n const chooseRepresentativeAssignment = (list: any[]): any | null => {\n if (!list?.length) return null;\n const primaries = list.filter((x) => x?.isPrimary === true);\n const pool = primaries.length ? primaries : list;\n return pool.sort((a, b) => new Date(b.startDate).getTime() - new Date(a.startDate).getTime())[0];\n };\n\n const ensureRegionPath = (regionId?: string | null): OrgChartNode | null => {\n if (!regionId) {\n return null;\n }\n const chain: any[] = [];\n let cursor = geographicRegionById.get(regionId);\n while (cursor) {\n chain.unshift(cursor);\n cursor = cursor.parentId ? geographicRegionById.get(cursor.parentId) : null;\n }\n if (!chain.length) {\n return null;\n }\n let currentParentChildren = root.children!;\n let currentNode: OrgChartNode | null = null;\n for (const region of chain) {\n const code = String(region?.type?.code ?? '').toLowerCase();\n const nodeType = OrgChartNodeType.BusinessUnit;\n let node = currentParentChildren.find((c) => c.entity?.id === region.id && c.type === nodeType);\n if (!node) {\n const regionLevel = code === 'country' ? 'country' : code === 'state' ? 'state' : 'city';\n node = {\n id: AXPDataGenerator.uuid(),\n title: axmNormalizeChartTitle(region.title, AXM_ORG_CHART_NODE_LABELS.region),\n type: nodeType,\n icon: regionLevel === 'country' ? 'fa-globe' : regionLevel === 'state' ? 'fa-map' : 'fa-city',\n entity: { id: region.id, type: geographicRegionSource },\n isExpanded: true,\n children: [],\n metadata: {\n isRegional: true,\n regionLevel,\n },\n };\n currentParentChildren.push(node);\n }\n currentNode = node;\n currentParentChildren = node.children ?? (node.children = []);\n }\n return currentNode;\n };\n\n const getEmployeeName = (employee: any): string => {\n return (\n employee?.person?.fullName ??\n employee?.person?.displayName ??\n employee?.party?.displayName ??\n employee?.fullName ??\n ''\n );\n };\n\n const buildBusinessUnitHeadSubtitle = (bu: any, buAssignments: any[]) => {\n const headPid = bu?.headPositionId != null ? String(bu.headPositionId) : '';\n if (!headPid) return undefined;\n const pos = positionById.get(headPid);\n const posTitleMl = axmNormalizeChartTitle(pos?.title, AXM_ORG_CHART_NODE_LABELS.position);\n const headEn = resolveMultiLanguageString(AXM_ORG_CHART_NODE_LABELS.headPrefix, 'en-US');\n const headFa = resolveMultiLanguageString(AXM_ORG_CHART_NODE_LABELS.headPrefix, 'fa-IR');\n const posEn = resolveMultiLanguageString(posTitleMl, 'en-US');\n const posFa = resolveMultiLanguageString(posTitleMl, 'fa-IR');\n const headAssignments = buAssignments.filter((a) => String(a.positionId) === headPid);\n const rep = chooseRepresentativeAssignment(headAssignments);\n const employee = rep ? employeeById.get(rep.employeeId) : null;\n const employeeName = employee ? getEmployeeName(employee) : null;\n /** Merged unit cards show head in the body; omit subtitle to avoid repeating name and role. */\n if (employeeName) {\n return undefined;\n }\n const vEn = resolveMultiLanguageString(AXM_ORG_CHART_NODE_LABELS.vacant, 'en-US');\n const vFa = resolveMultiLanguageString(AXM_ORG_CHART_NODE_LABELS.vacant, 'fa-IR');\n return {\n 'en-US': `${headEn}: ${posEn} · ${vEn}`,\n 'fa-IR': `${headFa}: ${posFa} · ${vFa}`,\n };\n };\n\n const managerResolutionCtx = axcBuildManagerResolutionContext(\n businessUnits as any[],\n positions as any[],\n assignments as any[],\n now,\n true,\n );\n const managerByEmployeeId = new Map<string, { id: string; fullName: string }>();\n for (const employee of employees as any[]) {\n const mid = axcResolveManagerEmployeeId(String(employee.id), managerResolutionCtx);\n if (!mid) continue;\n const manager = employeeById.get(mid);\n if (manager) {\n managerByEmployeeId.set(String(employee.id), {\n id: String(manager.id),\n fullName: getEmployeeName(manager),\n });\n }\n }\n\n const buildPositionNodes = (\n scopeAssignments: any[],\n bu: any,\n headPositionId?: string | null,\n ): OrgChartNode[] => {\n const excluded = headPositionId != null && headPositionId !== '' ? String(headPositionId) : null;\n\n const byPosition = new Map<string, any[]>();\n for (const a of scopeAssignments) {\n if (excluded && String(a.positionId) === excluded) continue;\n const pid = String(a.positionId);\n const arr = byPosition.get(pid) || [];\n arr.push(a);\n byPosition.set(pid, arr);\n }\n\n const fromCatalog = ((bu?.positionIds as string[] | undefined) ?? [])\n .map(String)\n .filter((id) => id && (!excluded || id !== excluded));\n const seatIdSet = new Set<string>([...fromCatalog, ...byPosition.keys()]);\n const seatIds = [...seatIdSet].sort((a, b) => {\n const pa = positionById.get(a);\n const pb = positionById.get(b);\n const ta = resolveMultiLanguageString(\n axmNormalizeChartTitle(pa?.title, AXM_ORG_CHART_NODE_LABELS.position),\n 'en-US',\n ).toLowerCase();\n const tb = resolveMultiLanguageString(\n axmNormalizeChartTitle(pb?.title, AXM_ORG_CHART_NODE_LABELS.position),\n 'en-US',\n ).toLowerCase();\n const cmp = ta.localeCompare(tb);\n return cmp !== 0 ? cmp : a.localeCompare(b);\n });\n\n const filled: OrgChartNode[] = [];\n const vacant: OrgChartNode[] = [];\n\n const toEmployeeChildNode = (\n asg: any,\n posTitleMl: ReturnType<typeof axmNormalizeChartTitle>,\n ): OrgChartNode | null => {\n const emp = employeeById.get(asg.employeeId);\n if (!emp) {\n return null;\n }\n const name = getEmployeeName(emp);\n const role = emp.role?.title ?? null;\n const mgr = managerByEmployeeId.get(String(emp.id));\n const node: OrgChartNode = {\n id: AXPDataGenerator.uuid(),\n title: name || AXM_ORG_CHART_NODE_LABELS.employee,\n subtitle: posTitleMl,\n description: role ?? undefined,\n type: OrgChartNodeType.Employee,\n icon: 'fa-address-card',\n entity: {\n id: String(emp.id),\n type: HcmRootConfig.entities.employee.source,\n },\n metadata: {\n chartTemplate: 'employee-card',\n parentPositionTitle: posTitleMl,\n ...(mgr ? { manager: mgr } : {}),\n },\n isExpanded: true,\n };\n return node;\n };\n\n for (const positionId of seatIds) {\n const pos = positionById.get(positionId);\n if (!pos) {\n continue;\n }\n\n const seatCapacity =\n typeof pos?.capacity === 'number' && Number.isFinite(pos.capacity) && pos.capacity >= 1\n ? Math.floor(pos.capacity)\n : 1;\n\n const list = byPosition.get(positionId) ?? [];\n const distinctAssignees = axcDistinctAssignmentsByEmployee(axcOrderAssignmentsForRepresentative(list));\n const hasAnyIncumbent = distinctAssignees.length > 0;\n const isManagerSeat = pos?.isManager === true;\n const posTitleMl = axmNormalizeChartTitle(pos?.title, AXM_ORG_CHART_NODE_LABELS.position);\n const directReportsCount = 0;\n\n if (!isManagerSeat) {\n if (hasAnyIncumbent) {\n for (const asg of distinctAssignees) {\n const n = toEmployeeChildNode(asg, posTitleMl);\n if (n) {\n filled.push(n);\n }\n }\n } else {\n vacant.push({\n id: AXPDataGenerator.uuid(),\n title: posTitleMl,\n subtitle: AXM_ORG_CHART_NODE_LABELS.vacant,\n type: OrgChartNodeType.Position,\n icon: 'fa-user-tie',\n entity: { id: positionId, type: OrgRootConfig.entities.position.source },\n metadata: {\n chartTemplate: 'position-ic',\n vacant: true,\n businessUnitId: String(bu.id),\n capacity: seatCapacity,\n activeAssignmentCount: 0,\n stats: { directReports: directReportsCount },\n },\n isExpanded: true,\n });\n }\n continue;\n }\n\n const rep = distinctAssignees[0] ?? null;\n const employee = rep ? employeeById.get(rep.employeeId) : null;\n const employeeName = employee ? getEmployeeName(employee) : null;\n const employeeRole = employee?.role?.title ?? null;\n const manager = employee ? managerByEmployeeId.get(String(employee.id)) : undefined;\n\n const employeeExtraChildren: OrgChartNode[] = [];\n for (const asg of distinctAssignees.slice(1)) {\n const child = toEmployeeChildNode(asg, posTitleMl);\n if (child) {\n employeeExtraChildren.push(child);\n }\n }\n\n const positionMetadata: Record<string, unknown> = {\n chartTemplate: 'merged-manager',\n businessUnitId: String(bu.id),\n capacity: seatCapacity,\n activeAssignmentCount: distinctAssignees.length,\n occupant: employeeName\n ? {\n displayName: employeeName,\n employeeId: String(employee!.id),\n roleTitle: employeeRole ?? undefined,\n }\n : undefined,\n vacant: !hasAnyIncumbent,\n stats: { directReports: directReportsCount },\n };\n if (manager) {\n positionMetadata['manager'] = manager;\n }\n const subtitleWhenCompact = employeeName ?? AXM_ORG_CHART_NODE_LABELS.vacant;\n const mergedNode: OrgChartNode = {\n id: AXPDataGenerator.uuid(),\n title: posTitleMl,\n subtitle: employeeName ? undefined : subtitleWhenCompact,\n description: employeeRole ?? undefined,\n type: OrgChartNodeType.Position,\n icon: 'fa-user-tie',\n entity: { id: positionId, type: OrgRootConfig.entities.position.source },\n metadata: positionMetadata,\n children: employeeExtraChildren.length ? employeeExtraChildren : undefined,\n isExpanded: true,\n };\n\n if (hasAnyIncumbent) {\n filled.push(mergedNode);\n } else {\n vacant.push(mergedNode);\n }\n }\n\n return showVacantLeafSeats ? [...filled, ...vacant] : [...filled];\n };\n\n const augmentCompanyNodeWithTopRole = (): void => {\n const ceoPos = (positions as any[]).find((p) => {\n const txt = resolveMultiLanguageString(\n axmNormalizeChartTitle(p?.title, AXM_ORG_CHART_NODE_LABELS.position),\n 'en-US',\n ).toLowerCase();\n return txt.includes('ceo') || txt.includes('chief executive');\n });\n let assignList: any[] = [];\n if (ceoPos) {\n for (const a of assignments as any[]) {\n if (String(a.positionId) !== String(ceoPos.id)) continue;\n if (!isAssignmentInOrgChartSlice(a, now)) continue;\n assignList.push(a);\n }\n }\n const rep = chooseRepresentativeAssignment(assignList);\n const emp = rep ? employeeById.get(rep.employeeId) : null;\n const ceoName = emp ? getEmployeeName(emp) : undefined;\n const posTitleMl = axmNormalizeChartTitle(ceoPos?.title, AXM_ORG_CHART_NODE_LABELS.position);\n const topRole =\n ceoPos != null\n ? {\n positionTitle: posTitleMl,\n positionId: String(ceoPos.id),\n employeeName: ceoName,\n employeeId: emp ? String(emp.id) : undefined,\n vacant: !ceoName,\n }\n : undefined;\n root.metadata = {\n ...root.metadata,\n chartTemplate: 'merged-executive',\n topRole,\n stats: { directChildren: root.children?.length ?? 0 },\n ...(mergedCorporateBusinessUnitId != null\n ? { mergedCorporateBusinessUnitId }\n : {}),\n };\n };\n\n const ctx: OrgChartBuildContext = {\n now,\n orgRootConfig: OrgRootConfig,\n hcmRootConfig: HcmRootConfig,\n root,\n data: {\n businessUnits: businessUnits as any[],\n businessUnitTypes: businessUnitTypes as any[],\n positions: positions as any[],\n employees: employees as any[],\n assignments: assignments as any[],\n },\n indices: {\n businessUnitById,\n buTypeById,\n geographicRegionById,\n positionById,\n employeeById,\n assignmentsByBU,\n },\n helpers: {\n isActiveAssignment: isAssignmentInOrgChartSlice,\n chooseRepresentativeAssignment,\n ensureRegionPath,\n buildPositionNodes,\n buildBusinessUnitHeadSubtitle,\n getEmployeeDisplayName: getEmployeeName,\n },\n };\n\n const builder = createBuilder(mode);\n builder.build(ctx);\n\n const corporateBuForRoot =\n mergedCorporateBusinessUnitId != null\n ? businessUnitById.get(mergedCorporateBusinessUnitId)\n : undefined;\n if (corporateBuForRoot?.description != null && corporateBuForRoot.description !== '') {\n root.description = corporateBuForRoot.description;\n }\n\n augmentCompanyNodeWithTopRole();\n\n // Reporting: CEO is already on merged-executive (topRole). Remove duplicate CEO employee node and promote direct reports under the company root.\n if (mode === 'reporting') {\n const topEmpId = root.metadata?.['topRole']?.['employeeId'];\n if (topEmpId != null && root.children?.length) {\n const topId = String(topEmpId);\n const merged: OrgChartNode[] = [];\n for (const child of root.children) {\n const isDupCEO =\n child.type === OrgChartNodeType.Employee &&\n String(child.entity?.id ?? '') === topId;\n if (isDupCEO) {\n merged.push(...(child.children ?? []));\n } else {\n merged.push(child);\n }\n }\n root.children = merged;\n if (root.metadata) {\n const prevStats =\n typeof root.metadata['stats'] === 'object' && root.metadata['stats'] != null\n ? (root.metadata['stats'] as Record<string, unknown>)\n : {};\n root.metadata['stats'] = {\n ...prevStats,\n directChildren: root.children.length,\n };\n }\n }\n }\n\n // Position hierarchy: CEO seat is already on merged-executive (topRole). Remove duplicate CEO position node and promote children under the company root.\n if (mode === 'positionHierarchy') {\n const topPosId = root.metadata?.['topRole']?.['positionId'];\n if (topPosId != null && root.children?.length) {\n const topId = String(topPosId);\n const merged: OrgChartNode[] = [];\n for (const child of root.children) {\n const isDupCEO =\n child.type === OrgChartNodeType.Position &&\n String(child.entity?.id ?? '') === topId;\n if (isDupCEO) {\n merged.push(...(child.children ?? []));\n } else {\n merged.push(child);\n }\n }\n root.children = merged;\n if (root.metadata) {\n const prevStats =\n typeof root.metadata['stats'] === 'object' && root.metadata['stats'] != null\n ? (root.metadata['stats'] as Record<string, unknown>)\n : {};\n root.metadata['stats'] = {\n ...prevStats,\n directChildren: root.children.length,\n };\n }\n }\n }\n\n const aggregateContext = createOrgChartAggregateContext({\n now,\n businessUnits,\n assignments,\n positions,\n teams,\n businessUnitById,\n buTypeById,\n positionById,\n employeeById,\n isAssignmentInOrgChartSlice,\n geographicRegionSource,\n });\n augmentOrgChartTreeWithAggregates(root, aggregateContext, 'en-US');\n\n return root;\n}\n\n//#endregion\n","import { inject, Injectable } from '@angular/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPEntityRuntimeAccessorService } from '@acorex-platform/framework-client/layout/entity';\nimport {\n AXMOrgChartStructurePayload,\n AXM_ORG_CHART_STRUCTURE_SCHEMA_VERSION,\n RootConfig as OrgRootConfig,\n} from '@acorex-platform/module-organization-management-client/contracts';\n\nimport {\n composeOrgChartTreeForMode,\n loadOrgChartGenerationWorkspace,\n} from '../generation/org-chart-compose.helper';\nimport type { OrgChartGenerateResult, OrgChartTenantContext } from '../generation/org-chart.types';\n\n//#region ---- Client-side org chart generation (offline / API fallback) ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMOrgChartLocalGenerateService {\n private readonly storage = inject(AXPEntityRuntimeAccessorService);\n private readonly session = inject(AXPSessionService);\n\n async generate(): Promise<OrgChartGenerateResult> {\n const tenant = this.resolveTenant();\n const workspace = await loadOrgChartGenerationWorkspace(this.storage, tenant);\n\n const structure: AXMOrgChartStructurePayload = {\n schemaVersion: AXM_ORG_CHART_STRUCTURE_SCHEMA_VERSION,\n modes: {\n structure: composeOrgChartTreeForMode(workspace, 'structure', true),\n location: composeOrgChartTreeForMode(workspace, 'location', true),\n reporting: composeOrgChartTreeForMode(workspace, 'reporting', true),\n positionHierarchy: composeOrgChartTreeForMode(workspace, 'positionHierarchy', true),\n },\n };\n\n const version = this.generateVersion();\n const id = await this.storage.insertOne(OrgRootConfig.entities.chart.source, {\n version,\n structure,\n });\n\n return { id: String(id), version };\n }\n\n private resolveTenant(): OrgChartTenantContext | null {\n const tenantId = this.session.tenant?.id;\n if (!tenantId) {\n return null;\n }\n return { id: tenantId, title: this.session.tenant?.title };\n }\n\n private generateVersion(): string {\n const d = new Date();\n const pad = (n: number) => String(n).padStart(2, '0');\n return `${d.getFullYear()}.${pad(d.getMonth() + 1)}.${pad(d.getDate())}-${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`;\n }\n}\n\n//#endregion\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExportService, AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\n\nimport { createMultiLanguageString } from '@acorex/core/translation';\nimport {AXPDataGenerator} from '@acorex-platform/framework-client/core';\nimport {AXPPlatformScope} from '@acorex-platform/framework-shared/core';\nimport { inject, Injectable, signal } from '@angular/core';\n\nimport {\n AXMOrganizationManagementCommandKeys,\n AXMOrgChartStructurePayload,\n AXMOrganizationManagementChartEntityModel,\n AXPOrganizationManagementSettings,\n RootConfig,\n} from '@acorex-platform/module-organization-management-client/contracts';\nimport { omitVacantLeafSeatNodes } from '../utils/org-chart-vacant-filter';\nimport { AXMOrgChartLocalGenerateService } from './org-chart-local-generate.service';\nimport {\n normalizeVacantLeafSeatsSetting,\n type OrgChartHydratedUiPrefs,\n parseOrgChartMode,\n} from '../ui/org-chart-user-ui.helper';\nimport { type OrgChartMode, AXMOrganizationNode, AXMOrgChartNodeType } from '../model/org-chart.type';\n\nexport type { OrgChartMode } from '../model/org-chart.type';\n\n@Injectable()\nexport class AXMOrgChartService {\n private readonly entityService = inject(AXPEntityService);\n private readonly chartData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.chart.name)\n .data<string, AXMOrganizationManagementChartEntityModel>();\n\n private loadingDialog = inject(AXLoadingDialogService);\n private exportService = inject(AXPExportService);\n private translationService = inject(AXTranslationService);\n private commandService = inject(AXPCommandService);\n private readonly localGenerate = inject(AXMOrgChartLocalGenerateService);\n private readonly settingsService = inject(AXPSettingsService);\n\n private readonly _modesBundle = signal<AXMOrgChartStructurePayload | null>(null);\n private readonly _selectedMode = signal<OrgChartMode>('structure');\n private readonly _showVacantLeafSeats = signal(true);\n\n private readonly _rootNode = signal<AXMOrganizationNode>({\n id: AXPDataGenerator.uuid(),\n type: AXMOrgChartNodeType.Company,\n title: createMultiLanguageString('Company', 'شرکت'),\n });\n\n public readonly rootNode = this._rootNode.asReadonly();\n public readonly selectedMode = this._selectedMode.asReadonly();\n public readonly showVacantLeafSeats = this._showVacantLeafSeats.asReadonly();\n\n /**\n * Applies user prefs resolved before first paint (route resolver). Does not persist.\n */\n applyHydratedUiPrefs(prefs: OrgChartHydratedUiPrefs | undefined): void {\n if (!prefs) {\n return;\n }\n if (prefs.selectedMode !== undefined) {\n this._selectedMode.set(prefs.selectedMode);\n }\n if (prefs.showVacantLeafSeats !== undefined) {\n this._showVacantLeafSeats.set(prefs.showVacantLeafSeats);\n }\n }\n\n /**\n * Applies current mode + vacant visibility from the cached bundle onto {@link rootNode}.\n */\n applyDisplayRoot(): void {\n const bundle = this._modesBundle();\n if (!bundle?.modes) {\n return;\n }\n const modeKey = this._selectedMode();\n let tree = structuredClone(bundle.modes[modeKey]) as AXMOrganizationNode;\n if (!this._showVacantLeafSeats()) {\n tree = omitVacantLeafSeatNodes(tree);\n }\n this._rootNode.set(tree);\n }\n\n public setChartMode(mode: OrgChartMode): void {\n this._selectedMode.set(mode);\n this.applyDisplayRoot();\n this.persistChartMode(mode);\n }\n\n public setShowVacantLeafSeats(value: unknown): void {\n const normalized = normalizeVacantLeafSeatsSetting(value);\n if (normalized === undefined) {\n return;\n }\n this._showVacantLeafSeats.set(normalized);\n this.applyDisplayRoot();\n this.persistShowVacantLeafSeats(normalized);\n }\n\n //#region ---- User chart preferences (settings) ----\n\n /**\n * Reads persisted chart UI preferences into signals (does not persist).\n */\n private async restoreChartUiFromSettings(): Promise<void> {\n try {\n const userScope = this.settingsService.scope(AXPPlatformScope.User);\n const modeRaw = await userScope.get<string | undefined>(\n AXPOrganizationManagementSettings.HierarchyChartMode,\n );\n const mode = parseOrgChartMode(modeRaw);\n if (mode !== undefined) {\n this._selectedMode.set(mode);\n }\n\n const vacantRaw = await userScope.get<unknown>(\n AXPOrganizationManagementSettings.HierarchyChartShowVacantLeafSeats,\n );\n const vacant = normalizeVacantLeafSeatsSetting(vacantRaw);\n if (vacant !== undefined) {\n this._showVacantLeafSeats.set(vacant);\n }\n } catch {\n // Keep constructor defaults when settings are unavailable.\n }\n }\n\n private persistChartMode(mode: OrgChartMode): void {\n void this.settingsService\n .scope(AXPPlatformScope.User)\n .set(AXPOrganizationManagementSettings.HierarchyChartMode, mode)\n .catch(() => {});\n }\n\n private persistShowVacantLeafSeats(value: boolean): void {\n void this.settingsService\n .scope(AXPPlatformScope.User)\n .set(AXPOrganizationManagementSettings.HierarchyChartShowVacantLeafSeats, value)\n .catch(() => {});\n }\n\n //#endregion\n\n //#region ---- Load / reload persisted chart ----\n\n public async load(): Promise<void> {\n await this.loadPersistedStructure(false);\n }\n\n /** Latest persisted chart version (undefined when no chart row exists). */\n public async getLatestChartVersion(): Promise<string | undefined> {\n const row = await this.queryLatestChartRow();\n const version = row?.version;\n return typeof version === 'string' && version.trim().length > 0 ? version.trim() : undefined;\n }\n\n /**\n * Polls until the latest chart version differs from {@link previousVersion}, or timeout.\n * Returns true when a new version was observed.\n */\n public async waitForChartVersionChange(\n previousVersion: string | null | undefined,\n options?: { timeoutMs?: number; intervalMs?: number },\n ): Promise<boolean> {\n const timeoutMs = options?.timeoutMs ?? 3000;\n const intervalMs = options?.intervalMs ?? 200;\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() < deadline) {\n await this.delay(intervalMs);\n const current = await this.getLatestChartVersion();\n if (current == null) {\n continue;\n }\n if (previousVersion == null || previousVersion === '' || current !== previousVersion) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Reloads the latest persisted chart into signals. Never calls generate.\n * @returns false when no valid persisted structure exists yet.\n */\n public async reloadFromStorage(): Promise<boolean> {\n const row = await this.queryLatestChartRow();\n return this.applyPersistedChartRow(row);\n }\n\n /**\n * After a structure-affecting mutation: wait for server regen, else client-generate fallback, then reload.\n * Works with server API (middleware regen) and offline/client-only storage profiles.\n */\n public async refreshAfterStructureChange(options?: {\n waitTimeoutMs?: number;\n intervalMs?: number;\n }): Promise<boolean> {\n const waitTimeoutMs = options?.waitTimeoutMs ?? 4000;\n const intervalMs = options?.intervalMs ?? 200;\n const versionBefore = await this.getLatestChartVersion();\n\n const versionChanged =\n versionBefore != null\n ? await this.waitForChartVersionChange(versionBefore, { timeoutMs: waitTimeoutMs, intervalMs })\n : await this.waitForChartVersionChange(null, { timeoutMs: waitTimeoutMs, intervalMs: 250 });\n\n if (!versionChanged) {\n await this.generate();\n }\n\n return this.reloadFromStorage();\n }\n\n public async generate(): Promise<boolean> {\n const result = await this.commandService.execute(\n AXMOrganizationManagementCommandKeys.OrganizationChart.Generate,\n {},\n );\n if (result?.success === true) {\n return true;\n }\n\n try {\n await this.localGenerate.generate();\n return true;\n } catch {\n return false;\n }\n }\n\n private hasPersistedStructure(\n structure: AXMOrgChartStructurePayload | undefined,\n ): structure is AXMOrgChartStructurePayload {\n return !!(\n structure?.modes?.structure &&\n structure?.modes?.location &&\n structure?.modes?.reporting &&\n structure?.modes?.positionHierarchy\n );\n }\n\n private async queryLatestChartRow(): Promise<AXMOrganizationManagementChartEntityModel | undefined> {\n return (\n await this.chartData.query({\n skip: 0,\n take: 1,\n sort: [{ field: 'version', dir: 'desc' }],\n })\n ).items[0];\n }\n\n private async applyPersistedChartRow(\n row: AXMOrganizationManagementChartEntityModel | undefined,\n ): Promise<boolean> {\n const structure = row?.structure;\n if (!this.hasPersistedStructure(structure)) {\n return false;\n }\n\n this._modesBundle.set(structure);\n await this.restoreChartUiFromSettings();\n this.applyDisplayRoot();\n return true;\n }\n\n private async loadPersistedStructure(isRetryAfterGenerate: boolean): Promise<void> {\n const row = await this.queryLatestChartRow();\n if (await this.applyPersistedChartRow(row)) {\n return;\n }\n\n if (isRetryAfterGenerate) {\n return;\n }\n\n const generated = await this.generate();\n if (!generated) {\n return;\n }\n\n await this.loadPersistedStructure(true);\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n //#endregion\n\n //#region ---- Printing ----\n\n async printChart(element: HTMLElement): Promise<void> {\n const d = this.loadingDialog.show({\n title: 'Printing Organization Chart...',\n mode: 'determinate',\n progressColor: 'primary',\n progressValue: 0,\n status: '0/10',\n text: 'Initializing print process...',\n buttons: [{ text: 'Cancel', color: 'danger', onClick: () => d.close() }],\n });\n\n try {\n await this.updateStep(\n d,\n await this.translate('@organization-management:organization-chart.states.preparing-document'),\n 10,\n '1/10',\n );\n const chartElement = element;\n const { originalStyles, modifiedStyles } = this.expandChart(chartElement);\n\n await this.updateStep(\n d,\n await this.translate('@organization-management:organization-chart.states.rendering-chart-image'),\n 25,\n '2.5/10',\n );\n const blob = await this.exportService.generateBlobFromElement(chartElement, {\n popup: true,\n filter: (node: Node) => !(node instanceof Element && node.classList.contains('--toggle')),\n bgcolor: 'transparent',\n scale: 2,\n quality: 1,\n height: Number.parseInt(modifiedStyles.modifiedHeight),\n width: Number.parseInt(modifiedStyles.modifiedWidth),\n });\n\n await this.updateStep(\n d,\n await this.translate('@organization-management:organization-chart.states.finalizing-image-processing'),\n 50,\n '5/10',\n );\n this.restoreChartStyles(chartElement, originalStyles);\n\n await this.updateStep(\n d,\n await this.translate('@organization-management:organization-chart.states.downloading-image'),\n 75,\n '7.5/10',\n );\n this.exportService.download(blob, 'org-chart.png');\n\n await this.updateStep(\n d,\n await this.translate('@organization-management:organization-chart.states.process-complete'),\n 100,\n '10/10',\n );\n setTimeout(() => d.close(), 1500);\n } catch (err) {\n console.error('Error capturing chart:', err);\n await this.updateStep(\n d,\n await this.translate('@organization-management:organization-chart.states.failed-to-generate-chart-image'),\n 100,\n 'Error',\n 'danger',\n );\n d.close();\n }\n }\n\n private expandChart(chartElement: HTMLElement) {\n const originalStyles = {\n originalOverflow: chartElement.style.overflow,\n originalWidth: chartElement.style.width,\n originalHeight: chartElement.style.height,\n };\n const modifiedStyles = {\n modifiedOverflow: 'visible',\n modifiedWidth: `${chartElement.scrollWidth}px`,\n modifiedHeight: `${chartElement.scrollHeight}px`,\n };\n chartElement.style.overflow = modifiedStyles.modifiedOverflow;\n chartElement.style.width = modifiedStyles.modifiedWidth;\n chartElement.style.height = modifiedStyles.modifiedHeight;\n return { originalStyles, modifiedStyles };\n }\n\n private restoreChartStyles(\n chartElement: HTMLElement,\n originalStyles: { originalOverflow: string; originalWidth: string; originalHeight: string },\n ): void {\n chartElement.style.overflow = originalStyles.originalOverflow;\n chartElement.style.width = originalStyles.originalWidth;\n chartElement.style.height = originalStyles.originalHeight;\n }\n\n private async updateStep(\n dialog: any,\n text: string,\n progress: number,\n status: string,\n color: AXStyleColorType = 'primary',\n ): Promise<void> {\n return new Promise((resolve) => {\n dialog.setProgressColor(color);\n dialog.setProgressText(text);\n dialog.setProgressValue(progress);\n dialog.setProgressStatus(status);\n resolve();\n });\n }\n\n private async translate(key: string): Promise<string> {\n return (await this.translationService.translateAsync(key)) + '...';\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXPActionMenuItem, AXPBreadcrumbItem, AXPExecuteCommand, AXPMultiLanguageString, getActionButton } from '@acorex-platform/framework-shared/core';\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXPanViewDirective } from '@acorex/cdk/pan-view';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuItem,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSwitchModule } from '@acorex/components/switch';\nimport { AXTranslationModule, createMultiLanguageString, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXStyleColorType } from '@acorex/cdk/common';\n\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\nimport {\n AXPLayoutFloatingZoomBarComponent,\n AXPLayoutSideDetailPanelComponent,\n type AXPLayoutSideDetailPanelEmptyState,\n type AXPLayoutSideDetailPanelHeader,\n type AXPLayoutSideDetailPanelSection,\n AXPThemeLayoutBlockComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex-platform/framework-client/layout/views';\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n ComponentRef,\n computed,\n ElementRef,\n inject,\n Injector,\n LOCALE_ID,\n NgZone,\n signal,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport set from 'lodash-es/set';\nimport { RootConfig } from '@acorex-platform/module-organization-management-client/contracts';\nimport { AXMOrgChartStructureRefreshHub } from '../model/org-chart-structure-refresh.hub';\nimport { AXMOrgChartNodeOutletComponent } from '../nodes/org-chart-node-outlet.component';\nimport { AXM_ORG_CHART_HOST, type AXMOrgChartHostApi } from '../tokens/org-chart-host.token';\nimport {\n AXMOrgChartNodeContributionContext,\n AXMOrgChartNodeKind,\n AXMOrgChartNodeMenuAction,\n} from '../tokens/org-chart-node-contribution.token';\nimport { AXM_ORG_CHART_EMPLOYEE_SUBMENU_GROUP_ID } from '../constants/org-chart-employee-submenu.const';\nimport { AXMOrgChartNodeContributionService } from '../services/org-chart-node-contribution.service';\nimport { AXMOrgChartService, OrgChartMode } from '../services/org-chart.service';\nimport type { OrgChartHydratedUiPrefs } from '../ui/org-chart-user-ui.helper';\nimport { AXMOrganizationNode, AXMOrgChartCategory, AXMOrgChartNodeType } from '../model/org-chart.type';\n\n//#endregion\n\n//#region ---- Org chart context menu item type ----\n\n/**\n * Row while building: {@link AXMOrgChartNodeMenuAction.break} `before` / `both` becomes `orgChartBreakBefore` here,\n * then `materializeOrgChartMenuBreaks` turns that into `AXMenuItem.break` on the **previous** row and clears the flag.\n */\ntype AXMOrgChartContextMenuItem = AXMenuItem & { orgChartBreakBefore?: boolean };\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Component for displaying and interacting with an organizational chart.\n */\n@Component({\n templateUrl: './org-chart.page.html',\n styleUrls: ['./org-chart.page.css'],\n imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n //\n AXMenuModule,\n AXButtonModule,\n AXDropdownButtonModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXPanViewDirective,\n AXLoadingModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n AXSearchBoxModule,\n AXSwitchModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPPageLayoutComponent,\n AXPLayoutFloatingZoomBarComponent,\n AXPLayoutSideDetailPanelComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXMOrgChartService,\n AXMOrgChartNodeContributionService,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMOrgChartPage,\n },\n { provide: AXM_ORG_CHART_HOST, useExisting: AXMOrgChartPage },\n ],\n})\nexport class AXMOrgChartPage extends AXPPageLayoutBaseComponent implements AXMOrgChartHostApi {\n //#region ---- Services & Dependencies ----\n\n protected readonly rootConfig = RootConfig;\n\n private d3!: typeof import('d3');\n\n private treeContainer = viewChild.required<ElementRef<HTMLDivElement>>('chart');\n private parent = viewChild.required<ElementRef<HTMLDivElement>>('parent');\n private contextMenu = viewChild(AXContextMenuComponent);\n private panView = viewChild(AXPanViewDirective);\n\n private ngzone = inject(NgZone);\n private pageInjector = inject(Injector);\n private viewContainerRef = inject(ViewContainerRef);\n // printing is handled by service itself\n protected chartService = inject(AXMOrgChartService);\n private readonly nodeContributionService = inject(AXMOrgChartNodeContributionService);\n\n private readonly route = inject(ActivatedRoute);\n\n private readonly localeId = inject(LOCALE_ID);\n\n protected readonly deviceService = inject(AXPDeviceService);\n\n private readonly orgChartStructureRefreshHub = inject(AXMOrgChartStructureRefreshHub);\n\n //#endregion\n\n //#region ---- Constructor ----\n\n constructor() {\n super();\n this.chartService.applyHydratedUiPrefs(\n this.route.snapshot.data['orgChartUi'] as OrgChartHydratedUiPrefs | undefined,\n );\n\n effect(() => {\n const rev = this.orgChartStructureRefreshHub.structureDataRevision();\n if (rev === 0) {\n return;\n }\n void this.reloadChartFromPersistedStructure();\n });\n }\n\n //#endregion\n\n //#region ---- Chart State & UI Metadata ----\n\n private readonly NODE_STROKE_COLOR = 'rgba(var(--ax-sys-color-primary-400))';\n private readonly LINK_STROKE_WIDTH = 1;\n\n /**\n * SVG `foreignObject` viewport and tree layout spacing.\n * Keep card `min-width` in `org-chart.page.css` aligned with {@link chartNodeWidth}.\n */\n private readonly chartNodeWidth = 360;\n private readonly chartNodeHeight = 280;\n private readonly chartHorizontalSpacing = 24;\n private readonly chartVerticalSpacing = 48;\n /** Nudges card content inside the allocated foreignObject band (connectors use rendered bounds). */\n private readonly chartNodeYOffset = 10;\n\n protected isFullscreen = signal(false);\n protected panX = signal(0);\n protected panY = signal(0);\n protected panZoomLevel = signal(100);\n\n protected isChartRendered = false;\n protected selectedNodeId = signal<string | null>(null);\n /** Large layouts: optional side panel with {@link getNodeInfoItems} for the selected node (same UX pattern as document drive). */\n protected isDetailPanelOpen = signal(false);\n private activeContextNode: AXMOrganizationNode | null = null;\n private activeContextMenuActions = new Map<string, AXMOrgChartNodeMenuAction>();\n\n protected nodeTypes = [\n { title: 'Company', color: 'primary', icon: 'fal fa-building', category: AXMOrgChartCategory.Company },\n { title: 'Business Unit', color: 'accent2', icon: 'fal fa-sitemap', category: AXMOrgChartCategory.BusinessUnit },\n { title: 'Position', color: 'accent3', icon: 'fal fa-user-tie', category: AXMOrgChartCategory.Position },\n { title: 'Employee', color: 'surface', icon: 'fal fa-address-card', category: AXMOrgChartCategory.Employee },\n ];\n\n /**\n * UI chrome for chart cards; align copy with `organization-chart.organization-chart.nodes` / mock `org-chart-labels`.\n */\n public readonly chartML = {\n vacant: createMultiLanguageString('Vacant', 'خالی'),\n directReports: createMultiLanguageString('Direct reports', 'گزارش مستقیم'),\n teams: createMultiLanguageString('Teams', 'تیمها'),\n people: createMultiLanguageString('People', 'اعضا'),\n positions: createMultiLanguageString('Positions', 'سمتها'),\n /** Label above the chief executive slot on merged company cards. */\n chiefExecutive: createMultiLanguageString('Chief executive', 'مدیر اجرایی'),\n buHead: createMultiLanguageString('Head', 'سرپرست'),\n buPosition: createMultiLanguageString('Position', 'عنوان سمت'),\n unitType: createMultiLanguageString('Unit type', 'نوع واحد'),\n businessUnit: createMultiLanguageString('Business unit', 'واحد سازمانی'),\n location: createMultiLanguageString('Location', 'موقعیت'),\n code: createMultiLanguageString('Code', 'کد'),\n capacity: createMultiLanguageString('Capacity', 'ظرفیت'),\n level: createMultiLanguageString('Level', 'سطح'),\n email: createMultiLanguageString('Email', 'ایمیل'),\n phone: createMultiLanguageString('Phone', 'تلفن'),\n employmentType: createMultiLanguageString('Employment type', 'نوع همکاری'),\n workMode: createMultiLanguageString('Work mode', 'نحوه کار'),\n more: '@organization-management:organization-chart.node-actions.more',\n add: '@organization-management:organization-chart.node-actions.add',\n noActionsAvailable: '@organization-management:organization-chart.node-actions.no-actions',\n };\n\n /**\n * Selected tree node for the detail panel; stays in sync with {@link selectedNodeId}.\n */\n protected readonly detailPanelSelectedNode = computed(() => {\n const id = this.selectedNodeId();\n if (id == null || id === '') {\n return null;\n }\n return this.findNodeInTree(this.chartService.rootNode(), id);\n });\n\n /** Resolved copy for {@link AXPLayoutSideDetailPanelComponent} (loaded from i18n keys). */\n protected readonly detailPanelCopy = signal({\n panelTitle: '',\n emptyMessage: '',\n detailsSection: '',\n noRowsMessage: '',\n });\n\n protected readonly detailPanelHeader = computed((): AXPLayoutSideDetailPanelHeader | null => {\n const node = this.detailPanelSelectedNode();\n if (node == null) {\n return null;\n }\n const lang = this.localeId;\n let secondaryTitle: string | undefined;\n if (node.type === AXMOrgChartNodeType.BusinessUnit) {\n if (node.description) {\n secondaryTitle = resolveMultiLanguageString(node.description, lang);\n } else if (node.subtitle) {\n secondaryTitle = resolveMultiLanguageString(node.subtitle, lang);\n }\n } else if (node.subtitle) {\n secondaryTitle = resolveMultiLanguageString(node.subtitle, lang);\n }\n return {\n primaryTitle: resolveMultiLanguageString(node.title, lang),\n secondaryTitle,\n icon: {\n iconClass: this.detailPanelNodeIconClass(node),\n surfaceVars: this.getNodeColors(this.detailPanelNodeColorKey(node)),\n },\n };\n });\n\n protected readonly detailPanelSections = computed((): AXPLayoutSideDetailPanelSection[] => {\n const node = this.detailPanelSelectedNode();\n if (node == null) {\n return [];\n }\n const items = this.getNodeInfoItems(node);\n if (items.length === 0) {\n return [];\n }\n const lang = this.localeId;\n const copy = this.detailPanelCopy();\n return [\n {\n title: copy.detailsSection,\n rows: items.map((item) => ({\n label: resolveMultiLanguageString(item.label, lang),\n value: item.value,\n })),\n },\n ];\n });\n\n protected readonly detailPanelEmptyState = computed((): AXPLayoutSideDetailPanelEmptyState | null => {\n if (this.detailPanelSelectedNode() != null) {\n return null;\n }\n const copy = this.detailPanelCopy();\n return {\n primaryTitle: copy.panelTitle,\n message: copy.emptyMessage,\n icon: {\n iconClass: 'fa-solid fa-lg fa-fw fa-diagram-project',\n surfaceVars: this.getNodeColors('primary'),\n },\n };\n });\n\n protected readonly detailPanelNoRowsMessage = computed((): string | null => {\n const node = this.detailPanelSelectedNode();\n if (node == null || this.getNodeInfoItems(node).length > 0) {\n return null;\n }\n return this.detailPanelCopy().noRowsMessage;\n });\n\n /** Bound to `ax-search-box` in the page toolbar. */\n protected chartSearchQuery = '';\n private chartSearchPendingPresentation: 'none' | 'fit-all' | 'fit-one' = 'none';\n private chartSearchPendingFocusId: string | null = null;\n\n //#endregion\n\n //#region ---- Initialization ----\n\n #initialize = afterNextRender(async () => {\n this.d3 = await import('d3');\n\n await this.refresh();\n });\n\n //#endregion\n\n //#region ---- Detail Panel ----\n\n private readonly detailPanelI18nEffect = effect(() => {\n void this.loadDetailPanelCopy();\n });\n\n private async loadDetailPanelCopy(): Promise<void> {\n const [panelTitle, emptyMessage, detailsSection, noRowsMessage] = await Promise.all([\n this.translateService.translateAsync(\n '@organization-management:organization-chart.components.chart.detail-panel.title',\n ),\n this.translateService.translateAsync(\n '@organization-management:organization-chart.components.chart.detail-panel.empty',\n ),\n this.translateService.translateAsync(\n '@organization-management:organization-chart.components.chart.detail-panel.details-section',\n ),\n this.translateService.translateAsync(\n '@organization-management:organization-chart.components.chart.detail-panel.no-rows',\n ),\n ]);\n this.detailPanelCopy.set({\n panelTitle: panelTitle ?? '',\n emptyMessage: emptyMessage ?? '',\n detailsSection: detailsSection ?? '',\n noRowsMessage: noRowsMessage ?? '',\n });\n }\n\n /** Color token or literal CSS color for the detail panel header icon. */\n private detailPanelNodeColorKey(node: AXMOrganizationNode): string {\n if (node.type === AXMOrgChartNodeType.Company) {\n return 'primary';\n }\n if (node.type === AXMOrgChartNodeType.BusinessUnit) {\n const typeColor = node.metadata?.['unitTypeColor'];\n if (typeof typeColor === 'string' && typeColor.trim().length > 0) {\n return typeColor.trim();\n }\n return node.metadata?.['isRegional'] === true ? 'accent1' : 'accent2';\n }\n if (node.type === AXMOrgChartNodeType.Position || node.type === AXMOrgChartNodeType.Employee) {\n return 'accent3';\n }\n return 'primary';\n }\n\n private detailPanelNodeIconClass(node: AXMOrganizationNode): string {\n const raw = node.icon?.trim() ?? '';\n const withoutWeight = raw\n .replace(/\\bfa-(solid|light|regular|thin|duotone)\\b/gi, '')\n .trim()\n .replace(/\\s+/g, ' ');\n const glyph = withoutWeight.length > 0 ? withoutWeight : 'fa-sitemap';\n return `fa-solid fa-lg fa-fw ${glyph}`;\n }\n\n public toggleDetailPanel(): void {\n this.isDetailPanelOpen.update((open) => !open);\n }\n\n /**\n * Expands or collapses a node's branch and redraws the chart.\n */\n public setNodeBranchExpanded(data: AXMOrganizationNode, expanded: boolean): void {\n data.isExpanded = expanded;\n this.selectNode(data);\n this.redrawChart();\n }\n\n //#endregion\n\n //#region ---- Pan & Fullscreen ----\n\n /**\n * Zooms in the chart.\n */\n protected zoomIn() {\n this.panView()?.zoomIn();\n }\n\n /**\n * Zooms out the chart.\n */\n protected zoomOut() {\n this.panView()?.zoomOut();\n }\n\n /**\n * Resets the zoom level and pan position of the chart.\n */\n protected zoomReset() {\n this.panView()?.resetPosition();\n }\n\n /**\n * Toggles fullscreen mode for the chart.\n */\n protected toggleFullscreen() {\n if (this.isFullscreen()) {\n document.exitFullscreen();\n this.isFullscreen.set(false);\n } else {\n this.parent().nativeElement.requestFullscreen();\n this.isFullscreen.set(true);\n }\n document.querySelector(`foreignObject[node=\"node-${this.chartService.rootNode().id}\"]`)?.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n inline: 'center',\n });\n }\n\n //#endregion\n\n //#region ---- Chart Search ----\n\n protected onChartSearchValueChanged(event: AXValueChangedEvent<string | null>): void {\n const v = event.value;\n this.chartSearchQuery = typeof v === 'string' ? v : '';\n this.applyChartSearchFromQuery();\n }\n\n private applyChartSearchFromQuery(): void {\n const q = this.chartSearchQuery.trim().toLowerCase();\n if (!q) {\n this.chartSearchPendingPresentation = 'none';\n this.chartSearchPendingFocusId = null;\n this.applySearchHitClasses(new Set());\n return;\n }\n const matches = this.findNodesMatchingChartSearch(this.chartService.rootNode(), q);\n if (matches.length === 0) {\n this.chartSearchPendingPresentation = 'none';\n this.chartSearchPendingFocusId = null;\n this.applySearchHitClasses(new Set());\n return;\n }\n for (const node of matches) {\n this.ensureExpandedPathToNode(node.id);\n }\n this.chartSearchPendingPresentation = matches.length === 1 ? 'fit-one' : 'fit-all';\n this.chartSearchPendingFocusId = matches.length === 1 ? matches[0].id : null;\n this.redrawChart();\n }\n\n private completeChartRenderPresentation(): void {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.ngzone.run(() => {\n const q = this.chartSearchQuery.trim().toLowerCase();\n const mode = this.chartSearchPendingPresentation;\n const focusId = this.chartSearchPendingFocusId;\n this.chartSearchPendingPresentation = 'none';\n this.chartSearchPendingFocusId = null;\n\n if (!q) {\n this.applySearchHitClasses(new Set());\n return;\n }\n const matches = this.findNodesMatchingChartSearch(this.chartService.rootNode(), q);\n this.applySearchHitClasses(new Set(matches.map((m) => m.id)));\n if (matches.length === 0) {\n return;\n }\n if (mode === 'fit-one' && focusId != null && focusId !== '') {\n const node = this.findNodeInTree(this.chartService.rootNode(), focusId);\n if (node) {\n this.selectNode(node);\n }\n this.panView()?.resetPosition();\n requestAnimationFrame(() => this.centerChartOnForeignObject(focusId));\n } else if (mode === 'fit-all') {\n this.panView()?.resetPosition();\n }\n });\n });\n });\n }\n\n private findNodesMatchingChartSearch(root: AXMOrganizationNode, q: string): AXMOrganizationNode[] {\n const all: AXMOrganizationNode[] = [];\n this.collectAllChartNodes(root, all);\n return all.filter((n) => this.nodeMatchesChartSearchText(n, q));\n }\n\n private collectAllChartNodes(node: AXMOrganizationNode, out: AXMOrganizationNode[]): void {\n out.push(node);\n for (const child of node.children ?? []) {\n this.collectAllChartNodes(child, out);\n }\n }\n\n private nodeMatchesChartSearchText(node: AXMOrganizationNode, q: string): boolean {\n const parts: string[] = [];\n parts.push(resolveMultiLanguageString(node.title, this.localeId));\n if (node.subtitle != null) {\n parts.push(resolveMultiLanguageString(node.subtitle, this.localeId));\n }\n if (node.description != null) {\n parts.push(resolveMultiLanguageString(node.description, this.localeId));\n }\n const haystack = parts.join(' ').trim().toLowerCase();\n return haystack.includes(q);\n }\n\n private findPathToRootNode(root: AXMOrganizationNode, id: string): AXMOrganizationNode[] | null {\n if (root.id === id) {\n return [root];\n }\n for (const child of root.children ?? []) {\n const sub = this.findPathToRootNode(child, id);\n if (sub) {\n return [root, ...sub];\n }\n }\n return null;\n }\n\n private ensureExpandedPathToNode(targetId: string): void {\n const path = this.findPathToRootNode(this.chartService.rootNode(), targetId);\n if (path == null) {\n return;\n }\n for (let i = 0; i < path.length - 1; i++) {\n path[i].isExpanded = true;\n }\n }\n\n private applySearchHitClasses(ids: ReadonlySet<string>): void {\n const nodes = document.querySelectorAll('foreignObject.axp-chart-node');\n for (let i = 0; i < nodes.length; i++) {\n const fo = nodes[i] as HTMLElement;\n const raw = fo.getAttribute('node');\n const nodeId = raw?.startsWith('node-') === true ? raw.slice('node-'.length) : (raw ?? '');\n const container = fo.querySelector('.--node-container') as HTMLElement | null;\n if (container == null) {\n continue;\n }\n if (ids.has(nodeId)) {\n container.classList.add('--search-hit');\n } else {\n container.classList.remove('--search-hit');\n }\n }\n }\n\n private centerChartOnForeignObject(nodeId: string): void {\n const fo = document.querySelector(`foreignObject[node=\"node-${nodeId}\"]`) as HTMLElement | null;\n const panel = this.parent().nativeElement;\n if (fo == null) {\n return;\n }\n const foRect = fo.getBoundingClientRect();\n const cRect = panel.getBoundingClientRect();\n const dx = cRect.left + cRect.width / 2 - (foRect.left + foRect.width / 2);\n const dy = cRect.top + cRect.height / 2 - (foRect.top + foRect.height / 2);\n this.panX.update((x) => x + dx);\n this.panY.update((y) => y + dy);\n this.syncPanViewTransformFromSignals();\n }\n\n /**\n * Applies the same transform formula as {@link AXPanViewDirective} so programmatic pan updates take effect immediately.\n */\n private syncPanViewTransformFromSignals(): void {\n const el = this.treeContainer().nativeElement;\n el.style.transform = `translate(${this.panX()}px, ${this.panY()}px) scale(${this.panZoomLevel() / 100})`;\n }\n\n //#endregion\n\n //#region ---- Chart Layout Metrics ----\n\n /**\n * Calculates the maximum depth of the organizational chart.\n * @param node - The root node of the chart.\n * @returns The maximum depth of the chart.\n */\n private calculateMaxDepth(node: AXMOrganizationNode): number {\n if (!node.children || node.children.length === 0 || node.isExpanded === false) {\n return 1;\n }\n return 1 + Math.max(...node.children.map((child) => this.calculateMaxDepth(child)));\n }\n\n /**\n * Calculates the maximum breadth of the organizational chart.\n * @param node - The root node of the chart.\n * @returns The maximum breadth of the chart.\n */\n private calculateMaxBreadth(node: AXMOrganizationNode): number {\n if (!node.children || node.children.length === 0 || node.isExpanded === false) {\n return 1;\n }\n return node.children.reduce((acc, child) => acc + this.calculateMaxBreadth(child), 0);\n }\n\n //#endregion\n\n //#region ---- Chart Rendering ----\n\n /**\n * Creates and renders the organizational chart.\n * @param el - The container element for the chart.\n * @param data - The root node of the organizational chart.\n */\n createChart(el: Element, data: AXMOrganizationNode): void {\n if (!this.d3) {\n return;\n }\n const nw = this.chartNodeWidth;\n const nh = this.chartNodeHeight;\n const hGap = this.chartHorizontalSpacing;\n const vGap = this.chartVerticalSpacing;\n const yOff = this.chartNodeYOffset;\n\n this.ngzone.runOutsideAngular(() => {\n this.clearChart(el);\n const newSvg = this.d3.select(el).append('svg');\n\n const root = this.d3.hierarchy(data);\n\n root.descendants().forEach((node: any) => {\n if (node.data.isExpanded === false) {\n node.children = undefined;\n }\n });\n\n const treeLayout = this.d3\n .tree<AXMOrganizationNode>()\n .nodeSize([nw + hGap, nh + vGap]);\n\n treeLayout(root);\n\n let minX = Infinity,\n maxX = -Infinity,\n minY = Infinity,\n maxY = -Infinity;\n root.descendants().forEach((d: any) => {\n if (d.x < minX) minX = d.x;\n if (d.x > maxX) maxX = d.x;\n if (d.y < minY) minY = d.y;\n if (d.y > maxY) maxY = d.y;\n });\n\n const CONTAINER_WIDTH = maxX - minX + nw + 2 * hGap;\n const CONTAINER_HEIGHT = maxY - minY + nh + 2 * vGap;\n\n newSvg.attr('width', CONTAINER_WIDTH).attr('height', CONTAINER_HEIGHT);\n\n const g = newSvg\n .append('g')\n .attr(\n 'transform',\n `translate(${-minX + nw / 2 + hGap / 2}, ${-minY + nh / 2 + vGap / 2})`,\n );\n\n const linksLayer = g.append('g').attr('class', 'axp-chart-links');\n const nodesLayer = g.append('g').attr('class', 'axp-chart-nodes');\n\n linksLayer\n .selectAll<SVGPathElement, { source: any; target: any }>('.link')\n .data(root.links())\n .enter()\n .append('path')\n .attr('class', 'link')\n .attr('d', (d: { source: any; target: any }) => this.computeOrgChartLinkPath(d, nw, nh, yOff))\n .attr('fill', 'none')\n .attr('stroke', this.NODE_STROKE_COLOR)\n .attr('stroke-width', this.LINK_STROKE_WIDTH)\n .attr('from', (d: any) => `node-${d.source.data.id}`)\n .attr('to', (d: any) => `node-${d.target.data.id}`);\n\n nodesLayer\n .selectAll('.axp-chart-node')\n .data(root.descendants())\n .enter()\n .append('foreignObject')\n .attr('class', 'axp-chart-node')\n .attr('node', (d: any) => `node-${d.data.id}`)\n .attr('x', (d: any) => d.x - nw / 2)\n .attr('y', (d: any) => d.y - nh / 2 + yOff)\n .attr('width', nw)\n .attr('height', nh)\n .each((d: any) => this.renderNodeTemplate(d.data, d.x, d.y));\n\n const svgEl = newSvg.node();\n if (svgEl) {\n this.scheduleChartLinkPathRefresh(svgEl, nw, nh, yOff);\n }\n });\n if (!this.isChartRendered) {\n // document.querySelector(`foreignObject[node=\"node-${data.id}\"] .--heading-container`)?.scrollIntoView({\n // behavior: 'smooth',\n // block: 'center',\n // inline: 'center',\n // });\n this.isChartRendered = true;\n this.panView()?.resetPosition();\n }\n this.ngzone.run(() => {\n this.completeChartRenderPresentation();\n });\n }\n\n /**\n * Orthogonal elbow between two nodes using measured card bounds inside each foreignObject when available.\n */\n private computeOrgChartLinkPath(\n d: { source: any; target: any },\n nodeWidth: number,\n nodeHeight: number,\n nodeYOffset: number,\n ): string {\n const source = d.source;\n const target = d.target;\n const EDGE_PADDING = 2;\n const MIN_VERTICAL_GAP = 10;\n\n const sourceBounds = this.getRenderedNodeBounds(source.data.id);\n const targetBounds = this.getRenderedNodeBounds(target.data.id);\n\n const foSourceTop = source.y - nodeHeight / 2 + nodeYOffset;\n const foTargetTop = target.y - nodeHeight / 2 + nodeYOffset;\n\n let sourceBottomY =\n sourceBounds != null\n ? foSourceTop + sourceBounds.topOffset + sourceBounds.height\n : source.y + nodeHeight / 2 + nodeYOffset - EDGE_PADDING;\n\n let targetTopY =\n targetBounds != null\n ? foTargetTop + targetBounds.topOffset\n : target.y - nodeHeight / 2 + nodeYOffset + EDGE_PADDING;\n\n sourceBottomY += EDGE_PADDING;\n targetTopY -= EDGE_PADDING;\n\n if (sourceBottomY >= targetTopY - MIN_VERTICAL_GAP) {\n sourceBottomY = source.y + nodeYOffset;\n targetTopY = target.y - 10;\n }\n\n return `M${source.x},${sourceBottomY}V${(sourceBottomY + targetTopY) / 2}H${target.x}V${targetTopY}`;\n }\n\n /**\n * Node templates render asynchronously; remap connectors after layout so edges use real card heights.\n */\n private scheduleChartLinkPathRefresh(\n svg: SVGSVGElement,\n nodeWidth: number,\n nodeHeight: number,\n nodeYOffset: number,\n ): void {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.ngzone.runOutsideAngular(() => {\n this.refreshChartLinkPaths(svg, nodeWidth, nodeHeight, nodeYOffset);\n });\n });\n });\n });\n }\n\n private refreshChartLinkPaths(\n svg: SVGSVGElement,\n nodeWidth: number,\n nodeHeight: number,\n nodeYOffset: number,\n ): void {\n if (!this.d3) {\n return;\n }\n this.d3\n .select(svg)\n .selectAll<SVGPathElement, { source: any; target: any }>('g.axp-chart-links path.link')\n .attr('d', (d) => this.computeOrgChartLinkPath(d, nodeWidth, nodeHeight, nodeYOffset));\n }\n\n /**\n * Reads rendered bounds for a node card inside its foreignObject.\n */\n private getRenderedNodeBounds(nodeId: string | number): { topOffset: number; height: number } | null {\n const foreignObject = document.querySelector(`foreignObject[node=\"node-${nodeId}\"]`) as HTMLElement | null;\n const nodeContainer = foreignObject?.querySelector('.--node-container') as HTMLElement | null;\n if (!foreignObject || !nodeContainer) {\n return null;\n }\n return {\n topOffset: nodeContainer.offsetTop,\n height: nodeContainer.offsetHeight,\n };\n }\n\n /**\n * Renders the node template for a given organizational node.\n * @param data - The node data.\n * @param x - The x-coordinate of the node.\n * @param y - The y-coordinate of the node.\n */\n private renderNodeTemplate(data: AXMOrganizationNode, _x: number, _y: number): void {\n if (data.type == null) {\n set(data, 'type', AXMOrgChartNodeType.Company);\n }\n set(data, 'category', data.type);\n\n // D3 runs inside runOutsideAngular; created views must be updated inside the zone.\n this.ngzone.run(() => {\n // Dynamic subviews can use an injector that does not inherit the page `providers`.\n // Bridge `AXM_ORG_CHART_HOST` explicitly so child node components can inject it.\n const nodeTreeInjector = Injector.create({\n parent: this.pageInjector,\n providers: [{ provide: AXM_ORG_CHART_HOST, useValue: this as AXMOrgChartHostApi }],\n });\n\n const ref: ComponentRef<AXMOrgChartNodeOutletComponent> = this.viewContainerRef.createComponent(\n AXMOrgChartNodeOutletComponent,\n { injector: nodeTreeInjector },\n );\n ref.setInput('data', data);\n\n const nodeElement = this.d3.select(this.treeContainer().nativeElement).select(`[node=\"node-${data.id}\"]`);\n const element = nodeElement.node() as HTMLElement | null;\n if (element) {\n element.appendChild(ref.location.nativeElement);\n ref.changeDetectorRef.detectChanges();\n } else {\n ref.destroy();\n }\n });\n }\n\n /**\n * Toggles the expansion state of a node.\n * @param data - The node data.\n * @param el - The HTML element representing the node.\n */\n public toggleNode(data: AXMOrganizationNode, _el?: HTMLDivElement | null) {\n data.isExpanded = data.isExpanded === undefined ? false : !data.isExpanded;\n this.selectedNodeId.set(data.id);\n this.createChart(this.treeContainer().nativeElement, this.chartService.rootNode());\n // el.scrollIntoView({\n // behavior: 'smooth',\n // });\n }\n\n /**\n * Clears the chart from the container element.\n * @param el - The container element.\n */\n private clearChart(el: Element): void {\n if (this.d3) {\n this.d3.select(el).select('svg').remove();\n this.viewContainerRef.clear();\n }\n }\n\n private redrawChart(): void {\n if (!this.d3 || !this.treeContainer()?.nativeElement) {\n return;\n }\n this.createChart(this.treeContainer().nativeElement, this.chartService.rootNode());\n }\n\n private async refresh() {\n await this.chartService.load();\n if (this.d3) {\n this.redrawChart();\n }\n }\n\n /**\n * After an in-page mutation: wait for server regen (or client fallback), then reload persisted chart.\n */\n private async refreshAfterMutation(): Promise<void> {\n await this.chartService.refreshAfterStructureChange();\n if (this.d3) {\n this.redrawChart();\n }\n this.recompute();\n }\n\n /**\n * Invoked when persisted chart structure was rebuilt (e.g. structure refresh hub).\n */\n private async reloadChartFromPersistedStructure(): Promise<void> {\n await this.chartService.reloadFromStorage();\n if (this.d3) {\n this.redrawChart();\n }\n this.recompute();\n }\n\n protected onVacantLeafSeatsChange(event: AXValueChangedEvent<boolean>): void {\n if (!event.isUserInteraction) {\n return;\n }\n this.chartService.setShowVacantLeafSeats(event.value);\n this.redrawChart();\n }\n\n //#endregion\n\n //#region ---- Context Menu ----\n\n /**\n * Handles right-click on the chart surface. Context menu items must be ready before `showAt`;\n * `AXContextMenuComponent` assigns `items` synchronously after `onOpening`, so async `onOpening` handlers leave the menu empty.\n */\n protected onOrgChartSurfaceContextMenu(e: MouseEvent): void {\n const hit = e.target instanceof HTMLElement ? e.target : null;\n const container = hit?.closest('.axp-chart-node .--node-container');\n if (!(container instanceof HTMLElement)) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n void this.openOrgChartContextMenuFromDom(e.clientX, e.clientY, container);\n }\n\n private async openOrgChartContextMenuFromDom(\n clientX: number,\n clientY: number,\n targetElement: HTMLElement,\n ): Promise<void> {\n const node = this.resolveNodeFromTarget(targetElement);\n if (!node) {\n return;\n }\n await this.openOrgChartContextMenuAt(clientX, clientY, node, targetElement);\n }\n\n /**\n * Turns carry {@link AXMOrgChartContextMenuItem.orgChartBreakBefore} into `AXMenuItem.break` on the **previous**\n * sibling at the same level. Recurses into nested flyouts, then removes `orgChartBreakBefore`.\n */\n private materializeOrgChartMenuBreaks(items: AXMOrgChartContextMenuItem[]): void {\n if (items.length === 0) {\n return;\n }\n\n for (const entry of items) {\n if (entry.items != null && entry.items.length > 0) {\n this.materializeOrgChartMenuBreaks(entry.items as AXMOrgChartContextMenuItem[]);\n }\n }\n\n for (let i = 0; i < items.length; i++) {\n if (items[i].orgChartBreakBefore === true && i > 0) {\n items[i - 1].break = true;\n }\n delete items[i].orgChartBreakBefore;\n }\n }\n\n /**\n * Removes a trailing `break` on the last row at each nesting level so the menu does not show a divider after the final item.\n * Recursive for nested flyouts.\n */\n private normalizeOrgChartContextMenuBreaks(items: AXMOrgChartContextMenuItem[]): void {\n if (items.length === 0) {\n return;\n }\n\n for (const entry of items) {\n if (entry.items != null && entry.items.length > 0) {\n this.normalizeOrgChartContextMenuBreaks(entry.items as AXMOrgChartContextMenuItem[]);\n }\n }\n\n const last = items[items.length - 1];\n if (last.break === true) {\n last.break = false;\n }\n }\n\n /**\n * Whether this action renders `AXMenuItem.break` after its **row**: `break` `after` / `both`, and\n * {@link AXMOrgChartNodeMenuAction.submenuSectionBreak} (separator after this row at any nesting level, including\n * root when the Employee flyout is flattened on employee cards).\n */\n private menuActionRowBreakAfter(action: AXMOrgChartNodeMenuAction): boolean {\n const b = action.break;\n const hasAfter = b === 'after' || b === 'both';\n return action.submenuSectionBreak === true || hasAfter;\n }\n\n /** `break` `before` / `both` for carry / bucket (not for inner-only submenuSectionBreak). */\n private menuActionHasBreakBefore(action: AXMOrgChartNodeMenuAction): boolean {\n return action.break === 'before' || action.break === 'both';\n }\n\n /** `after` / `both` for grouped parent bucket trailing separator. */\n private menuActionContributesGroupBreakAfter(action: AXMOrgChartNodeMenuAction): boolean {\n return action.break === 'after' || action.break === 'both';\n }\n\n /**\n * Loads actions, assigns menu structures, then opens the context menu with a pre-filled opening event (`items`\n * must be populated before {@link AXContextMenuComponent.showAt}: async `onOpening` alone loses the assignment).\n */\n private async openOrgChartContextMenuAt(\n clientX: number,\n clientY: number,\n node: AXMOrganizationNode,\n targetElement: HTMLElement,\n ): Promise<void> {\n this.selectNode(node);\n this.activeContextNode = node;\n this.activeContextMenuActions.clear();\n\n const context = this.createNodeContributionContext(node);\n const actions = await this.nodeContributionService.getMenuActions(context);\n\n const items: AXMOrgChartContextMenuItem[] = [];\n if (!actions.length) {\n items.push({\n name: 'org-chart.no-actions',\n text: this.chartML.noActionsAvailable,\n icon: 'fa-light fa-circle-info',\n disabled: true,\n });\n } else {\n const addFlyoutActions = actions.filter((action) => action.nestedInAddFlyout === true);\n const otherActions = actions.filter((action) => action.nestedInAddFlyout !== true);\n\n if (addFlyoutActions.length > 0) {\n items.push({\n name: 'org-chart.group.add',\n text: this.chartML.add,\n icon: 'fa-light fa-plus',\n break: true,\n items: addFlyoutActions.map((action) => this.buildContextMenuLeafItem(action)),\n } as AXMOrgChartContextMenuItem);\n }\n\n const nonAddMenuActions =\n context.nodeKind === 'employee'\n ? otherActions.map((action) =>\n action.submenuGroupId === AXM_ORG_CHART_EMPLOYEE_SUBMENU_GROUP_ID\n ? {\n ...action,\n submenuGroupId: undefined,\n submenuGroupTitle: undefined,\n submenuGroupIcon: undefined,\n }\n : action,\n )\n : otherActions;\n\n items.push(...this.buildGroupedNonAddContextMenuItems(nonAddMenuActions));\n }\n\n this.materializeOrgChartMenuBreaks(items);\n this.normalizeOrgChartContextMenuBreaks(items);\n\n const menu = this.contextMenu();\n if (!menu) {\n return;\n }\n\n this.ngzone.run(() => {\n const openingEvent = {\n sender: menu,\n canceled: false,\n targetElement,\n items: items as AXMenuItem[],\n } as AXContextMenuOpeningEvent;\n menu.showAt({ x: clientX, y: clientY }, targetElement, openingEvent);\n });\n }\n\n /**\n * Builds top-level rows for actions not under {@link AXMOrgChartNodeMenuAction.nestedInAddFlyout},\n * collapsing {@link AXMOrgChartNodeMenuAction.submenuGroupId} sets into one flyout.\n */\n private buildGroupedNonAddContextMenuItems(actions: AXMOrgChartNodeMenuAction[]): AXMOrgChartContextMenuItem[] {\n type GroupBucket = {\n title: AXPMultiLanguageString;\n icon?: string;\n actions: AXMOrgChartNodeMenuAction[];\n breakAfter: boolean;\n breakBefore: boolean;\n };\n\n const groups = new Map<string, GroupBucket>();\n const singles: AXMOrgChartNodeMenuAction[] = [];\n\n for (const action of actions) {\n const gid = action.submenuGroupId?.trim();\n if (!gid) {\n singles.push(action);\n continue;\n }\n let bucket = groups.get(gid);\n if (!bucket) {\n bucket = {\n title: action.submenuGroupTitle as any,\n icon: action.submenuGroupIcon,\n actions: [],\n breakAfter: false,\n breakBefore: false,\n };\n groups.set(gid, bucket);\n }\n bucket.actions.push(action);\n if (this.menuActionContributesGroupBreakAfter(action)) {\n bucket.breakAfter = true;\n }\n if (this.menuActionHasBreakBefore(action)) {\n bucket.breakBefore = true;\n }\n if (!bucket.icon && action.submenuGroupIcon) {\n bucket.icon = action.submenuGroupIcon;\n }\n }\n\n type OrderedEntry =\n | { kind: 'single'; action: AXMOrgChartNodeMenuAction }\n | { kind: 'group'; groupId: string };\n\n const ordered: OrderedEntry[] = [];\n for (const action of singles) {\n ordered.push({ kind: 'single', action });\n }\n for (const groupId of groups.keys()) {\n ordered.push({ kind: 'group', groupId });\n }\n\n const orderOf = (entry: OrderedEntry): number => {\n if (entry.kind === 'single') {\n return entry.action.order ?? Number.MAX_SAFE_INTEGER;\n }\n const bucket = groups.get(entry.groupId);\n if (!bucket || bucket.actions.length === 0) {\n return Number.MAX_SAFE_INTEGER;\n }\n return Math.min(...bucket.actions.map((a) => a.order ?? Number.MAX_SAFE_INTEGER));\n };\n ordered.sort((a, b) => orderOf(a) - orderOf(b));\n\n const items: AXMOrgChartContextMenuItem[] = [];\n for (const entry of ordered) {\n if (entry.kind === 'single') {\n items.push(this.buildContextMenuLeafItem(entry.action));\n continue;\n }\n const bucket = groups.get(entry.groupId);\n if (!bucket || bucket.actions.length === 0) {\n continue;\n }\n const sortedMembers = [...bucket.actions].sort(\n (a, b) => (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER),\n );\n if (sortedMembers.length === 1 && entry.groupId !== AXM_ORG_CHART_EMPLOYEE_SUBMENU_GROUP_ID) {\n items.push(this.buildContextMenuLeafItem(sortedMembers[0]));\n continue;\n }\n items.push({\n name: `org-chart.submenu.${entry.groupId}`,\n text: bucket.title,\n icon: bucket.icon ?? 'fa-light fa-comments',\n break: bucket.breakAfter,\n orgChartBreakBefore: bucket.breakBefore === true,\n items: sortedMembers.map((action) => this.buildContextMenuLeafItem(action)),\n } as AXMOrgChartContextMenuItem);\n }\n return items;\n }\n\n private buildContextMenuLeafItem(action: AXMOrgChartNodeMenuAction): AXMOrgChartContextMenuItem {\n this.activeContextMenuActions.set(action.id, action);\n return {\n name: action.id,\n text: action.title as any,\n icon: action.icon,\n color: action.color as AXStyleColorType | undefined,\n disabled: action.disabled,\n break: this.menuActionRowBreakAfter(action),\n orgChartBreakBefore: this.menuActionHasBreakBefore(action),\n };\n }\n\n protected async handleContextMenuItemClick(e: AXContextMenuItemsClickEvent): Promise<void> {\n const actionId = e.item.name;\n if (!actionId || !this.activeContextNode) {\n return;\n }\n const action = this.activeContextMenuActions.get(actionId);\n if (!action || action.disabled) {\n return;\n }\n await action.execute(this.createNodeContributionContext(this.activeContextNode));\n }\n\n //#endregion\n\n //#region ---- Node Selection & Host API ----\n\n public isNodeSelected(data: AXMOrganizationNode): boolean {\n return this.selectedNodeId() === data.id;\n }\n\n public selectNode(data: AXMOrganizationNode): void {\n this.selectedNodeId.set(data.id);\n }\n\n public openNodeContextMenuFromMore(event: unknown, data: AXMOrganizationNode): void {\n const nativeEvent = this.resolveNativeMouseEvent(event);\n if (!nativeEvent) {\n return;\n }\n nativeEvent.preventDefault();\n nativeEvent.stopPropagation();\n const fromCurrent =\n nativeEvent.currentTarget instanceof HTMLElement\n ? nativeEvent.currentTarget.closest('.--node-container')\n : null;\n const fromTarget =\n nativeEvent.target instanceof HTMLElement ? nativeEvent.target.closest('.--node-container') : null;\n const fromPoint = document.elementFromPoint(nativeEvent.clientX, nativeEvent.clientY);\n const anchor = (fromCurrent ?? fromTarget ?? fromPoint) as HTMLElement | null;\n if (!(anchor instanceof HTMLElement)) {\n return;\n }\n void this.openOrgChartContextMenuAt(nativeEvent.clientX, nativeEvent.clientY, data, anchor);\n }\n\n private resolveNodeFromTarget(target: HTMLElement | undefined): AXMOrganizationNode | null {\n if (!target) {\n return null;\n }\n let el: HTMLElement | null = target;\n while (el) {\n const id = el.getAttribute('data-chart-node-id');\n if (id) {\n const fromTree = this.findNodeInTree(this.chartService.rootNode(), id);\n if (fromTree) {\n return fromTree;\n }\n }\n el = el.parentElement;\n }\n const directNode = (target as unknown as { __data__?: { data?: AXMOrganizationNode } }).__data__?.data;\n if (directNode && typeof (directNode as AXMOrganizationNode).id === 'string') {\n return directNode as AXMOrganizationNode;\n }\n const foreignObject = target.closest('foreignObject.axp-chart-node') as unknown as\n | { __data__?: { data?: AXMOrganizationNode } }\n | null;\n const fromFo = foreignObject?.__data__?.data;\n if (fromFo && typeof (fromFo as AXMOrganizationNode).id === 'string') {\n return fromFo as AXMOrganizationNode;\n }\n return null;\n }\n\n private findNodeInTree(root: AXMOrganizationNode, id: string): AXMOrganizationNode | null {\n if (root.id === id) {\n return root;\n }\n for (const child of root.children ?? []) {\n const found = this.findNodeInTree(child, id);\n if (found) {\n return found;\n }\n }\n return null;\n }\n\n private resolveNativeMouseEvent(event: unknown): MouseEvent | null {\n if (event instanceof MouseEvent) {\n return event;\n }\n if (\n typeof event === 'object' &&\n event != null &&\n 'nativeEvent' in event &&\n (event as { nativeEvent?: unknown }).nativeEvent instanceof MouseEvent\n ) {\n return (event as { nativeEvent: MouseEvent }).nativeEvent;\n }\n return null;\n }\n\n private createNodeContributionContext(node: AXMOrganizationNode): AXMOrgChartNodeContributionContext {\n return {\n node,\n nodeKind: this.resolveNodeKind(node),\n selectedMode: this.chartService.selectedMode(),\n refreshChart: async () => {\n await this.refreshAfterMutation();\n },\n host: this,\n };\n }\n\n private resolveNodeKind(node: AXMOrganizationNode): AXMOrgChartNodeKind {\n if (node.type === AXMOrgChartNodeType.Company) {\n return 'company-root';\n }\n if (node.type === AXMOrgChartNodeType.BusinessUnit) {\n return 'business-unit';\n }\n if (node.type === AXMOrgChartNodeType.Position) {\n return 'position';\n }\n if (node.type === AXMOrgChartNodeType.Employee) {\n return 'employee';\n }\n return 'other';\n }\n\n //#endregion\n\n //#region ---- Print & Card Presentation ----\n\n /**\n * Prints the organizational chart.\n */\n protected async printChart() {\n const savedPanX = this.panX();\n const savedPanY = this.panY();\n const savedPanZoomLevel = this.panZoomLevel();\n this.panX.set(0);\n this.panY.set(0);\n this.panZoomLevel.set(100);\n await this.chartService.printChart(this.treeContainer().nativeElement);\n this.panX.set(savedPanX);\n this.panY.set(savedPanY);\n this.panZoomLevel.set(savedPanZoomLevel);\n }\n\n /**\n * Parses hex or comma-separated `rgb(...)` into comma-separated channels for `rgba(var(--node-*))`.\n */\n private parseCssColorToRgbCommaChannels(color: string): string | null {\n const s = color.trim();\n const hex6 = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(s);\n if (hex6) {\n return `${parseInt(hex6[1], 16)}, ${parseInt(hex6[2], 16)}, ${parseInt(hex6[3], 16)}`;\n }\n const hex3 = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i.exec(s);\n if (hex3) {\n return `${parseInt(hex3[1] + hex3[1], 16)}, ${parseInt(hex3[2] + hex3[2], 16)}, ${parseInt(hex3[3] + hex3[3], 16)}`;\n }\n const rgb = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i.exec(s);\n if (rgb) {\n return `${rgb[1]}, ${rgb[2]}, ${rgb[3]}`;\n }\n return null;\n }\n\n private contrastingRgbCommaChannels(bgComma: string): string {\n const parts = bgComma.split(',').map((p) => Number(p.trim()));\n const [r, g, b] = parts;\n const luminance = 0.2126 * (r / 255) + 0.7152 * (g / 255) + 0.0722 * (b / 255);\n return luminance > 0.55 ? '15, 23, 42' : '255, 255, 255';\n }\n\n private darkenRgbCommaChannels(bgComma: string, factor: number): string {\n const parts = bgComma.split(',').map((p) => Math.round(Number(p.trim()) * factor));\n return `${parts[0]}, ${parts[1]}, ${parts[2]}`;\n }\n\n /**\n * Gets the node colors based on the provided color.\n * @param color - Semantic token (for example primary, accent2) or a literal CSS color (hex / rgb).\n * @returns An object containing the node's background, text, and border colors.\n */\n public getNodeColors(color: string): Record<string, string> {\n const literal = this.parseCssColorToRgbCommaChannels(color);\n if (literal) {\n return {\n '--node-bg-color': literal,\n '--node-text-color': this.contrastingRgbCommaChannels(literal),\n '--node-border-color': this.darkenRgbCommaChannels(literal, 0.82),\n };\n }\n if (color.includes('surface')) {\n return {\n '--node-bg-color': `var(--ax-sys-color-${color})`,\n '--node-text-color': `var(--ax-sys-color-on-${color})`,\n '--node-border-color': `var(--ax-sys-color-border-${color})`,\n };\n }\n return {\n '--node-bg-color': `var(--ax-sys-color-${color}-surface)`,\n '--node-text-color': `var(--ax-sys-color-on-${color}-surface)`,\n '--node-border-color': `var(--ax-sys-color-border-${color}-surface)`,\n };\n }\n\n /**\n * Merged cards render the assignee in the body; suppressing `subtitle` avoids repeating name/role lines\n * (including for charts persisted before subtitle generation was tightened).\n */\n public shouldShowOrgCardSubtitle(data: AXMOrganizationNode): boolean {\n const md = data.metadata ?? {};\n const template = md['chartTemplate'];\n if (template === 'merged-unit') {\n const uh = md['unitHead'] as Record<string, unknown> | undefined;\n if (uh && uh['vacant'] !== true && typeof uh['employeeName'] === 'string' && uh['employeeName'].trim().length > 0) {\n return false;\n }\n }\n if (template === 'merged-manager') {\n if (md['vacant'] === true) {\n return true;\n }\n const occ = md['occupant'] as Record<string, unknown> | undefined;\n const dn = occ?.['displayName'];\n if (typeof dn === 'string' && dn.trim().length > 0) {\n return false;\n }\n }\n return true;\n }\n\n //#endregion\n\n //#region ---- Node Card Data ----\n\n public getSubtreeRosterCounts(data: AXMOrganizationNode): { people: number; positions: number } | null {\n if (\n data.type === AXMOrgChartNodeType.Position &&\n data.metadata?.['chartTemplate'] === 'position-ic'\n ) {\n const stats = data.metadata?.['stats'] as Record<string, unknown> | undefined;\n const subtreePeopleRaw = stats?.['subtreePeople'];\n let people: number;\n if (typeof subtreePeopleRaw === 'number' && Number.isFinite(subtreePeopleRaw)) {\n people = Math.max(0, Math.floor(subtreePeopleRaw));\n } else if (data.metadata?.['vacant'] === true) {\n people = 0;\n } else {\n const childCount = data.children?.length ?? 0;\n people = childCount > 0 ? childCount : 1;\n }\n /** One catalog seat row in the chart. */\n return { people, positions: 1 };\n }\n if (data.type !== AXMOrgChartNodeType.BusinessUnit && data.type !== AXMOrgChartNodeType.Company) {\n return null;\n }\n if (data.metadata?.['isRegional'] === true) {\n return null;\n }\n const stats = data.metadata?.['stats'] as Record<string, unknown> | undefined;\n const peopleRaw = stats?.['subtreePeople'];\n const positionsRaw = stats?.['subtreePositionSeatCount'];\n if (typeof peopleRaw !== 'number' || !Number.isFinite(peopleRaw)) {\n return null;\n }\n if (typeof positionsRaw !== 'number' || !Number.isFinite(positionsRaw)) {\n return null;\n }\n return {\n people: Math.max(0, Math.floor(peopleRaw)),\n positions: Math.max(0, Math.floor(positionsRaw)),\n };\n }\n\n public getTeamsMembershipCount(data: AXMOrganizationNode): number | null {\n const stats = data.metadata?.['stats'];\n const candidates: unknown[] = [\n stats?.['teamMemberships'],\n stats?.['teamMembershipCount'],\n stats?.['teams'],\n stats?.['teamsCount'],\n data.metadata?.['teamMemberships'],\n data.metadata?.['teamMembershipCount'],\n data.metadata?.['teamsCount'],\n data.metadata?.['teams'],\n ];\n for (const candidate of candidates) {\n if (typeof candidate === 'number' && Number.isFinite(candidate) && candidate >= 0) {\n return candidate;\n }\n }\n return null;\n }\n\n /**\n * Metadata rows for the side detail panel only (key-value list is not shown on chart cards).\n */\n public getNodeInfoItems(data: AXMOrganizationNode): Array<{ label: AXPMultiLanguageString; value: string }> {\n const metadata = data.metadata ?? {};\n const toText = (value: unknown): string | null => {\n if (value == null) {\n return null;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed.length ? trimmed : null;\n }\n return null;\n };\n const resolveFirst = (...candidates: unknown[]): string | null => {\n for (const candidate of candidates) {\n const text = toText(candidate);\n if (text != null) {\n return text;\n }\n }\n return null;\n };\n const createInfo = (\n label: AXPMultiLanguageString,\n value: string | null,\n ): { label: AXPMultiLanguageString; value: string } | null => {\n return value == null ? null : { label, value };\n };\n const items: Array<{ label: AXPMultiLanguageString; value: string }> = [];\n const teamMembershipCount = this.getTeamsMembershipCount(data);\n\n if (data.type === AXMOrgChartNodeType.BusinessUnit) {\n const unitHead = metadata['unitHead'] as Record<string, unknown> | undefined;\n if (unitHead) {\n const vacant = unitHead['vacant'] === true;\n const rawName = unitHead['employeeName'];\n const nameText =\n vacant || typeof rawName !== 'string' || !rawName.trim()\n ? resolveMultiLanguageString(this.chartML.vacant, this.localeId)\n : rawName.trim();\n const posRaw = unitHead['positionTitle'];\n let positionText: string | null = null;\n if (typeof posRaw === 'string') {\n const t = posRaw.trim();\n positionText = t.length ? t : null;\n } else if (posRaw != null && typeof posRaw === 'object') {\n const t = resolveMultiLanguageString(posRaw as AXPMultiLanguageString, this.localeId).trim();\n positionText = t.length ? t : null;\n }\n const buLeadRows = [\n createInfo(this.chartML.buHead, nameText),\n createInfo(this.chartML.buPosition, positionText),\n ].filter((item): item is { label: AXPMultiLanguageString; value: string } => item != null);\n items.push(...buLeadRows);\n }\n }\n\n if (data.type === AXMOrgChartNodeType.BusinessUnit || data.type === AXMOrgChartNodeType.Company) {\n const unitType = resolveFirst(metadata['unitTypeTitle'], metadata['unitType'], metadata['typeLabel']);\n const location = resolveFirst(metadata['locationName'], metadata['regionName'], metadata['countryName']);\n const infoCandidates = [\n createInfo(this.chartML.unitType, unitType),\n createInfo(this.chartML.location, location),\n ];\n if (teamMembershipCount != null) {\n infoCandidates.push({ label: this.chartML.teams, value: String(teamMembershipCount) });\n }\n items.push(\n ...infoCandidates.filter((item): item is { label: AXPMultiLanguageString; value: string } => item != null),\n );\n }\n\n if (data.type === AXMOrgChartNodeType.Position) {\n const vacantIcSeat =\n metadata['vacant'] === true && metadata['chartTemplate'] === 'position-ic';\n const ouMl = metadata['organizationalUnitTitle'] as AXPMultiLanguageString | undefined;\n const ouDisplay =\n ouMl != null && typeof ouMl === 'object'\n ? resolveMultiLanguageString(ouMl, this.localeId)\n : null;\n const level = resolveFirst(metadata['jobLevelTitle'], metadata['jobLevel'], metadata['grade']);\n const code = resolveFirst(metadata['code'], metadata['positionCode']);\n const capacity = resolveFirst(metadata['capacity']);\n const positionItems = vacantIcSeat\n ? [createInfo(this.chartML.businessUnit, ouDisplay)]\n : [\n createInfo(this.chartML.businessUnit, ouDisplay),\n createInfo(this.chartML.level, level),\n createInfo(this.chartML.code, code),\n createInfo(this.chartML.capacity, capacity),\n ];\n items.push(\n ...positionItems.filter((item): item is { label: AXPMultiLanguageString; value: string } => item != null),\n );\n }\n\n if (data.type === AXMOrgChartNodeType.Employee || data.metadata?.['chartTemplate'] === 'employee-card') {\n const email = resolveFirst(metadata['email'], metadata['workEmail']);\n const phone = resolveFirst(metadata['phone'], metadata['mobile']);\n const employmentType = resolveFirst(metadata['employmentTypeTitle'], metadata['employmentType']);\n const workMode = resolveFirst(metadata['workModeTitle'], metadata['workMode']);\n const employeeInfo = [\n createInfo(this.chartML.email, email),\n createInfo(this.chartML.phone, phone),\n createInfo(this.chartML.employmentType, employmentType),\n createInfo(this.chartML.workMode, workMode),\n ];\n /** Teams count is rendered on employee chart cards — omit here to avoid duplicate rows. */\n items.push(\n ...employeeInfo.filter((item): item is { label: AXPMultiLanguageString; value: string } => item != null),\n );\n }\n\n return items.slice(0, 8);\n }\n\n //#endregion\n\n //#region ---- Page Layout Integration ----\n\n /**\n * Translation key for the hierarchy chart mode shown under the page title.\n */\n private chartModeDescriptionTranslationKey(mode: OrgChartMode): string {\n const keys: Record<OrgChartMode, string> = {\n structure: '@organization-management:organization-chart.options.mode.structure',\n location: '@organization-management:organization-chart.options.mode.location',\n reporting: '@organization-management:organization-chart.options.mode.reporting',\n positionHierarchy:\n '@organization-management:organization-chart.options.mode.positionHierarchy',\n };\n return keys[mode];\n }\n\n protected updateVar(oldValue: any, newValue: AXMOrgChartCategory) {\n oldValue.cat = newValue;\n }\n\n override async getPageTitle(): Promise<string> {\n return await this.translateService.translateAsync(\n '@organization-management:organization-chart.components.chart.title',\n );\n }\n\n override async getPageDescription(): Promise<string> {\n const mode = this.chartService.selectedMode();\n const modeKey = this.chartModeDescriptionTranslationKey(mode);\n return await this.translateService.translateAsync(modeKey);\n }\n\n protected override getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n const mode = this.chartService.selectedMode();\n const modes: OrgChartMode[] = ['structure', 'location', 'reporting', 'positionHierarchy'];\n return modes.map((m) => ({\n title: this.chartModeDescriptionTranslationKey(m),\n command: {\n name: 'chart-mode',\n metadata: { mode: m, isSelected: mode === m, hideSelectionCheckSuffix: true },\n },\n // Prefix renders `fa-light {{ icon }}` (matches dashboard title-action check placement).\n icon: mode === m ? 'fa-check' : '',\n }));\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n ...getActionButton('print'),\n command: {\n name: 'print',\n },\n },\n {\n ...getActionButton('refresh'),\n command: {\n name: 'refresh',\n },\n },\n ];\n }\n override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n return [\n {\n title: await this.translateService.translateAsync('@organization-management:module.menus.root.title'),\n },\n ];\n }\n\n override async execute(command: AXPExecuteCommand) {\n if (command.name === 'chart-mode') {\n const mode = command.metadata?.['mode'] as OrgChartMode | undefined;\n if (mode) {\n this.chartService.setChartMode(mode);\n this.redrawChart();\n this.recompute();\n }\n return;\n }\n if (command.name == 'print') {\n await this.printChart();\n }\n if (command.name == 'refresh') {\n await this.chartService.generate();\n await this.refresh();\n this.recompute();\n }\n }\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n ngOnDestroy(): void {\n this.clearChart(this.treeContainer().nativeElement);\n }\n\n //#endregion\n}\n\n//#endregion\n","<axp-page-layout *translate=\"let t\">\n <axp-page-toolbar>\n <axp-layout-prefix>\n <div class=\"flex flex-wrap items-center gap-3\">\n <ax-search-box class=\"w-72\" [(ngModel)]=\"chartSearchQuery\"\n (onValueChanged)=\"onChartSearchValueChanged($event)\" [placeholder]=\"\n ('@organization-management:organization-chart.components.chart.search-placeholder' | translate | async) || ''\n \">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n @if (chartService.selectedMode() !== 'reporting') {\n <div class=\"flex items-center gap-2 flex-shrink-0 whitespace-nowrap\">\n <span class=\"text-sm\">{{\n '@organization-management:organization-chart.components.generate-dialog.fields.show-vacant-leaf-seats.label'\n | translate\n | async\n }}</span>\n <ax-switch [ngModel]=\"chartService.showVacantLeafSeats()\"\n (onValueChanged)=\"onVacantLeafSeatsChange($event)\"></ax-switch>\n </div>\n }\n </div>\n </axp-layout-prefix>\n <axp-layout-suffix>\n @if (deviceService.isLarge()) {\n <ax-button (onClick)=\"toggleDetailPanel()\">\n <ax-icon icon=\"{{ isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"></ax-icon>\n </ax-button>\n }\n </axp-layout-suffix>\n </axp-page-toolbar>\n <axp-page-content class=\"overflow-hidden flex flex-col\">\n <div class=\"flex flex-row gap-4 flex-1 min-h-0 overflow-hidden\" #parent id=\"parent\">\n <div class=\"flex-1 min-w-0 min-h-0 overflow-hidden relative ax-light\">\n <div #chart axPanView [(panX)]=\"panX\" [(panY)]=\"panY\" [freeMode]=\"true\" [(zoom)]=\"panZoomLevel\"\n [fitContent]=\"true\" wrapperClasses=\"h\" class=\"ax-light\" (contextmenu)=\"onOrgChartSurfaceContextMenu($event)\">\n </div>\n <axp-layout-floating-zoom-bar\n [zoomLevel]=\"panZoomLevel()\"\n (zoomIn)=\"zoomIn()\"\n (zoomOut)=\"zoomOut()\"\n (zoomReset)=\"zoomReset()\"\n />\n <ax-context-menu [orientation]=\"'vertical'\" [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\">\n </ax-context-menu>\n </div>\n @if (isDetailPanelOpen() && deviceService.isLarge()) {\n <axp-layout-side-detail-panel\n class=\"sticky top-0 z-10 max-h-full flex-none\"\n [header]=\"detailPanelHeader()\"\n [sections]=\"detailPanelSections()\"\n [emptyState]=\"detailPanelEmptyState()\"\n [noRowsMessage]=\"detailPanelNoRowsMessage()\"\n (panelClose)=\"toggleDetailPanel()\"\n />\n }\n </div>\n </axp-page-content>\n</axp-page-layout>"],"names":["OrgRootConfig","LocationRootConfig","HcmRootConfig","createMultiLanguageString","resolveMultiLanguageString","i1","i3","i5","i8","i4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-organization-management-client-org-chart.page-DlpHwt9h.mjs","sources":["../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/tokens/org-chart-host.token.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/business-unit/org-chart-business-unit-node.component.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/business-unit/org-chart-business-unit-node.component.html","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/company/org-chart-company-node.component.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/company/org-chart-company-node.component.html","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/employee/org-chart-employee-node.component.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/employee/org-chart-employee-node.component.html","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/position/org-chart-position-node.component.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/position/org-chart-position-node.component.html","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/org-chart-node-outlet.component.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/nodes/org-chart-node-outlet.component.html","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/services/org-chart-node-contribution.service.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/utils/org-chart-vacant-filter.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/org-chart.types.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/org-chart-labels.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/builders/location.builder.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/org-chart-assignment-representatives.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/employee-manager-resolution.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/builders/structure.builder.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/builders/reporting.builder.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/builders/factory.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/org-chart-stats.helper.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/generation/org-chart-compose.helper.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/services/org-chart-local-generate.service.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/services/org-chart.service.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/page/org-chart.page.ts","../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/page/org-chart.page.html"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXMOrganizationNode } from '../model/org-chart.type';\n\n/**\n * Injected by org chart node components to access colors, i18n labels, and expand/collapse.\n */\nexport interface AXMOrgChartHostApi {\n getNodeColors(color: string): Record<string, string>;\n isNodeSelected(data: AXMOrganizationNode): boolean;\n selectNode(data: AXMOrganizationNode): void;\n openNodeContextMenuFromMore(event: unknown, data: AXMOrganizationNode): void;\n readonly chartML: {\n vacant: AXPMultiLanguageString;\n directReports: AXPMultiLanguageString;\n teams: AXPMultiLanguageString;\n people: AXPMultiLanguageString;\n positions: AXPMultiLanguageString;\n chiefExecutive: AXPMultiLanguageString;\n /** Business unit detail rows: unit head display name and role title from `metadata.unitHead`. */\n buHead: AXPMultiLanguageString;\n buPosition: AXPMultiLanguageString;\n unitType: AXPMultiLanguageString;\n businessUnit: AXPMultiLanguageString;\n location: AXPMultiLanguageString;\n code: AXPMultiLanguageString;\n capacity: AXPMultiLanguageString;\n level: AXPMultiLanguageString;\n email: AXPMultiLanguageString;\n phone: AXPMultiLanguageString;\n employmentType: AXPMultiLanguageString;\n workMode: AXPMultiLanguageString;\n /** i18n key for the node “more” control (translate pipe). */\n more: string;\n /** i18n key when the context menu has no runnable actions. */\n noActionsAvailable: string;\n };\n getTeamsMembershipCount(data: AXMOrganizationNode): number | null;\n /** When the card body already shows the assignee (merged unit / manager seat), hide `subtitle` so it is not duplicated. */\n shouldShowOrgCardSubtitle(data: AXMOrganizationNode): boolean;\n /** Subtree / seat strip: BU & company snapshot stats, or `position-ic` seats (1 position; people from vacant state or subtree). */\n getSubtreeRosterCounts(data: AXMOrganizationNode): { people: number; positions: number } | null;\n /** Key-value rows for the side detail panel only (not rendered on node cards). */\n getNodeInfoItems(data: AXMOrganizationNode): Array<{ label: AXPMultiLanguageString; value: string }>;\n toggleNode(data: AXMOrganizationNode, el?: HTMLDivElement | null): void;\n /** Shows or hides the chart detail panel. */\n toggleDetailPanel(): void;\n /**\n * Sets explicit expand/collapse for a branch and redraws the chart.\n * @param expanded When false, children are hidden on the next layout (`isExpanded === false`).\n */\n setNodeBranchExpanded(data: AXMOrganizationNode, expanded: boolean): void;\n}\n\nexport const AXM_ORG_CHART_HOST = new InjectionToken<AXMOrgChartHostApi>('AXM_ORG_CHART_HOST');\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPAvatarComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { AXM_ORG_CHART_HOST, type AXMOrgChartHostApi } from '../../tokens/org-chart-host.token';\nimport { AXMOrgChartNodeFooterMetric, AXMOrganizationNode } from '../../model/org-chart.type';\n\n//#endregion\n\n//#region ---- Component ----\n\n/** Business unit node: merged unit (head slot) or compact card. */\n@Component({\n selector: 'axm-org-chart-business-unit-node',\n templateUrl: './org-chart-business-unit-node.component.html',\n imports: [AXButtonModule, AXDecoratorModule, AXPAvatarComponent, AXTranslationModule, AsyncPipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXMOrgChartBusinessUnitNodeComponent {\n protected readonly host: AXMOrgChartHostApi = inject(AXM_ORG_CHART_HOST);\n\n readonly data = input.required<AXMOrganizationNode>();\n\n protected readonly unitFooterMetrics = computed((): AXMOrgChartNodeFooterMetric[] => {\n const node = this.data();\n const items: AXMOrgChartNodeFooterMetric[] = [];\n const roster = this.host.getSubtreeRosterCounts(node);\n if (roster) {\n items.push({\n icon: 'fa-users',\n value: String(roster.people),\n title: this.host.chartML.people,\n });\n items.push({\n icon: 'fa-briefcase',\n value: String(roster.positions),\n title: this.host.chartML.positions,\n });\n }\n const teams = this.host.getTeamsMembershipCount(node);\n if (teams != null && teams > 0) {\n items.push({\n icon: 'fa-people-group',\n value: String(teams),\n title: this.host.chartML.teams,\n });\n }\n return items;\n });\n\n protected isRegional(): boolean {\n return this.data().metadata?.['isRegional'] === true;\n }\n\n protected getColorKey(): string {\n return this.isRegional() ? 'accent1' : 'accent2';\n }\n\n protected resolveNodeColorToken(): string {\n const raw = this.data().metadata?.['unitTypeColor'];\n if (typeof raw === 'string' && raw.trim().length > 0) {\n return raw.trim();\n }\n return this.getColorKey();\n }\n}\n\n//#endregion\n","<div>\n @if (data().metadata?.['chartTemplate'] === 'merged-unit') {\n @let leadIcon = data().icon ?? 'fa-building';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--business-unit\"\n [class.axm-org-chart-card--vacant]=\"\n !!data().metadata?.['unitHead']?.['vacant']\n \"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors(resolveNodeColorToken())\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--org\"\n >\n <div class=\"axm-org-chart-card__leading-icon\">\n <i [class]=\"'fa-light fa-xl fa-fw ' + leadIcon\"></i>\n </div>\n <div class=\"axm-org-chart-card__title-block\">\n <span\n class=\"axm-org-chart-card__title\"\n [title]=\"(data().title | translate | async) ?? ''\"\n >{{ data().title | translate | async }}</span\n >\n @if (data().subtitle && host.shouldShowOrgCardSubtitle(data())) {\n <span\n class=\"axm-org-chart-card__subtitle\"\n [title]=\"(data().subtitle! | translate | async) ?? ''\"\n >{{ data().subtitle! | translate | async }}</span\n >\n }\n @if (data().description) {\n <span class=\"axm-org-chart-card__desc\">{{\n data().description | translate | async\n }}</span>\n }\n </div>\n </div>\n @if (data().metadata?.['unitHead']; as unitHead) {\n <section class=\"axm-org-chart-card__person\">\n <div class=\"axm-org-chart-card__person-label\">\n {{ host.chartML.buHead | translate | async }}\n </div>\n <div class=\"axm-org-chart-card__person-row\">\n <axp-avatar\n [fullName]=\"unitHead['employeeName'] ?? ''\"\n [placeholder]=\"\n unitHead['vacant'] || !unitHead['employeeName']\n \"\n [size]=\"44\"\n />\n <div class=\"axm-org-chart-card__person-text\">\n @if (unitHead['vacant'] || !unitHead['employeeName']) {\n <span class=\"axm-org-chart-card__person-vacant\">{{\n host.chartML.vacant | translate | async\n }}</span>\n } @else {\n <span class=\"axm-org-chart-card__person-name\">{{\n unitHead['employeeName']\n }}</span>\n }\n @if (unitHead['positionTitle']) {\n <span class=\"axm-org-chart-card__person-role\">{{\n unitHead['positionTitle'] | translate | async\n }}</span>\n }\n </div>\n </div>\n </section>\n }\n </div>\n @if (unitFooterMetrics().length > 0) {\n <div class=\"axm-org-chart-card__footer\">\n @for (m of unitFooterMetrics(); track $index) {\n <div class=\"axm-org-chart-card__metric\">\n <i\n [class]=\"\n 'fa-light fa-fw axm-org-chart-card__metric-icon ' + m.icon\n \"\n ></i>\n <div class=\"axm-org-chart-card__metric-col\">\n <span class=\"axm-org-chart-card__metric-value\">{{\n m.value\n }}</span>\n <span\n class=\"axm-org-chart-card__metric-title\"\n [title]=\"(m.title | translate | async) ?? ''\"\n >{{ m.title | translate | async }}</span\n >\n </div>\n </div>\n }\n </div>\n }\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n } @else {\n @let leadIcon = data().icon ?? 'fa-building';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--business-unit\"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors(resolveNodeColorToken())\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--org\"\n >\n <div class=\"axm-org-chart-card__leading-icon\">\n <i [class]=\"'fa-light fa-xl fa-fw ' + leadIcon\"></i>\n </div>\n <div class=\"axm-org-chart-card__title-block\">\n <span\n class=\"axm-org-chart-card__title\"\n [title]=\"(data().title | translate | async) ?? ''\"\n >{{ data().title | translate | async }}</span\n >\n @if (data().subtitle && host.shouldShowOrgCardSubtitle(data())) {\n <span\n class=\"axm-org-chart-card__subtitle\"\n [title]=\"(data().subtitle! | translate | async) ?? ''\"\n >{{ data().subtitle! | translate | async }}</span\n >\n }\n @if (data().description) {\n <span class=\"axm-org-chart-card__desc\">{{\n data().description | translate | async\n }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n }\n</div>\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPAvatarComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { AXM_ORG_CHART_HOST, type AXMOrgChartHostApi } from '../../tokens/org-chart-host.token';\nimport { AXMOrgChartNodeFooterMetric, AXMOrganizationNode } from '../../model/org-chart.type';\n\n//#endregion\n\n//#region ---- Component ----\n\n/** Company node: merged executive (Chief executive slot) or compact company card. */\n@Component({\n selector: 'axm-org-chart-company-node',\n templateUrl: './org-chart-company-node.component.html',\n imports: [AXButtonModule, AXDecoratorModule, AXPAvatarComponent, AXTranslationModule, AsyncPipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXMOrgChartCompanyNodeComponent {\n protected readonly host: AXMOrgChartHostApi = inject(AXM_ORG_CHART_HOST);\n\n readonly data = input.required<AXMOrganizationNode>();\n\n protected readonly companyFooterMetrics = computed((): AXMOrgChartNodeFooterMetric[] => {\n const node = this.data();\n const items: AXMOrgChartNodeFooterMetric[] = [];\n const roster = this.host.getSubtreeRosterCounts(node);\n if (roster) {\n items.push({\n icon: 'fa-users',\n value: String(roster.people),\n title: this.host.chartML.people,\n });\n items.push({\n icon: 'fa-briefcase',\n value: String(roster.positions),\n title: this.host.chartML.positions,\n });\n }\n const teams = this.host.getTeamsMembershipCount(node);\n if (teams != null && teams > 0) {\n items.push({\n icon: 'fa-people-group',\n value: String(teams),\n title: this.host.chartML.teams,\n });\n }\n return items;\n });\n}\n\n//#endregion\n","<div>\n @if (data().metadata?.['chartTemplate'] === 'merged-executive') {\n @let leadIcon = data().icon ?? 'fa-building';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--company\"\n [class.axm-org-chart-card--vacant]=\"\n !!data().metadata?.['topRole']?.['vacant']\n \"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors('primary')\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--org\"\n >\n <div class=\"axm-org-chart-card__leading-icon\">\n <i [class]=\"'fa-light fa-xl fa-fw ' + leadIcon\"></i>\n </div>\n <div class=\"axm-org-chart-card__title-block\">\n <span\n class=\"axm-org-chart-card__title\"\n [title]=\"(data().title | translate | async) ?? ''\"\n >{{ data().title | translate | async }}</span\n >\n @if (data().subtitle) {\n <span\n class=\"axm-org-chart-card__subtitle\"\n [title]=\"(data().subtitle! | translate | async) ?? ''\"\n >{{ data().subtitle! | translate | async }}</span\n >\n }\n @if (data().description) {\n <span class=\"axm-org-chart-card__desc\">{{\n data().description | translate | async\n }}</span>\n }\n </div>\n </div>\n @if (data().metadata?.['topRole']; as topRole) {\n <section class=\"axm-org-chart-card__person\">\n <div class=\"axm-org-chart-card__person-label\">\n {{ host.chartML.chiefExecutive | translate | async }}\n </div>\n <div class=\"axm-org-chart-card__person-row\">\n <axp-avatar\n [fullName]=\"topRole['employeeName'] ?? ''\"\n [placeholder]=\"topRole['vacant'] || !topRole['employeeName']\"\n [size]=\"44\"\n />\n <div class=\"axm-org-chart-card__person-text\">\n @if (topRole['vacant'] || !topRole['employeeName']) {\n <span class=\"axm-org-chart-card__person-vacant\">{{\n host.chartML.vacant | translate | async\n }}</span>\n } @else {\n <span class=\"axm-org-chart-card__person-name\">{{\n topRole['employeeName']\n }}</span>\n }\n @if (topRole['positionTitle']) {\n <span class=\"axm-org-chart-card__person-role\">{{\n topRole['positionTitle'] | translate | async\n }}</span>\n }\n </div>\n </div>\n </section>\n }\n </div>\n @if (companyFooterMetrics().length > 0) {\n <div class=\"axm-org-chart-card__footer\">\n @for (m of companyFooterMetrics(); track $index) {\n <div class=\"axm-org-chart-card__metric\">\n <i\n [class]=\"\n 'fa-light fa-fw axm-org-chart-card__metric-icon ' + m.icon\n \"\n ></i>\n <div class=\"axm-org-chart-card__metric-col\">\n <span class=\"axm-org-chart-card__metric-value\">{{\n m.value\n }}</span>\n <span\n class=\"axm-org-chart-card__metric-title\"\n [title]=\"(m.title | translate | async) ?? ''\"\n >{{ m.title | translate | async }}</span\n >\n </div>\n </div>\n }\n </div>\n }\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n } @else {\n @let leadIcon = data().icon ?? 'fa-building';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--company\"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors('primary')\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--org\"\n >\n <div class=\"axm-org-chart-card__leading-icon\">\n <i [class]=\"'fa-light fa-xl fa-fw ' + leadIcon\"></i>\n </div>\n <div class=\"axm-org-chart-card__title-block\">\n <span\n class=\"axm-org-chart-card__title\"\n [title]=\"(data().title | translate | async) ?? ''\"\n >{{ data().title | translate | async }}</span\n >\n @if (data().subtitle) {\n <span\n class=\"axm-org-chart-card__subtitle\"\n [title]=\"(data().subtitle! | translate | async) ?? ''\"\n >{{ data().subtitle! | translate | async }}</span\n >\n }\n @if (data().description) {\n <span class=\"axm-org-chart-card__desc\">{{\n data().description | translate | async\n }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n }\n</div>\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPAvatarComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { AXM_ORG_CHART_HOST, type AXMOrgChartHostApi } from '../../tokens/org-chart-host.token';\nimport { AXMOrgChartNodeFooterMetric, AXMOrganizationNode } from '../../model/org-chart.type';\n\n//#endregion\n\n//#region ---- Component ----\n\n/** Employee node: person-forward card or compact icon card. */\n@Component({\n selector: 'axm-org-chart-employee-node',\n templateUrl: './org-chart-employee-node.component.html',\n imports: [AXButtonModule, AXDecoratorModule, AXPAvatarComponent, AXTranslationModule, AsyncPipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXMOrgChartEmployeeNodeComponent {\n protected readonly host: AXMOrgChartHostApi = inject(AXM_ORG_CHART_HOST);\n\n readonly data = input.required<AXMOrganizationNode>();\n\n protected readonly employeeFooterMetrics = computed((): AXMOrgChartNodeFooterMetric[] => {\n const teams = this.host.getTeamsMembershipCount(this.data());\n if (teams == null || teams <= 0) {\n return [];\n }\n return [\n {\n icon: 'fa-people-group',\n value: String(teams),\n title: this.host.chartML.teams,\n },\n ];\n });\n\n /** Frame color for employee merged cards — distinct from business units (`accent2`). */\n protected getColorKey(): string {\n return 'accent3';\n }\n}\n\n//#endregion\n","<div>\n @if (data().metadata?.['chartTemplate'] === 'employee-card') {\n @let titleText = (data().title | translate | async) ?? '';\n @let subtitleText =\n data().subtitle ? ((data().subtitle | translate | async) ?? '') : '';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--employee\"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors(getColorKey())\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--person\"\n >\n <axp-avatar\n [fullName]=\"titleText\"\n [placeholder]=\"!titleText.trim()\"\n [size]=\"56\"\n />\n <div class=\"axm-org-chart-card__person-text\">\n @if (titleText.trim()) {\n <span\n class=\"axm-org-chart-card__person-name\"\n [title]=\"titleText\"\n >{{ titleText }}</span\n >\n }\n @if (subtitleText) {\n <span class=\"axm-org-chart-card__person-role\">{{\n subtitleText\n }}</span>\n }\n </div>\n </div>\n </div>\n @if (employeeFooterMetrics().length > 0) {\n <div class=\"axm-org-chart-card__footer\">\n @for (m of employeeFooterMetrics(); track $index) {\n <div class=\"axm-org-chart-card__metric\">\n <i\n [class]=\"\n 'fa-light fa-fw axm-org-chart-card__metric-icon ' + m.icon\n \"\n ></i>\n <div class=\"axm-org-chart-card__metric-col\">\n <span class=\"axm-org-chart-card__metric-value\">{{\n m.value\n }}</span>\n <span\n class=\"axm-org-chart-card__metric-title\"\n [title]=\"(m.title | translate | async) ?? ''\"\n >{{ m.title | translate | async }}</span\n >\n </div>\n </div>\n }\n </div>\n }\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n } @else {\n @let leadIcon = data().icon ?? 'fa-address-card';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--employee\"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors('surface')\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--org\"\n >\n <div class=\"axm-org-chart-card__leading-icon\">\n <i [class]=\"'fa-light fa-xl fa-fw ' + leadIcon\"></i>\n </div>\n <div class=\"axm-org-chart-card__title-block\">\n <span\n class=\"axm-org-chart-card__title\"\n [title]=\"(data().title | translate | async) ?? ''\"\n >{{ data().title | translate | async }}</span\n >\n @if (data().subtitle) {\n <span\n class=\"axm-org-chart-card__subtitle\"\n [title]=\"(data().subtitle! | translate | async) ?? ''\"\n >{{ data().subtitle! | translate | async }}</span\n >\n }\n @if (data().description) {\n <span class=\"axm-org-chart-card__desc\">{{\n data().description | translate | async\n }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n }\n</div>\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPAvatarComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { AXM_ORG_CHART_HOST, type AXMOrgChartHostApi } from '../../tokens/org-chart-host.token';\nimport { AXMOrgChartNodeFooterMetric, AXMOrganizationNode } from '../../model/org-chart.type';\n\n//#endregion\n\n//#region ---- Component ----\n\n/** Position node: merged manager (occupant slot), IC seat, or compact card. */\n@Component({\n selector: 'axm-org-chart-position-node',\n templateUrl: './org-chart-position-node.component.html',\n imports: [AXButtonModule, AXDecoratorModule, AXPAvatarComponent, AXTranslationModule, AsyncPipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXMOrgChartPositionNodeComponent {\n protected readonly host: AXMOrgChartHostApi = inject(AXM_ORG_CHART_HOST);\n\n readonly data = input.required<AXMOrganizationNode>();\n\n protected readonly icFooterMetrics = computed((): AXMOrgChartNodeFooterMetric[] => {\n const roster = this.host.getSubtreeRosterCounts(this.data());\n if (!roster) {\n return [];\n }\n return [\n {\n icon: 'fa-users',\n value: String(roster.people),\n title: this.host.chartML.people,\n },\n {\n icon: 'fa-briefcase',\n value: String(roster.positions),\n title: this.host.chartML.positions,\n },\n ];\n });\n\n protected readonly managerFooterMetrics = computed((): AXMOrgChartNodeFooterMetric[] => {\n const stats = this.data().metadata?.['stats'] as Record<string, unknown> | undefined;\n const directReports = stats?.['directReports'];\n if (typeof directReports !== 'number' || !Number.isFinite(directReports) || directReports <= 0) {\n return [];\n }\n return [\n {\n icon: 'fa-users',\n value: String(Math.max(0, Math.floor(directReports))),\n title: this.host.chartML.directReports,\n },\n ];\n });\n}\n\n//#endregion\n","<div>\n @if (data().metadata?.['chartTemplate'] === 'merged-manager') {\n @let leadIcon = 'fa-user-tie';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--position\"\n [class.axm-org-chart-card--vacant]=\"!!data().metadata?.['vacant']\"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors('accent3')\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--org\"\n >\n <div class=\"axm-org-chart-card__leading-icon\">\n <i [class]=\"'fa-light fa-xl fa-fw ' + leadIcon\"></i>\n </div>\n <div class=\"axm-org-chart-card__title-block\">\n <span\n class=\"axm-org-chart-card__title\"\n [title]=\"(data().title | translate | async) ?? ''\"\n >{{ data().title | translate | async }}</span\n >\n @if (data().subtitle && host.shouldShowOrgCardSubtitle(data())) {\n <span\n class=\"axm-org-chart-card__subtitle\"\n [title]=\"(data().subtitle! | translate | async) ?? ''\"\n >{{ data().subtitle! | translate | async }}</span\n >\n }\n </div>\n </div>\n <section class=\"axm-org-chart-card__person\">\n <div class=\"axm-org-chart-card__person-row\">\n <axp-avatar\n [fullName]=\"\n data().metadata?.['occupant']?.['displayName'] ?? ''\n \"\n [placeholder]=\"\n !!data().metadata?.['vacant'] ||\n !data().metadata?.['occupant']?.['displayName']\n \"\n [size]=\"44\"\n />\n <div class=\"axm-org-chart-card__person-text\">\n @if (\n !!data().metadata?.['vacant'] ||\n !data().metadata?.['occupant']?.['displayName']\n ) {\n <span class=\"axm-org-chart-card__person-vacant\">{{\n host.chartML.vacant | translate | async\n }}</span>\n } @else {\n <span class=\"axm-org-chart-card__person-name\">{{\n data().metadata?.['occupant']?.['displayName']\n }}</span>\n }\n @if (\n data().description &&\n !data().metadata?.['vacant'] &&\n data().metadata?.['occupant']?.['displayName']\n ) {\n <span class=\"axm-org-chart-card__person-role\">{{\n data().description! | translate | async\n }}</span>\n }\n </div>\n </div>\n </section>\n </div>\n @if (managerFooterMetrics().length > 0) {\n <div class=\"axm-org-chart-card__footer\">\n @for (m of managerFooterMetrics(); track $index) {\n <div class=\"axm-org-chart-card__metric\">\n <i\n [class]=\"\n 'fa-light fa-fw axm-org-chart-card__metric-icon ' + m.icon\n \"\n ></i>\n <div class=\"axm-org-chart-card__metric-col\">\n <span class=\"axm-org-chart-card__metric-value\">{{\n m.value\n }}</span>\n <span\n class=\"axm-org-chart-card__metric-title\"\n [title]=\"(m.title | translate | async) ?? ''\"\n >{{ m.title | translate | async }}</span\n >\n </div>\n </div>\n }\n </div>\n }\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n } @else if (data().metadata?.['chartTemplate'] === 'position-ic') {\n @let leadIcon = data().icon ?? 'fa-user-tie';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--position\"\n [class.axm-org-chart-card--vacant]=\"!!data().metadata?.['vacant']\"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors('accent3')\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--org\"\n >\n <div class=\"axm-org-chart-card__leading-icon\">\n <i [class]=\"'fa-light fa-xl fa-fw ' + leadIcon\"></i>\n </div>\n <div class=\"axm-org-chart-card__title-block\">\n <span\n class=\"axm-org-chart-card__title\"\n [title]=\"(data().title | translate | async) ?? ''\"\n >{{ data().title | translate | async }}</span\n >\n @if (data().subtitle) {\n <span\n class=\"axm-org-chart-card__subtitle\"\n [title]=\"(data().subtitle! | translate | async) ?? ''\"\n >{{ data().subtitle! | translate | async }}</span\n >\n } @else if (data().metadata?.['vacant']) {\n <span class=\"axm-org-chart-card__subtitle\">{{\n host.chartML.vacant | translate | async\n }}</span>\n }\n </div>\n </div>\n </div>\n @if (icFooterMetrics().length > 0) {\n <div class=\"axm-org-chart-card__footer\">\n @for (m of icFooterMetrics(); track $index) {\n <div class=\"axm-org-chart-card__metric\">\n <i\n [class]=\"\n 'fa-light fa-fw axm-org-chart-card__metric-icon ' + m.icon\n \"\n ></i>\n <div class=\"axm-org-chart-card__metric-col\">\n <span class=\"axm-org-chart-card__metric-value\">{{\n m.value\n }}</span>\n <span\n class=\"axm-org-chart-card__metric-title\"\n [title]=\"(m.title | translate | async) ?? ''\"\n >{{ m.title | translate | async }}</span\n >\n </div>\n </div>\n }\n </div>\n }\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n } @else {\n @let leadIcon = data().icon ?? 'fa-user-tie';\n <div\n #node\n class=\"--node-container --merged-card axm-org-chart-card axm-org-chart-card--position\"\n [attr.data-chart-node-id]=\"data().id\"\n [class.--selected]=\"host.isNodeSelected(data())\"\n [style]=\"host.getNodeColors('accent3')\"\n (click)=\"host.selectNode(data())\"\n (contextmenu)=\"host.selectNode(data())\"\n >\n <div class=\"--container\">\n <div class=\"axm-org-chart-card__accent\" aria-hidden=\"true\"></div>\n <div class=\"axm-org-chart-card__body\">\n <div\n class=\"axm-org-chart-card__header axm-org-chart-card__header--org\"\n >\n <div class=\"axm-org-chart-card__leading-icon\">\n <i [class]=\"'fa-light fa-xl fa-fw ' + leadIcon\"></i>\n </div>\n <div class=\"axm-org-chart-card__title-block\">\n <span\n class=\"axm-org-chart-card__title\"\n [title]=\"(data().title | translate | async) ?? ''\"\n >{{ data().title | translate | async }}</span\n >\n @if (data().subtitle) {\n <span\n class=\"axm-org-chart-card__subtitle\"\n [title]=\"(data().subtitle! | translate | async) ?? ''\"\n >{{ data().subtitle! | translate | async }}</span\n >\n }\n @if (data().description) {\n <span class=\"axm-org-chart-card__desc\">{{\n data().description | translate | async\n }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n @if (data().children && data().children!.length > 0) {\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs rounded-sm\" (onClick)=\"host.toggleNode(data(), node)\">\n <ax-icon\n icon=\"fa-solid\"\n [class]=\"data().isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n }\n</div>\n","//#region ---- Imports ----\n\nimport { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { AXMOrgChartNodeType, type AXMOrganizationNode } from '../model/org-chart.type';\nimport { AXMOrgChartBusinessUnitNodeComponent } from './business-unit/org-chart-business-unit-node.component';\nimport { AXMOrgChartCompanyNodeComponent } from './company/org-chart-company-node.component';\nimport { AXMOrgChartEmployeeNodeComponent } from './employee/org-chart-employee-node.component';\nimport { AXMOrgChartPositionNodeComponent } from './position/org-chart-position-node.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Picks the org chart card by node type. Uses a static @switch (not NgComponentOutlet) so\n * components render reliably when the host is created in code and moved into an SVG foreignObject.\n */\n@Component({\n selector: 'axm-org-chart-node-outlet',\n templateUrl: './org-chart-node-outlet.component.html',\n styleUrls: ['./org-chart-node-outlet.component.css'],\n imports: [\n AXMOrgChartCompanyNodeComponent,\n AXMOrgChartBusinessUnitNodeComponent,\n AXMOrgChartPositionNodeComponent,\n AXMOrgChartEmployeeNodeComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axm-org-chart-node-outlet',\n },\n})\nexport class AXMOrgChartNodeOutletComponent {\n protected readonly NodeTypes = AXMOrgChartNodeType;\n\n readonly data = input.required<AXMOrganizationNode>();\n}\n\n//#endregion\n","@switch (data().type) {\n@case (NodeTypes.Company) {\n<axm-org-chart-company-node [data]=\"data()\" />\n} @case (NodeTypes.BusinessUnit) {\n<axm-org-chart-business-unit-node [data]=\"data()\" />\n} @case (NodeTypes.Position) {\n<axm-org-chart-position-node [data]=\"data()\" />\n} @case (NodeTypes.Employee) {\n<axm-org-chart-employee-node [data]=\"data()\" />\n} @default {\n<axm-org-chart-company-node [data]=\"data()\" />\n} }","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport {\n AXM_ORG_CHART_NODE_CONTRIBUTOR,\n AXMOrgChartNodeContributionContext,\n AXMOrgChartNodeContributionProvider,\n AXMOrgChartNodeContributorRef,\n AXMOrgChartNodeInfoContribution,\n AXMOrgChartNodeMenuAction,\n} from '../tokens/org-chart-node-contribution.token';\n\n//#endregion\n\n//#region ---- Service ----\n\n@Injectable()\nexport class AXMOrgChartNodeContributionService {\n /** `inject` typings for this multi-token omit the array wrapper; runtime value is always `T[]`. */\n private readonly contributorSlots: AXMOrgChartNodeContributorRef[] =\n (inject(AXM_ORG_CHART_NODE_CONTRIBUTOR, { optional: true }) as AXMOrgChartNodeContributorRef[] | null) ?? [];\n\n /**\n * Resolves eager contributors and lazy `provideLazyProvider` slots (factory returns a Promise).\n */\n private async resolveContributors(): Promise<AXMOrgChartNodeContributionProvider[]> {\n return Promise.all(this.contributorSlots.map((slot) => Promise.resolve(slot)));\n }\n\n /**\n * Collects and sorts menu actions contributed by all providers for the current node context.\n */\n async getMenuActions(context: AXMOrgChartNodeContributionContext): Promise<AXMOrgChartNodeMenuAction[]> {\n const contributors = await this.resolveContributors();\n const buckets = await Promise.all(contributors.map((provider) => provider.getMenuActions(context)));\n return buckets\n .flat()\n .sort((a, b) => (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER));\n }\n\n /**\n * Collects and sorts related info blocks contributed for the selected node.\n * This is used by the upcoming node detail drawer.\n */\n async getInfoContributions(context: AXMOrgChartNodeContributionContext): Promise<AXMOrgChartNodeInfoContribution[]> {\n const contributors = await this.resolveContributors();\n const buckets = await Promise.all(\n contributors.map((provider) => provider.getInfoContributions?.(context) ?? Promise.resolve([])),\n );\n return buckets\n .flat()\n .sort((a, b) => (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER));\n }\n}\n\n//#endregion\n","import { AXMOrganizationNode, AXMOrgChartNodeType } from '../model/org-chart.type';\n\n/**\n * Drops leaf vacant seat position nodes from the persisted chart tree (matches generator behavior when\n * `showVacantLeafSeats` is false).\n */\nexport function omitVacantLeafSeatNodes(root: AXMOrganizationNode): AXMOrganizationNode {\n const clone = structuredClone(root);\n const visit = (node: AXMOrganizationNode): void => {\n if (!node.children?.length) {\n return;\n }\n node.children = node.children.filter((child) => {\n const hideVacantSeat =\n child.type === AXMOrgChartNodeType.Position && child.metadata?.['vacant'] === true;\n return !hideVacantSeat;\n });\n for (const child of node.children) {\n visit(child);\n }\n };\n visit(clone);\n return clone;\n}\n","import type { AXMOrganizationManagementChartNodeEntityModel } from '@acorex-platform/module-organization-management-client/contracts';\n\nexport type OrgChartMode = 'location' | 'structure' | 'reporting' | 'positionHierarchy';\n\nexport enum OrgChartNodeType {\n Company = 'Company',\n BusinessUnit = 'BusinessUnit',\n Position = 'Position',\n Employee = 'Employee',\n}\n\nexport type OrgChartNode = AXMOrganizationManagementChartNodeEntityModel;\n\nexport interface OrgChartTenantContext {\n id: string;\n title?: unknown;\n}\n\nexport type OrgChartGenerateResult = {\n id: string;\n version: string;\n};\n","import {type AXPMultiLanguageString} from '@acorex-platform/framework-shared/core';\nimport { createMultiLanguageString } from '@acorex-platform/framework-shared/core';\n\n/**\n * System labels embedded in generated chart JSON. Must stay aligned with demo i18n:\n * `organization-management.organization-chart.nodes` (en-US / fa-IR).\n */\nexport const AXM_ORG_CHART_NODE_LABELS = {\n company: createMultiLanguageString('Company', 'شرکت'),\n vacant: createMultiLanguageString('Vacant', 'خالی'),\n headPrefix: createMultiLanguageString('Head', 'مسئول'),\n demoOrganization: createMultiLanguageString('Demo Organization', 'سازمان نمونه'),\n employee: createMultiLanguageString('Employee', 'کارمند'),\n position: createMultiLanguageString('Position', 'سمت'),\n region: createMultiLanguageString('Region', 'منطقه'),\n assign: createMultiLanguageString('Assign', 'تخصیص'),\n reassign: createMultiLanguageString('Reassign', 'تغییر تخصیص'),\n directReports: createMultiLanguageString('Direct reports', 'گزارش مستقیم'),\n} as const;\n\nexport function axmNormalizeChartTitle(value: unknown, fallback: AXPMultiLanguageString): AXPMultiLanguageString {\n if (value == null || value === '') {\n return fallback;\n }\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n return value as AXPMultiLanguageString;\n }\n return fallback;\n}\n","import { AXPDataGenerator } from '@acorex-platform/framework-client/core';\nimport { getOrgChartMergedBusinessUnitId } from '@acorex-platform/module-organization-management-client/contracts';\nimport { OrgChartNode, OrgChartNodeType } from '../org-chart.types';\n\nimport { OrgChartBuilder, OrgChartBuildContext } from './types';\nimport { AXM_ORG_CHART_NODE_LABELS, axmNormalizeChartTitle } from '../org-chart-labels';\nexport class LocationOrgChartBuilder implements OrgChartBuilder {\n build(context: OrgChartBuildContext): OrgChartNode {\n const { root, indices, helpers, orgRootConfig } = context;\n const mergedCorporateBusinessUnitId = getOrgChartMergedBusinessUnitId();\n\n for (const bu of context.data.businessUnits as any[]) {\n // Enterprise-root BU is merged into the company node on structure charts; here it has no region — omit to avoid a duplicate CEO card on the root.\n if (mergedCorporateBusinessUnitId != null && String(bu.id) === mergedCorporateBusinessUnitId) {\n continue;\n }\n const type = indices.buTypeById.get(bu.typeId);\n const typeCode: string = type?.name ?? '';\n const allowsDirectPositions = type?.allowsDirectPositions !== false;\n const typeColor = typeof type?.color === 'string' ? type.color.trim() : '';\n const typeIcon =\n typeof type?.icon === 'string' && type.icon.trim().length > 0\n ? type.icon.trim()\n : typeCode === 'division'\n ? 'fa-sitemap'\n : typeCode === 'department'\n ? 'fa-building-user'\n : 'fa-network-wired';\n const regionNode = helpers.ensureRegionPath(bu.geographicRegionId);\n\n const buAssignments = indices.assignmentsByBU.get(String(bu.id)) || [];\n const headPositionId = bu.headPositionId != null ? String(bu.headPositionId) : null;\n const children = allowsDirectPositions\n ? helpers.buildPositionNodes(buAssignments, bu, headPositionId)\n : [];\n const subtitle = helpers.buildBusinessUnitHeadSubtitle(bu, buAssignments);\n\n const headPos = headPositionId ? indices.positionById.get(headPositionId) : null;\n const headTitleMl = headPos ? axmNormalizeChartTitle(headPos.title, AXM_ORG_CHART_NODE_LABELS.position) : undefined;\n const headAssignments = headPositionId\n ? buAssignments.filter((a: any) => String(a.positionId) === headPositionId)\n : [];\n const headRep = helpers.chooseRepresentativeAssignment(headAssignments);\n const headEmp = headRep ? indices.employeeById.get(headRep.employeeId) : null;\n const headName = headEmp ? helpers.getEmployeeDisplayName(headEmp) : undefined;\n const headEmpId = headEmp ? String(headEmp.id) : undefined;\n const vacantHead = !!(headPositionId && !headName);\n\n const buNode: OrgChartNode = {\n id: AXPDataGenerator.uuid(),\n title: bu.title,\n subtitle,\n description: bu.description,\n type: OrgChartNodeType.BusinessUnit,\n icon: typeIcon,\n entity: { id: bu.id, type: orgRootConfig.entities.businessUnit.source },\n children,\n metadata: {\n isRegional: false,\n businessUnitKind: typeCode,\n typeAllowsDirectPositions: allowsDirectPositions,\n chartTemplate: 'merged-unit',\n ...(typeColor.length > 0 ? { unitTypeColor: typeColor } : {}),\n unitHead:\n headTitleMl != null\n ? {\n positionTitle: headTitleMl,\n positionId: headPositionId ?? undefined,\n employeeName: headName,\n employeeId: headEmpId,\n vacant: vacantHead,\n }\n : undefined,\n stats: { directChildren: children.length },\n },\n };\n\n if (regionNode) {\n regionNode.children = regionNode.children || [];\n regionNode.children.push(buNode);\n } else {\n root.children!.push(buNode);\n }\n }\n\n return root;\n }\n}\n\n","//#region ---- Assignment ordering / multi-incumbent support ----\n\n/**\n * Sort assignments for representative pick: primary first, then latest {@link startDate}.\n */\nexport function axcOrderAssignmentsForRepresentative(list: any[]): any[] {\n if (!list?.length) {\n return [];\n }\n return [...list].sort((a, b) => {\n const ap = a?.isPrimary === true ? 1 : 0;\n const bp = b?.isPrimary === true ? 1 : 0;\n if (bp !== ap) {\n return bp - ap;\n }\n const ad = a?.startDate ? new Date(a.startDate).getTime() : 0;\n const bd = b?.startDate ? new Date(b.startDate).getTime() : 0;\n return bd - ad;\n });\n}\n\n/**\n * One row per employee (same position / BU can have multiple people).\n */\nexport function axcDistinctAssignmentsByEmployee(ordered: any[]): any[] {\n const seen = new Set<string>();\n const out: any[] = [];\n for (const a of ordered) {\n const id = String(a?.employeeId ?? '');\n if (!id || seen.has(id)) {\n continue;\n }\n seen.add(id);\n out.push(a);\n }\n return out;\n}\n\n//#endregion\n","const POSITION_ASSIGNMENT_ACTIVE_STATUS = 'active';\n\nexport interface AXCEmployeeManagerResolutionContext {\n now: Date;\n preferPrimary: boolean;\n businessUnitById: Map<string, any>;\n positionById: Map<string, any>;\n assignments: any[];\n}\n\nexport function axcIsActiveAssignment(a: any, now: Date, preferPrimary: boolean): boolean {\n if (a?.statusId !== POSITION_ASSIGNMENT_ACTIVE_STATUS) return false;\n if (preferPrimary) return a?.isPrimary === true;\n return true;\n}\n\nexport function axcIsAssignmentRowDiscarded(a: any): boolean {\n if (a == null || typeof a !== 'object') {\n return true;\n }\n if (a.auditInfo?.deleted != null) {\n return true;\n }\n if ('isArchived' in a && a.isArchived === true) {\n return true;\n }\n if ('archived' in a && a.archived === true) {\n return true;\n }\n if (typeof a.status === 'string' && a.status.toLowerCase().includes('archived')) {\n return true;\n }\n return false;\n}\n\nexport function axcBuildEmployeeEligibleActiveAssignmentCount(assignments: any[], now: Date): Map<string, number> {\n const map = new Map<string, number>();\n for (const a of assignments) {\n if (axcIsAssignmentRowDiscarded(a)) {\n continue;\n }\n if (!axcIsActiveAssignment(a, now, false)) {\n continue;\n }\n const id = String(a.employeeId ?? '');\n if (!id) {\n continue;\n }\n map.set(id, (map.get(id) ?? 0) + 1);\n }\n return map;\n}\n\nexport function axcIsAssignmentIncludedInOrgChartPrimarySlice(\n a: any,\n now: Date,\n eligibleCountByEmployeeId: Map<string, number>,\n): boolean {\n if (axcIsAssignmentRowDiscarded(a)) {\n return false;\n }\n if (!axcIsActiveAssignment(a, now, false)) {\n return false;\n }\n if (a?.isPrimary === true) {\n return true;\n }\n const empId = String(a.employeeId ?? '');\n return (eligibleCountByEmployeeId.get(empId) ?? 0) === 1;\n}\n\nexport function axcChooseRepresentativeAssignment(list: any[], now: Date, preferPrimary: boolean): any | null {\n if (!list?.length) return null;\n const primaries = list.filter((x) => x?.isPrimary === true);\n const pool = primaries.length ? primaries : list;\n return pool.sort((a, b) => new Date(b.startDate).getTime() - new Date(a.startDate).getTime())[0];\n}\n\nexport function axcBuildManagerResolutionContext(\n businessUnits: any[],\n positions: any[],\n assignments: any[],\n now: Date,\n preferPrimary: boolean,\n): AXCEmployeeManagerResolutionContext {\n return {\n now,\n preferPrimary,\n businessUnitById: new Map(businessUnits.map((b) => [String(b.id), b])),\n positionById: new Map(positions.map((p) => [String(p.id), p])),\n assignments,\n };\n}\n\nexport function axcResolveManagerEmployeeId(\n employeeId: string,\n ctx: AXCEmployeeManagerResolutionContext,\n): string | null {\n const { now, preferPrimary, businessUnitById, assignments } = ctx;\n const employeeAssignments = assignments.filter(\n (a) => String(a.employeeId) === String(employeeId) && axcIsActiveAssignment(a, now, false),\n );\n if (!employeeAssignments.length) return null;\n const primary = axcChooseRepresentativeAssignment(employeeAssignments, now, preferPrimary);\n if (!primary?.businessUnitId || !primary?.positionId) return null;\n const buId = String(primary.businessUnitId);\n\n const bu = businessUnitById.get(buId);\n const headPosId = bu?.headPositionId != null ? String(bu.headPositionId) : undefined;\n if (headPosId && headPosId !== String(primary.positionId)) {\n const headPool = assignments.filter(\n (a) =>\n String(a.businessUnitId) === buId &&\n String(a.positionId) === headPosId &&\n axcIsActiveAssignment(a, now, false) &&\n String(a.employeeId) !== String(employeeId),\n );\n const headAsg = axcChooseRepresentativeAssignment(headPool, now, false);\n if (headAsg?.employeeId) return String(headAsg.employeeId);\n }\n\n let parentBu = bu?.parentId ? businessUnitById.get(String(bu.parentId)) : null;\n while (parentBu) {\n const pHead = parentBu.headPositionId != null ? String(parentBu.headPositionId) : undefined;\n if (pHead) {\n const pPool = assignments.filter(\n (a) =>\n String(a.businessUnitId) === String(parentBu.id) &&\n String(a.positionId) === pHead &&\n axcIsActiveAssignment(a, now, false) &&\n String(a.employeeId) !== String(employeeId),\n );\n const pAsg = axcChooseRepresentativeAssignment(pPool, now, false);\n if (pAsg?.employeeId) return String(pAsg.employeeId);\n }\n parentBu = parentBu.parentId ? businessUnitById.get(String(parentBu.parentId)) : null;\n }\n\n return null;\n}\n\nexport function axcChooseActivePrimaryAssignmentRow(\n employeeId: string,\n assignments: any[],\n now: Date,\n): any | null {\n const list = assignments.filter((x) => String(x?.employeeId) === String(employeeId));\n if (!list.length) {\n return null;\n }\n const dateActive = (a: any) => axcIsActiveAssignment(a, now, false);\n const primaryMatches = list.filter((a) => a?.isPrimary === true && dateActive(a));\n const pool = primaryMatches.length ? primaryMatches : list.filter(dateActive);\n if (!pool.length) {\n return null;\n }\n return pool.sort((a, b) => new Date(b.startDate).getTime() - new Date(a.startDate).getTime())[0];\n}\n\nexport function axcResolveActivePrimaryPositionId(employeeId: string, assignments: any[], now: Date): string | null {\n const pick = axcChooseActivePrimaryAssignmentRow(employeeId, assignments, now);\n return pick?.positionId != null ? String(pick.positionId) : null;\n}\n","import {AXPMultiLanguageString} from '@acorex-platform/framework-shared/core';\nimport { AXPDataGenerator } from '@acorex-platform/framework-client/core';\nimport { OrgChartNode, OrgChartNodeType } from '../org-chart.types';\nimport {\n getOrgChartMergedBusinessUnitId,\n RootConfig as OrgRootConfig,\n} from '@acorex-platform/module-organization-management-client/contracts';\n\nimport {\n axcDistinctAssignmentsByEmployee,\n axcOrderAssignmentsForRepresentative,\n} from '../org-chart-assignment-representatives';\nimport {\n axcBuildManagerResolutionContext,\n axcResolveManagerEmployeeId,\n} from '../employee-manager-resolution';\nimport { AXM_ORG_CHART_NODE_LABELS, axmNormalizeChartTitle } from '../org-chart-labels';\nimport { OrgChartBuilder, OrgChartBuildContext } from './types';\n\nexport class StructureOrgChartBuilder implements OrgChartBuilder {\n build(context: OrgChartBuildContext): OrgChartNode {\n const { root, indices, helpers, orgRootConfig } = context;\n const mergedCorporateBusinessUnitId = getOrgChartMergedBusinessUnitId();\n\n // Build BU hierarchy by parent reference if exists; otherwise group by type\n const childrenByParent = new Map<string | undefined, any[]>();\n for (const bu of context.data.businessUnits as any[]) {\n const parentId: string | undefined = (bu as any).parentId ?? undefined;\n const list = childrenByParent.get(parentId) || [];\n list.push(bu);\n childrenByParent.set(parentId, list);\n }\n\n const createBuNode = (bu: any): OrgChartNode => {\n const type = indices.buTypeById.get(bu.typeId);\n const typeCode: string = type?.name ?? '';\n const allowsDirectPositions = type?.allowsDirectPositions !== false;\n const typeColor = typeof type?.color === 'string' ? type.color.trim() : '';\n const typeIcon =\n typeof type?.icon === 'string' && type.icon.trim().length > 0\n ? type.icon.trim()\n : typeCode === 'division'\n ? 'fa-sitemap'\n : typeCode === 'department'\n ? 'fa-building-user'\n : 'fa-network-wired';\n const buAssignments = indices.assignmentsByBU.get(String(bu.id)) || [];\n const headPositionId = bu.headPositionId != null ? String(bu.headPositionId) : null;\n const children = allowsDirectPositions\n ? helpers.buildPositionNodes(buAssignments, bu, headPositionId)\n : [];\n const subtitle = helpers.buildBusinessUnitHeadSubtitle(bu, buAssignments);\n\n const headPos = headPositionId ? indices.positionById.get(headPositionId) : null;\n const headTitleMl = headPos ? axmNormalizeChartTitle(headPos.title, AXM_ORG_CHART_NODE_LABELS.position) : undefined;\n const headAssignments = headPositionId\n ? buAssignments.filter((a: any) => String(a.positionId) === headPositionId)\n : [];\n const headRep = helpers.chooseRepresentativeAssignment(headAssignments);\n const headEmp = headRep ? indices.employeeById.get(headRep.employeeId) : null;\n const headName = headEmp ? helpers.getEmployeeDisplayName(headEmp) : undefined;\n const headEmpId = headEmp ? String(headEmp.id) : undefined;\n const vacantHead = !!(headPositionId && !headName);\n\n const node: OrgChartNode = {\n id: AXPDataGenerator.uuid(),\n title: bu.title,\n subtitle,\n description: bu.description,\n type: OrgChartNodeType.BusinessUnit,\n icon: typeIcon,\n entity: { id: bu.id, type: orgRootConfig.entities.businessUnit.source },\n children,\n metadata: {\n isRegional: false,\n businessUnitKind: typeCode,\n typeAllowsDirectPositions: allowsDirectPositions,\n chartTemplate: 'merged-unit',\n ...(typeColor.length > 0 ? { unitTypeColor: typeColor } : {}),\n unitHead:\n headTitleMl != null\n ? {\n positionTitle: headTitleMl,\n positionId: headPositionId ?? undefined,\n employeeName: headName,\n employeeId: headEmpId,\n vacant: vacantHead,\n }\n : undefined,\n },\n };\n\n const childrenList = childrenByParent.get(String(bu.id)) || [];\n for (const childBu of childrenList) {\n node.children = node.children || [];\n node.children.push(createBuNode(childBu));\n }\n if (node.metadata) {\n node.metadata['stats'] = { directChildren: node.children?.length ?? 0 };\n }\n return node;\n };\n\n // Roots: undefined parent or explicit null. Built-in corporate HQ is merged into the company root in the UI — skip a chart node and attach its child BUs here.\n const pushRootBusinessUnitNodes = (tops: any[]) => {\n for (const top of tops) {\n if (mergedCorporateBusinessUnitId != null && String(top.id) === mergedCorporateBusinessUnitId) {\n const nested = childrenByParent.get(String(top.id)) || [];\n for (const childBu of nested) {\n root.children!.push(createBuNode(childBu));\n }\n } else {\n root.children!.push(createBuNode(top));\n }\n }\n };\n\n const rootCandidates = childrenByParent.get(undefined) || childrenByParent.get(null as unknown as undefined) || [];\n if (rootCandidates.length) {\n pushRootBusinessUnitNodes(rootCandidates);\n } else {\n // Fallback: group by type order Division -> Department -> Branch\n const divisions = (context.data.businessUnits as any[]).filter(bu => (indices.buTypeById.get(bu.typeId)?.name ?? '') === 'division');\n const departments = (context.data.businessUnits as any[]).filter(bu => (indices.buTypeById.get(bu.typeId)?.name ?? '') === 'department');\n const branches = (context.data.businessUnits as any[]).filter(bu => (indices.buTypeById.get(bu.typeId)?.name ?? '') === 'branch');\n const addAll = (list: any[]) => list.forEach(bu => root.children!.push(createBuNode(bu)));\n const corporate =\n mergedCorporateBusinessUnitId != null\n ? divisions.find((bu) => String(bu.id) === mergedCorporateBusinessUnitId)\n : undefined;\n if (corporate) {\n pushRootBusinessUnitNodes([corporate]);\n } else {\n addAll(divisions);\n }\n addAll(departments);\n addAll(branches);\n }\n\n return root;\n }\n}\n\n//#region ---- Position hierarchy builder (BU + head + assignments) ----\n\n/**\n * Collects position ids that participate in the hierarchy (catalog seats per BU plus actively assigned seats).\n */\nfunction collectPositionIdsForHierarchy(params: {\n businessUnits: any[];\n assignments: any[];\n isActiveAssignment: (a: any, now: Date) => boolean;\n now: Date;\n positionById: Map<string, any>;\n}): Set<string> {\n const ids = new Set<string>();\n for (const bu of params.businessUnits) {\n for (const raw of bu.positionIds ?? []) {\n const id = String(raw);\n if (params.positionById.has(id)) {\n ids.add(id);\n }\n }\n }\n for (const a of params.assignments) {\n if (!params.isActiveAssignment(a, params.now)) {\n continue;\n }\n const id = String(a.positionId ?? '');\n if (id && params.positionById.has(id)) {\n ids.add(id);\n }\n }\n return ids;\n}\n\n/**\n * Resolves which business unit anchors a position for hierarchy edges: primary active assignment BU when present,\n * otherwise a deterministic catalog BU (stable id sort).\n */\nfunction resolveCanonicalBusinessUnitIdForPosition(params: {\n positionId: string;\n businessUnits: any[];\n assignments: any[];\n isActiveAssignment: (a: any, now: Date) => boolean;\n now: Date;\n}): string | undefined {\n const pid = String(params.positionId);\n const catalogMatches = params.businessUnits.filter((bu) =>\n (bu.positionIds ?? []).map(String).includes(pid),\n );\n\n const activeAssignments = params.assignments.filter(\n (a) => String(a.positionId) === pid && params.isActiveAssignment(a, params.now),\n );\n\n if (activeAssignments.length > 0) {\n const primary = activeAssignments.find((a) => a.isPrimary === true);\n const pool = primary ? [primary] : activeAssignments;\n const chosen = [...pool].sort(\n (a, b) => new Date(b.startDate ?? 0).getTime() - new Date(a.startDate ?? 0).getTime(),\n )[0];\n return chosen ? String(chosen.businessUnitId) : undefined;\n }\n\n if (!catalogMatches.length) {\n return undefined;\n }\n\n const sorted = [...catalogMatches].sort((a, b) => String(a.id).localeCompare(String(b.id)));\n return sorted[0] ? String(sorted[0].id) : undefined;\n}\n\n/**\n * BU head seats report to the parent BU head; other seats in the BU report to the BU head.\n */\nfunction deriveReportsToParentPositionId(params: {\n positionId: string;\n canonicalBusinessUnitId: string;\n businessUnitById: Map<string, any>;\n}): string | null {\n const pid = String(params.positionId);\n const bu = params.businessUnitById.get(params.canonicalBusinessUnitId);\n if (!bu) {\n return null;\n }\n\n const headRaw = bu.headPositionId;\n const headId = headRaw != null && headRaw !== '' ? String(headRaw) : null;\n\n const parentBu =\n bu.parentId != null && bu.parentId !== ''\n ? params.businessUnitById.get(String(bu.parentId))\n : undefined;\n\n const parentHeadRaw = parentBu?.headPositionId;\n const parentHeadId =\n parentHeadRaw != null && parentHeadRaw !== '' ? String(parentHeadRaw) : null;\n\n if (headId && pid === headId) {\n return parentHeadId;\n }\n if (headId) {\n return headId;\n }\n return parentHeadId;\n}\n\n/**\n * **Position hierarchy:** derives formal reporting edges from **business units**, **BU head positions**, and\n * **assignments**, then renders a position-centric tree under the company root (merged-manager cards).\n */\nexport class PositionHierarchyOrgChartBuilder implements OrgChartBuilder {\n build(context: OrgChartBuildContext): OrgChartNode {\n const { root, indices, helpers, data, hcmRootConfig, now } = context;\n const assignments = data.assignments as any[];\n const positions = data.positions as any[];\n const businessUnits = data.businessUnits as any[];\n const positionById = indices.positionById;\n const employeeById = indices.employeeById;\n const businessUnitById = indices.businessUnitById;\n\n const mgrCtx = axcBuildManagerResolutionContext(\n businessUnits,\n positions,\n assignments,\n now,\n true,\n );\n const managerByEmployeeId = new Map<string, { id: string; fullName: string }>();\n for (const employee of data.employees as any[]) {\n const mid = axcResolveManagerEmployeeId(String(employee.id), mgrCtx);\n if (!mid) {\n continue;\n }\n const manager = employeeById.get(mid);\n if (manager) {\n managerByEmployeeId.set(String(employee.id), {\n id: String(manager.id),\n fullName: helpers.getEmployeeDisplayName(manager),\n });\n }\n }\n\n const positionIdsInChart = collectPositionIdsForHierarchy({\n businessUnits,\n assignments,\n isActiveAssignment: helpers.isActiveAssignment,\n now,\n positionById,\n });\n\n const canonicalBuByPositionId = new Map<string, string>();\n for (const pid of positionIdsInChart) {\n const buId = resolveCanonicalBusinessUnitIdForPosition({\n positionId: pid,\n businessUnits,\n assignments,\n isActiveAssignment: helpers.isActiveAssignment,\n now,\n });\n if (buId) {\n canonicalBuByPositionId.set(pid, buId);\n }\n }\n\n const parentPositionByChildId = new Map<string, string | null>();\n for (const pid of positionIdsInChart) {\n const buId = canonicalBuByPositionId.get(pid);\n if (!buId) {\n parentPositionByChildId.set(pid, null);\n continue;\n }\n parentPositionByChildId.set(\n pid,\n deriveReportsToParentPositionId({\n positionId: pid,\n canonicalBusinessUnitId: buId,\n businessUnitById,\n }),\n );\n }\n\n const childrenOfParent = new Map<string | null, string[]>();\n for (const pid of positionIdsInChart) {\n let parentKey = parentPositionByChildId.get(pid) ?? null;\n if (parentKey != null && !positionIdsInChart.has(parentKey)) {\n parentKey = null;\n }\n const bucket = childrenOfParent.get(parentKey) ?? [];\n bucket.push(pid);\n childrenOfParent.set(parentKey, bucket);\n }\n\n const titleSortKey = (positionId: string): string => {\n const pos = positionById.get(positionId);\n const ml = axmNormalizeChartTitle(pos?.title, AXM_ORG_CHART_NODE_LABELS.position);\n const resolved =\n typeof ml === 'string'\n ? ml\n : (ml as { 'en-US'?: string })?.['en-US'] ?? JSON.stringify(ml);\n return resolved.toLowerCase();\n };\n\n const sortPositionIds = (ids: string[]): string[] =>\n [...ids].sort((a, b) => {\n const cmp = titleSortKey(a).localeCompare(titleSortKey(b), undefined, { sensitivity: 'base' });\n return cmp !== 0 ? cmp : a.localeCompare(b);\n });\n\n const toEmployeeChildNode = (\n asg: any,\n posTitleMl: ReturnType<typeof axmNormalizeChartTitle>,\n ): OrgChartNode | null => {\n const emp = employeeById.get(asg.employeeId);\n if (!emp) {\n return null;\n }\n const name = helpers.getEmployeeDisplayName(emp);\n const role = emp.role?.title ?? null;\n const mgr = managerByEmployeeId.get(String(emp.id));\n const node: OrgChartNode = {\n id: AXPDataGenerator.uuid(),\n title: name || AXM_ORG_CHART_NODE_LABELS.employee,\n subtitle: posTitleMl,\n description: role ?? undefined,\n type: OrgChartNodeType.Employee,\n icon: 'fa-address-card',\n entity: {\n id: String(emp.id),\n type: hcmRootConfig.entities.employee.source,\n },\n metadata: {\n chartTemplate: 'employee-card',\n parentPositionTitle: posTitleMl,\n ...(mgr ? { manager: mgr } : {}),\n },\n isExpanded: true,\n };\n return node;\n };\n\n const buildSubtree = (positionId: string, visiting: Set<string>): OrgChartNode | null => {\n if (visiting.has(positionId)) {\n return null;\n }\n visiting.add(positionId);\n try {\n const pos = positionById.get(positionId);\n if (!pos) {\n return null;\n }\n\n const list = assignments.filter(\n (a: any) =>\n String(a.positionId) === positionId && helpers.isActiveAssignment(a, now),\n );\n const distinctAssignees = axcDistinctAssignmentsByEmployee(\n axcOrderAssignmentsForRepresentative(list),\n );\n const hasAnyIncumbent = distinctAssignees.length > 0;\n const posTitleMl = axmNormalizeChartTitle(pos.title, AXM_ORG_CHART_NODE_LABELS.position);\n\n const childPids = sortPositionIds(childrenOfParent.get(positionId) ?? []);\n const positionChildNodes: OrgChartNode[] = [];\n for (const cid of childPids) {\n const n = buildSubtree(cid, visiting);\n if (n) {\n positionChildNodes.push(n);\n }\n }\n\n const directReportsCount = positionChildNodes.length;\n\n const rep = distinctAssignees[0] ?? null;\n const employee = rep ? employeeById.get(rep.employeeId) : null;\n const employeeName = employee ? helpers.getEmployeeDisplayName(employee) : null;\n const employeeRole = employee?.role?.title ?? null;\n const manager = employee ? managerByEmployeeId.get(String(employee.id)) : undefined;\n\n const employeeExtras: OrgChartNode[] = [];\n for (const asg of distinctAssignees.slice(1)) {\n const child = toEmployeeChildNode(asg, posTitleMl);\n if (child) {\n employeeExtras.push(child);\n }\n }\n\n const canonicalBuId = canonicalBuByPositionId.get(positionId);\n const buForNode = canonicalBuId ? businessUnitById.get(canonicalBuId) : undefined;\n\n const positionMetadata: Record<string, unknown> = {\n chartTemplate: 'merged-manager',\n occupant: employeeName\n ? {\n displayName: employeeName,\n employeeId: String(employee!.id),\n roleTitle: employeeRole ?? undefined,\n }\n : undefined,\n vacant: !hasAnyIncumbent,\n stats: { directReports: directReportsCount },\n };\n if (manager) {\n positionMetadata['manager'] = manager;\n }\n if (buForNode?.title != null) {\n positionMetadata['organizationalUnitTitle'] = buForNode.title as AXPMultiLanguageString;\n }\n if (buForNode?.id != null) {\n const buId = String(buForNode.id);\n positionMetadata['organizationalUnitId'] = buId;\n positionMetadata['businessUnitId'] = buId;\n }\n\n const subtitleWhenCompact = employeeName ?? AXM_ORG_CHART_NODE_LABELS.vacant;\n const combinedChildren = [...positionChildNodes, ...employeeExtras];\n\n return {\n id: AXPDataGenerator.uuid(),\n title: posTitleMl,\n subtitle: employeeName ? undefined : subtitleWhenCompact,\n description: employeeRole ?? undefined,\n type: OrgChartNodeType.Position,\n icon: 'fa-user-tie',\n entity: { id: positionId, type: OrgRootConfig.entities.position.source },\n metadata: positionMetadata,\n children: combinedChildren.length ? combinedChildren : undefined,\n isExpanded: true,\n };\n } finally {\n visiting.delete(positionId);\n }\n };\n\n root.children = [];\n const roots = sortPositionIds(childrenOfParent.get(null) ?? []);\n for (const rid of roots) {\n const n = buildSubtree(rid, new Set());\n if (n) {\n root.children.push(n);\n }\n }\n\n return root;\n }\n}\n\n//#endregion\n\n","import { AXPDataGenerator } from '@acorex-platform/framework-client/core';\nimport { OrgChartNode, OrgChartNodeType } from '../org-chart.types';\n\nimport {\n axcBuildEmployeeEligibleActiveAssignmentCount,\n axcBuildManagerResolutionContext,\n axcIsAssignmentIncludedInOrgChartPrimarySlice,\n axcResolveActivePrimaryPositionId,\n axcResolveManagerEmployeeId,\n} from '../employee-manager-resolution';\nimport { AXM_ORG_CHART_NODE_LABELS, axmNormalizeChartTitle } from '../org-chart-labels';\nimport { OrgChartBuilder, OrgChartBuildContext } from './types';\n\n/**\n * **Reporting hierarchy:** company root → employee nodes linked by resolved line managers\n * ({@link axcResolveManagerEmployeeId}), not by business-unit spine.\n *\n * Only employees with at least one assignment in the same primary slice as the org chart are included.\n */\nexport class ReportingOrgChartBuilder implements OrgChartBuilder {\n //#region ---- Build ----\n\n build(context: OrgChartBuildContext): OrgChartNode {\n const { root, indices, helpers, data, hcmRootConfig } = context;\n const now = context.now;\n const assignments = data.assignments as any[];\n const businessUnits = data.businessUnits as any[];\n const positions = data.positions as any[];\n\n const eligibleAssignmentCountByEmployee = axcBuildEmployeeEligibleActiveAssignmentCount(assignments, now);\n const isInSlice = (a: any) =>\n axcIsAssignmentIncludedInOrgChartPrimarySlice(a, now, eligibleAssignmentCountByEmployee);\n\n const mgrCtx = axcBuildManagerResolutionContext(businessUnits, positions, assignments, now, true);\n\n const employeeIdsInChart = new Set<string>();\n for (const a of assignments) {\n if (!isInSlice(a)) {\n continue;\n }\n const eid = String(a.employeeId ?? '');\n if (eid) {\n employeeIdsInChart.add(eid);\n }\n }\n\n const effectiveManagerId = new Map<string, string | null>();\n for (const empId of employeeIdsInChart) {\n const resolved = axcResolveManagerEmployeeId(empId, mgrCtx);\n const mgr =\n resolved != null && employeeIdsInChart.has(String(resolved)) ? String(resolved) : null;\n effectiveManagerId.set(empId, mgr);\n }\n\n const directReportsByManager = new Map<string | null, string[]>();\n for (const empId of employeeIdsInChart) {\n const mgr = effectiveManagerId.get(empId) ?? null;\n const list = directReportsByManager.get(mgr) ?? [];\n list.push(empId);\n directReportsByManager.set(mgr, list);\n }\n\n const sortEmpIds = (ids: string[]): string[] =>\n [...ids].sort((a, b) => {\n const na = helpers.getEmployeeDisplayName(indices.employeeById.get(a)) || a;\n const nb = helpers.getEmployeeDisplayName(indices.employeeById.get(b)) || b;\n return na.localeCompare(nb, undefined, { sensitivity: 'base' });\n });\n\n const buildNode = (empId: string, path: Set<string>): OrgChartNode | null => {\n if (path.has(empId)) {\n return null;\n }\n path.add(empId);\n try {\n const emp = indices.employeeById.get(empId);\n const name = emp ? helpers.getEmployeeDisplayName(emp) : '';\n const role = emp?.role?.title ?? null;\n const posId = axcResolveActivePrimaryPositionId(empId, assignments, now);\n const pos = posId ? indices.positionById.get(posId) : null;\n const posTitleMl = axmNormalizeChartTitle(pos?.title, AXM_ORG_CHART_NODE_LABELS.position);\n\n const rawChildren = sortEmpIds(directReportsByManager.get(empId) ?? []);\n const childNodes: OrgChartNode[] = [];\n for (const cid of rawChildren) {\n const n = buildNode(cid, path);\n if (n) {\n childNodes.push(n);\n }\n }\n\n return {\n id: AXPDataGenerator.uuid(),\n title: name || AXM_ORG_CHART_NODE_LABELS.employee,\n subtitle: posTitleMl,\n description: role ?? undefined,\n type: OrgChartNodeType.Employee,\n icon: 'fa-address-card',\n entity: { id: empId, type: hcmRootConfig.entities.employee.source },\n metadata: {\n chartTemplate: 'employee-card',\n parentPositionTitle: posTitleMl,\n },\n children: childNodes.length ? childNodes : undefined,\n isExpanded: true,\n };\n } finally {\n path.delete(empId);\n }\n };\n\n root.children = [];\n const roots = sortEmpIds(directReportsByManager.get(null) ?? []);\n for (const empId of roots) {\n const n = buildNode(empId, new Set());\n if (n) {\n root.children.push(n);\n }\n }\n\n return root;\n }\n\n //#endregion\n}\n","import { OrgChartBuilder } from './types';\nimport { LocationOrgChartBuilder } from './location.builder';\nimport { PositionHierarchyOrgChartBuilder, StructureOrgChartBuilder } from './structure.builder';\nimport { ReportingOrgChartBuilder } from './reporting.builder';\nimport type { OrgChartMode } from '../org-chart.types';\n\nexport const createBuilder = (mode?: OrgChartMode): OrgChartBuilder => {\n switch (mode) {\n case 'structure':\n return new StructureOrgChartBuilder();\n case 'reporting':\n return new ReportingOrgChartBuilder();\n case 'positionHierarchy':\n return new PositionHierarchyOrgChartBuilder();\n case 'location':\n default:\n return new LocationOrgChartBuilder();\n }\n};\n","//#region ---- Types ----\n\nimport { resolveMultiLanguageString } from '@acorex-platform/framework-shared/core';\n\nimport { axcBuildManagerResolutionContext, axcResolveManagerEmployeeId } from './employee-manager-resolution';\nimport { OrgChartNode, OrgChartNodeType } from './org-chart.types';\n\n/** Subset passed from {@link loadOrgChartGenerationWorkspace} — kept local to avoid circular imports with compose. */\nexport interface OrgChartStatsWorkspaceInput {\n now: Date;\n businessUnits: any[];\n assignments: any[];\n positions: any[];\n teams: any[];\n businessUnitById: Map<string, any>;\n buTypeById: Map<string, any>;\n positionById: Map<string, any>;\n employeeById: Map<string, any>;\n isAssignmentInOrgChartSlice: (a: any, at: Date) => boolean;\n geographicRegionSource: string;\n}\n\nexport interface OrgChartAggregateContext {\n now: Date;\n businessUnits: any[];\n buTypeById: Map<string, any>;\n businessUnitById: Map<string, any>;\n positionById: Map<string, any>;\n employeeById: Map<string, any>;\n assignmentsInSlice: any[];\n teamMembershipCountByEmployeeId: Map<string, number>;\n directReportEmployeeIdsByManagerId: Map<string, Set<string>>;\n descendantBuIdsByBuId: Map<string, ReadonlySet<string>>;\n distinctPeopleByBuSubtree: Map<string, number>;\n geographicRegionSource: string;\n}\n\n//#endregion\n\n//#region ---- Build maps ----\n\n/** Maps **parent BU id** → direct child BU ids (same as `businessUnit.parentId` edges). */\nfunction buildChildrenByParentId(businessUnits: any[]): Map<string, string[]> {\n const byParentKey = new Map<string, string[]>();\n for (const bu of businessUnits) {\n const parentKey = bu.parentId != null && bu.parentId !== '' ? String(bu.parentId) : '__root__';\n const list = byParentKey.get(parentKey) ?? [];\n list.push(String(bu.id));\n byParentKey.set(parentKey, list);\n }\n return byParentKey;\n}\n\nfunction collectDescendantBuIds(\n buId: string,\n childrenByParent: Map<string, string[]>,\n memo: Map<string, ReadonlySet<string>>,\n): ReadonlySet<string> {\n const cached = memo.get(buId);\n if (cached) {\n return cached;\n }\n const set = new Set<string>([buId]);\n for (const childId of childrenByParent.get(buId) ?? []) {\n for (const x of collectDescendantBuIds(childId, childrenByParent, memo)) {\n set.add(x);\n }\n }\n const frozen = set as ReadonlySet<string>;\n memo.set(buId, frozen);\n return frozen;\n}\n\nfunction countDistinctPeopleInBuClosure(\n closure: ReadonlySet<string>,\n assignmentsInSlice: any[],\n): number {\n const employeeIds = new Set<string>();\n for (const a of assignmentsInSlice) {\n const bu = String(a.businessUnitId ?? '');\n if (bu && closure.has(bu)) {\n const e = String(a.employeeId ?? '');\n if (e) {\n employeeIds.add(e);\n }\n }\n }\n return employeeIds.size;\n}\n\nexport function buildTeamMembershipCountByEmployeeId(teams: any[]): Map<string, number> {\n const map = new Map<string, number>();\n for (const t of teams) {\n const seen = new Set<string>();\n const leader = t.leaderId != null ? String(t.leaderId) : '';\n if (leader) {\n seen.add(leader);\n }\n for (const raw of t.memberIds ?? []) {\n const id = String(raw);\n if (id) {\n seen.add(id);\n }\n }\n for (const empId of seen) {\n map.set(empId, (map.get(empId) ?? 0) + 1);\n }\n }\n return map;\n}\n\nfunction buildDirectReportEmployeeIdsByManagerId(\n employeeIdsInSlice: Set<string>,\n businessUnits: any[],\n positions: any[],\n assignments: any[],\n now: Date,\n): Map<string, Set<string>> {\n const map = new Map<string, Set<string>>();\n const ctx = axcBuildManagerResolutionContext(businessUnits, positions, assignments, now, true);\n for (const empId of employeeIdsInSlice) {\n const resolved = axcResolveManagerEmployeeId(empId, ctx);\n if (resolved == null || !employeeIdsInSlice.has(String(resolved))) {\n continue;\n }\n const mgr = String(resolved);\n const bucket = map.get(mgr) ?? new Set<string>();\n bucket.add(empId);\n map.set(mgr, bucket);\n }\n return map;\n}\n\nfunction firstEmailFromPerson(person: any): string | undefined {\n const emails = person?.emails;\n if (!Array.isArray(emails) || !emails.length) {\n return undefined;\n }\n const v = emails[0]?.value ?? emails[0]?.email;\n return typeof v === 'string' && v.trim() ? v.trim() : undefined;\n}\n\nfunction firstPhoneFromPerson(person: any): string | undefined {\n const phones = person?.phones;\n if (!Array.isArray(phones) || !phones.length) {\n return undefined;\n }\n const v = phones[0]?.value ?? phones[0]?.phone;\n return typeof v === 'string' && v.trim() ? v.trim() : undefined;\n}\n\nfunction pickLocaleString(value: unknown, localeId: string): string | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value === 'string') {\n const t = value.trim();\n return t.length ? t : undefined;\n }\n if (typeof value === 'object') {\n const resolved = resolveMultiLanguageString(value as any, localeId);\n const t = String(resolved ?? '').trim();\n return t.length ? t : undefined;\n }\n return undefined;\n}\n\n//#endregion\n\n//#region ---- Public API ----\n\nexport function createOrgChartAggregateContext(workspace: OrgChartStatsWorkspaceInput): OrgChartAggregateContext {\n const businessUnits = workspace.businessUnits as any[];\n const assignmentsInSlice: any[] = [];\n for (const a of workspace.assignments as any[]) {\n if (workspace.isAssignmentInOrgChartSlice(a, workspace.now)) {\n assignmentsInSlice.push(a);\n }\n }\n\n const employeeIdsInSlice = new Set<string>();\n for (const a of assignmentsInSlice) {\n const e = String(a.employeeId ?? '');\n if (e) {\n employeeIdsInSlice.add(e);\n }\n }\n\n const directReportEmployeeIdsByManagerId = buildDirectReportEmployeeIdsByManagerId(\n employeeIdsInSlice,\n businessUnits,\n workspace.positions as any[],\n workspace.assignments as any[],\n workspace.now,\n );\n\n const childrenByParent = buildChildrenByParentId(businessUnits);\n const descendantMemo = new Map<string, ReadonlySet<string>>();\n const descendantBuIdsByBuId = new Map<string, ReadonlySet<string>>();\n for (const bu of businessUnits) {\n const id = String(bu.id);\n descendantBuIdsByBuId.set(id, collectDescendantBuIds(id, childrenByParent, descendantMemo));\n }\n\n const distinctPeopleByBuSubtree = new Map<string, number>();\n for (const bu of businessUnits) {\n const id = String(bu.id);\n const closure = descendantBuIdsByBuId.get(id);\n if (closure) {\n distinctPeopleByBuSubtree.set(id, countDistinctPeopleInBuClosure(closure, assignmentsInSlice));\n }\n }\n\n return {\n now: workspace.now,\n businessUnits,\n buTypeById: workspace.buTypeById,\n businessUnitById: workspace.businessUnitById,\n positionById: workspace.positionById,\n employeeById: workspace.employeeById,\n assignmentsInSlice,\n teamMembershipCountByEmployeeId: buildTeamMembershipCountByEmployeeId(workspace.teams as any[]),\n directReportEmployeeIdsByManagerId,\n descendantBuIdsByBuId,\n distinctPeopleByBuSubtree,\n geographicRegionSource: workspace.geographicRegionSource,\n };\n}\n\n/**\n * Walks the composed chart tree and fills `metadata` / `stats` used by org chart cards (snapshot at generate time).\n */\nexport function augmentOrgChartTreeWithAggregates(\n root: OrgChartNode,\n ctx: OrgChartAggregateContext,\n localeId: string,\n): void {\n const companyDistinctPeople = (() => {\n const set = new Set<string>();\n for (const a of ctx.assignmentsInSlice) {\n const e = String(a.employeeId ?? '');\n if (e) {\n set.add(e);\n }\n }\n return set.size;\n })();\n\n const childrenByParent = buildChildrenByParentId(ctx.businessUnits);\n\n const visit = (node: OrgChartNode): number => {\n let employeeNodesBelow = 0;\n for (const ch of node.children ?? []) {\n employeeNodesBelow += visit(ch);\n }\n\n const meta = node.metadata ?? {};\n node.metadata = meta;\n\n const isEmployeeNode =\n node.type === OrgChartNodeType.Employee || meta['chartTemplate'] === 'employee-card';\n\n if (isEmployeeNode) {\n const empIdRaw = node.entity?.id ?? (meta['occupant'] as any)?.['employeeId'];\n const empId = empIdRaw != null ? String(empIdRaw) : '';\n employeeNodesBelow += 1;\n\n const teamCount = empId ? ctx.teamMembershipCountByEmployeeId.get(empId) : undefined;\n const mgrSet = empId ? ctx.directReportEmployeeIdsByManagerId.get(empId) : undefined;\n\n const emp = empId ? ctx.employeeById.get(empId) : undefined;\n if (emp) {\n if (typeof emp.employeeCode === 'string' && emp.employeeCode.trim()) {\n meta['employeeCode'] = emp.employeeCode.trim();\n }\n if (emp.hireDate != null) {\n const d =\n emp.hireDate instanceof Date\n ? emp.hireDate\n : typeof emp.hireDate === 'string'\n ? new Date(emp.hireDate)\n : null;\n if (d && !Number.isNaN(d.getTime())) {\n meta['hireDate'] = d.toISOString().slice(0, 10);\n }\n }\n const employmentTypeResolved = emp.employmentType ?? null;\n const etStr =\n pickLocaleString(employmentTypeResolved?.title ?? employmentTypeResolved, localeId);\n if (etStr) {\n meta['employmentTypeTitle'] = etStr;\n }\n const person = emp.person;\n if (person && typeof person === 'object') {\n const mail = firstEmailFromPerson(person);\n const tel = firstPhoneFromPerson(person);\n if (mail) {\n meta['workEmail'] = mail;\n }\n if (tel) {\n meta['phone'] = tel;\n }\n }\n }\n\n const statsPrev =\n typeof meta['stats'] === 'object' && meta['stats'] != null ? (meta['stats'] as Record<string, unknown>) : {};\n meta['stats'] = {\n ...statsPrev,\n subtreePeople: employeeNodesBelow,\n ...(typeof teamCount === 'number' ? { teamMembershipCount: teamCount } : {}),\n ...(mgrSet?.size ? { directReports: mgrSet.size } : {}),\n };\n\n return employeeNodesBelow;\n }\n\n if (node.type === OrgChartNodeType.Company) {\n const allBuIds = new Set<string>((ctx.businessUnits as any[]).map((b) => String(b.id)));\n const orgSeatCount =\n allBuIds.size > 0\n ? countDistinctSeatsInBuClosure(\n allBuIds,\n ctx.businessUnitById,\n ctx.assignmentsInSlice,\n ctx.positionById,\n )\n : 0;\n const statsPrev =\n typeof meta['stats'] === 'object' && meta['stats'] != null\n ? (meta['stats'] as Record<string, unknown>)\n : {};\n meta['stats'] = {\n ...statsPrev,\n subtreePeople: companyDistinctPeople,\n subtreePositionSeatCount: orgSeatCount,\n directChildren: node.children?.length ?? 0,\n };\n return employeeNodesBelow;\n }\n\n if (node.type === OrgChartNodeType.BusinessUnit) {\n const isRegional =\n meta['isRegional'] === true || node.entity?.type === ctx.geographicRegionSource;\n\n if (isRegional) {\n const statsPrev =\n typeof meta['stats'] === 'object' && meta['stats'] != null\n ? (meta['stats'] as Record<string, unknown>)\n : {};\n meta['stats'] = {\n ...statsPrev,\n subtreePeople: employeeNodesBelow,\n directChildren: node.children?.length ?? 0,\n };\n return employeeNodesBelow;\n }\n\n const buId = node.entity?.id != null ? String(node.entity.id) : '';\n if (buId) {\n const bu = ctx.businessUnitById.get(buId);\n if (bu?.code != null && String(bu.code).trim()) {\n meta['code'] = String(bu.code).trim();\n }\n\n const kind = ctx.buTypeById.get(bu?.typeId)?.name ?? meta['businessUnitKind'];\n if (typeof kind === 'string' && kind) {\n meta['unitType'] = kind;\n meta['businessUnitKind'] = kind;\n }\n\n const typeTitle = ctx.buTypeById.get(bu?.typeId)?.title;\n const typeStr = pickLocaleString(typeTitle, localeId);\n if (typeStr) {\n meta['unitTypeTitle'] = typeStr;\n }\n\n const closureCount = ctx.distinctPeopleByBuSubtree.get(buId) ?? 0;\n\n const childKindCounts: Record<string, number> = {};\n const directKids = childrenByParent.get(buId) ?? [];\n for (const childBuId of directKids) {\n const childBu = ctx.businessUnitById.get(childBuId);\n const code = String(ctx.buTypeById.get(childBu?.typeId)?.name ?? 'unknown');\n childKindCounts[code] = (childKindCounts[code] ?? 0) + 1;\n }\n\n const filledVacant =\n bu != null ? countFilledAndVacantSeatsForBu(bu, ctx.assignmentsInSlice, ctx.positionById) : { filled: 0, vacant: 0 };\n\n const closure = ctx.descendantBuIdsByBuId.get(buId) ?? new Set<string>([buId]);\n const subtreeSeatCount = countDistinctSeatsInBuClosure(\n closure,\n ctx.businessUnitById,\n ctx.assignmentsInSlice,\n ctx.positionById,\n );\n\n const statsPrev =\n typeof meta['stats'] === 'object' && meta['stats'] != null\n ? (meta['stats'] as Record<string, unknown>)\n : {};\n meta['stats'] = {\n ...statsPrev,\n subtreePeople: closureCount,\n subtreePositionSeatCount: subtreeSeatCount,\n directChildBusinessUnits: directKids.length,\n childCountsByBusinessUnitKind: childKindCounts,\n filledSeats: filledVacant.filled,\n vacantSeats: filledVacant.vacant,\n };\n }\n\n return employeeNodesBelow;\n }\n\n if (node.type === OrgChartNodeType.Position) {\n const occId =\n meta['occupant'] != null && typeof meta['occupant'] === 'object'\n ? String((meta['occupant'] as { employeeId?: string }).employeeId ?? '')\n : '';\n const dr = occId ? ctx.directReportEmployeeIdsByManagerId.get(occId)?.size ?? 0 : 0;\n const posId = node.entity?.id != null ? String(node.entity.id) : '';\n const pos = posId ? ctx.positionById.get(posId) : undefined;\n if (typeof pos?.code === 'string' && pos.code.trim()) {\n meta['code'] = pos.code.trim();\n meta['positionCode'] = pos.code.trim();\n }\n\n const occupantAdds = meta['vacant'] === true ? 0 : occId ? 1 : meta['occupant'] != null ? 1 : 0;\n const subtreePeopleForCard = employeeNodesBelow + occupantAdds;\n const statsPrev =\n typeof meta['stats'] === 'object' && meta['stats'] != null ? (meta['stats'] as Record<string, unknown>) : {};\n meta['stats'] = {\n ...statsPrev,\n directReports: dr,\n subtreePeople: subtreePeopleForCard,\n };\n\n return employeeNodesBelow + occupantAdds;\n }\n\n return employeeNodesBelow;\n };\n\n visit(root);\n}\n\n//#endregion\n\n//#region ---- Seat counts per BU catalog ----\n\nfunction countFilledAndVacantSeatsForBu(\n bu: any,\n assignmentsInSlice: any[],\n positionById: Map<string, any>,\n): { filled: number; vacant: number } {\n const buId = String(bu.id);\n let filled = 0;\n let vacant = 0;\n const seatIds = new Set<string>(\n [...(bu.positionIds ?? []).map((x: any) => String(x))].filter(Boolean),\n );\n for (const a of assignmentsInSlice) {\n if (String(a.businessUnitId) === buId) {\n seatIds.add(String(a.positionId));\n }\n }\n const excludedHead =\n bu.headPositionId != null && bu.headPositionId !== '' ? String(bu.headPositionId) : '';\n\n for (const pid of seatIds) {\n if (!pid || pid === excludedHead || !positionById.has(pid)) {\n continue;\n }\n const hasIncumbent = assignmentsInSlice.some(\n (a) => String(a.businessUnitId) === buId && String(a.positionId) === pid,\n );\n if (hasIncumbent) {\n filled++;\n } else {\n vacant++;\n }\n }\n return { filled, vacant };\n}\n\n/**\n * Seat slots anchored to business units inside `closure`: each **(business unit, position)** pair counts once,\n * excluding the unit **head position** catalog slot (aligned with vacant/filled rollup rules).\n */\nfunction countDistinctSeatsInBuClosure(\n closure: ReadonlySet<string>,\n businessUnitById: Map<string, any>,\n assignmentsInSlice: any[],\n positionById: Map<string, any>,\n): number {\n const seatKeys = new Set<string>();\n\n const addSeatIfEligible = (buId: string, positionIdRaw: string): void => {\n const pid = String(positionIdRaw ?? '');\n if (!pid || !positionById.has(pid)) {\n return;\n }\n const bu = businessUnitById.get(buId);\n const excludedHead = bu?.headPositionId != null && bu.headPositionId !== '' ? String(bu.headPositionId) : '';\n if (pid === excludedHead) {\n return;\n }\n seatKeys.add(`${buId}:${pid}`);\n };\n\n for (const buId of closure) {\n const bu = businessUnitById.get(buId);\n if (!bu) {\n continue;\n }\n for (const raw of bu.positionIds ?? []) {\n addSeatIfEligible(buId, String(raw));\n }\n }\n for (const a of assignmentsInSlice) {\n const buId = String(a.businessUnitId ?? '');\n if (!buId || !closure.has(buId)) {\n continue;\n }\n addSeatIfEligible(buId, String(a.positionId ?? ''));\n }\n return seatKeys.size;\n}\n\n//#endregion\n","import { AXPDataGenerator } from '@acorex-platform/framework-client/core';\nimport { resolveMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport type { AXPEntityAccessPort } from '@acorex-platform/framework-client/layout/entity';\n\nimport { RootConfig as HcmRootConfig } from '@acorex-platform/module-human-capital-management-client/contracts';\nimport { RootConfig as LocationRootConfig } from '@acorex-platform/module-location-management-client/contracts';\nimport {\n getOrgChartMergedBusinessUnitId,\n RootConfig as OrgRootConfig,\n} from '@acorex-platform/module-organization-management-client/contracts';\nimport { createBuilder, OrgChartBuildContext, OrgChartMode } from './builders';\nimport {\n axcDistinctAssignmentsByEmployee,\n axcOrderAssignmentsForRepresentative,\n} from './org-chart-assignment-representatives';\nimport { AXM_ORG_CHART_NODE_LABELS, axmNormalizeChartTitle } from './org-chart-labels';\nimport { augmentOrgChartTreeWithAggregates, createOrgChartAggregateContext } from './org-chart-stats.helper';\nimport { OrgChartNode, OrgChartNodeType, OrgChartTenantContext } from './org-chart.types';\nimport {\n axcBuildEmployeeEligibleActiveAssignmentCount,\n axcBuildManagerResolutionContext,\n axcIsAssignmentIncludedInOrgChartPrimarySlice,\n axcResolveManagerEmployeeId,\n} from './employee-manager-resolution';\n\n//#region ---- Workspace Types ----\n\nexport interface OrgChartGenerationWorkspace {\n now: Date;\n tenant: OrgChartTenantContext | null;\n geographicRegionSource: string;\n businessUnits: any[];\n businessUnitTypes: any[];\n positions: any[];\n geographicRegions: any[];\n employees: any[];\n assignments: any[];\n teams: any[];\n businessUnitById: Map<string, any>;\n buTypeById: Map<string, any>;\n geographicRegionById: Map<string, any>;\n positionById: Map<string, any>;\n employeeById: Map<string, any>;\n assignmentsByBU: Map<string, any[]>;\n isAssignmentInOrgChartSlice: (a: any, at: Date) => boolean;\n}\n\n//#endregion\n\n//#region ---- Load sources once ----\n\nasync function queryAllEntities(\n storage: AXPEntityAccessPort,\n entityName: string,\n): Promise<any[]> {\n const result = await storage.query(entityName, { skip: 0, take: 100_000 });\n return (result.items ?? []) as any[];\n}\n\nexport async function loadOrgChartGenerationWorkspace(\n storage: AXPEntityAccessPort,\n tenant: OrgChartTenantContext | null,\n): Promise<OrgChartGenerationWorkspace> {\n const now = new Date();\n const geographicRegionSource = `${LocationRootConfig.module.name}.${LocationRootConfig.entities.geographicRegion.name}`;\n const [businessUnits, businessUnitTypes, positions, geographicRegions] = await Promise.all([\n queryAllEntities(storage, OrgRootConfig.entities.businessUnit.source),\n queryAllEntities(storage, OrgRootConfig.entities.businessUnitType.source),\n queryAllEntities(storage, OrgRootConfig.entities.position.source),\n queryAllEntities(storage, geographicRegionSource)]);\n\n const [employees, assignments, teams] = await Promise.all([\n queryAllEntities(storage, HcmRootConfig.entities.employee.source),\n queryAllEntities(storage, HcmRootConfig.entities.positionAssignment.source),\n queryAllEntities(storage, OrgRootConfig.entities.team.source)]);\n\n const businessUnitById = new Map<string, any>((businessUnits as any[]).map((d) => [d.id, d]));\n const buTypeById = new Map<string, any>((businessUnitTypes as any[]).map((t) => [t.id, t]));\n const geographicRegionById = new Map<string, any>((geographicRegions as any[]).map((r) => [r.id, r]));\n const positionById = new Map<string, any>((positions as any[]).map((p) => [p.id, p]));\n const employeeById = new Map<string, any>((employees as any[]).map((e) => [e.id, e]));\n\n const eligibleAssignmentCountByEmployee = axcBuildEmployeeEligibleActiveAssignmentCount(assignments as any[], now);\n const isAssignmentInOrgChartSlice = (a: any, at: Date) =>\n axcIsAssignmentIncludedInOrgChartPrimarySlice(a, at, eligibleAssignmentCountByEmployee);\n\n const assignmentsByBU = new Map<string, any[]>();\n for (const a of assignments as any[]) {\n if (!isAssignmentInOrgChartSlice(a, now)) continue;\n const key = String(a.businessUnitId);\n const list = assignmentsByBU.get(key) || [];\n list.push(a);\n assignmentsByBU.set(key, list);\n }\n\n return {\n now,\n tenant,\n geographicRegionSource,\n businessUnits,\n businessUnitTypes,\n positions,\n geographicRegions,\n employees,\n assignments,\n teams,\n businessUnitById,\n buTypeById,\n geographicRegionById,\n positionById,\n employeeById,\n assignmentsByBU,\n isAssignmentInOrgChartSlice,\n };\n}\n\n//#endregion\n\n//#region ---- Compose one mode ----\n\nexport function composeOrgChartTreeForMode(\n workspace: OrgChartGenerationWorkspace,\n mode: OrgChartMode,\n showVacantLeafSeats: boolean,\n): OrgChartNode {\n const {\n now,\n tenant,\n geographicRegionSource,\n businessUnits,\n businessUnitTypes,\n positions,\n employees,\n assignments,\n teams,\n businessUnitById,\n buTypeById,\n geographicRegionById,\n positionById,\n employeeById,\n assignmentsByBU,\n isAssignmentInOrgChartSlice,\n } = workspace;\n\n const mergedCorporateBusinessUnitId = getOrgChartMergedBusinessUnitId();\n\n const root: OrgChartNode = {\n id: AXPDataGenerator.uuid(),\n title: axmNormalizeChartTitle(tenant?.title, AXM_ORG_CHART_NODE_LABELS.demoOrganization),\n type: OrgChartNodeType.Company,\n entity: tenant ? { id: tenant.id, type: 'tenant' } : undefined,\n isExpanded: true,\n icon: 'fa-building',\n children: [],\n };\n\n const chooseRepresentativeAssignment = (list: any[]): any | null => {\n if (!list?.length) return null;\n const primaries = list.filter((x) => x?.isPrimary === true);\n const pool = primaries.length ? primaries : list;\n return pool.sort((a, b) => new Date(b.startDate).getTime() - new Date(a.startDate).getTime())[0];\n };\n\n const ensureRegionPath = (regionId?: string | null): OrgChartNode | null => {\n if (!regionId) {\n return null;\n }\n const chain: any[] = [];\n let cursor = geographicRegionById.get(regionId);\n while (cursor) {\n chain.unshift(cursor);\n cursor = cursor.parentId ? geographicRegionById.get(cursor.parentId) : null;\n }\n if (!chain.length) {\n return null;\n }\n let currentParentChildren = root.children!;\n let currentNode: OrgChartNode | null = null;\n for (const region of chain) {\n const code = String(region?.type?.code ?? '').toLowerCase();\n const nodeType = OrgChartNodeType.BusinessUnit;\n let node = currentParentChildren.find((c) => c.entity?.id === region.id && c.type === nodeType);\n if (!node) {\n const regionLevel = code === 'country' ? 'country' : code === 'state' ? 'state' : 'city';\n node = {\n id: AXPDataGenerator.uuid(),\n title: axmNormalizeChartTitle(region.title, AXM_ORG_CHART_NODE_LABELS.region),\n type: nodeType,\n icon: regionLevel === 'country' ? 'fa-globe' : regionLevel === 'state' ? 'fa-map' : 'fa-city',\n entity: { id: region.id, type: geographicRegionSource },\n isExpanded: true,\n children: [],\n metadata: {\n isRegional: true,\n regionLevel,\n },\n };\n currentParentChildren.push(node);\n }\n currentNode = node;\n currentParentChildren = node.children ?? (node.children = []);\n }\n return currentNode;\n };\n\n const getEmployeeName = (employee: any): string => {\n return (\n employee?.person?.fullName ??\n employee?.person?.displayName ??\n employee?.party?.displayName ??\n employee?.fullName ??\n ''\n );\n };\n\n const buildBusinessUnitHeadSubtitle = (bu: any, buAssignments: any[]) => {\n const headPid = bu?.headPositionId != null ? String(bu.headPositionId) : '';\n if (!headPid) return undefined;\n const pos = positionById.get(headPid);\n const posTitleMl = axmNormalizeChartTitle(pos?.title, AXM_ORG_CHART_NODE_LABELS.position);\n const headEn = resolveMultiLanguageString(AXM_ORG_CHART_NODE_LABELS.headPrefix, 'en-US');\n const headFa = resolveMultiLanguageString(AXM_ORG_CHART_NODE_LABELS.headPrefix, 'fa-IR');\n const posEn = resolveMultiLanguageString(posTitleMl, 'en-US');\n const posFa = resolveMultiLanguageString(posTitleMl, 'fa-IR');\n const headAssignments = buAssignments.filter((a) => String(a.positionId) === headPid);\n const rep = chooseRepresentativeAssignment(headAssignments);\n const employee = rep ? employeeById.get(rep.employeeId) : null;\n const employeeName = employee ? getEmployeeName(employee) : null;\n /** Merged unit cards show head in the body; omit subtitle to avoid repeating name and role. */\n if (employeeName) {\n return undefined;\n }\n const vEn = resolveMultiLanguageString(AXM_ORG_CHART_NODE_LABELS.vacant, 'en-US');\n const vFa = resolveMultiLanguageString(AXM_ORG_CHART_NODE_LABELS.vacant, 'fa-IR');\n return {\n 'en-US': `${headEn}: ${posEn} · ${vEn}`,\n 'fa-IR': `${headFa}: ${posFa} · ${vFa}`,\n };\n };\n\n const managerResolutionCtx = axcBuildManagerResolutionContext(\n businessUnits as any[],\n positions as any[],\n assignments as any[],\n now,\n true,\n );\n const managerByEmployeeId = new Map<string, { id: string; fullName: string }>();\n for (const employee of employees as any[]) {\n const mid = axcResolveManagerEmployeeId(String(employee.id), managerResolutionCtx);\n if (!mid) continue;\n const manager = employeeById.get(mid);\n if (manager) {\n managerByEmployeeId.set(String(employee.id), {\n id: String(manager.id),\n fullName: getEmployeeName(manager),\n });\n }\n }\n\n const buildPositionNodes = (\n scopeAssignments: any[],\n bu: any,\n headPositionId?: string | null,\n ): OrgChartNode[] => {\n const excluded = headPositionId != null && headPositionId !== '' ? String(headPositionId) : null;\n\n const byPosition = new Map<string, any[]>();\n for (const a of scopeAssignments) {\n if (excluded && String(a.positionId) === excluded) continue;\n const pid = String(a.positionId);\n const arr = byPosition.get(pid) || [];\n arr.push(a);\n byPosition.set(pid, arr);\n }\n\n const fromCatalog = ((bu?.positionIds as string[] | undefined) ?? [])\n .map(String)\n .filter((id) => id && (!excluded || id !== excluded));\n const seatIdSet = new Set<string>([...fromCatalog, ...byPosition.keys()]);\n const seatIds = [...seatIdSet].sort((a, b) => {\n const pa = positionById.get(a);\n const pb = positionById.get(b);\n const ta = resolveMultiLanguageString(\n axmNormalizeChartTitle(pa?.title, AXM_ORG_CHART_NODE_LABELS.position),\n 'en-US',\n ).toLowerCase();\n const tb = resolveMultiLanguageString(\n axmNormalizeChartTitle(pb?.title, AXM_ORG_CHART_NODE_LABELS.position),\n 'en-US',\n ).toLowerCase();\n const cmp = ta.localeCompare(tb);\n return cmp !== 0 ? cmp : a.localeCompare(b);\n });\n\n const filled: OrgChartNode[] = [];\n const vacant: OrgChartNode[] = [];\n\n const toEmployeeChildNode = (\n asg: any,\n posTitleMl: ReturnType<typeof axmNormalizeChartTitle>,\n ): OrgChartNode | null => {\n const emp = employeeById.get(asg.employeeId);\n if (!emp) {\n return null;\n }\n const name = getEmployeeName(emp);\n const role = emp.role?.title ?? null;\n const mgr = managerByEmployeeId.get(String(emp.id));\n const node: OrgChartNode = {\n id: AXPDataGenerator.uuid(),\n title: name || AXM_ORG_CHART_NODE_LABELS.employee,\n subtitle: posTitleMl,\n description: role ?? undefined,\n type: OrgChartNodeType.Employee,\n icon: 'fa-address-card',\n entity: {\n id: String(emp.id),\n type: HcmRootConfig.entities.employee.source,\n },\n metadata: {\n chartTemplate: 'employee-card',\n parentPositionTitle: posTitleMl,\n ...(mgr ? { manager: mgr } : {}),\n },\n isExpanded: true,\n };\n return node;\n };\n\n for (const positionId of seatIds) {\n const pos = positionById.get(positionId);\n if (!pos) {\n continue;\n }\n\n const seatCapacity =\n typeof pos?.capacity === 'number' && Number.isFinite(pos.capacity) && pos.capacity >= 1\n ? Math.floor(pos.capacity)\n : 1;\n\n const list = byPosition.get(positionId) ?? [];\n const distinctAssignees = axcDistinctAssignmentsByEmployee(axcOrderAssignmentsForRepresentative(list));\n const hasAnyIncumbent = distinctAssignees.length > 0;\n const isManagerSeat = pos?.isManager === true;\n const posTitleMl = axmNormalizeChartTitle(pos?.title, AXM_ORG_CHART_NODE_LABELS.position);\n const directReportsCount = 0;\n\n if (!isManagerSeat) {\n if (hasAnyIncumbent) {\n for (const asg of distinctAssignees) {\n const n = toEmployeeChildNode(asg, posTitleMl);\n if (n) {\n filled.push(n);\n }\n }\n } else {\n vacant.push({\n id: AXPDataGenerator.uuid(),\n title: posTitleMl,\n subtitle: AXM_ORG_CHART_NODE_LABELS.vacant,\n type: OrgChartNodeType.Position,\n icon: 'fa-user-tie',\n entity: { id: positionId, type: OrgRootConfig.entities.position.source },\n metadata: {\n chartTemplate: 'position-ic',\n vacant: true,\n businessUnitId: String(bu.id),\n capacity: seatCapacity,\n activeAssignmentCount: 0,\n stats: { directReports: directReportsCount },\n },\n isExpanded: true,\n });\n }\n continue;\n }\n\n const rep = distinctAssignees[0] ?? null;\n const employee = rep ? employeeById.get(rep.employeeId) : null;\n const employeeName = employee ? getEmployeeName(employee) : null;\n const employeeRole = employee?.role?.title ?? null;\n const manager = employee ? managerByEmployeeId.get(String(employee.id)) : undefined;\n\n const employeeExtraChildren: OrgChartNode[] = [];\n for (const asg of distinctAssignees.slice(1)) {\n const child = toEmployeeChildNode(asg, posTitleMl);\n if (child) {\n employeeExtraChildren.push(child);\n }\n }\n\n const positionMetadata: Record<string, unknown> = {\n chartTemplate: 'merged-manager',\n businessUnitId: String(bu.id),\n capacity: seatCapacity,\n activeAssignmentCount: distinctAssignees.length,\n occupant: employeeName\n ? {\n displayName: employeeName,\n employeeId: String(employee!.id),\n roleTitle: employeeRole ?? undefined,\n }\n : undefined,\n vacant: !hasAnyIncumbent,\n stats: { directReports: directReportsCount },\n };\n if (manager) {\n positionMetadata['manager'] = manager;\n }\n const subtitleWhenCompact = employeeName ?? AXM_ORG_CHART_NODE_LABELS.vacant;\n const mergedNode: OrgChartNode = {\n id: AXPDataGenerator.uuid(),\n title: posTitleMl,\n subtitle: employeeName ? undefined : subtitleWhenCompact,\n description: employeeRole ?? undefined,\n type: OrgChartNodeType.Position,\n icon: 'fa-user-tie',\n entity: { id: positionId, type: OrgRootConfig.entities.position.source },\n metadata: positionMetadata,\n children: employeeExtraChildren.length ? employeeExtraChildren : undefined,\n isExpanded: true,\n };\n\n if (hasAnyIncumbent) {\n filled.push(mergedNode);\n } else {\n vacant.push(mergedNode);\n }\n }\n\n return showVacantLeafSeats ? [...filled, ...vacant] : [...filled];\n };\n\n const augmentCompanyNodeWithTopRole = (): void => {\n const ceoPos = (positions as any[]).find((p) => {\n const txt = resolveMultiLanguageString(\n axmNormalizeChartTitle(p?.title, AXM_ORG_CHART_NODE_LABELS.position),\n 'en-US',\n ).toLowerCase();\n return txt.includes('ceo') || txt.includes('chief executive');\n });\n let assignList: any[] = [];\n if (ceoPos) {\n for (const a of assignments as any[]) {\n if (String(a.positionId) !== String(ceoPos.id)) continue;\n if (!isAssignmentInOrgChartSlice(a, now)) continue;\n assignList.push(a);\n }\n }\n const rep = chooseRepresentativeAssignment(assignList);\n const emp = rep ? employeeById.get(rep.employeeId) : null;\n const ceoName = emp ? getEmployeeName(emp) : undefined;\n const posTitleMl = axmNormalizeChartTitle(ceoPos?.title, AXM_ORG_CHART_NODE_LABELS.position);\n const topRole =\n ceoPos != null\n ? {\n positionTitle: posTitleMl,\n positionId: String(ceoPos.id),\n employeeName: ceoName,\n employeeId: emp ? String(emp.id) : undefined,\n vacant: !ceoName,\n }\n : undefined;\n root.metadata = {\n ...root.metadata,\n chartTemplate: 'merged-executive',\n topRole,\n stats: { directChildren: root.children?.length ?? 0 },\n ...(mergedCorporateBusinessUnitId != null\n ? { mergedCorporateBusinessUnitId }\n : {}),\n };\n };\n\n const ctx: OrgChartBuildContext = {\n now,\n orgRootConfig: OrgRootConfig,\n hcmRootConfig: HcmRootConfig,\n root,\n data: {\n businessUnits: businessUnits as any[],\n businessUnitTypes: businessUnitTypes as any[],\n positions: positions as any[],\n employees: employees as any[],\n assignments: assignments as any[],\n },\n indices: {\n businessUnitById,\n buTypeById,\n geographicRegionById,\n positionById,\n employeeById,\n assignmentsByBU,\n },\n helpers: {\n isActiveAssignment: isAssignmentInOrgChartSlice,\n chooseRepresentativeAssignment,\n ensureRegionPath,\n buildPositionNodes,\n buildBusinessUnitHeadSubtitle,\n getEmployeeDisplayName: getEmployeeName,\n },\n };\n\n const builder = createBuilder(mode);\n builder.build(ctx);\n\n const corporateBuForRoot =\n mergedCorporateBusinessUnitId != null\n ? businessUnitById.get(mergedCorporateBusinessUnitId)\n : undefined;\n if (corporateBuForRoot?.description != null && corporateBuForRoot.description !== '') {\n root.description = corporateBuForRoot.description;\n }\n\n augmentCompanyNodeWithTopRole();\n\n // Reporting: CEO is already on merged-executive (topRole). Remove duplicate CEO employee node and promote direct reports under the company root.\n if (mode === 'reporting') {\n const topEmpId = root.metadata?.['topRole']?.['employeeId'];\n if (topEmpId != null && root.children?.length) {\n const topId = String(topEmpId);\n const merged: OrgChartNode[] = [];\n for (const child of root.children) {\n const isDupCEO =\n child.type === OrgChartNodeType.Employee &&\n String(child.entity?.id ?? '') === topId;\n if (isDupCEO) {\n merged.push(...(child.children ?? []));\n } else {\n merged.push(child);\n }\n }\n root.children = merged;\n if (root.metadata) {\n const prevStats =\n typeof root.metadata['stats'] === 'object' && root.metadata['stats'] != null\n ? (root.metadata['stats'] as Record<string, unknown>)\n : {};\n root.metadata['stats'] = {\n ...prevStats,\n directChildren: root.children.length,\n };\n }\n }\n }\n\n // Position hierarchy: CEO seat is already on merged-executive (topRole). Remove duplicate CEO position node and promote children under the company root.\n if (mode === 'positionHierarchy') {\n const topPosId = root.metadata?.['topRole']?.['positionId'];\n if (topPosId != null && root.children?.length) {\n const topId = String(topPosId);\n const merged: OrgChartNode[] = [];\n for (const child of root.children) {\n const isDupCEO =\n child.type === OrgChartNodeType.Position &&\n String(child.entity?.id ?? '') === topId;\n if (isDupCEO) {\n merged.push(...(child.children ?? []));\n } else {\n merged.push(child);\n }\n }\n root.children = merged;\n if (root.metadata) {\n const prevStats =\n typeof root.metadata['stats'] === 'object' && root.metadata['stats'] != null\n ? (root.metadata['stats'] as Record<string, unknown>)\n : {};\n root.metadata['stats'] = {\n ...prevStats,\n directChildren: root.children.length,\n };\n }\n }\n }\n\n const aggregateContext = createOrgChartAggregateContext({\n now,\n businessUnits,\n assignments,\n positions,\n teams,\n businessUnitById,\n buTypeById,\n positionById,\n employeeById,\n isAssignmentInOrgChartSlice,\n geographicRegionSource,\n });\n augmentOrgChartTreeWithAggregates(root, aggregateContext, 'en-US');\n\n return root;\n}\n\n//#endregion\n","import { inject, Injectable } from '@angular/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPEntityRuntimeAccessorService } from '@acorex-platform/framework-client/layout/entity';\nimport {\n AXMOrgChartStructurePayload,\n AXM_ORG_CHART_STRUCTURE_SCHEMA_VERSION,\n RootConfig as OrgRootConfig,\n} from '@acorex-platform/module-organization-management-client/contracts';\n\nimport {\n composeOrgChartTreeForMode,\n loadOrgChartGenerationWorkspace,\n} from '../generation/org-chart-compose.helper';\nimport type { OrgChartGenerateResult, OrgChartTenantContext } from '../generation/org-chart.types';\n\n//#region ---- Client-side org chart generation (offline / API fallback) ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMOrgChartLocalGenerateService {\n private readonly storage = inject(AXPEntityRuntimeAccessorService);\n private readonly session = inject(AXPSessionService);\n\n async generate(): Promise<OrgChartGenerateResult> {\n const tenant = this.resolveTenant();\n const workspace = await loadOrgChartGenerationWorkspace(this.storage, tenant);\n\n const structure: AXMOrgChartStructurePayload = {\n schemaVersion: AXM_ORG_CHART_STRUCTURE_SCHEMA_VERSION,\n modes: {\n structure: composeOrgChartTreeForMode(workspace, 'structure', true),\n location: composeOrgChartTreeForMode(workspace, 'location', true),\n reporting: composeOrgChartTreeForMode(workspace, 'reporting', true),\n positionHierarchy: composeOrgChartTreeForMode(workspace, 'positionHierarchy', true),\n },\n };\n\n const version = this.generateVersion();\n const id = await this.storage.insertOne(OrgRootConfig.entities.chart.source, {\n version,\n structure,\n });\n\n return { id: String(id), version };\n }\n\n private resolveTenant(): OrgChartTenantContext | null {\n const tenantId = this.session.tenant?.id;\n if (!tenantId) {\n return null;\n }\n return { id: tenantId, title: this.session.tenant?.title };\n }\n\n private generateVersion(): string {\n const d = new Date();\n const pad = (n: number) => String(n).padStart(2, '0');\n return `${d.getFullYear()}.${pad(d.getMonth() + 1)}.${pad(d.getDate())}-${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`;\n }\n}\n\n//#endregion\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExportService, AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\n\nimport { createMultiLanguageString } from '@acorex/core/translation';\nimport {AXPDataGenerator} from '@acorex-platform/framework-client/core';\nimport {AXPPlatformScope} from '@acorex-platform/framework-shared/core';\nimport { inject, Injectable, signal } from '@angular/core';\n\nimport {\n AXMOrganizationManagementCommandKeys,\n AXMOrgChartStructurePayload,\n AXMOrganizationManagementChartEntityModel,\n AXPOrganizationManagementSettings,\n RootConfig,\n} from '@acorex-platform/module-organization-management-client/contracts';\nimport { omitVacantLeafSeatNodes } from '../utils/org-chart-vacant-filter';\nimport { AXMOrgChartLocalGenerateService } from './org-chart-local-generate.service';\nimport {\n normalizeVacantLeafSeatsSetting,\n type OrgChartHydratedUiPrefs,\n parseOrgChartMode,\n} from '../ui/org-chart-user-ui.helper';\nimport { type OrgChartMode, AXMOrganizationNode, AXMOrgChartNodeType } from '../model/org-chart.type';\n\nexport type { OrgChartMode } from '../model/org-chart.type';\n\n@Injectable()\nexport class AXMOrgChartService {\n private readonly entityService = inject(AXPEntityService);\n private readonly chartData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.chart.name)\n .data<string, AXMOrganizationManagementChartEntityModel>();\n\n private loadingDialog = inject(AXLoadingDialogService);\n private exportService = inject(AXPExportService);\n private translationService = inject(AXTranslationService);\n private commandService = inject(AXPCommandService);\n private readonly localGenerate = inject(AXMOrgChartLocalGenerateService);\n private readonly settingsService = inject(AXPSettingsService);\n\n private readonly _modesBundle = signal<AXMOrgChartStructurePayload | null>(null);\n private readonly _selectedMode = signal<OrgChartMode>('structure');\n private readonly _showVacantLeafSeats = signal(true);\n\n private readonly _rootNode = signal<AXMOrganizationNode>({\n id: AXPDataGenerator.uuid(),\n type: AXMOrgChartNodeType.Company,\n title: createMultiLanguageString('Company', 'شرکت'),\n });\n\n public readonly rootNode = this._rootNode.asReadonly();\n public readonly selectedMode = this._selectedMode.asReadonly();\n public readonly showVacantLeafSeats = this._showVacantLeafSeats.asReadonly();\n\n /**\n * Applies user prefs resolved before first paint (route resolver). Does not persist.\n */\n applyHydratedUiPrefs(prefs: OrgChartHydratedUiPrefs | undefined): void {\n if (!prefs) {\n return;\n }\n if (prefs.selectedMode !== undefined) {\n this._selectedMode.set(prefs.selectedMode);\n }\n if (prefs.showVacantLeafSeats !== undefined) {\n this._showVacantLeafSeats.set(prefs.showVacantLeafSeats);\n }\n }\n\n /**\n * Applies current mode + vacant visibility from the cached bundle onto {@link rootNode}.\n */\n applyDisplayRoot(): void {\n const bundle = this._modesBundle();\n if (!bundle?.modes) {\n return;\n }\n const modeKey = this._selectedMode();\n let tree = structuredClone(bundle.modes[modeKey]) as AXMOrganizationNode;\n if (!this._showVacantLeafSeats()) {\n tree = omitVacantLeafSeatNodes(tree);\n }\n this._rootNode.set(tree);\n }\n\n public setChartMode(mode: OrgChartMode): void {\n this._selectedMode.set(mode);\n this.applyDisplayRoot();\n this.persistChartMode(mode);\n }\n\n public setShowVacantLeafSeats(value: unknown): void {\n const normalized = normalizeVacantLeafSeatsSetting(value);\n if (normalized === undefined) {\n return;\n }\n this._showVacantLeafSeats.set(normalized);\n this.applyDisplayRoot();\n this.persistShowVacantLeafSeats(normalized);\n }\n\n //#region ---- User chart preferences (settings) ----\n\n /**\n * Reads persisted chart UI preferences into signals (does not persist).\n */\n private async restoreChartUiFromSettings(): Promise<void> {\n try {\n const userScope = this.settingsService.scope(AXPPlatformScope.User);\n const modeRaw = await userScope.get<string | undefined>(\n AXPOrganizationManagementSettings.HierarchyChartMode,\n );\n const mode = parseOrgChartMode(modeRaw);\n if (mode !== undefined) {\n this._selectedMode.set(mode);\n }\n\n const vacantRaw = await userScope.get<unknown>(\n AXPOrganizationManagementSettings.HierarchyChartShowVacantLeafSeats,\n );\n const vacant = normalizeVacantLeafSeatsSetting(vacantRaw);\n if (vacant !== undefined) {\n this._showVacantLeafSeats.set(vacant);\n }\n } catch {\n // Keep constructor defaults when settings are unavailable.\n }\n }\n\n private persistChartMode(mode: OrgChartMode): void {\n void this.settingsService\n .scope(AXPPlatformScope.User)\n .set(AXPOrganizationManagementSettings.HierarchyChartMode, mode)\n .catch(() => {});\n }\n\n private persistShowVacantLeafSeats(value: boolean): void {\n void this.settingsService\n .scope(AXPPlatformScope.User)\n .set(AXPOrganizationManagementSettings.HierarchyChartShowVacantLeafSeats, value)\n .catch(() => {});\n }\n\n //#endregion\n\n //#region ---- Load / reload persisted chart ----\n\n public async load(): Promise<void> {\n await this.loadPersistedStructure(false);\n }\n\n /** Latest persisted chart version (undefined when no chart row exists). */\n public async getLatestChartVersion(): Promise<string | undefined> {\n const row = await this.queryLatestChartRow();\n const version = row?.version;\n return typeof version === 'string' && version.trim().length > 0 ? version.trim() : undefined;\n }\n\n /**\n * Polls until the latest chart version differs from {@link previousVersion}, or timeout.\n * Returns true when a new version was observed.\n */\n public async waitForChartVersionChange(\n previousVersion: string | null | undefined,\n options?: { timeoutMs?: number; intervalMs?: number },\n ): Promise<boolean> {\n const timeoutMs = options?.timeoutMs ?? 3000;\n const intervalMs = options?.intervalMs ?? 200;\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() < deadline) {\n await this.delay(intervalMs);\n const current = await this.getLatestChartVersion();\n if (current == null) {\n continue;\n }\n if (previousVersion == null || previousVersion === '' || current !== previousVersion) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Reloads the latest persisted chart into signals. Never calls generate.\n * @returns false when no valid persisted structure exists yet.\n */\n public async reloadFromStorage(): Promise<boolean> {\n const row = await this.queryLatestChartRow();\n return this.applyPersistedChartRow(row);\n }\n\n /**\n * After a structure-affecting mutation: wait for server regen, else client-generate fallback, then reload.\n * Works with server API (middleware regen) and offline/client-only storage profiles.\n */\n public async refreshAfterStructureChange(options?: {\n waitTimeoutMs?: number;\n intervalMs?: number;\n }): Promise<boolean> {\n const waitTimeoutMs = options?.waitTimeoutMs ?? 4000;\n const intervalMs = options?.intervalMs ?? 200;\n const versionBefore = await this.getLatestChartVersion();\n\n const versionChanged =\n versionBefore != null\n ? await this.waitForChartVersionChange(versionBefore, { timeoutMs: waitTimeoutMs, intervalMs })\n : await this.waitForChartVersionChange(null, { timeoutMs: waitTimeoutMs, intervalMs: 250 });\n\n if (!versionChanged) {\n await this.generate();\n }\n\n return this.reloadFromStorage();\n }\n\n public async generate(): Promise<boolean> {\n const result = await this.commandService.execute(\n AXMOrganizationManagementCommandKeys.OrganizationChart.Generate,\n {},\n );\n if (result?.success === true) {\n return true;\n }\n\n try {\n await this.localGenerate.generate();\n return true;\n } catch {\n return false;\n }\n }\n\n private hasPersistedStructure(\n structure: AXMOrgChartStructurePayload | undefined,\n ): structure is AXMOrgChartStructurePayload {\n return !!(\n structure?.modes?.structure &&\n structure?.modes?.location &&\n structure?.modes?.reporting &&\n structure?.modes?.positionHierarchy\n );\n }\n\n private async queryLatestChartRow(): Promise<AXMOrganizationManagementChartEntityModel | undefined> {\n return (\n await this.chartData.query({\n skip: 0,\n take: 1,\n sort: [{ field: 'version', dir: 'desc' }],\n })\n ).items[0];\n }\n\n private async applyPersistedChartRow(\n row: AXMOrganizationManagementChartEntityModel | undefined,\n ): Promise<boolean> {\n const structure = row?.structure;\n if (!this.hasPersistedStructure(structure)) {\n return false;\n }\n\n this._modesBundle.set(structure);\n await this.restoreChartUiFromSettings();\n this.applyDisplayRoot();\n return true;\n }\n\n private async loadPersistedStructure(isRetryAfterGenerate: boolean): Promise<void> {\n const row = await this.queryLatestChartRow();\n if (await this.applyPersistedChartRow(row)) {\n return;\n }\n\n if (isRetryAfterGenerate) {\n return;\n }\n\n const generated = await this.generate();\n if (!generated) {\n return;\n }\n\n await this.loadPersistedStructure(true);\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n //#endregion\n\n //#region ---- Printing ----\n\n async printChart(element: HTMLElement): Promise<void> {\n const d = this.loadingDialog.show({\n title: 'Printing Organization Chart...',\n mode: 'determinate',\n progressColor: 'primary',\n progressValue: 0,\n status: '0/10',\n text: 'Initializing print process...',\n buttons: [{ text: 'Cancel', color: 'danger', onClick: () => d.close() }],\n });\n\n try {\n await this.updateStep(\n d,\n await this.translate('@organization-management:organization-chart.states.preparing-document'),\n 10,\n '1/10',\n );\n const chartElement = element;\n const { originalStyles, modifiedStyles } = this.expandChart(chartElement);\n\n await this.updateStep(\n d,\n await this.translate('@organization-management:organization-chart.states.rendering-chart-image'),\n 25,\n '2.5/10',\n );\n const blob = await this.exportService.generateBlobFromElement(chartElement, {\n popup: true,\n filter: (node: Node) => !(node instanceof Element && node.classList.contains('--toggle')),\n bgcolor: 'transparent',\n scale: 2,\n quality: 1,\n height: Number.parseInt(modifiedStyles.modifiedHeight),\n width: Number.parseInt(modifiedStyles.modifiedWidth),\n });\n\n await this.updateStep(\n d,\n await this.translate('@organization-management:organization-chart.states.finalizing-image-processing'),\n 50,\n '5/10',\n );\n this.restoreChartStyles(chartElement, originalStyles);\n\n await this.updateStep(\n d,\n await this.translate('@organization-management:organization-chart.states.downloading-image'),\n 75,\n '7.5/10',\n );\n this.exportService.download(blob, 'org-chart.png');\n\n await this.updateStep(\n d,\n await this.translate('@organization-management:organization-chart.states.process-complete'),\n 100,\n '10/10',\n );\n setTimeout(() => d.close(), 1500);\n } catch (err) {\n console.error('Error capturing chart:', err);\n await this.updateStep(\n d,\n await this.translate('@organization-management:organization-chart.states.failed-to-generate-chart-image'),\n 100,\n 'Error',\n 'danger',\n );\n d.close();\n }\n }\n\n private expandChart(chartElement: HTMLElement) {\n const originalStyles = {\n originalOverflow: chartElement.style.overflow,\n originalWidth: chartElement.style.width,\n originalHeight: chartElement.style.height,\n };\n const modifiedStyles = {\n modifiedOverflow: 'visible',\n modifiedWidth: `${chartElement.scrollWidth}px`,\n modifiedHeight: `${chartElement.scrollHeight}px`,\n };\n chartElement.style.overflow = modifiedStyles.modifiedOverflow;\n chartElement.style.width = modifiedStyles.modifiedWidth;\n chartElement.style.height = modifiedStyles.modifiedHeight;\n return { originalStyles, modifiedStyles };\n }\n\n private restoreChartStyles(\n chartElement: HTMLElement,\n originalStyles: { originalOverflow: string; originalWidth: string; originalHeight: string },\n ): void {\n chartElement.style.overflow = originalStyles.originalOverflow;\n chartElement.style.width = originalStyles.originalWidth;\n chartElement.style.height = originalStyles.originalHeight;\n }\n\n private async updateStep(\n dialog: any,\n text: string,\n progress: number,\n status: string,\n color: AXStyleColorType = 'primary',\n ): Promise<void> {\n return new Promise((resolve) => {\n dialog.setProgressColor(color);\n dialog.setProgressText(text);\n dialog.setProgressValue(progress);\n dialog.setProgressStatus(status);\n resolve();\n });\n }\n\n private async translate(key: string): Promise<string> {\n return (await this.translationService.translateAsync(key)) + '...';\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXPActionMenuItem, AXPBreadcrumbItem, AXPExecuteCommand, AXPMultiLanguageString, getActionButton } from '@acorex-platform/framework-shared/core';\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXPanViewDirective } from '@acorex/cdk/pan-view';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuItem,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSwitchModule } from '@acorex/components/switch';\nimport { AXTranslationModule, createMultiLanguageString, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXStyleColorType } from '@acorex/cdk/common';\n\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\nimport {\n AXPLayoutFloatingZoomBarComponent,\n AXPLayoutSideDetailPanelComponent,\n type AXPLayoutSideDetailPanelEmptyState,\n type AXPLayoutSideDetailPanelHeader,\n type AXPLayoutSideDetailPanelSection,\n AXPThemeLayoutBlockComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex-platform/framework-client/layout/views';\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n ComponentRef,\n computed,\n ElementRef,\n inject,\n Injector,\n LOCALE_ID,\n NgZone,\n signal,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport set from 'lodash-es/set';\nimport { RootConfig } from '@acorex-platform/module-organization-management-client/contracts';\nimport { AXMOrgChartStructureRefreshHub } from '../model/org-chart-structure-refresh.hub';\nimport { AXMOrgChartNodeOutletComponent } from '../nodes/org-chart-node-outlet.component';\nimport { AXM_ORG_CHART_HOST, type AXMOrgChartHostApi } from '../tokens/org-chart-host.token';\nimport {\n AXMOrgChartNodeContributionContext,\n AXMOrgChartNodeKind,\n AXMOrgChartNodeMenuAction,\n} from '../tokens/org-chart-node-contribution.token';\nimport { AXM_ORG_CHART_EMPLOYEE_SUBMENU_GROUP_ID } from '../constants/org-chart-employee-submenu.const';\nimport { AXMOrgChartNodeContributionService } from '../services/org-chart-node-contribution.service';\nimport { AXMOrgChartService, OrgChartMode } from '../services/org-chart.service';\nimport type { OrgChartHydratedUiPrefs } from '../ui/org-chart-user-ui.helper';\nimport { AXMOrganizationNode, AXMOrgChartCategory, AXMOrgChartNodeType } from '../model/org-chart.type';\n\n//#endregion\n\n//#region ---- Org chart context menu item type ----\n\n/**\n * Row while building: {@link AXMOrgChartNodeMenuAction.break} `before` / `both` becomes `orgChartBreakBefore` here,\n * then `materializeOrgChartMenuBreaks` turns that into `AXMenuItem.break` on the **previous** row and clears the flag.\n */\ntype AXMOrgChartContextMenuItem = AXMenuItem & { orgChartBreakBefore?: boolean };\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Component for displaying and interacting with an organizational chart.\n */\n@Component({\n templateUrl: './org-chart.page.html',\n styleUrls: ['./org-chart.page.css'],\n imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n //\n AXMenuModule,\n AXButtonModule,\n AXDropdownButtonModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXPanViewDirective,\n AXLoadingModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n AXSearchBoxModule,\n AXSwitchModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPPageLayoutComponent,\n AXPLayoutFloatingZoomBarComponent,\n AXPLayoutSideDetailPanelComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXMOrgChartService,\n AXMOrgChartNodeContributionService,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMOrgChartPage,\n },\n { provide: AXM_ORG_CHART_HOST, useExisting: AXMOrgChartPage },\n ],\n})\nexport class AXMOrgChartPage extends AXPPageLayoutBaseComponent implements AXMOrgChartHostApi {\n //#region ---- Services & Dependencies ----\n\n protected readonly rootConfig = RootConfig;\n\n private d3!: typeof import('d3');\n\n private treeContainer = viewChild.required<ElementRef<HTMLDivElement>>('chart');\n private parent = viewChild.required<ElementRef<HTMLDivElement>>('parent');\n private contextMenu = viewChild(AXContextMenuComponent);\n private panView = viewChild(AXPanViewDirective);\n\n private ngzone = inject(NgZone);\n private pageInjector = inject(Injector);\n private viewContainerRef = inject(ViewContainerRef);\n // printing is handled by service itself\n protected chartService = inject(AXMOrgChartService);\n private readonly nodeContributionService = inject(AXMOrgChartNodeContributionService);\n\n private readonly route = inject(ActivatedRoute);\n\n private readonly localeId = inject(LOCALE_ID);\n\n protected readonly deviceService = inject(AXPDeviceService);\n\n private readonly orgChartStructureRefreshHub = inject(AXMOrgChartStructureRefreshHub);\n\n //#endregion\n\n //#region ---- Constructor ----\n\n constructor() {\n super();\n this.chartService.applyHydratedUiPrefs(\n this.route.snapshot.data['orgChartUi'] as OrgChartHydratedUiPrefs | undefined,\n );\n\n effect(() => {\n const rev = this.orgChartStructureRefreshHub.structureDataRevision();\n if (rev === 0) {\n return;\n }\n void this.reloadChartFromPersistedStructure();\n });\n }\n\n //#endregion\n\n //#region ---- Chart State & UI Metadata ----\n\n private readonly NODE_STROKE_COLOR = 'rgba(var(--ax-sys-color-primary-400))';\n private readonly LINK_STROKE_WIDTH = 1;\n\n /**\n * SVG `foreignObject` viewport and tree layout spacing.\n * Keep card `min-width` in `org-chart.page.css` aligned with {@link chartNodeWidth}.\n */\n private readonly chartNodeWidth = 360;\n private readonly chartNodeHeight = 280;\n private readonly chartHorizontalSpacing = 24;\n private readonly chartVerticalSpacing = 48;\n /** Nudges card content inside the allocated foreignObject band (connectors use rendered bounds). */\n private readonly chartNodeYOffset = 10;\n\n protected isFullscreen = signal(false);\n protected panX = signal(0);\n protected panY = signal(0);\n protected panZoomLevel = signal(100);\n\n protected isChartRendered = false;\n protected selectedNodeId = signal<string | null>(null);\n /** Large layouts: optional side panel with {@link getNodeInfoItems} for the selected node (same UX pattern as document drive). */\n protected isDetailPanelOpen = signal(false);\n private activeContextNode: AXMOrganizationNode | null = null;\n private activeContextMenuActions = new Map<string, AXMOrgChartNodeMenuAction>();\n\n protected nodeTypes = [\n { title: 'Company', color: 'primary', icon: 'fal fa-building', category: AXMOrgChartCategory.Company },\n { title: 'Business Unit', color: 'accent2', icon: 'fal fa-sitemap', category: AXMOrgChartCategory.BusinessUnit },\n { title: 'Position', color: 'accent3', icon: 'fal fa-user-tie', category: AXMOrgChartCategory.Position },\n { title: 'Employee', color: 'surface', icon: 'fal fa-address-card', category: AXMOrgChartCategory.Employee },\n ];\n\n /**\n * UI chrome for chart cards; align copy with `organization-chart.organization-chart.nodes` / mock `org-chart-labels`.\n */\n public readonly chartML = {\n vacant: createMultiLanguageString('Vacant', 'خالی'),\n directReports: createMultiLanguageString('Direct reports', 'گزارش مستقیم'),\n teams: createMultiLanguageString('Teams', 'تیمها'),\n people: createMultiLanguageString('People', 'اعضا'),\n positions: createMultiLanguageString('Positions', 'سمتها'),\n /** Label above the chief executive slot on merged company cards. */\n chiefExecutive: createMultiLanguageString('Chief executive', 'مدیر اجرایی'),\n buHead: createMultiLanguageString('Head', 'سرپرست'),\n buPosition: createMultiLanguageString('Position', 'عنوان سمت'),\n unitType: createMultiLanguageString('Unit type', 'نوع واحد'),\n businessUnit: createMultiLanguageString('Business unit', 'واحد سازمانی'),\n location: createMultiLanguageString('Location', 'موقعیت'),\n code: createMultiLanguageString('Code', 'کد'),\n capacity: createMultiLanguageString('Capacity', 'ظرفیت'),\n level: createMultiLanguageString('Level', 'سطح'),\n email: createMultiLanguageString('Email', 'ایمیل'),\n phone: createMultiLanguageString('Phone', 'تلفن'),\n employmentType: createMultiLanguageString('Employment type', 'نوع همکاری'),\n workMode: createMultiLanguageString('Work mode', 'نحوه کار'),\n more: '@organization-management:organization-chart.node-actions.more',\n add: '@organization-management:organization-chart.node-actions.add',\n noActionsAvailable: '@organization-management:organization-chart.node-actions.no-actions',\n };\n\n /**\n * Selected tree node for the detail panel; stays in sync with {@link selectedNodeId}.\n */\n protected readonly detailPanelSelectedNode = computed(() => {\n const id = this.selectedNodeId();\n if (id == null || id === '') {\n return null;\n }\n return this.findNodeInTree(this.chartService.rootNode(), id);\n });\n\n /** Resolved copy for {@link AXPLayoutSideDetailPanelComponent} (loaded from i18n keys). */\n protected readonly detailPanelCopy = signal({\n panelTitle: '',\n emptyMessage: '',\n detailsSection: '',\n noRowsMessage: '',\n });\n\n protected readonly detailPanelHeader = computed((): AXPLayoutSideDetailPanelHeader | null => {\n const node = this.detailPanelSelectedNode();\n if (node == null) {\n return null;\n }\n const lang = this.localeId;\n let secondaryTitle: string | undefined;\n if (node.type === AXMOrgChartNodeType.BusinessUnit) {\n if (node.description) {\n secondaryTitle = resolveMultiLanguageString(node.description, lang);\n } else if (node.subtitle) {\n secondaryTitle = resolveMultiLanguageString(node.subtitle, lang);\n }\n } else if (node.subtitle) {\n secondaryTitle = resolveMultiLanguageString(node.subtitle, lang);\n }\n return {\n primaryTitle: resolveMultiLanguageString(node.title, lang),\n secondaryTitle,\n icon: {\n iconClass: this.detailPanelNodeIconClass(node),\n surfaceVars: this.getNodeColors(this.detailPanelNodeColorKey(node)),\n },\n };\n });\n\n protected readonly detailPanelSections = computed((): AXPLayoutSideDetailPanelSection[] => {\n const node = this.detailPanelSelectedNode();\n if (node == null) {\n return [];\n }\n const items = this.getNodeInfoItems(node);\n if (items.length === 0) {\n return [];\n }\n const lang = this.localeId;\n const copy = this.detailPanelCopy();\n return [\n {\n title: copy.detailsSection,\n rows: items.map((item) => ({\n label: resolveMultiLanguageString(item.label, lang),\n value: item.value,\n })),\n },\n ];\n });\n\n protected readonly detailPanelEmptyState = computed((): AXPLayoutSideDetailPanelEmptyState | null => {\n if (this.detailPanelSelectedNode() != null) {\n return null;\n }\n const copy = this.detailPanelCopy();\n return {\n primaryTitle: copy.panelTitle,\n message: copy.emptyMessage,\n icon: {\n iconClass: 'fa-solid fa-lg fa-fw fa-diagram-project',\n surfaceVars: this.getNodeColors('primary'),\n },\n };\n });\n\n protected readonly detailPanelNoRowsMessage = computed((): string | null => {\n const node = this.detailPanelSelectedNode();\n if (node == null || this.getNodeInfoItems(node).length > 0) {\n return null;\n }\n return this.detailPanelCopy().noRowsMessage;\n });\n\n /** Bound to `ax-search-box` in the page toolbar. */\n protected chartSearchQuery = '';\n private chartSearchPendingPresentation: 'none' | 'fit-all' | 'fit-one' = 'none';\n private chartSearchPendingFocusId: string | null = null;\n\n //#endregion\n\n //#region ---- Initialization ----\n\n #initialize = afterNextRender(async () => {\n this.d3 = await import('d3');\n\n await this.refresh();\n });\n\n //#endregion\n\n //#region ---- Detail Panel ----\n\n private readonly detailPanelI18nEffect = effect(() => {\n void this.loadDetailPanelCopy();\n });\n\n private async loadDetailPanelCopy(): Promise<void> {\n const [panelTitle, emptyMessage, detailsSection, noRowsMessage] = await Promise.all([\n this.translateService.translateAsync(\n '@organization-management:organization-chart.components.chart.detail-panel.title',\n ),\n this.translateService.translateAsync(\n '@organization-management:organization-chart.components.chart.detail-panel.empty',\n ),\n this.translateService.translateAsync(\n '@organization-management:organization-chart.components.chart.detail-panel.details-section',\n ),\n this.translateService.translateAsync(\n '@organization-management:organization-chart.components.chart.detail-panel.no-rows',\n ),\n ]);\n this.detailPanelCopy.set({\n panelTitle: panelTitle ?? '',\n emptyMessage: emptyMessage ?? '',\n detailsSection: detailsSection ?? '',\n noRowsMessage: noRowsMessage ?? '',\n });\n }\n\n /** Color token or literal CSS color for the detail panel header icon. */\n private detailPanelNodeColorKey(node: AXMOrganizationNode): string {\n if (node.type === AXMOrgChartNodeType.Company) {\n return 'primary';\n }\n if (node.type === AXMOrgChartNodeType.BusinessUnit) {\n const typeColor = node.metadata?.['unitTypeColor'];\n if (typeof typeColor === 'string' && typeColor.trim().length > 0) {\n return typeColor.trim();\n }\n return node.metadata?.['isRegional'] === true ? 'accent1' : 'accent2';\n }\n if (node.type === AXMOrgChartNodeType.Position || node.type === AXMOrgChartNodeType.Employee) {\n return 'accent3';\n }\n return 'primary';\n }\n\n private detailPanelNodeIconClass(node: AXMOrganizationNode): string {\n const raw = node.icon?.trim() ?? '';\n const withoutWeight = raw\n .replace(/\\bfa-(solid|light|regular|thin|duotone)\\b/gi, '')\n .trim()\n .replace(/\\s+/g, ' ');\n const glyph = withoutWeight.length > 0 ? withoutWeight : 'fa-sitemap';\n return `fa-solid fa-lg fa-fw ${glyph}`;\n }\n\n public toggleDetailPanel(): void {\n this.isDetailPanelOpen.update((open) => !open);\n }\n\n /**\n * Expands or collapses a node's branch and redraws the chart.\n */\n public setNodeBranchExpanded(data: AXMOrganizationNode, expanded: boolean): void {\n data.isExpanded = expanded;\n this.selectNode(data);\n this.redrawChart();\n }\n\n //#endregion\n\n //#region ---- Pan & Fullscreen ----\n\n /**\n * Zooms in the chart.\n */\n protected zoomIn() {\n this.panView()?.zoomIn();\n }\n\n /**\n * Zooms out the chart.\n */\n protected zoomOut() {\n this.panView()?.zoomOut();\n }\n\n /**\n * Resets the zoom level and pan position of the chart.\n */\n protected zoomReset() {\n this.panView()?.resetPosition();\n }\n\n /**\n * Toggles fullscreen mode for the chart.\n */\n protected toggleFullscreen() {\n if (this.isFullscreen()) {\n document.exitFullscreen();\n this.isFullscreen.set(false);\n } else {\n this.parent().nativeElement.requestFullscreen();\n this.isFullscreen.set(true);\n }\n document.querySelector(`foreignObject[node=\"node-${this.chartService.rootNode().id}\"]`)?.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n inline: 'center',\n });\n }\n\n //#endregion\n\n //#region ---- Chart Search ----\n\n protected onChartSearchValueChanged(event: AXValueChangedEvent<string | null>): void {\n const v = event.value;\n this.chartSearchQuery = typeof v === 'string' ? v : '';\n this.applyChartSearchFromQuery();\n }\n\n private applyChartSearchFromQuery(): void {\n const q = this.chartSearchQuery.trim().toLowerCase();\n if (!q) {\n this.chartSearchPendingPresentation = 'none';\n this.chartSearchPendingFocusId = null;\n this.applySearchHitClasses(new Set());\n return;\n }\n const matches = this.findNodesMatchingChartSearch(this.chartService.rootNode(), q);\n if (matches.length === 0) {\n this.chartSearchPendingPresentation = 'none';\n this.chartSearchPendingFocusId = null;\n this.applySearchHitClasses(new Set());\n return;\n }\n for (const node of matches) {\n this.ensureExpandedPathToNode(node.id);\n }\n this.chartSearchPendingPresentation = matches.length === 1 ? 'fit-one' : 'fit-all';\n this.chartSearchPendingFocusId = matches.length === 1 ? matches[0].id : null;\n this.redrawChart();\n }\n\n private completeChartRenderPresentation(): void {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.ngzone.run(() => {\n const q = this.chartSearchQuery.trim().toLowerCase();\n const mode = this.chartSearchPendingPresentation;\n const focusId = this.chartSearchPendingFocusId;\n this.chartSearchPendingPresentation = 'none';\n this.chartSearchPendingFocusId = null;\n\n if (!q) {\n this.applySearchHitClasses(new Set());\n return;\n }\n const matches = this.findNodesMatchingChartSearch(this.chartService.rootNode(), q);\n this.applySearchHitClasses(new Set(matches.map((m) => m.id)));\n if (matches.length === 0) {\n return;\n }\n if (mode === 'fit-one' && focusId != null && focusId !== '') {\n const node = this.findNodeInTree(this.chartService.rootNode(), focusId);\n if (node) {\n this.selectNode(node);\n }\n this.panView()?.resetPosition();\n requestAnimationFrame(() => this.centerChartOnForeignObject(focusId));\n } else if (mode === 'fit-all') {\n this.panView()?.resetPosition();\n }\n });\n });\n });\n }\n\n private findNodesMatchingChartSearch(root: AXMOrganizationNode, q: string): AXMOrganizationNode[] {\n const all: AXMOrganizationNode[] = [];\n this.collectAllChartNodes(root, all);\n return all.filter((n) => this.nodeMatchesChartSearchText(n, q));\n }\n\n private collectAllChartNodes(node: AXMOrganizationNode, out: AXMOrganizationNode[]): void {\n out.push(node);\n for (const child of node.children ?? []) {\n this.collectAllChartNodes(child, out);\n }\n }\n\n private nodeMatchesChartSearchText(node: AXMOrganizationNode, q: string): boolean {\n const parts: string[] = [];\n parts.push(resolveMultiLanguageString(node.title, this.localeId));\n if (node.subtitle != null) {\n parts.push(resolveMultiLanguageString(node.subtitle, this.localeId));\n }\n if (node.description != null) {\n parts.push(resolveMultiLanguageString(node.description, this.localeId));\n }\n const haystack = parts.join(' ').trim().toLowerCase();\n return haystack.includes(q);\n }\n\n private findPathToRootNode(root: AXMOrganizationNode, id: string): AXMOrganizationNode[] | null {\n if (root.id === id) {\n return [root];\n }\n for (const child of root.children ?? []) {\n const sub = this.findPathToRootNode(child, id);\n if (sub) {\n return [root, ...sub];\n }\n }\n return null;\n }\n\n private ensureExpandedPathToNode(targetId: string): void {\n const path = this.findPathToRootNode(this.chartService.rootNode(), targetId);\n if (path == null) {\n return;\n }\n for (let i = 0; i < path.length - 1; i++) {\n path[i].isExpanded = true;\n }\n }\n\n private applySearchHitClasses(ids: ReadonlySet<string>): void {\n const nodes = document.querySelectorAll('foreignObject.axp-chart-node');\n for (let i = 0; i < nodes.length; i++) {\n const fo = nodes[i] as HTMLElement;\n const raw = fo.getAttribute('node');\n const nodeId = raw?.startsWith('node-') === true ? raw.slice('node-'.length) : (raw ?? '');\n const container = fo.querySelector('.--node-container') as HTMLElement | null;\n if (container == null) {\n continue;\n }\n if (ids.has(nodeId)) {\n container.classList.add('--search-hit');\n } else {\n container.classList.remove('--search-hit');\n }\n }\n }\n\n private centerChartOnForeignObject(nodeId: string): void {\n const fo = document.querySelector(`foreignObject[node=\"node-${nodeId}\"]`) as HTMLElement | null;\n const panel = this.parent().nativeElement;\n if (fo == null) {\n return;\n }\n const foRect = fo.getBoundingClientRect();\n const cRect = panel.getBoundingClientRect();\n const dx = cRect.left + cRect.width / 2 - (foRect.left + foRect.width / 2);\n const dy = cRect.top + cRect.height / 2 - (foRect.top + foRect.height / 2);\n this.panX.update((x) => x + dx);\n this.panY.update((y) => y + dy);\n this.syncPanViewTransformFromSignals();\n }\n\n /**\n * Applies the same transform formula as {@link AXPanViewDirective} so programmatic pan updates take effect immediately.\n */\n private syncPanViewTransformFromSignals(): void {\n const el = this.treeContainer().nativeElement;\n el.style.transform = `translate(${this.panX()}px, ${this.panY()}px) scale(${this.panZoomLevel() / 100})`;\n }\n\n //#endregion\n\n //#region ---- Chart Layout Metrics ----\n\n /**\n * Calculates the maximum depth of the organizational chart.\n * @param node - The root node of the chart.\n * @returns The maximum depth of the chart.\n */\n private calculateMaxDepth(node: AXMOrganizationNode): number {\n if (!node.children || node.children.length === 0 || node.isExpanded === false) {\n return 1;\n }\n return 1 + Math.max(...node.children.map((child) => this.calculateMaxDepth(child)));\n }\n\n /**\n * Calculates the maximum breadth of the organizational chart.\n * @param node - The root node of the chart.\n * @returns The maximum breadth of the chart.\n */\n private calculateMaxBreadth(node: AXMOrganizationNode): number {\n if (!node.children || node.children.length === 0 || node.isExpanded === false) {\n return 1;\n }\n return node.children.reduce((acc, child) => acc + this.calculateMaxBreadth(child), 0);\n }\n\n //#endregion\n\n //#region ---- Chart Rendering ----\n\n /**\n * Creates and renders the organizational chart.\n * @param el - The container element for the chart.\n * @param data - The root node of the organizational chart.\n */\n createChart(el: Element, data: AXMOrganizationNode): void {\n if (!this.d3) {\n return;\n }\n const nw = this.chartNodeWidth;\n const nh = this.chartNodeHeight;\n const hGap = this.chartHorizontalSpacing;\n const vGap = this.chartVerticalSpacing;\n const yOff = this.chartNodeYOffset;\n\n this.ngzone.runOutsideAngular(() => {\n this.clearChart(el);\n const newSvg = this.d3.select(el).append('svg');\n\n const root = this.d3.hierarchy(data);\n\n root.descendants().forEach((node: any) => {\n if (node.data.isExpanded === false) {\n node.children = undefined;\n }\n });\n\n const treeLayout = this.d3\n .tree<AXMOrganizationNode>()\n .nodeSize([nw + hGap, nh + vGap]);\n\n treeLayout(root);\n\n let minX = Infinity,\n maxX = -Infinity,\n minY = Infinity,\n maxY = -Infinity;\n root.descendants().forEach((d: any) => {\n if (d.x < minX) minX = d.x;\n if (d.x > maxX) maxX = d.x;\n if (d.y < minY) minY = d.y;\n if (d.y > maxY) maxY = d.y;\n });\n\n const CONTAINER_WIDTH = maxX - minX + nw + 2 * hGap;\n const CONTAINER_HEIGHT = maxY - minY + nh + 2 * vGap;\n\n newSvg.attr('width', CONTAINER_WIDTH).attr('height', CONTAINER_HEIGHT);\n\n const g = newSvg\n .append('g')\n .attr(\n 'transform',\n `translate(${-minX + nw / 2 + hGap / 2}, ${-minY + nh / 2 + vGap / 2})`,\n );\n\n const linksLayer = g.append('g').attr('class', 'axp-chart-links');\n const nodesLayer = g.append('g').attr('class', 'axp-chart-nodes');\n\n linksLayer\n .selectAll<SVGPathElement, { source: any; target: any }>('.link')\n .data(root.links())\n .enter()\n .append('path')\n .attr('class', 'link')\n .attr('d', (d: { source: any; target: any }) => this.computeOrgChartLinkPath(d, nw, nh, yOff))\n .attr('fill', 'none')\n .attr('stroke', this.NODE_STROKE_COLOR)\n .attr('stroke-width', this.LINK_STROKE_WIDTH)\n .attr('from', (d: any) => `node-${d.source.data.id}`)\n .attr('to', (d: any) => `node-${d.target.data.id}`);\n\n nodesLayer\n .selectAll('.axp-chart-node')\n .data(root.descendants())\n .enter()\n .append('foreignObject')\n .attr('class', 'axp-chart-node')\n .attr('node', (d: any) => `node-${d.data.id}`)\n .attr('x', (d: any) => d.x - nw / 2)\n .attr('y', (d: any) => d.y - nh / 2 + yOff)\n .attr('width', nw)\n .attr('height', nh)\n .each((d: any) => this.renderNodeTemplate(d.data, d.x, d.y));\n\n const svgEl = newSvg.node();\n if (svgEl) {\n this.scheduleChartLinkPathRefresh(svgEl, nw, nh, yOff);\n }\n });\n if (!this.isChartRendered) {\n // document.querySelector(`foreignObject[node=\"node-${data.id}\"] .--heading-container`)?.scrollIntoView({\n // behavior: 'smooth',\n // block: 'center',\n // inline: 'center',\n // });\n this.isChartRendered = true;\n this.panView()?.resetPosition();\n }\n this.ngzone.run(() => {\n this.completeChartRenderPresentation();\n });\n }\n\n /**\n * Orthogonal elbow between two nodes using measured card bounds inside each foreignObject when available.\n */\n private computeOrgChartLinkPath(\n d: { source: any; target: any },\n nodeWidth: number,\n nodeHeight: number,\n nodeYOffset: number,\n ): string {\n const source = d.source;\n const target = d.target;\n const EDGE_PADDING = 2;\n const MIN_VERTICAL_GAP = 10;\n\n const sourceBounds = this.getRenderedNodeBounds(source.data.id);\n const targetBounds = this.getRenderedNodeBounds(target.data.id);\n\n const foSourceTop = source.y - nodeHeight / 2 + nodeYOffset;\n const foTargetTop = target.y - nodeHeight / 2 + nodeYOffset;\n\n let sourceBottomY =\n sourceBounds != null\n ? foSourceTop + sourceBounds.topOffset + sourceBounds.height\n : source.y + nodeHeight / 2 + nodeYOffset - EDGE_PADDING;\n\n let targetTopY =\n targetBounds != null\n ? foTargetTop + targetBounds.topOffset\n : target.y - nodeHeight / 2 + nodeYOffset + EDGE_PADDING;\n\n sourceBottomY += EDGE_PADDING;\n targetTopY -= EDGE_PADDING;\n\n if (sourceBottomY >= targetTopY - MIN_VERTICAL_GAP) {\n sourceBottomY = source.y + nodeYOffset;\n targetTopY = target.y - 10;\n }\n\n return `M${source.x},${sourceBottomY}V${(sourceBottomY + targetTopY) / 2}H${target.x}V${targetTopY}`;\n }\n\n /**\n * Node templates render asynchronously; remap connectors after layout so edges use real card heights.\n */\n private scheduleChartLinkPathRefresh(\n svg: SVGSVGElement,\n nodeWidth: number,\n nodeHeight: number,\n nodeYOffset: number,\n ): void {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.ngzone.runOutsideAngular(() => {\n this.refreshChartLinkPaths(svg, nodeWidth, nodeHeight, nodeYOffset);\n });\n });\n });\n });\n }\n\n private refreshChartLinkPaths(\n svg: SVGSVGElement,\n nodeWidth: number,\n nodeHeight: number,\n nodeYOffset: number,\n ): void {\n if (!this.d3) {\n return;\n }\n this.d3\n .select(svg)\n .selectAll<SVGPathElement, { source: any; target: any }>('g.axp-chart-links path.link')\n .attr('d', (d) => this.computeOrgChartLinkPath(d, nodeWidth, nodeHeight, nodeYOffset));\n }\n\n /**\n * Reads rendered bounds for a node card inside its foreignObject.\n */\n private getRenderedNodeBounds(nodeId: string | number): { topOffset: number; height: number } | null {\n const foreignObject = document.querySelector(`foreignObject[node=\"node-${nodeId}\"]`) as HTMLElement | null;\n const nodeContainer = foreignObject?.querySelector('.--node-container') as HTMLElement | null;\n if (!foreignObject || !nodeContainer) {\n return null;\n }\n return {\n topOffset: nodeContainer.offsetTop,\n height: nodeContainer.offsetHeight,\n };\n }\n\n /**\n * Renders the node template for a given organizational node.\n * @param data - The node data.\n * @param x - The x-coordinate of the node.\n * @param y - The y-coordinate of the node.\n */\n private renderNodeTemplate(data: AXMOrganizationNode, _x: number, _y: number): void {\n if (data.type == null) {\n set(data, 'type', AXMOrgChartNodeType.Company);\n }\n set(data, 'category', data.type);\n\n // D3 runs inside runOutsideAngular; created views must be updated inside the zone.\n this.ngzone.run(() => {\n // Dynamic subviews can use an injector that does not inherit the page `providers`.\n // Bridge `AXM_ORG_CHART_HOST` explicitly so child node components can inject it.\n const nodeTreeInjector = Injector.create({\n parent: this.pageInjector,\n providers: [{ provide: AXM_ORG_CHART_HOST, useValue: this as AXMOrgChartHostApi }],\n });\n\n const ref: ComponentRef<AXMOrgChartNodeOutletComponent> = this.viewContainerRef.createComponent(\n AXMOrgChartNodeOutletComponent,\n { injector: nodeTreeInjector },\n );\n ref.setInput('data', data);\n\n const nodeElement = this.d3.select(this.treeContainer().nativeElement).select(`[node=\"node-${data.id}\"]`);\n const element = nodeElement.node() as HTMLElement | null;\n if (element) {\n element.appendChild(ref.location.nativeElement);\n ref.changeDetectorRef.detectChanges();\n } else {\n ref.destroy();\n }\n });\n }\n\n /**\n * Toggles the expansion state of a node.\n * @param data - The node data.\n * @param el - The HTML element representing the node.\n */\n public toggleNode(data: AXMOrganizationNode, _el?: HTMLDivElement | null) {\n data.isExpanded = data.isExpanded === undefined ? false : !data.isExpanded;\n this.selectedNodeId.set(data.id);\n this.createChart(this.treeContainer().nativeElement, this.chartService.rootNode());\n // el.scrollIntoView({\n // behavior: 'smooth',\n // });\n }\n\n /**\n * Clears the chart from the container element.\n * @param el - The container element.\n */\n private clearChart(el: Element): void {\n if (this.d3) {\n this.d3.select(el).select('svg').remove();\n this.viewContainerRef.clear();\n }\n }\n\n private redrawChart(): void {\n if (!this.d3 || !this.treeContainer()?.nativeElement) {\n return;\n }\n this.createChart(this.treeContainer().nativeElement, this.chartService.rootNode());\n }\n\n private async refresh() {\n await this.chartService.load();\n if (this.d3) {\n this.redrawChart();\n }\n }\n\n /**\n * After an in-page mutation: wait for server regen (or client fallback), then reload persisted chart.\n */\n private async refreshAfterMutation(): Promise<void> {\n await this.chartService.refreshAfterStructureChange();\n if (this.d3) {\n this.redrawChart();\n }\n this.recompute();\n }\n\n /**\n * Invoked when persisted chart structure was rebuilt (e.g. structure refresh hub).\n */\n private async reloadChartFromPersistedStructure(): Promise<void> {\n await this.chartService.reloadFromStorage();\n if (this.d3) {\n this.redrawChart();\n }\n this.recompute();\n }\n\n protected onVacantLeafSeatsChange(event: AXValueChangedEvent<boolean>): void {\n if (!event.isUserInteraction) {\n return;\n }\n this.chartService.setShowVacantLeafSeats(event.value);\n this.redrawChart();\n }\n\n //#endregion\n\n //#region ---- Context Menu ----\n\n /**\n * Handles right-click on the chart surface. Context menu items must be ready before `showAt`;\n * `AXContextMenuComponent` assigns `items` synchronously after `onOpening`, so async `onOpening` handlers leave the menu empty.\n */\n protected onOrgChartSurfaceContextMenu(e: MouseEvent): void {\n const hit = e.target instanceof HTMLElement ? e.target : null;\n const container = hit?.closest('.axp-chart-node .--node-container');\n if (!(container instanceof HTMLElement)) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n void this.openOrgChartContextMenuFromDom(e.clientX, e.clientY, container);\n }\n\n private async openOrgChartContextMenuFromDom(\n clientX: number,\n clientY: number,\n targetElement: HTMLElement,\n ): Promise<void> {\n const node = this.resolveNodeFromTarget(targetElement);\n if (!node) {\n return;\n }\n await this.openOrgChartContextMenuAt(clientX, clientY, node, targetElement);\n }\n\n /**\n * Turns carry {@link AXMOrgChartContextMenuItem.orgChartBreakBefore} into `AXMenuItem.break` on the **previous**\n * sibling at the same level. Recurses into nested flyouts, then removes `orgChartBreakBefore`.\n */\n private materializeOrgChartMenuBreaks(items: AXMOrgChartContextMenuItem[]): void {\n if (items.length === 0) {\n return;\n }\n\n for (const entry of items) {\n if (entry.items != null && entry.items.length > 0) {\n this.materializeOrgChartMenuBreaks(entry.items as AXMOrgChartContextMenuItem[]);\n }\n }\n\n for (let i = 0; i < items.length; i++) {\n if (items[i].orgChartBreakBefore === true && i > 0) {\n items[i - 1].break = true;\n }\n delete items[i].orgChartBreakBefore;\n }\n }\n\n /**\n * Removes a trailing `break` on the last row at each nesting level so the menu does not show a divider after the final item.\n * Recursive for nested flyouts.\n */\n private normalizeOrgChartContextMenuBreaks(items: AXMOrgChartContextMenuItem[]): void {\n if (items.length === 0) {\n return;\n }\n\n for (const entry of items) {\n if (entry.items != null && entry.items.length > 0) {\n this.normalizeOrgChartContextMenuBreaks(entry.items as AXMOrgChartContextMenuItem[]);\n }\n }\n\n const last = items[items.length - 1];\n if (last.break === true) {\n last.break = false;\n }\n }\n\n /**\n * Whether this action renders `AXMenuItem.break` after its **row**: `break` `after` / `both`, and\n * {@link AXMOrgChartNodeMenuAction.submenuSectionBreak} (separator after this row at any nesting level, including\n * root when the Employee flyout is flattened on employee cards).\n */\n private menuActionRowBreakAfter(action: AXMOrgChartNodeMenuAction): boolean {\n const b = action.break;\n const hasAfter = b === 'after' || b === 'both';\n return action.submenuSectionBreak === true || hasAfter;\n }\n\n /** `break` `before` / `both` for carry / bucket (not for inner-only submenuSectionBreak). */\n private menuActionHasBreakBefore(action: AXMOrgChartNodeMenuAction): boolean {\n return action.break === 'before' || action.break === 'both';\n }\n\n /** `after` / `both` for grouped parent bucket trailing separator. */\n private menuActionContributesGroupBreakAfter(action: AXMOrgChartNodeMenuAction): boolean {\n return action.break === 'after' || action.break === 'both';\n }\n\n /**\n * Loads actions, assigns menu structures, then opens the context menu with a pre-filled opening event (`items`\n * must be populated before {@link AXContextMenuComponent.showAt}: async `onOpening` alone loses the assignment).\n */\n private async openOrgChartContextMenuAt(\n clientX: number,\n clientY: number,\n node: AXMOrganizationNode,\n targetElement: HTMLElement,\n ): Promise<void> {\n this.selectNode(node);\n this.activeContextNode = node;\n this.activeContextMenuActions.clear();\n\n const context = this.createNodeContributionContext(node);\n const actions = await this.nodeContributionService.getMenuActions(context);\n\n const items: AXMOrgChartContextMenuItem[] = [];\n if (!actions.length) {\n items.push({\n name: 'org-chart.no-actions',\n text: this.chartML.noActionsAvailable,\n icon: 'fa-light fa-circle-info',\n disabled: true,\n });\n } else {\n const addFlyoutActions = actions.filter((action) => action.nestedInAddFlyout === true);\n const otherActions = actions.filter((action) => action.nestedInAddFlyout !== true);\n\n if (addFlyoutActions.length > 0) {\n items.push({\n name: 'org-chart.group.add',\n text: this.chartML.add,\n icon: 'fa-light fa-plus',\n break: true,\n items: addFlyoutActions.map((action) => this.buildContextMenuLeafItem(action)),\n } as AXMOrgChartContextMenuItem);\n }\n\n const nonAddMenuActions =\n context.nodeKind === 'employee'\n ? otherActions.map((action) =>\n action.submenuGroupId === AXM_ORG_CHART_EMPLOYEE_SUBMENU_GROUP_ID\n ? {\n ...action,\n submenuGroupId: undefined,\n submenuGroupTitle: undefined,\n submenuGroupIcon: undefined,\n }\n : action,\n )\n : otherActions;\n\n items.push(...this.buildGroupedNonAddContextMenuItems(nonAddMenuActions));\n }\n\n this.materializeOrgChartMenuBreaks(items);\n this.normalizeOrgChartContextMenuBreaks(items);\n\n const menu = this.contextMenu();\n if (!menu) {\n return;\n }\n\n this.ngzone.run(() => {\n const openingEvent = {\n sender: menu,\n canceled: false,\n targetElement,\n items: items as AXMenuItem[],\n } as AXContextMenuOpeningEvent;\n menu.showAt({ x: clientX, y: clientY }, targetElement, openingEvent);\n });\n }\n\n /**\n * Builds top-level rows for actions not under {@link AXMOrgChartNodeMenuAction.nestedInAddFlyout},\n * collapsing {@link AXMOrgChartNodeMenuAction.submenuGroupId} sets into one flyout.\n */\n private buildGroupedNonAddContextMenuItems(actions: AXMOrgChartNodeMenuAction[]): AXMOrgChartContextMenuItem[] {\n type GroupBucket = {\n title: AXPMultiLanguageString;\n icon?: string;\n actions: AXMOrgChartNodeMenuAction[];\n breakAfter: boolean;\n breakBefore: boolean;\n };\n\n const groups = new Map<string, GroupBucket>();\n const singles: AXMOrgChartNodeMenuAction[] = [];\n\n for (const action of actions) {\n const gid = action.submenuGroupId?.trim();\n if (!gid) {\n singles.push(action);\n continue;\n }\n let bucket = groups.get(gid);\n if (!bucket) {\n bucket = {\n title: action.submenuGroupTitle as any,\n icon: action.submenuGroupIcon,\n actions: [],\n breakAfter: false,\n breakBefore: false,\n };\n groups.set(gid, bucket);\n }\n bucket.actions.push(action);\n if (this.menuActionContributesGroupBreakAfter(action)) {\n bucket.breakAfter = true;\n }\n if (this.menuActionHasBreakBefore(action)) {\n bucket.breakBefore = true;\n }\n if (!bucket.icon && action.submenuGroupIcon) {\n bucket.icon = action.submenuGroupIcon;\n }\n }\n\n type OrderedEntry =\n | { kind: 'single'; action: AXMOrgChartNodeMenuAction }\n | { kind: 'group'; groupId: string };\n\n const ordered: OrderedEntry[] = [];\n for (const action of singles) {\n ordered.push({ kind: 'single', action });\n }\n for (const groupId of groups.keys()) {\n ordered.push({ kind: 'group', groupId });\n }\n\n const orderOf = (entry: OrderedEntry): number => {\n if (entry.kind === 'single') {\n return entry.action.order ?? Number.MAX_SAFE_INTEGER;\n }\n const bucket = groups.get(entry.groupId);\n if (!bucket || bucket.actions.length === 0) {\n return Number.MAX_SAFE_INTEGER;\n }\n return Math.min(...bucket.actions.map((a) => a.order ?? Number.MAX_SAFE_INTEGER));\n };\n ordered.sort((a, b) => orderOf(a) - orderOf(b));\n\n const items: AXMOrgChartContextMenuItem[] = [];\n for (const entry of ordered) {\n if (entry.kind === 'single') {\n items.push(this.buildContextMenuLeafItem(entry.action));\n continue;\n }\n const bucket = groups.get(entry.groupId);\n if (!bucket || bucket.actions.length === 0) {\n continue;\n }\n const sortedMembers = [...bucket.actions].sort(\n (a, b) => (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER),\n );\n if (sortedMembers.length === 1 && entry.groupId !== AXM_ORG_CHART_EMPLOYEE_SUBMENU_GROUP_ID) {\n items.push(this.buildContextMenuLeafItem(sortedMembers[0]));\n continue;\n }\n items.push({\n name: `org-chart.submenu.${entry.groupId}`,\n text: bucket.title,\n icon: bucket.icon ?? 'fa-light fa-comments',\n break: bucket.breakAfter,\n orgChartBreakBefore: bucket.breakBefore === true,\n items: sortedMembers.map((action) => this.buildContextMenuLeafItem(action)),\n } as AXMOrgChartContextMenuItem);\n }\n return items;\n }\n\n private buildContextMenuLeafItem(action: AXMOrgChartNodeMenuAction): AXMOrgChartContextMenuItem {\n this.activeContextMenuActions.set(action.id, action);\n return {\n name: action.id,\n text: action.title as any,\n icon: action.icon,\n color: action.color as AXStyleColorType | undefined,\n disabled: action.disabled,\n break: this.menuActionRowBreakAfter(action),\n orgChartBreakBefore: this.menuActionHasBreakBefore(action),\n };\n }\n\n protected async handleContextMenuItemClick(e: AXContextMenuItemsClickEvent): Promise<void> {\n const actionId = e.item.name;\n if (!actionId || !this.activeContextNode) {\n return;\n }\n const action = this.activeContextMenuActions.get(actionId);\n if (!action || action.disabled) {\n return;\n }\n await action.execute(this.createNodeContributionContext(this.activeContextNode));\n }\n\n //#endregion\n\n //#region ---- Node Selection & Host API ----\n\n public isNodeSelected(data: AXMOrganizationNode): boolean {\n return this.selectedNodeId() === data.id;\n }\n\n public selectNode(data: AXMOrganizationNode): void {\n this.selectedNodeId.set(data.id);\n }\n\n public openNodeContextMenuFromMore(event: unknown, data: AXMOrganizationNode): void {\n const nativeEvent = this.resolveNativeMouseEvent(event);\n if (!nativeEvent) {\n return;\n }\n nativeEvent.preventDefault();\n nativeEvent.stopPropagation();\n const fromCurrent =\n nativeEvent.currentTarget instanceof HTMLElement\n ? nativeEvent.currentTarget.closest('.--node-container')\n : null;\n const fromTarget =\n nativeEvent.target instanceof HTMLElement ? nativeEvent.target.closest('.--node-container') : null;\n const fromPoint = document.elementFromPoint(nativeEvent.clientX, nativeEvent.clientY);\n const anchor = (fromCurrent ?? fromTarget ?? fromPoint) as HTMLElement | null;\n if (!(anchor instanceof HTMLElement)) {\n return;\n }\n void this.openOrgChartContextMenuAt(nativeEvent.clientX, nativeEvent.clientY, data, anchor);\n }\n\n private resolveNodeFromTarget(target: HTMLElement | undefined): AXMOrganizationNode | null {\n if (!target) {\n return null;\n }\n let el: HTMLElement | null = target;\n while (el) {\n const id = el.getAttribute('data-chart-node-id');\n if (id) {\n const fromTree = this.findNodeInTree(this.chartService.rootNode(), id);\n if (fromTree) {\n return fromTree;\n }\n }\n el = el.parentElement;\n }\n const directNode = (target as unknown as { __data__?: { data?: AXMOrganizationNode } }).__data__?.data;\n if (directNode && typeof (directNode as AXMOrganizationNode).id === 'string') {\n return directNode as AXMOrganizationNode;\n }\n const foreignObject = target.closest('foreignObject.axp-chart-node') as unknown as\n | { __data__?: { data?: AXMOrganizationNode } }\n | null;\n const fromFo = foreignObject?.__data__?.data;\n if (fromFo && typeof (fromFo as AXMOrganizationNode).id === 'string') {\n return fromFo as AXMOrganizationNode;\n }\n return null;\n }\n\n private findNodeInTree(root: AXMOrganizationNode, id: string): AXMOrganizationNode | null {\n if (root.id === id) {\n return root;\n }\n for (const child of root.children ?? []) {\n const found = this.findNodeInTree(child, id);\n if (found) {\n return found;\n }\n }\n return null;\n }\n\n private resolveNativeMouseEvent(event: unknown): MouseEvent | null {\n if (event instanceof MouseEvent) {\n return event;\n }\n if (\n typeof event === 'object' &&\n event != null &&\n 'nativeEvent' in event &&\n (event as { nativeEvent?: unknown }).nativeEvent instanceof MouseEvent\n ) {\n return (event as { nativeEvent: MouseEvent }).nativeEvent;\n }\n return null;\n }\n\n private createNodeContributionContext(node: AXMOrganizationNode): AXMOrgChartNodeContributionContext {\n return {\n node,\n nodeKind: this.resolveNodeKind(node),\n selectedMode: this.chartService.selectedMode(),\n refreshChart: async () => {\n await this.refreshAfterMutation();\n },\n host: this,\n };\n }\n\n private resolveNodeKind(node: AXMOrganizationNode): AXMOrgChartNodeKind {\n if (node.type === AXMOrgChartNodeType.Company) {\n return 'company-root';\n }\n if (node.type === AXMOrgChartNodeType.BusinessUnit) {\n return 'business-unit';\n }\n if (node.type === AXMOrgChartNodeType.Position) {\n return 'position';\n }\n if (node.type === AXMOrgChartNodeType.Employee) {\n return 'employee';\n }\n return 'other';\n }\n\n //#endregion\n\n //#region ---- Print & Card Presentation ----\n\n /**\n * Prints the organizational chart.\n */\n protected async printChart() {\n const savedPanX = this.panX();\n const savedPanY = this.panY();\n const savedPanZoomLevel = this.panZoomLevel();\n this.panX.set(0);\n this.panY.set(0);\n this.panZoomLevel.set(100);\n await this.chartService.printChart(this.treeContainer().nativeElement);\n this.panX.set(savedPanX);\n this.panY.set(savedPanY);\n this.panZoomLevel.set(savedPanZoomLevel);\n }\n\n /**\n * Parses hex or comma-separated `rgb(...)` into comma-separated channels for `rgba(var(--node-*))`.\n */\n private parseCssColorToRgbCommaChannels(color: string): string | null {\n const s = color.trim();\n const hex6 = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(s);\n if (hex6) {\n return `${parseInt(hex6[1], 16)}, ${parseInt(hex6[2], 16)}, ${parseInt(hex6[3], 16)}`;\n }\n const hex3 = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i.exec(s);\n if (hex3) {\n return `${parseInt(hex3[1] + hex3[1], 16)}, ${parseInt(hex3[2] + hex3[2], 16)}, ${parseInt(hex3[3] + hex3[3], 16)}`;\n }\n const rgb = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i.exec(s);\n if (rgb) {\n return `${rgb[1]}, ${rgb[2]}, ${rgb[3]}`;\n }\n return null;\n }\n\n private contrastingRgbCommaChannels(bgComma: string): string {\n const parts = bgComma.split(',').map((p) => Number(p.trim()));\n const [r, g, b] = parts;\n const luminance = 0.2126 * (r / 255) + 0.7152 * (g / 255) + 0.0722 * (b / 255);\n return luminance > 0.55 ? '15, 23, 42' : '255, 255, 255';\n }\n\n private darkenRgbCommaChannels(bgComma: string, factor: number): string {\n const parts = bgComma.split(',').map((p) => Math.round(Number(p.trim()) * factor));\n return `${parts[0]}, ${parts[1]}, ${parts[2]}`;\n }\n\n /**\n * Gets the node colors based on the provided color.\n * @param color - Semantic token (for example primary, accent2) or a literal CSS color (hex / rgb).\n * @returns An object containing the node's background, text, and border colors.\n */\n public getNodeColors(color: string): Record<string, string> {\n const literal = this.parseCssColorToRgbCommaChannels(color);\n if (literal) {\n return {\n '--node-bg-color': literal,\n '--node-text-color': this.contrastingRgbCommaChannels(literal),\n '--node-border-color': this.darkenRgbCommaChannels(literal, 0.82),\n };\n }\n if (color.includes('surface')) {\n return {\n '--node-bg-color': `var(--ax-sys-color-${color})`,\n '--node-text-color': `var(--ax-sys-color-on-${color})`,\n '--node-border-color': `var(--ax-sys-color-border-${color})`,\n };\n }\n return {\n '--node-bg-color': `var(--ax-sys-color-${color}-surface)`,\n '--node-text-color': `var(--ax-sys-color-on-${color}-surface)`,\n '--node-border-color': `var(--ax-sys-color-border-${color}-surface)`,\n };\n }\n\n /**\n * Merged cards render the assignee in the body; suppressing `subtitle` avoids repeating name/role lines\n * (including for charts persisted before subtitle generation was tightened).\n */\n public shouldShowOrgCardSubtitle(data: AXMOrganizationNode): boolean {\n const md = data.metadata ?? {};\n const template = md['chartTemplate'];\n if (template === 'merged-unit') {\n const uh = md['unitHead'] as Record<string, unknown> | undefined;\n if (uh && uh['vacant'] !== true && typeof uh['employeeName'] === 'string' && uh['employeeName'].trim().length > 0) {\n return false;\n }\n }\n if (template === 'merged-manager') {\n if (md['vacant'] === true) {\n return true;\n }\n const occ = md['occupant'] as Record<string, unknown> | undefined;\n const dn = occ?.['displayName'];\n if (typeof dn === 'string' && dn.trim().length > 0) {\n return false;\n }\n }\n return true;\n }\n\n //#endregion\n\n //#region ---- Node Card Data ----\n\n public getSubtreeRosterCounts(data: AXMOrganizationNode): { people: number; positions: number } | null {\n if (\n data.type === AXMOrgChartNodeType.Position &&\n data.metadata?.['chartTemplate'] === 'position-ic'\n ) {\n const stats = data.metadata?.['stats'] as Record<string, unknown> | undefined;\n const subtreePeopleRaw = stats?.['subtreePeople'];\n let people: number;\n if (typeof subtreePeopleRaw === 'number' && Number.isFinite(subtreePeopleRaw)) {\n people = Math.max(0, Math.floor(subtreePeopleRaw));\n } else if (data.metadata?.['vacant'] === true) {\n people = 0;\n } else {\n const childCount = data.children?.length ?? 0;\n people = childCount > 0 ? childCount : 1;\n }\n /** One catalog seat row in the chart. */\n return { people, positions: 1 };\n }\n if (data.type !== AXMOrgChartNodeType.BusinessUnit && data.type !== AXMOrgChartNodeType.Company) {\n return null;\n }\n if (data.metadata?.['isRegional'] === true) {\n return null;\n }\n const stats = data.metadata?.['stats'] as Record<string, unknown> | undefined;\n const peopleRaw = stats?.['subtreePeople'];\n const positionsRaw = stats?.['subtreePositionSeatCount'];\n if (typeof peopleRaw !== 'number' || !Number.isFinite(peopleRaw)) {\n return null;\n }\n if (typeof positionsRaw !== 'number' || !Number.isFinite(positionsRaw)) {\n return null;\n }\n return {\n people: Math.max(0, Math.floor(peopleRaw)),\n positions: Math.max(0, Math.floor(positionsRaw)),\n };\n }\n\n public getTeamsMembershipCount(data: AXMOrganizationNode): number | null {\n const stats = data.metadata?.['stats'];\n const candidates: unknown[] = [\n stats?.['teamMemberships'],\n stats?.['teamMembershipCount'],\n stats?.['teams'],\n stats?.['teamsCount'],\n data.metadata?.['teamMemberships'],\n data.metadata?.['teamMembershipCount'],\n data.metadata?.['teamsCount'],\n data.metadata?.['teams'],\n ];\n for (const candidate of candidates) {\n if (typeof candidate === 'number' && Number.isFinite(candidate) && candidate >= 0) {\n return candidate;\n }\n }\n return null;\n }\n\n /**\n * Metadata rows for the side detail panel only (key-value list is not shown on chart cards).\n */\n public getNodeInfoItems(data: AXMOrganizationNode): Array<{ label: AXPMultiLanguageString; value: string }> {\n const metadata = data.metadata ?? {};\n const toText = (value: unknown): string | null => {\n if (value == null) {\n return null;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed.length ? trimmed : null;\n }\n return null;\n };\n const resolveFirst = (...candidates: unknown[]): string | null => {\n for (const candidate of candidates) {\n const text = toText(candidate);\n if (text != null) {\n return text;\n }\n }\n return null;\n };\n const createInfo = (\n label: AXPMultiLanguageString,\n value: string | null,\n ): { label: AXPMultiLanguageString; value: string } | null => {\n return value == null ? null : { label, value };\n };\n const items: Array<{ label: AXPMultiLanguageString; value: string }> = [];\n const teamMembershipCount = this.getTeamsMembershipCount(data);\n\n if (data.type === AXMOrgChartNodeType.BusinessUnit) {\n const unitHead = metadata['unitHead'] as Record<string, unknown> | undefined;\n if (unitHead) {\n const vacant = unitHead['vacant'] === true;\n const rawName = unitHead['employeeName'];\n const nameText =\n vacant || typeof rawName !== 'string' || !rawName.trim()\n ? resolveMultiLanguageString(this.chartML.vacant, this.localeId)\n : rawName.trim();\n const posRaw = unitHead['positionTitle'];\n let positionText: string | null = null;\n if (typeof posRaw === 'string') {\n const t = posRaw.trim();\n positionText = t.length ? t : null;\n } else if (posRaw != null && typeof posRaw === 'object') {\n const t = resolveMultiLanguageString(posRaw as AXPMultiLanguageString, this.localeId).trim();\n positionText = t.length ? t : null;\n }\n const buLeadRows = [\n createInfo(this.chartML.buHead, nameText),\n createInfo(this.chartML.buPosition, positionText),\n ].filter((item): item is { label: AXPMultiLanguageString; value: string } => item != null);\n items.push(...buLeadRows);\n }\n }\n\n if (data.type === AXMOrgChartNodeType.BusinessUnit || data.type === AXMOrgChartNodeType.Company) {\n const unitType = resolveFirst(metadata['unitTypeTitle'], metadata['unitType'], metadata['typeLabel']);\n const location = resolveFirst(metadata['locationName'], metadata['regionName'], metadata['countryName']);\n const infoCandidates = [\n createInfo(this.chartML.unitType, unitType),\n createInfo(this.chartML.location, location),\n ];\n if (teamMembershipCount != null) {\n infoCandidates.push({ label: this.chartML.teams, value: String(teamMembershipCount) });\n }\n items.push(\n ...infoCandidates.filter((item): item is { label: AXPMultiLanguageString; value: string } => item != null),\n );\n }\n\n if (data.type === AXMOrgChartNodeType.Position) {\n const vacantIcSeat =\n metadata['vacant'] === true && metadata['chartTemplate'] === 'position-ic';\n const ouMl = metadata['organizationalUnitTitle'] as AXPMultiLanguageString | undefined;\n const ouDisplay =\n ouMl != null && typeof ouMl === 'object'\n ? resolveMultiLanguageString(ouMl, this.localeId)\n : null;\n const level = resolveFirst(metadata['jobLevelTitle'], metadata['jobLevel'], metadata['grade']);\n const code = resolveFirst(metadata['code'], metadata['positionCode']);\n const capacity = resolveFirst(metadata['capacity']);\n const positionItems = vacantIcSeat\n ? [createInfo(this.chartML.businessUnit, ouDisplay)]\n : [\n createInfo(this.chartML.businessUnit, ouDisplay),\n createInfo(this.chartML.level, level),\n createInfo(this.chartML.code, code),\n createInfo(this.chartML.capacity, capacity),\n ];\n items.push(\n ...positionItems.filter((item): item is { label: AXPMultiLanguageString; value: string } => item != null),\n );\n }\n\n if (data.type === AXMOrgChartNodeType.Employee || data.metadata?.['chartTemplate'] === 'employee-card') {\n const email = resolveFirst(metadata['email'], metadata['workEmail']);\n const phone = resolveFirst(metadata['phone'], metadata['mobile']);\n const employmentType = resolveFirst(metadata['employmentTypeTitle'], metadata['employmentType']);\n const workMode = resolveFirst(metadata['workModeTitle'], metadata['workMode']);\n const employeeInfo = [\n createInfo(this.chartML.email, email),\n createInfo(this.chartML.phone, phone),\n createInfo(this.chartML.employmentType, employmentType),\n createInfo(this.chartML.workMode, workMode),\n ];\n /** Teams count is rendered on employee chart cards — omit here to avoid duplicate rows. */\n items.push(\n ...employeeInfo.filter((item): item is { label: AXPMultiLanguageString; value: string } => item != null),\n );\n }\n\n return items.slice(0, 8);\n }\n\n //#endregion\n\n //#region ---- Page Layout Integration ----\n\n /**\n * Translation key for the hierarchy chart mode shown under the page title.\n */\n private chartModeDescriptionTranslationKey(mode: OrgChartMode): string {\n const keys: Record<OrgChartMode, string> = {\n structure: '@organization-management:organization-chart.options.mode.structure',\n location: '@organization-management:organization-chart.options.mode.location',\n reporting: '@organization-management:organization-chart.options.mode.reporting',\n positionHierarchy:\n '@organization-management:organization-chart.options.mode.positionHierarchy',\n };\n return keys[mode];\n }\n\n protected updateVar(oldValue: any, newValue: AXMOrgChartCategory) {\n oldValue.cat = newValue;\n }\n\n override async getPageTitle(): Promise<string> {\n return await this.translateService.translateAsync(\n '@organization-management:organization-chart.components.chart.title',\n );\n }\n\n override async getPageDescription(): Promise<string> {\n const mode = this.chartService.selectedMode();\n const modeKey = this.chartModeDescriptionTranslationKey(mode);\n return await this.translateService.translateAsync(modeKey);\n }\n\n protected override getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n const mode = this.chartService.selectedMode();\n const modes: OrgChartMode[] = ['structure', 'location', 'reporting', 'positionHierarchy'];\n return modes.map((m) => ({\n title: this.chartModeDescriptionTranslationKey(m),\n command: {\n name: 'chart-mode',\n metadata: { mode: m, isSelected: mode === m, hideSelectionCheckSuffix: true },\n },\n // Prefix renders `fa-light {{ icon }}` (matches dashboard title-action check placement).\n icon: mode === m ? 'fa-check' : '',\n }));\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n ...getActionButton('print'),\n command: {\n name: 'print',\n },\n },\n {\n ...getActionButton('refresh'),\n command: {\n name: 'refresh',\n },\n },\n ];\n }\n override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n return [\n {\n title: await this.translateService.translateAsync('@organization-management:module.menus.root.title'),\n },\n ];\n }\n\n override async execute(command: AXPExecuteCommand) {\n if (command.name === 'chart-mode') {\n const mode = command.metadata?.['mode'] as OrgChartMode | undefined;\n if (mode) {\n this.chartService.setChartMode(mode);\n this.redrawChart();\n this.recompute();\n }\n return;\n }\n if (command.name == 'print') {\n await this.printChart();\n }\n if (command.name == 'refresh') {\n await this.chartService.generate();\n await this.refresh();\n this.recompute();\n }\n }\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n ngOnDestroy(): void {\n this.clearChart(this.treeContainer().nativeElement);\n }\n\n //#endregion\n}\n\n//#endregion\n","<axp-page-layout *translate=\"let t\">\n <axp-page-toolbar>\n <axp-layout-prefix>\n <div class=\"flex flex-wrap items-center gap-3\">\n <ax-search-box class=\"w-72\" [(ngModel)]=\"chartSearchQuery\"\n (onValueChanged)=\"onChartSearchValueChanged($event)\" [placeholder]=\"\n ('@organization-management:organization-chart.components.chart.search-placeholder' | translate | async) || ''\n \">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n @if (chartService.selectedMode() !== 'reporting') {\n <div class=\"flex items-center gap-2 flex-shrink-0 whitespace-nowrap\">\n <span class=\"text-sm\">{{\n '@organization-management:organization-chart.components.generate-dialog.fields.show-vacant-leaf-seats.label'\n | translate\n | async\n }}</span>\n <ax-switch [ngModel]=\"chartService.showVacantLeafSeats()\"\n (onValueChanged)=\"onVacantLeafSeatsChange($event)\"></ax-switch>\n </div>\n }\n </div>\n </axp-layout-prefix>\n <axp-layout-suffix>\n @if (deviceService.isLarge()) {\n <ax-button (onClick)=\"toggleDetailPanel()\">\n <ax-icon icon=\"{{ isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"></ax-icon>\n </ax-button>\n }\n </axp-layout-suffix>\n </axp-page-toolbar>\n <axp-page-content class=\"overflow-hidden flex flex-col\">\n <div class=\"flex flex-row gap-4 flex-1 min-h-0 overflow-hidden\" #parent id=\"parent\">\n <div class=\"flex-1 min-w-0 min-h-0 overflow-hidden relative ax-light\">\n <div #chart axPanView [(panX)]=\"panX\" [(panY)]=\"panY\" [freeMode]=\"true\" [(zoom)]=\"panZoomLevel\"\n [fitContent]=\"true\" wrapperClasses=\"h\" class=\"ax-light\" (contextmenu)=\"onOrgChartSurfaceContextMenu($event)\">\n </div>\n <axp-layout-floating-zoom-bar\n [zoomLevel]=\"panZoomLevel()\"\n (zoomIn)=\"zoomIn()\"\n (zoomOut)=\"zoomOut()\"\n (zoomReset)=\"zoomReset()\"\n />\n <ax-context-menu [orientation]=\"'vertical'\" [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\">\n </ax-context-menu>\n </div>\n @if (isDetailPanelOpen() && deviceService.isLarge()) {\n <axp-layout-side-detail-panel\n class=\"sticky top-0 z-10 max-h-full flex-none\"\n [header]=\"detailPanelHeader()\"\n [sections]=\"detailPanelSections()\"\n [emptyState]=\"detailPanelEmptyState()\"\n [noRowsMessage]=\"detailPanelNoRowsMessage()\"\n (panelClose)=\"toggleDetailPanel()\"\n />\n }\n </div>\n </axp-page-content>\n</axp-page-layout>"],"names":["OrgRootConfig","LocationRootConfig","HcmRootConfig","createMultiLanguageString","resolveMultiLanguageString","i1","i3","i5","i8","i4"],"mappings":"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"}
|