@acorex-platform/module-organization-management-client 0.0.33 → 0.0.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/fesm2022/{acorex-platform-module-organization-management-client-acorex-platform-module-organization-management-client-UGWNdPxI.mjs → acorex-platform-module-organization-management-client-acorex-platform-module-organization-management-client-ZM6X7IDO.mjs} +11 -11
  2. package/fesm2022/{acorex-platform-module-organization-management-client-acorex-platform-module-organization-management-client-UGWNdPxI.mjs.map → acorex-platform-module-organization-management-client-acorex-platform-module-organization-management-client-ZM6X7IDO.mjs.map} +1 -1
  3. package/fesm2022/acorex-platform-module-organization-management-client-add-business-unit-to-business-unit.command-CA2uZQyC.mjs.map +1 -1
  4. package/fesm2022/acorex-platform-module-organization-management-client-add-position-to-business-unit.command-F7jD3jKs.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-module-organization-management-client-add-team-to-business-unit.command-BLQFjhS5.mjs.map +1 -1
  6. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entities-business-unit-type.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entities-business-unit.mjs +3 -3
  8. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entities-business-unit.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entities-chart.mjs.map +1 -1
  10. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entities-company.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entities-job-definition.mjs.map +1 -1
  12. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entities-job-level.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entities-position.mjs.map +1 -1
  14. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entities-responsibility-level.mjs.map +1 -1
  15. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entities-responsibility.mjs.map +1 -1
  16. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entities-team-business-unit.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entities-team-member-role.mjs.map +1 -1
  18. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entities-team-member.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entities-team.mjs.map +1 -1
  20. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-acorex-platform-module-organization-management-client-contracts-entity-catalog-xL4H41ft.mjs → acorex-platform-module-organization-management-client-contracts-entity-catalog-acorex-platform-module-organization-management-client-contracts-entity-catalog-vMiwmkDK.mjs} +14 -14
  21. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-acorex-platform-module-organization-management-client-contracts-entity-catalog-xL4H41ft.mjs.map → acorex-platform-module-organization-management-client-contracts-entity-catalog-acorex-platform-module-organization-management-client-contracts-entity-catalog-vMiwmkDK.mjs.map} +1 -1
  22. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-business-unit-type.entity-BE6ZOUYI.mjs → acorex-platform-module-organization-management-client-contracts-entity-catalog-business-unit-type.entity-BmhCZeXd.mjs} +2 -2
  23. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-business-unit-type.entity-BE6ZOUYI.mjs.map → acorex-platform-module-organization-management-client-contracts-entity-catalog-business-unit-type.entity-BmhCZeXd.mjs.map} +1 -1
  24. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-business-unit.entity-CzApxGMJ.mjs → acorex-platform-module-organization-management-client-contracts-entity-catalog-business-unit.entity-CIPmfbsM.mjs} +5 -5
  25. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entity-catalog-business-unit.entity-CIPmfbsM.mjs.map +1 -0
  26. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-chart.entity-BWocZ2iP.mjs → acorex-platform-module-organization-management-client-contracts-entity-catalog-chart.entity-sg_rI9It.mjs} +2 -2
  27. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-chart.entity-BWocZ2iP.mjs.map → acorex-platform-module-organization-management-client-contracts-entity-catalog-chart.entity-sg_rI9It.mjs.map} +1 -1
  28. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-company.entity-tU-53b9G.mjs → acorex-platform-module-organization-management-client-contracts-entity-catalog-company.entity-BSDO_7eL.mjs} +2 -2
  29. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-company.entity-tU-53b9G.mjs.map → acorex-platform-module-organization-management-client-contracts-entity-catalog-company.entity-BSDO_7eL.mjs.map} +1 -1
  30. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-job-definition.entity-sOUJWK_4.mjs → acorex-platform-module-organization-management-client-contracts-entity-catalog-job-definition.entity-0W6OSQH-.mjs} +2 -2
  31. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-job-definition.entity-sOUJWK_4.mjs.map → acorex-platform-module-organization-management-client-contracts-entity-catalog-job-definition.entity-0W6OSQH-.mjs.map} +1 -1
  32. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-job-level.entity-C866Av4K.mjs → acorex-platform-module-organization-management-client-contracts-entity-catalog-job-level.entity-DbMjRbn9.mjs} +2 -2
  33. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-job-level.entity-C866Av4K.mjs.map → acorex-platform-module-organization-management-client-contracts-entity-catalog-job-level.entity-DbMjRbn9.mjs.map} +1 -1
  34. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-position.entity-DI5SQJdb.mjs → acorex-platform-module-organization-management-client-contracts-entity-catalog-position.entity-BkauiyPn.mjs} +2 -2
  35. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-position.entity-DI5SQJdb.mjs.map → acorex-platform-module-organization-management-client-contracts-entity-catalog-position.entity-BkauiyPn.mjs.map} +1 -1
  36. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-responsibility-level.entity-DHyK2SPK.mjs → acorex-platform-module-organization-management-client-contracts-entity-catalog-responsibility-level.entity-BagFwJmO.mjs} +2 -2
  37. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-responsibility-level.entity-DHyK2SPK.mjs.map → acorex-platform-module-organization-management-client-contracts-entity-catalog-responsibility-level.entity-BagFwJmO.mjs.map} +1 -1
  38. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-responsibility.entity-B3UAoNc6.mjs → acorex-platform-module-organization-management-client-contracts-entity-catalog-responsibility.entity-DHhT7rSq.mjs} +2 -2
  39. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-responsibility.entity-B3UAoNc6.mjs.map → acorex-platform-module-organization-management-client-contracts-entity-catalog-responsibility.entity-DHhT7rSq.mjs.map} +1 -1
  40. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-team-business-unit.entity-CCSV3xtX.mjs → acorex-platform-module-organization-management-client-contracts-entity-catalog-team-business-unit.entity-hkCAl8so.mjs} +2 -2
  41. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-team-business-unit.entity-CCSV3xtX.mjs.map → acorex-platform-module-organization-management-client-contracts-entity-catalog-team-business-unit.entity-hkCAl8so.mjs.map} +1 -1
  42. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-team-member-role.entity-vnO44D26.mjs → acorex-platform-module-organization-management-client-contracts-entity-catalog-team-member-role.entity-BeGE4JUl.mjs} +2 -2
  43. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-team-member-role.entity-vnO44D26.mjs.map → acorex-platform-module-organization-management-client-contracts-entity-catalog-team-member-role.entity-BeGE4JUl.mjs.map} +1 -1
  44. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-team-member.entity-j7Zu11Fo.mjs → acorex-platform-module-organization-management-client-contracts-entity-catalog-team-member.entity-10nYBrN4.mjs} +2 -2
  45. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-team-member.entity-j7Zu11Fo.mjs.map → acorex-platform-module-organization-management-client-contracts-entity-catalog-team-member.entity-10nYBrN4.mjs.map} +1 -1
  46. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-team.entity-BBdUYFU0.mjs → acorex-platform-module-organization-management-client-contracts-entity-catalog-team.entity-Bygn5B_k.mjs} +2 -2
  47. package/fesm2022/{acorex-platform-module-organization-management-client-contracts-entity-catalog-team.entity-BBdUYFU0.mjs.map → acorex-platform-module-organization-management-client-contracts-entity-catalog-team.entity-Bygn5B_k.mjs.map} +1 -1
  48. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entity-catalog.mjs +1 -1
  49. package/fesm2022/acorex-platform-module-organization-management-client-contracts.mjs.map +1 -1
  50. package/fesm2022/acorex-platform-module-organization-management-client-feature-definition.provider-BQKtvXOM.mjs.map +1 -1
  51. package/fesm2022/acorex-platform-module-organization-management-client-generate-org-chart.command-DJnFJKuo.mjs.map +1 -1
  52. package/fesm2022/acorex-platform-module-organization-management-client-job-definition-matrix-page.utils-CGRJXMOn.mjs.map +1 -1
  53. package/fesm2022/{acorex-platform-module-organization-management-client-job-definition-pages-component.provider-TIHOAeAI.mjs → acorex-platform-module-organization-management-client-job-definition-pages-component.provider-XH_rXGwz.mjs} +2 -2
  54. package/fesm2022/{acorex-platform-module-organization-management-client-job-definition-pages-component.provider-TIHOAeAI.mjs.map → acorex-platform-module-organization-management-client-job-definition-pages-component.provider-XH_rXGwz.mjs.map} +1 -1
  55. package/fesm2022/{acorex-platform-module-organization-management-client-job-definition-responsibilities-page.component-KwOQXdX0.mjs → acorex-platform-module-organization-management-client-job-definition-responsibilities-page.component-CpirrInU.mjs} +2 -2
  56. package/fesm2022/{acorex-platform-module-organization-management-client-job-definition-responsibilities-page.component-KwOQXdX0.mjs.map → acorex-platform-module-organization-management-client-job-definition-responsibilities-page.component-CpirrInU.mjs.map} +1 -1
  57. package/fesm2022/acorex-platform-module-organization-management-client-job-definition-skills-page.component-bQOqP1Tx.mjs.map +1 -1
  58. package/fesm2022/acorex-platform-module-organization-management-client-local-entities.mjs.map +1 -1
  59. package/fesm2022/acorex-platform-module-organization-management-client-menu.provider-BgRoEC48.mjs.map +1 -1
  60. package/fesm2022/acorex-platform-module-organization-management-client-org-chart-default-node-contribution.provider-BQ0ihb43.mjs.map +1 -1
  61. package/fesm2022/{acorex-platform-module-organization-management-client-org-chart-employee-flyout-contribution.provider-DZs4VB50.mjs → acorex-platform-module-organization-management-client-org-chart-employee-flyout-contribution.provider-ZnMtkQSg.mjs} +2 -2
  62. package/fesm2022/{acorex-platform-module-organization-management-client-org-chart-employee-flyout-contribution.provider-DZs4VB50.mjs.map → acorex-platform-module-organization-management-client-org-chart-employee-flyout-contribution.provider-ZnMtkQSg.mjs.map} +1 -1
  63. package/fesm2022/acorex-platform-module-organization-management-client-org-chart-position-employee-node-contribution.provider-BTicXn9n.mjs.map +1 -1
  64. package/fesm2022/{acorex-platform-module-organization-management-client-org-chart-ux-node-contribution.provider-ISEbvMkZ.mjs → acorex-platform-module-organization-management-client-org-chart-ux-node-contribution.provider-uZkFZFPA.mjs} +2 -2
  65. package/fesm2022/{acorex-platform-module-organization-management-client-org-chart-ux-node-contribution.provider-ISEbvMkZ.mjs.map → acorex-platform-module-organization-management-client-org-chart-ux-node-contribution.provider-uZkFZFPA.mjs.map} +1 -1
  66. package/fesm2022/{acorex-platform-module-organization-management-client-org-chart.page-CMd5nTa7.mjs → acorex-platform-module-organization-management-client-org-chart.page-BhXvP2qN.mjs} +7 -7
  67. package/fesm2022/{acorex-platform-module-organization-management-client-org-chart.page-CMd5nTa7.mjs.map → acorex-platform-module-organization-management-client-org-chart.page-BhXvP2qN.mjs.map} +1 -1
  68. package/fesm2022/acorex-platform-module-organization-management-client-permission-definition.provider-CiCdTBGo.mjs.map +1 -1
  69. package/fesm2022/acorex-platform-module-organization-management-client-remove-position-from-business-unit.command-BFQVTpfy.mjs.map +1 -1
  70. package/fesm2022/acorex-platform-module-organization-management-client-replace-position-assignee.command-CSgERqLG.mjs.map +1 -1
  71. package/fesm2022/acorex-platform-module-organization-management-client-responsibilities-matrix-widget-column.component-C5H0kcVW.mjs.map +1 -1
  72. package/fesm2022/{acorex-platform-module-organization-management-client-responsibilities-matrix-widget-edit.component-DmDQSgYC.mjs → acorex-platform-module-organization-management-client-responsibilities-matrix-widget-edit.component-m4S5GRko.mjs} +2 -2
  73. package/fesm2022/{acorex-platform-module-organization-management-client-responsibilities-matrix-widget-edit.component-DmDQSgYC.mjs.map → acorex-platform-module-organization-management-client-responsibilities-matrix-widget-edit.component-m4S5GRko.mjs.map} +1 -1
  74. package/fesm2022/{acorex-platform-module-organization-management-client-responsibilities-matrix-widget-view.component-BkLZhXhM.mjs → acorex-platform-module-organization-management-client-responsibilities-matrix-widget-view.component-Cbua852d.mjs} +2 -2
  75. package/fesm2022/{acorex-platform-module-organization-management-client-responsibilities-matrix-widget-view.component-BkLZhXhM.mjs.map → acorex-platform-module-organization-management-client-responsibilities-matrix-widget-view.component-Cbua852d.mjs.map} +1 -1
  76. package/fesm2022/{acorex-platform-module-organization-management-client-responsibilities-matrix.component-DqO6xE2p.mjs → acorex-platform-module-organization-management-client-responsibilities-matrix.component-Cpgdxtw-.mjs} +2 -2
  77. package/fesm2022/{acorex-platform-module-organization-management-client-responsibilities-matrix.component-DqO6xE2p.mjs.map → acorex-platform-module-organization-management-client-responsibilities-matrix.component-Cpgdxtw-.mjs.map} +1 -1
  78. package/fesm2022/acorex-platform-module-organization-management-client-settings.provider-B3nDm32f.mjs.map +1 -1
  79. package/fesm2022/acorex-platform-module-organization-management-client.mjs +1 -1
  80. package/package.json +2 -2
  81. package/types/acorex-platform-module-organization-management-client-contracts.d.ts +2 -2
  82. package/fesm2022/acorex-platform-module-organization-management-client-contracts-entity-catalog-business-unit.entity-CzApxGMJ.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-organization-management-client-org-chart-position-employee-node-contribution.provider-BTicXn9n.mjs","sources":["../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/contributions/org-chart-position-employee-node-contribution.provider.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport {\n AXM_HCM_POSITION_ASSIGNMENT_ASSIGN_COMMAND,\n AXMOrganizationManagementCommandKeys,\n AXPPeopleOrganizationPermissionKeys\n} from '@acorex-platform/module-organization-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-organization-management-client/contracts';\n\nimport {\n AXMOrgChartNodeContributionContext,\n AXMOrgChartNodeContributionProvider,\n AXMOrgChartNodeMenuAction,\n} from '../tokens/org-chart-node-contribution.token';\n\n//#endregion\n\n//#region ---- Module Constants ----\n\nconst orgChartNodeActionKey = (suffix: string): string =>\n `@organization-management:organization-chart.node-actions.${suffix}`;\n\nconst POSITION_ENTITY_SOURCE = RootConfig.entities.position.source;\n\n//#endregion\n\n/**\n * Context menu actions for org chart **position** nodes (structure / location / etc.).\n */\n@Injectable()\nexport class AXMOrgChartPositionEmployeeNodeContributionProvider implements AXMOrgChartNodeContributionProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly commandService = inject(AXPCommandService);\n private readonly sessionService = inject(AXPSessionService);\n\n //#endregion\n\n //#region ---- AXMOrgChartNodeContributionProvider Implementation ----\n\n async getMenuActions(context: AXMOrgChartNodeContributionContext): Promise<AXMOrgChartNodeMenuAction[]> {\n if (context.nodeKind === 'position') {\n return this.getPositionNodeActions(context);\n }\n return [];\n }\n\n //#endregion\n\n //#region ---- Position Node Actions ----\n\n private getPositionNodeActions(context: AXMOrgChartNodeContributionContext): AXMOrgChartNodeMenuAction[] {\n const positionId = this.resolvePositionId(context);\n if (!positionId) {\n return [];\n }\n\n const businessUnitId = this.resolveBusinessUnitIdForPosition(context);\n const vacant = context.node.metadata?.['vacant'] === true;\n const occupant = context.node.metadata?.['occupant'] as Record<string, unknown> | undefined;\n const occupantEmployeeId =\n typeof occupant?.['employeeId'] === 'string' && occupant['employeeId'].trim().length > 0\n ? occupant['employeeId'].trim()\n : undefined;\n\n const canMaintainOrganization = this.authorize(AXPPeopleOrganizationPermissionKeys.MaintainOrganization);\n const canUpdateBusinessUnit = canMaintainOrganization;\n const canCreateAssignment = canMaintainOrganization;\n const canEditAssignment = canMaintainOrganization;\n\n const actions: AXMOrgChartNodeMenuAction[] = [];\n\n if (vacant && businessUnitId) {\n actions.push({\n id: 'organization-management.assign-employee-to-position-from-chart',\n title: orgChartNodeActionKey('assign-employee-to-position'),\n icon: 'fa-light fa-user-plus',\n order: 110,\n disabled: !canCreateAssignment,\n execute: async (ctx) => {\n const pid = this.resolvePositionId(ctx);\n const buId = this.resolveBusinessUnitIdForPosition(ctx);\n if (!pid || !buId) {\n return;\n }\n const result = await this.commandService.execute(AXM_HCM_POSITION_ASSIGNMENT_ASSIGN_COMMAND, {\n data: {\n businessUnitId: buId,\n positionId: pid,\n isPrimary: false,\n },\n });\n if (result?.success) {\n await ctx.refreshChart();\n }\n },\n });\n }\n\n if (!vacant && occupantEmployeeId && businessUnitId) {\n actions.push({\n id: 'organization-management.replace-position-assignee-from-chart',\n title: orgChartNodeActionKey('assign-new-employee-to-position'),\n icon: 'fa-light fa-arrows-rotate',\n order: 115,\n disabled: !canCreateAssignment || !canEditAssignment,\n execute: async (ctx) => {\n const pid = this.resolvePositionId(ctx);\n const buId = this.resolveBusinessUnitIdForPosition(ctx);\n const occ = ctx.node.metadata?.['occupant'] as Record<string, unknown> | undefined;\n const eid =\n typeof occ?.['employeeId'] === 'string' && occ['employeeId'].trim().length > 0\n ? occ['employeeId'].trim()\n : '';\n if (!pid || !buId || !eid) {\n return;\n }\n const result = await this.commandService.execute(\n AXMOrganizationManagementCommandKeys.OrganizationChart.ReplacePositionAssignee,\n { businessUnitId: buId, positionId: pid, currentEmployeeId: eid },\n );\n if (result?.success) {\n await ctx.refreshChart();\n }\n },\n });\n }\n\n if (businessUnitId) {\n actions.push({\n id: 'organization-management.remove-position-from-unit-from-chart',\n title: orgChartNodeActionKey('remove-from-unit'),\n icon: 'fa-light fa-link-slash',\n color: 'danger',\n order: 120,\n disabled: !canUpdateBusinessUnit,\n execute: async (ctx) => {\n const pid = this.resolvePositionId(ctx);\n const buId = this.resolveBusinessUnitIdForPosition(ctx);\n if (!pid || !buId) {\n return;\n }\n const occ = ctx.node.metadata?.['occupant'] as Record<string, unknown> | undefined;\n const occId =\n typeof occ?.['employeeId'] === 'string' && occ['employeeId'].trim().length > 0\n ? occ['employeeId'].trim()\n : undefined;\n const result = await this.commandService.execute(\n AXMOrganizationManagementCommandKeys.OrganizationChart.RemovePositionFromBusinessUnit,\n {\n businessUnitId: buId,\n positionId: pid,\n ...(occId ? { occupantEmployeeId: occId } : {}),\n },\n );\n if (result?.success) {\n await ctx.refreshChart();\n }\n },\n });\n }\n\n return actions;\n }\n\n //#endregion\n\n //#region ---- Resolvers & Authorization ----\n\n private authorize(permission: string): boolean {\n return this.sessionService.authorize(permission);\n }\n\n private resolvePositionId(context: AXMOrgChartNodeContributionContext): string | undefined {\n const entity = context.node.entity;\n if (entity?.id != null && this.isPositionEntityType(entity.type)) {\n const id = String(entity.id).trim();\n return id.length > 0 ? id : undefined;\n }\n const metaPid = context.node.metadata?.['positionId'];\n if (typeof metaPid === 'string' && metaPid.trim().length > 0) {\n return metaPid.trim();\n }\n return undefined;\n }\n\n private isPositionEntityType(entityType: string | undefined): boolean {\n if (!entityType || typeof entityType !== 'string') {\n return false;\n }\n return entityType === POSITION_ENTITY_SOURCE || entityType.endsWith('.Position');\n }\n\n private resolveBusinessUnitIdForPosition(context: AXMOrgChartNodeContributionContext): string | undefined {\n const meta = context.node.metadata ?? {};\n const a = meta['businessUnitId'];\n const b = meta['organizationalUnitId'];\n const raw = (typeof a === 'string' && a.trim().length > 0 ? a : typeof b === 'string' ? b : '') as string;\n const id = String(raw).trim();\n return id.length > 0 ? id : undefined;\n }\n\n //#endregion\n}\n"],"names":[],"mappings":";;;;;;AAAA;AAkBA;AAEA;AAEA,MAAM,qBAAqB,GAAG,CAAC,MAAc,KAC3C,CAAA,yDAAA,EAA4D,MAAM,CAAA,CAAE;AAEtE,MAAM,sBAAsB,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;AAElE;AAEA;;AAEG;MAEU,mDAAmD,CAAA;AADhE,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAyK5D,IAAA;;;IAnKC,MAAM,cAAc,CAAC,OAA2C,EAAA;AAC9D,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE;AACnC,YAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;QAC7C;AACA,QAAA,OAAO,EAAE;IACX;;;AAMQ,IAAA,sBAAsB,CAAC,OAA2C,EAAA;QACxE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;QAClD,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,cAAc,GAAG,IAAI,CAAC,gCAAgC,CAAC,OAAO,CAAC;AACrE,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,IAAI;QACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAwC;QAC3F,MAAM,kBAAkB,GACtB,OAAO,QAAQ,GAAG,YAAY,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG;AACrF,cAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI;cAC3B,SAAS;QAEf,MAAM,uBAAuB,GAAG,IAAI,CAAC,SAAS,CAAC,mCAAmC,CAAC,oBAAoB,CAAC;QACxG,MAAM,qBAAqB,GAAG,uBAAuB;QACrD,MAAM,mBAAmB,GAAG,uBAAuB;QACnD,MAAM,iBAAiB,GAAG,uBAAuB;QAEjD,MAAM,OAAO,GAAgC,EAAE;AAE/C,QAAA,IAAI,MAAM,IAAI,cAAc,EAAE;YAC5B,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,EAAE,EAAE,gEAAgE;AACpE,gBAAA,KAAK,EAAE,qBAAqB,CAAC,6BAA6B,CAAC;AAC3D,gBAAA,IAAI,EAAE,uBAAuB;AAC7B,gBAAA,KAAK,EAAE,GAAG;gBACV,QAAQ,EAAE,CAAC,mBAAmB;AAC9B,gBAAA,OAAO,EAAE,OAAO,GAAG,KAAI;oBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;oBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC;AACvD,oBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;wBACjB;oBACF;oBACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,0CAA0C,EAAE;AAC3F,wBAAA,IAAI,EAAE;AACJ,4BAAA,cAAc,EAAE,IAAI;AACpB,4BAAA,UAAU,EAAE,GAAG;AACf,4BAAA,SAAS,EAAE,KAAK;AACjB,yBAAA;AACF,qBAAA,CAAC;AACF,oBAAA,IAAI,MAAM,EAAE,OAAO,EAAE;AACnB,wBAAA,MAAM,GAAG,CAAC,YAAY,EAAE;oBAC1B;gBACF,CAAC;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,IAAI,CAAC,MAAM,IAAI,kBAAkB,IAAI,cAAc,EAAE;YACnD,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,EAAE,EAAE,8DAA8D;AAClE,gBAAA,KAAK,EAAE,qBAAqB,CAAC,iCAAiC,CAAC;AAC/D,gBAAA,IAAI,EAAE,2BAA2B;AACjC,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,QAAQ,EAAE,CAAC,mBAAmB,IAAI,CAAC,iBAAiB;AACpD,gBAAA,OAAO,EAAE,OAAO,GAAG,KAAI;oBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;oBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC;oBACvD,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAwC;oBAClF,MAAM,GAAG,GACP,OAAO,GAAG,GAAG,YAAY,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG;AAC3E,0BAAE,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI;0BACtB,EAAE;oBACR,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;wBACzB;oBACF;AACA,oBAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC9C,oCAAoC,CAAC,iBAAiB,CAAC,uBAAuB,EAC9E,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAClE;AACD,oBAAA,IAAI,MAAM,EAAE,OAAO,EAAE;AACnB,wBAAA,MAAM,GAAG,CAAC,YAAY,EAAE;oBAC1B;gBACF,CAAC;AACF,aAAA,CAAC;QACJ;QAEA,IAAI,cAAc,EAAE;YAClB,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,EAAE,EAAE,8DAA8D;AAClE,gBAAA,KAAK,EAAE,qBAAqB,CAAC,kBAAkB,CAAC;AAChD,gBAAA,IAAI,EAAE,wBAAwB;AAC9B,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,GAAG;gBACV,QAAQ,EAAE,CAAC,qBAAqB;AAChC,gBAAA,OAAO,EAAE,OAAO,GAAG,KAAI;oBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;oBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC;AACvD,oBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;wBACjB;oBACF;oBACA,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAwC;oBAClF,MAAM,KAAK,GACT,OAAO,GAAG,GAAG,YAAY,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG;AAC3E,0BAAE,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI;0BACtB,SAAS;AACf,oBAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC9C,oCAAoC,CAAC,iBAAiB,CAAC,8BAA8B,EACrF;AACE,wBAAA,cAAc,EAAE,IAAI;AACpB,wBAAA,UAAU,EAAE,GAAG;AACf,wBAAA,IAAI,KAAK,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAChD,qBAAA,CACF;AACD,oBAAA,IAAI,MAAM,EAAE,OAAO,EAAE;AACnB,wBAAA,MAAM,GAAG,CAAC,YAAY,EAAE;oBAC1B;gBACF,CAAC;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,OAAO;IAChB;;;AAMQ,IAAA,SAAS,CAAC,UAAkB,EAAA;QAClC,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC;IAClD;AAEQ,IAAA,iBAAiB,CAAC,OAA2C,EAAA;AACnE,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM;AAClC,QAAA,IAAI,MAAM,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAChE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;AACnC,YAAA,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,SAAS;QACvC;QACA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;AACrD,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5D,YAAA,OAAO,OAAO,CAAC,IAAI,EAAE;QACvB;AACA,QAAA,OAAO,SAAS;IAClB;AAEQ,IAAA,oBAAoB,CAAC,UAA8B,EAAA;QACzD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACjD,YAAA,OAAO,KAAK;QACd;QACA,OAAO,UAAU,KAAK,sBAAsB,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;IAClF;AAEQ,IAAA,gCAAgC,CAAC,OAA2C,EAAA;QAClF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE;AACxC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAChC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC;AACtC,QAAA,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAW;QACzG,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AAC7B,QAAA,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,SAAS;IACvC;8GA1KW,mDAAmD,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAnD,mDAAmD,EAAA,CAAA,CAAA;;2FAAnD,mDAAmD,EAAA,UAAA,EAAA,CAAA;kBAD/D;;;;;"}
1
+ {"version":3,"file":"acorex-platform-module-organization-management-client-org-chart-position-employee-node-contribution.provider-BTicXn9n.mjs","sources":["../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/contributions/org-chart-position-employee-node-contribution.provider.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport {\n AXM_HCM_POSITION_ASSIGNMENT_ASSIGN_COMMAND,\n AXMOrganizationManagementCommandKeys,\n AXPPeopleOrganizationPermissionKeys\n} from '@acorex-platform/module-organization-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-organization-management-client/contracts';\n\nimport {\n AXMOrgChartNodeContributionContext,\n AXMOrgChartNodeContributionProvider,\n AXMOrgChartNodeMenuAction,\n} from '../tokens/org-chart-node-contribution.token';\n\n//#endregion\n\n//#region ---- Module Constants ----\n\nconst orgChartNodeActionKey = (suffix: string): string =>\n `@organization-management:organization-chart.node-actions.${suffix}`;\n\nconst POSITION_ENTITY_SOURCE = RootConfig.entities.position.source;\n\n//#endregion\n\n/**\n * Context menu actions for org chart **position** nodes (structure / location / etc.).\n */\n@Injectable()\nexport class AXMOrgChartPositionEmployeeNodeContributionProvider implements AXMOrgChartNodeContributionProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly commandService = inject(AXPCommandService);\n private readonly sessionService = inject(AXPSessionService);\n\n //#endregion\n\n //#region ---- AXMOrgChartNodeContributionProvider Implementation ----\n\n async getMenuActions(context: AXMOrgChartNodeContributionContext): Promise<AXMOrgChartNodeMenuAction[]> {\n if (context.nodeKind === 'position') {\n return this.getPositionNodeActions(context);\n }\n return [];\n }\n\n //#endregion\n\n //#region ---- Position Node Actions ----\n\n private getPositionNodeActions(context: AXMOrgChartNodeContributionContext): AXMOrgChartNodeMenuAction[] {\n const positionId = this.resolvePositionId(context);\n if (!positionId) {\n return [];\n }\n\n const businessUnitId = this.resolveBusinessUnitIdForPosition(context);\n const vacant = context.node.metadata?.['vacant'] === true;\n const occupant = context.node.metadata?.['occupant'] as Record<string, unknown> | undefined;\n const occupantEmployeeId =\n typeof occupant?.['employeeId'] === 'string' && occupant['employeeId'].trim().length > 0\n ? occupant['employeeId'].trim()\n : undefined;\n\n const canMaintainOrganization = this.authorize(AXPPeopleOrganizationPermissionKeys.MaintainOrganization);\n const canUpdateBusinessUnit = canMaintainOrganization;\n const canCreateAssignment = canMaintainOrganization;\n const canEditAssignment = canMaintainOrganization;\n\n const actions: AXMOrgChartNodeMenuAction[] = [];\n\n if (vacant && businessUnitId) {\n actions.push({\n id: 'organization-management.assign-employee-to-position-from-chart',\n title: orgChartNodeActionKey('assign-employee-to-position'),\n icon: 'fa-light fa-user-plus',\n order: 110,\n disabled: !canCreateAssignment,\n execute: async (ctx) => {\n const pid = this.resolvePositionId(ctx);\n const buId = this.resolveBusinessUnitIdForPosition(ctx);\n if (!pid || !buId) {\n return;\n }\n const result = await this.commandService.execute(AXM_HCM_POSITION_ASSIGNMENT_ASSIGN_COMMAND, {\n data: {\n businessUnitId: buId,\n positionId: pid,\n isPrimary: false,\n },\n });\n if (result?.success) {\n await ctx.refreshChart();\n }\n },\n });\n }\n\n if (!vacant && occupantEmployeeId && businessUnitId) {\n actions.push({\n id: 'organization-management.replace-position-assignee-from-chart',\n title: orgChartNodeActionKey('assign-new-employee-to-position'),\n icon: 'fa-light fa-arrows-rotate',\n order: 115,\n disabled: !canCreateAssignment || !canEditAssignment,\n execute: async (ctx) => {\n const pid = this.resolvePositionId(ctx);\n const buId = this.resolveBusinessUnitIdForPosition(ctx);\n const occ = ctx.node.metadata?.['occupant'] as Record<string, unknown> | undefined;\n const eid =\n typeof occ?.['employeeId'] === 'string' && occ['employeeId'].trim().length > 0\n ? occ['employeeId'].trim()\n : '';\n if (!pid || !buId || !eid) {\n return;\n }\n const result = await this.commandService.execute(\n AXMOrganizationManagementCommandKeys.OrganizationChart.ReplacePositionAssignee,\n { businessUnitId: buId, positionId: pid, currentEmployeeId: eid },\n );\n if (result?.success) {\n await ctx.refreshChart();\n }\n },\n });\n }\n\n if (businessUnitId) {\n actions.push({\n id: 'organization-management.remove-position-from-unit-from-chart',\n title: orgChartNodeActionKey('remove-from-unit'),\n icon: 'fa-light fa-link-slash',\n color: 'danger',\n order: 120,\n disabled: !canUpdateBusinessUnit,\n execute: async (ctx) => {\n const pid = this.resolvePositionId(ctx);\n const buId = this.resolveBusinessUnitIdForPosition(ctx);\n if (!pid || !buId) {\n return;\n }\n const occ = ctx.node.metadata?.['occupant'] as Record<string, unknown> | undefined;\n const occId =\n typeof occ?.['employeeId'] === 'string' && occ['employeeId'].trim().length > 0\n ? occ['employeeId'].trim()\n : undefined;\n const result = await this.commandService.execute(\n AXMOrganizationManagementCommandKeys.OrganizationChart.RemovePositionFromBusinessUnit,\n {\n businessUnitId: buId,\n positionId: pid,\n ...(occId ? { occupantEmployeeId: occId } : {}),\n },\n );\n if (result?.success) {\n await ctx.refreshChart();\n }\n },\n });\n }\n\n return actions;\n }\n\n //#endregion\n\n //#region ---- Resolvers & Authorization ----\n\n private authorize(permission: string): boolean {\n return this.sessionService.authorize(permission);\n }\n\n private resolvePositionId(context: AXMOrgChartNodeContributionContext): string | undefined {\n const entity = context.node.entity;\n if (entity?.id != null && this.isPositionEntityType(entity.type)) {\n const id = String(entity.id).trim();\n return id.length > 0 ? id : undefined;\n }\n const metaPid = context.node.metadata?.['positionId'];\n if (typeof metaPid === 'string' && metaPid.trim().length > 0) {\n return metaPid.trim();\n }\n return undefined;\n }\n\n private isPositionEntityType(entityType: string | undefined): boolean {\n if (!entityType || typeof entityType !== 'string') {\n return false;\n }\n return entityType === POSITION_ENTITY_SOURCE || entityType.endsWith('.Position');\n }\n\n private resolveBusinessUnitIdForPosition(context: AXMOrgChartNodeContributionContext): string | undefined {\n const meta = context.node.metadata ?? {};\n const a = meta['businessUnitId'];\n const b = meta['organizationalUnitId'];\n const raw = (typeof a === 'string' && a.trim().length > 0 ? a : typeof b === 'string' ? b : '') as string;\n const id = String(raw).trim();\n return id.length > 0 ? id : undefined;\n }\n\n //#endregion\n}\n"],"names":[],"mappings":";;;;;;AAAA;AAkBA;AAEA;AAEA,MAAM,qBAAqB,GAAG,CAAC,MAAc,KAC3C,CAAA,yDAAA,EAA4D,MAAM,CAAA,CAAE;AAEtE,MAAM,sBAAsB,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;AAElE;AAEA;;AAEG;MAEU,mDAAmD,CAAA;AADhE,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAyK5D,IAAA;;;IAnKC,MAAM,cAAc,CAAC,OAA2C,EAAA;AAC9D,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE;AACnC,YAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;QAC7C;AACA,QAAA,OAAO,EAAE;IACX;;;AAMQ,IAAA,sBAAsB,CAAC,OAA2C,EAAA;QACxE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;QAClD,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,cAAc,GAAG,IAAI,CAAC,gCAAgC,CAAC,OAAO,CAAC;AACrE,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,IAAI;QACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAwC;QAC3F,MAAM,kBAAkB,GACtB,OAAO,QAAQ,GAAG,YAAY,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG;AACrF,cAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI;cAC3B,SAAS;QAEf,MAAM,uBAAuB,GAAG,IAAI,CAAC,SAAS,CAAC,mCAAmC,CAAC,oBAAoB,CAAC;QACxG,MAAM,qBAAqB,GAAG,uBAAuB;QACrD,MAAM,mBAAmB,GAAG,uBAAuB;QACnD,MAAM,iBAAiB,GAAG,uBAAuB;QAEjD,MAAM,OAAO,GAAgC,EAAE;AAE/C,QAAA,IAAI,MAAM,IAAI,cAAc,EAAE;YAC5B,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,EAAE,EAAE,gEAAgE;AACpE,gBAAA,KAAK,EAAE,qBAAqB,CAAC,6BAA6B,CAAC;AAC3D,gBAAA,IAAI,EAAE,uBAAuB;AAC7B,gBAAA,KAAK,EAAE,GAAG;gBACV,QAAQ,EAAE,CAAC,mBAAmB;AAC9B,gBAAA,OAAO,EAAE,OAAO,GAAG,KAAI;oBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;oBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC;AACvD,oBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;wBACjB;oBACF;oBACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,0CAA0C,EAAE;AAC3F,wBAAA,IAAI,EAAE;AACJ,4BAAA,cAAc,EAAE,IAAI;AACpB,4BAAA,UAAU,EAAE,GAAG;AACf,4BAAA,SAAS,EAAE,KAAK;AACjB,yBAAA;AACF,qBAAA,CAAC;AACF,oBAAA,IAAI,MAAM,EAAE,OAAO,EAAE;AACnB,wBAAA,MAAM,GAAG,CAAC,YAAY,EAAE;oBAC1B;gBACF,CAAC;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,IAAI,CAAC,MAAM,IAAI,kBAAkB,IAAI,cAAc,EAAE;YACnD,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,EAAE,EAAE,8DAA8D;AAClE,gBAAA,KAAK,EAAE,qBAAqB,CAAC,iCAAiC,CAAC;AAC/D,gBAAA,IAAI,EAAE,2BAA2B;AACjC,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,QAAQ,EAAE,CAAC,mBAAmB,IAAI,CAAC,iBAAiB;AACpD,gBAAA,OAAO,EAAE,OAAO,GAAG,KAAI;oBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;oBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC;oBACvD,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAwC;oBAClF,MAAM,GAAG,GACP,OAAO,GAAG,GAAG,YAAY,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG;AAC3E,0BAAE,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI;0BACtB,EAAE;oBACR,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;wBACzB;oBACF;AACA,oBAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC9C,oCAAoC,CAAC,iBAAiB,CAAC,uBAAuB,EAC9E,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAClE;AACD,oBAAA,IAAI,MAAM,EAAE,OAAO,EAAE;AACnB,wBAAA,MAAM,GAAG,CAAC,YAAY,EAAE;oBAC1B;gBACF,CAAC;AACF,aAAA,CAAC;QACJ;QAEA,IAAI,cAAc,EAAE;YAClB,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,EAAE,EAAE,8DAA8D;AAClE,gBAAA,KAAK,EAAE,qBAAqB,CAAC,kBAAkB,CAAC;AAChD,gBAAA,IAAI,EAAE,wBAAwB;AAC9B,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,GAAG;gBACV,QAAQ,EAAE,CAAC,qBAAqB;AAChC,gBAAA,OAAO,EAAE,OAAO,GAAG,KAAI;oBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;oBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC;AACvD,oBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;wBACjB;oBACF;oBACA,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAwC;oBAClF,MAAM,KAAK,GACT,OAAO,GAAG,GAAG,YAAY,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG;AAC3E,0BAAE,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI;0BACtB,SAAS;AACf,oBAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC9C,oCAAoC,CAAC,iBAAiB,CAAC,8BAA8B,EACrF;AACE,wBAAA,cAAc,EAAE,IAAI;AACpB,wBAAA,UAAU,EAAE,GAAG;AACf,wBAAA,IAAI,KAAK,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAChD,qBAAA,CACF;AACD,oBAAA,IAAI,MAAM,EAAE,OAAO,EAAE;AACnB,wBAAA,MAAM,GAAG,CAAC,YAAY,EAAE;oBAC1B;gBACF,CAAC;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,OAAO;IAChB;;;AAMQ,IAAA,SAAS,CAAC,UAAkB,EAAA;QAClC,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC;IAClD;AAEQ,IAAA,iBAAiB,CAAC,OAA2C,EAAA;AACnE,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM;AAClC,QAAA,IAAI,MAAM,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAChE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;AACnC,YAAA,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,SAAS;QACvC;QACA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;AACrD,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5D,YAAA,OAAO,OAAO,CAAC,IAAI,EAAE;QACvB;AACA,QAAA,OAAO,SAAS;IAClB;AAEQ,IAAA,oBAAoB,CAAC,UAA8B,EAAA;QACzD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACjD,YAAA,OAAO,KAAK;QACd;QACA,OAAO,UAAU,KAAK,sBAAsB,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;IAClF;AAEQ,IAAA,gCAAgC,CAAC,OAA2C,EAAA;QAClF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE;AACxC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAChC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC;AACtC,QAAA,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAW;QACzG,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AAC7B,QAAA,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,SAAS;IACvC;8GA1KW,mDAAmD,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAnD,mDAAmD,EAAA,CAAA,CAAA;;2FAAnD,mDAAmD,EAAA,UAAA,EAAA,CAAA;kBAD/D;;;"}
@@ -3,7 +3,7 @@ import { AXPCommandService } from '@acorex-platform/framework-client/runtime';
3
3
  import * as i0 from '@angular/core';
4
4
  import { inject, Injectable } from '@angular/core';
5
5
  import { RootConfig, AXPPeopleOrganizationPermissionKeys, AXM_HCM_POSITION_ASSIGNMENT_ASSIGN_COMMAND } from '@acorex-platform/module-organization-management-client/contracts';
6
- import { h as AXM_ORG_CHART_LAYOUT_SUBMENU_ICON, i as AXM_ORG_CHART_LAYOUT_SUBMENU_TITLE_I18N_KEY, j as AXM_ORG_CHART_LAYOUT_SUBMENU_GROUP_ID, A as AXMOrgChartNodeType } from './acorex-platform-module-organization-management-client-acorex-platform-module-organization-management-client-UGWNdPxI.mjs';
6
+ import { h as AXM_ORG_CHART_LAYOUT_SUBMENU_ICON, i as AXM_ORG_CHART_LAYOUT_SUBMENU_TITLE_I18N_KEY, j as AXM_ORG_CHART_LAYOUT_SUBMENU_GROUP_ID, A as AXMOrgChartNodeType } from './acorex-platform-module-organization-management-client-acorex-platform-module-organization-management-client-ZM6X7IDO.mjs';
7
7
 
8
8
  //#region ---- Imports ----
9
9
  //#endregion
@@ -335,4 +335,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
335
335
  }] });
336
336
 
337
337
  export { AXMOrgChartUxNodeContributionProvider };
338
- //# sourceMappingURL=acorex-platform-module-organization-management-client-org-chart-ux-node-contribution.provider-ISEbvMkZ.mjs.map
338
+ //# sourceMappingURL=acorex-platform-module-organization-management-client-org-chart-ux-node-contribution.provider-uZkFZFPA.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-organization-management-client-org-chart-ux-node-contribution.provider-ISEbvMkZ.mjs","sources":["../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/contributions/org-chart-ux-node-contribution.provider.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport {\n AXM_HCM_POSITION_ASSIGNMENT_ASSIGN_COMMAND,\n AXPPeopleOrganizationPermissionKeys\n} from '@acorex-platform/module-organization-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-organization-management-client/contracts';\n\nimport {\n AXM_ORG_CHART_LAYOUT_SUBMENU_GROUP_ID,\n AXM_ORG_CHART_LAYOUT_SUBMENU_ICON,\n AXM_ORG_CHART_LAYOUT_SUBMENU_TITLE_I18N_KEY,\n} from '../constants/org-chart-layout-submenu.const';\nimport {\n AXMOrgChartNodeContributionContext,\n AXMOrgChartNodeContributionProvider,\n AXMOrgChartNodeMenuAction,\n} from '../tokens/org-chart-node-contribution.token';\nimport { AXMOrgChartNodeType, AXMOrganizationNode } from '../model/org-chart.type';\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst actionKey = (suffix: string): string =>\n `@organization-management:organization-chart.node-actions.${suffix}`;\n\nconst TENANT_VIEW_PERMISSION = 'ApplicationsPlatform:Permission:MaintainTenants';\n\nconst POSITION_ENTITY_SOURCE = RootConfig.entities.position.source;\n\nconst BUSINESS_UNIT_ENTITY_SOURCE = RootConfig.entities.businessUnit.source;\n\nconst TENANT_ENTITY_SOURCE = 'TenantManagement.Tenant';\n\nconst COMPANY_ENTITY_SOURCE = RootConfig.entities.company.source;\n\n//#endregion\n\n/**\n * Org chart context menus: open record details, nested expand/collapse, multi-seat assign, HR stubs.\n */\n@Injectable()\nexport class AXMOrgChartUxNodeContributionProvider implements AXMOrgChartNodeContributionProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly commandService = inject(AXPCommandService);\n private readonly sessionService = inject(AXPSessionService);\n\n private readonly tenantEntityInfo = {\n module: 'TenantManagement',\n name: 'Tenant',\n title: '@tenant-management:tenants.entities.tenant.title',\n };\n\n private readonly companyEntityInfo = {\n module: RootConfig.module.name,\n name: RootConfig.entities.company.name,\n title: RootConfig.entities.company.title,\n };\n\n //#endregion\n\n //#region ---- AXMOrgChartNodeContributionProvider ----\n\n async getMenuActions(context: AXMOrgChartNodeContributionContext): Promise<AXMOrgChartNodeMenuAction[]> {\n const actions: AXMOrgChartNodeMenuAction[] = [\n ...this.getCrossCuttingActions(context),\n ...this.getKindSpecificActions(context),\n ];\n return actions;\n }\n\n //#endregion\n\n //#region ---- Cross-cutting ----\n\n private getCrossCuttingActions(context: AXMOrgChartNodeContributionContext): AXMOrgChartNodeMenuAction[] {\n const hasChildren = (context.node.children?.length ?? 0) > 0;\n const expanded = context.node.isExpanded !== false;\n\n return [\n {\n id: 'organization-management.org-chart.toggle-detail-panel',\n title: actionKey('toggle-detail-panel'),\n icon: 'fa-light fa-sidebar',\n /** After Communication and structure actions; before Remove (120). */\n order: 117,\n break: 'before',\n submenuGroupId: AXM_ORG_CHART_LAYOUT_SUBMENU_GROUP_ID,\n submenuGroupTitle: AXM_ORG_CHART_LAYOUT_SUBMENU_TITLE_I18N_KEY,\n submenuGroupIcon: AXM_ORG_CHART_LAYOUT_SUBMENU_ICON,\n /** Separator before expand/collapse nested rows (never on the last row — that leaves a stray rule and gap). */\n submenuSectionBreak: true,\n execute: async (ctx) => {\n ctx.host.toggleDetailPanel();\n },\n },\n {\n id: 'organization-management.org-chart.expand-branch',\n title: actionKey('expand'),\n icon: 'fa-light fa-square-plus',\n order: 118,\n submenuGroupId: AXM_ORG_CHART_LAYOUT_SUBMENU_GROUP_ID,\n submenuGroupTitle: AXM_ORG_CHART_LAYOUT_SUBMENU_TITLE_I18N_KEY,\n submenuGroupIcon: AXM_ORG_CHART_LAYOUT_SUBMENU_ICON,\n disabled: !hasChildren || expanded,\n execute: async (ctx) => {\n ctx.host.setNodeBranchExpanded(ctx.node, true);\n },\n },\n {\n id: 'organization-management.org-chart.collapse-branch',\n title: actionKey('collapse'),\n icon: 'fa-light fa-square-minus',\n order: 119,\n submenuGroupId: AXM_ORG_CHART_LAYOUT_SUBMENU_GROUP_ID,\n submenuGroupTitle: AXM_ORG_CHART_LAYOUT_SUBMENU_TITLE_I18N_KEY,\n submenuGroupIcon: AXM_ORG_CHART_LAYOUT_SUBMENU_ICON,\n /** Trailing group break: separator after the View & Layout row on the root menu (inner last-row break is normalized away). */\n break: 'after',\n disabled: !hasChildren || !expanded,\n execute: async (ctx) => {\n ctx.host.setNodeBranchExpanded(ctx.node, false);\n },\n },\n ];\n }\n\n //#endregion\n\n //#region ---- Kind-specific ----\n\n /**\n * **Open** — `Entity:OpenDetails` (navigate to entity view route).\n */\n private buildOpenDetailsAction(args: {\n id: string;\n canOpen: boolean;\n breakAfter?: 'after';\n order?: number;\n resolve: (ctx: AXMOrgChartNodeContributionContext) => { entity: string; id: string } | null;\n }): AXMOrgChartNodeMenuAction {\n return {\n id: args.id,\n title: actionKey('open'),\n icon: 'fa-light fa-arrow-up-right-from-square',\n order: args.order ?? 20,\n break: args.breakAfter,\n disabled: !args.canOpen,\n execute: async (ctx) => {\n const spec = args.resolve(ctx);\n if (!spec) {\n return;\n }\n await this.commandService.execute('Entity:OpenDetails', {\n entity: spec.entity,\n data: { id: spec.id },\n });\n },\n };\n }\n\n private getKindSpecificActions(context: AXMOrgChartNodeContributionContext): AXMOrgChartNodeMenuAction[] {\n switch (context.nodeKind) {\n case 'company-root':\n return this.getCompanyRootActions(context);\n case 'business-unit':\n return this.getBusinessUnitActions(context);\n case 'position':\n return this.getPositionActions(context);\n default:\n return [];\n }\n }\n\n private getCompanyRootActions(context: AXMOrgChartNodeContributionContext): AXMOrgChartNodeMenuAction[] {\n const viewTarget = this.resolveCompanyRootViewTarget(context.node);\n if (!viewTarget) {\n return [];\n }\n let canOpen = true;\n if (viewTarget.kind === 'tenant') {\n canOpen =\n canOpen &&\n (this.authorize(TENANT_VIEW_PERMISSION) ||\n this.authorize(AXPPeopleOrganizationPermissionKeys.ViewOrganization) ||\n this.authorize(AXPPeopleOrganizationPermissionKeys.MaintainOrganization));\n } else if (viewTarget.kind === 'company') {\n canOpen =\n canOpen &&\n (this.authorize(AXPPeopleOrganizationPermissionKeys.ViewOrganization) ||\n this.authorize(AXPPeopleOrganizationPermissionKeys.MaintainOrganization));\n }\n\n return [\n this.buildOpenDetailsAction({\n id: 'organization-management.org-chart.open-details',\n canOpen,\n breakAfter: 'after',\n resolve: (ctx) => {\n const target = this.resolveCompanyRootViewTarget(ctx.node);\n return target ? { entity: target.source, id: target.id } : null;\n },\n }),\n ];\n }\n\n private getBusinessUnitActions(context: AXMOrgChartNodeContributionContext): AXMOrgChartNodeMenuAction[] {\n const businessUnitId = this.resolveBusinessUnitId(context);\n const canView =\n this.authorize(AXPPeopleOrganizationPermissionKeys.ViewOrganization) ||\n this.authorize(AXPPeopleOrganizationPermissionKeys.MaintainOrganization);\n\n return [\n ...(businessUnitId\n ? [\n this.buildOpenDetailsAction({\n id: 'organization-management.org-chart.open-details',\n canOpen: canView,\n breakAfter: 'after',\n resolve: (ctx) => {\n const id = this.resolveBusinessUnitId(ctx);\n return id ? { entity: BUSINESS_UNIT_ENTITY_SOURCE, id } : null;\n },\n }),\n ]\n : []),\n ];\n }\n\n private getPositionActions(context: AXMOrgChartNodeContributionContext): AXMOrgChartNodeMenuAction[] {\n const positionId = this.resolvePositionId(context);\n const businessUnitId = this.resolveBusinessUnitIdForPosition(context);\n const capacity = this.resolvePositionCapacity(context.node);\n const filled = this.resolveFilledAssignmentCount(context.node);\n const canViewPosition =\n this.authorize(AXPPeopleOrganizationPermissionKeys.ViewOrganization) ||\n this.authorize(AXPPeopleOrganizationPermissionKeys.MaintainOrganization);\n const canAssignMore =\n this.authorize(AXPPeopleOrganizationPermissionKeys.MaintainOrganization) &&\n capacity > 1 &&\n filled < capacity &&\n Boolean(positionId) &&\n Boolean(businessUnitId);\n\n return [\n ...(positionId\n ? [\n this.buildOpenDetailsAction({\n id: 'organization-management.org-chart.open-details',\n canOpen: canViewPosition,\n breakAfter: 'after',\n resolve: (ctx) => {\n const id = this.resolvePositionId(ctx);\n return id ? { entity: POSITION_ENTITY_SOURCE, id } : null;\n },\n }),\n ]\n : []),\n {\n id: 'organization-management.org-chart.add-additional-assignee',\n title: actionKey('add-additional-assignee'),\n icon: 'fa-light fa-user-plus',\n order: 108,\n disabled: !canAssignMore,\n execute: async (ctx) => {\n const pid = this.resolvePositionId(ctx);\n const buId = this.resolveBusinessUnitIdForPosition(ctx);\n if (!pid || !buId) {\n return;\n }\n const result = await this.commandService.execute(AXM_HCM_POSITION_ASSIGNMENT_ASSIGN_COMMAND, {\n data: {\n businessUnitId: buId,\n positionId: pid,\n isPrimary: false,\n },\n });\n if (result?.success) {\n await ctx.refreshChart();\n }\n },\n },\n ];\n }\n\n //#endregion\n\n //#region ---- Resolvers ----\n\n private authorize(permission: string): boolean {\n return this.sessionService.authorize(permission);\n }\n\n private resolveCompanyRootViewTarget(\n node: AXMOrganizationNode,\n ): { kind: 'tenant' | 'company'; source: string; entityInfo: Record<string, string>; id: string } | null {\n const ent = node.entity;\n if (!ent?.id) {\n return null;\n }\n const id = String(ent.id).trim();\n if (!id) {\n return null;\n }\n const rawType = String(ent.type ?? '').trim();\n if (rawType === 'tenant' || rawType.endsWith('.Tenant')) {\n return { kind: 'tenant', source: TENANT_ENTITY_SOURCE, entityInfo: this.tenantEntityInfo, id };\n }\n if (rawType === COMPANY_ENTITY_SOURCE || rawType.endsWith('.Company')) {\n return { kind: 'company', source: COMPANY_ENTITY_SOURCE, entityInfo: this.companyEntityInfo, id };\n }\n return null;\n }\n\n private resolveBusinessUnitId(context: AXMOrgChartNodeContributionContext): string | undefined {\n if (context.nodeKind === 'business-unit') {\n const fromEntity = context.node.entity?.id;\n const entityId =\n fromEntity != null && String(fromEntity).trim().length > 0 ? String(fromEntity).trim() : undefined;\n return (\n entityId ??\n (context.node.metadata?.['businessUnitId'] as string | undefined)?.trim() ??\n (context.node.metadata?.['unitId'] as string | undefined)?.trim()\n );\n }\n return undefined;\n }\n\n private resolvePositionId(context: AXMOrgChartNodeContributionContext): string | undefined {\n const entity = context.node.entity;\n if (entity?.id != null && this.isPositionEntityType(entity.type)) {\n const id = String(entity.id).trim();\n return id.length > 0 ? id : undefined;\n }\n const metaPid = context.node.metadata?.['positionId'];\n if (typeof metaPid === 'string' && metaPid.trim().length > 0) {\n return metaPid.trim();\n }\n return undefined;\n }\n\n private isPositionEntityType(entityType: string | undefined): boolean {\n if (!entityType || typeof entityType !== 'string') {\n return false;\n }\n return entityType === POSITION_ENTITY_SOURCE || entityType.endsWith('.Position');\n }\n\n private resolveBusinessUnitIdForPosition(context: AXMOrgChartNodeContributionContext): string | undefined {\n const meta = context.node.metadata ?? {};\n const a = meta['businessUnitId'];\n const b = meta['organizationalUnitId'];\n const raw = (typeof a === 'string' && a.trim().length > 0 ? a : typeof b === 'string' ? b : '') as string;\n const id = String(raw).trim();\n return id.length > 0 ? id : undefined;\n }\n\n private resolvePositionCapacity(node: AXMOrganizationNode): number {\n const meta = node.metadata ?? {};\n const raw = meta['capacity'];\n if (typeof raw === 'number' && Number.isFinite(raw) && raw >= 1) {\n return Math.floor(raw);\n }\n if (typeof raw === 'string') {\n const n = Number(raw.trim());\n if (Number.isFinite(n) && n >= 1) {\n return Math.floor(n);\n }\n }\n return 1;\n }\n\n private resolveFilledAssignmentCount(node: AXMOrganizationNode): number {\n const meta = node.metadata ?? {};\n const fromMeta = meta['activeAssignmentCount'];\n if (typeof fromMeta === 'number' && Number.isFinite(fromMeta) && fromMeta >= 0) {\n return Math.floor(fromMeta);\n }\n const employeeChildren =\n node.children?.filter((c) => c.type === AXMOrgChartNodeType.Employee).length ?? 0;\n if (employeeChildren > 0) {\n return employeeChildren;\n }\n if (meta['vacant'] === true) {\n return 0;\n }\n const occ = meta['occupant'] as Record<string, unknown> | undefined;\n if (typeof occ?.['employeeId'] === 'string' && occ['employeeId'].trim().length > 0) {\n return 1;\n }\n return 0;\n }\n\n //#endregion\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-organization-management-client-org-chart-ux-node-contribution.provider-uZkFZFPA.mjs","sources":["../../../../libs/modules/organization-management/client/src/lib/features/organization-chart/contributions/org-chart-ux-node-contribution.provider.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport {\n AXM_HCM_POSITION_ASSIGNMENT_ASSIGN_COMMAND,\n AXPPeopleOrganizationPermissionKeys\n} from '@acorex-platform/module-organization-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-organization-management-client/contracts';\n\nimport {\n AXM_ORG_CHART_LAYOUT_SUBMENU_GROUP_ID,\n AXM_ORG_CHART_LAYOUT_SUBMENU_ICON,\n AXM_ORG_CHART_LAYOUT_SUBMENU_TITLE_I18N_KEY,\n} from '../constants/org-chart-layout-submenu.const';\nimport {\n AXMOrgChartNodeContributionContext,\n AXMOrgChartNodeContributionProvider,\n AXMOrgChartNodeMenuAction,\n} from '../tokens/org-chart-node-contribution.token';\nimport { AXMOrgChartNodeType, AXMOrganizationNode } from '../model/org-chart.type';\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst actionKey = (suffix: string): string =>\n `@organization-management:organization-chart.node-actions.${suffix}`;\n\nconst TENANT_VIEW_PERMISSION = 'ApplicationsPlatform:Permission:MaintainTenants';\n\nconst POSITION_ENTITY_SOURCE = RootConfig.entities.position.source;\n\nconst BUSINESS_UNIT_ENTITY_SOURCE = RootConfig.entities.businessUnit.source;\n\nconst TENANT_ENTITY_SOURCE = 'TenantManagement.Tenant';\n\nconst COMPANY_ENTITY_SOURCE = RootConfig.entities.company.source;\n\n//#endregion\n\n/**\n * Org chart context menus: open record details, nested expand/collapse, multi-seat assign, HR stubs.\n */\n@Injectable()\nexport class AXMOrgChartUxNodeContributionProvider implements AXMOrgChartNodeContributionProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly commandService = inject(AXPCommandService);\n private readonly sessionService = inject(AXPSessionService);\n\n private readonly tenantEntityInfo = {\n module: 'TenantManagement',\n name: 'Tenant',\n title: '@tenant-management:tenants.entities.tenant.title',\n };\n\n private readonly companyEntityInfo = {\n module: RootConfig.module.name,\n name: RootConfig.entities.company.name,\n title: RootConfig.entities.company.title,\n };\n\n //#endregion\n\n //#region ---- AXMOrgChartNodeContributionProvider ----\n\n async getMenuActions(context: AXMOrgChartNodeContributionContext): Promise<AXMOrgChartNodeMenuAction[]> {\n const actions: AXMOrgChartNodeMenuAction[] = [\n ...this.getCrossCuttingActions(context),\n ...this.getKindSpecificActions(context),\n ];\n return actions;\n }\n\n //#endregion\n\n //#region ---- Cross-cutting ----\n\n private getCrossCuttingActions(context: AXMOrgChartNodeContributionContext): AXMOrgChartNodeMenuAction[] {\n const hasChildren = (context.node.children?.length ?? 0) > 0;\n const expanded = context.node.isExpanded !== false;\n\n return [\n {\n id: 'organization-management.org-chart.toggle-detail-panel',\n title: actionKey('toggle-detail-panel'),\n icon: 'fa-light fa-sidebar',\n /** After Communication and structure actions; before Remove (120). */\n order: 117,\n break: 'before',\n submenuGroupId: AXM_ORG_CHART_LAYOUT_SUBMENU_GROUP_ID,\n submenuGroupTitle: AXM_ORG_CHART_LAYOUT_SUBMENU_TITLE_I18N_KEY,\n submenuGroupIcon: AXM_ORG_CHART_LAYOUT_SUBMENU_ICON,\n /** Separator before expand/collapse nested rows (never on the last row — that leaves a stray rule and gap). */\n submenuSectionBreak: true,\n execute: async (ctx) => {\n ctx.host.toggleDetailPanel();\n },\n },\n {\n id: 'organization-management.org-chart.expand-branch',\n title: actionKey('expand'),\n icon: 'fa-light fa-square-plus',\n order: 118,\n submenuGroupId: AXM_ORG_CHART_LAYOUT_SUBMENU_GROUP_ID,\n submenuGroupTitle: AXM_ORG_CHART_LAYOUT_SUBMENU_TITLE_I18N_KEY,\n submenuGroupIcon: AXM_ORG_CHART_LAYOUT_SUBMENU_ICON,\n disabled: !hasChildren || expanded,\n execute: async (ctx) => {\n ctx.host.setNodeBranchExpanded(ctx.node, true);\n },\n },\n {\n id: 'organization-management.org-chart.collapse-branch',\n title: actionKey('collapse'),\n icon: 'fa-light fa-square-minus',\n order: 119,\n submenuGroupId: AXM_ORG_CHART_LAYOUT_SUBMENU_GROUP_ID,\n submenuGroupTitle: AXM_ORG_CHART_LAYOUT_SUBMENU_TITLE_I18N_KEY,\n submenuGroupIcon: AXM_ORG_CHART_LAYOUT_SUBMENU_ICON,\n /** Trailing group break: separator after the View & Layout row on the root menu (inner last-row break is normalized away). */\n break: 'after',\n disabled: !hasChildren || !expanded,\n execute: async (ctx) => {\n ctx.host.setNodeBranchExpanded(ctx.node, false);\n },\n },\n ];\n }\n\n //#endregion\n\n //#region ---- Kind-specific ----\n\n /**\n * **Open** — `Entity:OpenDetails` (navigate to entity view route).\n */\n private buildOpenDetailsAction(args: {\n id: string;\n canOpen: boolean;\n breakAfter?: 'after';\n order?: number;\n resolve: (ctx: AXMOrgChartNodeContributionContext) => { entity: string; id: string } | null;\n }): AXMOrgChartNodeMenuAction {\n return {\n id: args.id,\n title: actionKey('open'),\n icon: 'fa-light fa-arrow-up-right-from-square',\n order: args.order ?? 20,\n break: args.breakAfter,\n disabled: !args.canOpen,\n execute: async (ctx) => {\n const spec = args.resolve(ctx);\n if (!spec) {\n return;\n }\n await this.commandService.execute('Entity:OpenDetails', {\n entity: spec.entity,\n data: { id: spec.id },\n });\n },\n };\n }\n\n private getKindSpecificActions(context: AXMOrgChartNodeContributionContext): AXMOrgChartNodeMenuAction[] {\n switch (context.nodeKind) {\n case 'company-root':\n return this.getCompanyRootActions(context);\n case 'business-unit':\n return this.getBusinessUnitActions(context);\n case 'position':\n return this.getPositionActions(context);\n default:\n return [];\n }\n }\n\n private getCompanyRootActions(context: AXMOrgChartNodeContributionContext): AXMOrgChartNodeMenuAction[] {\n const viewTarget = this.resolveCompanyRootViewTarget(context.node);\n if (!viewTarget) {\n return [];\n }\n let canOpen = true;\n if (viewTarget.kind === 'tenant') {\n canOpen =\n canOpen &&\n (this.authorize(TENANT_VIEW_PERMISSION) ||\n this.authorize(AXPPeopleOrganizationPermissionKeys.ViewOrganization) ||\n this.authorize(AXPPeopleOrganizationPermissionKeys.MaintainOrganization));\n } else if (viewTarget.kind === 'company') {\n canOpen =\n canOpen &&\n (this.authorize(AXPPeopleOrganizationPermissionKeys.ViewOrganization) ||\n this.authorize(AXPPeopleOrganizationPermissionKeys.MaintainOrganization));\n }\n\n return [\n this.buildOpenDetailsAction({\n id: 'organization-management.org-chart.open-details',\n canOpen,\n breakAfter: 'after',\n resolve: (ctx) => {\n const target = this.resolveCompanyRootViewTarget(ctx.node);\n return target ? { entity: target.source, id: target.id } : null;\n },\n }),\n ];\n }\n\n private getBusinessUnitActions(context: AXMOrgChartNodeContributionContext): AXMOrgChartNodeMenuAction[] {\n const businessUnitId = this.resolveBusinessUnitId(context);\n const canView =\n this.authorize(AXPPeopleOrganizationPermissionKeys.ViewOrganization) ||\n this.authorize(AXPPeopleOrganizationPermissionKeys.MaintainOrganization);\n\n return [\n ...(businessUnitId\n ? [\n this.buildOpenDetailsAction({\n id: 'organization-management.org-chart.open-details',\n canOpen: canView,\n breakAfter: 'after',\n resolve: (ctx) => {\n const id = this.resolveBusinessUnitId(ctx);\n return id ? { entity: BUSINESS_UNIT_ENTITY_SOURCE, id } : null;\n },\n }),\n ]\n : []),\n ];\n }\n\n private getPositionActions(context: AXMOrgChartNodeContributionContext): AXMOrgChartNodeMenuAction[] {\n const positionId = this.resolvePositionId(context);\n const businessUnitId = this.resolveBusinessUnitIdForPosition(context);\n const capacity = this.resolvePositionCapacity(context.node);\n const filled = this.resolveFilledAssignmentCount(context.node);\n const canViewPosition =\n this.authorize(AXPPeopleOrganizationPermissionKeys.ViewOrganization) ||\n this.authorize(AXPPeopleOrganizationPermissionKeys.MaintainOrganization);\n const canAssignMore =\n this.authorize(AXPPeopleOrganizationPermissionKeys.MaintainOrganization) &&\n capacity > 1 &&\n filled < capacity &&\n Boolean(positionId) &&\n Boolean(businessUnitId);\n\n return [\n ...(positionId\n ? [\n this.buildOpenDetailsAction({\n id: 'organization-management.org-chart.open-details',\n canOpen: canViewPosition,\n breakAfter: 'after',\n resolve: (ctx) => {\n const id = this.resolvePositionId(ctx);\n return id ? { entity: POSITION_ENTITY_SOURCE, id } : null;\n },\n }),\n ]\n : []),\n {\n id: 'organization-management.org-chart.add-additional-assignee',\n title: actionKey('add-additional-assignee'),\n icon: 'fa-light fa-user-plus',\n order: 108,\n disabled: !canAssignMore,\n execute: async (ctx) => {\n const pid = this.resolvePositionId(ctx);\n const buId = this.resolveBusinessUnitIdForPosition(ctx);\n if (!pid || !buId) {\n return;\n }\n const result = await this.commandService.execute(AXM_HCM_POSITION_ASSIGNMENT_ASSIGN_COMMAND, {\n data: {\n businessUnitId: buId,\n positionId: pid,\n isPrimary: false,\n },\n });\n if (result?.success) {\n await ctx.refreshChart();\n }\n },\n },\n ];\n }\n\n //#endregion\n\n //#region ---- Resolvers ----\n\n private authorize(permission: string): boolean {\n return this.sessionService.authorize(permission);\n }\n\n private resolveCompanyRootViewTarget(\n node: AXMOrganizationNode,\n ): { kind: 'tenant' | 'company'; source: string; entityInfo: Record<string, string>; id: string } | null {\n const ent = node.entity;\n if (!ent?.id) {\n return null;\n }\n const id = String(ent.id).trim();\n if (!id) {\n return null;\n }\n const rawType = String(ent.type ?? '').trim();\n if (rawType === 'tenant' || rawType.endsWith('.Tenant')) {\n return { kind: 'tenant', source: TENANT_ENTITY_SOURCE, entityInfo: this.tenantEntityInfo, id };\n }\n if (rawType === COMPANY_ENTITY_SOURCE || rawType.endsWith('.Company')) {\n return { kind: 'company', source: COMPANY_ENTITY_SOURCE, entityInfo: this.companyEntityInfo, id };\n }\n return null;\n }\n\n private resolveBusinessUnitId(context: AXMOrgChartNodeContributionContext): string | undefined {\n if (context.nodeKind === 'business-unit') {\n const fromEntity = context.node.entity?.id;\n const entityId =\n fromEntity != null && String(fromEntity).trim().length > 0 ? String(fromEntity).trim() : undefined;\n return (\n entityId ??\n (context.node.metadata?.['businessUnitId'] as string | undefined)?.trim() ??\n (context.node.metadata?.['unitId'] as string | undefined)?.trim()\n );\n }\n return undefined;\n }\n\n private resolvePositionId(context: AXMOrgChartNodeContributionContext): string | undefined {\n const entity = context.node.entity;\n if (entity?.id != null && this.isPositionEntityType(entity.type)) {\n const id = String(entity.id).trim();\n return id.length > 0 ? id : undefined;\n }\n const metaPid = context.node.metadata?.['positionId'];\n if (typeof metaPid === 'string' && metaPid.trim().length > 0) {\n return metaPid.trim();\n }\n return undefined;\n }\n\n private isPositionEntityType(entityType: string | undefined): boolean {\n if (!entityType || typeof entityType !== 'string') {\n return false;\n }\n return entityType === POSITION_ENTITY_SOURCE || entityType.endsWith('.Position');\n }\n\n private resolveBusinessUnitIdForPosition(context: AXMOrgChartNodeContributionContext): string | undefined {\n const meta = context.node.metadata ?? {};\n const a = meta['businessUnitId'];\n const b = meta['organizationalUnitId'];\n const raw = (typeof a === 'string' && a.trim().length > 0 ? a : typeof b === 'string' ? b : '') as string;\n const id = String(raw).trim();\n return id.length > 0 ? id : undefined;\n }\n\n private resolvePositionCapacity(node: AXMOrganizationNode): number {\n const meta = node.metadata ?? {};\n const raw = meta['capacity'];\n if (typeof raw === 'number' && Number.isFinite(raw) && raw >= 1) {\n return Math.floor(raw);\n }\n if (typeof raw === 'string') {\n const n = Number(raw.trim());\n if (Number.isFinite(n) && n >= 1) {\n return Math.floor(n);\n }\n }\n return 1;\n }\n\n private resolveFilledAssignmentCount(node: AXMOrganizationNode): number {\n const meta = node.metadata ?? {};\n const fromMeta = meta['activeAssignmentCount'];\n if (typeof fromMeta === 'number' && Number.isFinite(fromMeta) && fromMeta >= 0) {\n return Math.floor(fromMeta);\n }\n const employeeChildren =\n node.children?.filter((c) => c.type === AXMOrgChartNodeType.Employee).length ?? 0;\n if (employeeChildren > 0) {\n return employeeChildren;\n }\n if (meta['vacant'] === true) {\n return 0;\n }\n const occ = meta['occupant'] as Record<string, unknown> | undefined;\n if (typeof occ?.['employeeId'] === 'string' && occ['employeeId'].trim().length > 0) {\n return 1;\n }\n return 0;\n }\n\n //#endregion\n}\n"],"names":[],"mappings":"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"}
@@ -28,7 +28,7 @@ import { FormsModule } from '@angular/forms';
28
28
  import { ActivatedRoute, RouterModule } from '@angular/router';
29
29
  import set from 'lodash-es/set';
30
30
  import { getOrgChartMergedBusinessUnitId, RootConfig, AXM_ORG_CHART_STRUCTURE_SCHEMA_VERSION, AXPOrganizationManagementSettings, AXMOrganizationManagementCommandKeys } from '@acorex-platform/module-organization-management-client/contracts';
31
- import { A as AXMOrgChartNodeType, a as AXM_ORG_CHART_NODE_CONTRIBUTOR, n as normalizeVacantLeafSeatsSetting, p as parseOrgChartMode, b as AXMOrgChartStructureRefreshHub, c as AXMOrgChartCategory, d as AXM_ORG_CHART_EMPLOYEE_SUBMENU_GROUP_ID } from './acorex-platform-module-organization-management-client-acorex-platform-module-organization-management-client-UGWNdPxI.mjs';
31
+ import { A as AXMOrgChartNodeType, a as AXM_ORG_CHART_NODE_CONTRIBUTOR, n as normalizeVacantLeafSeatsSetting, p as parseOrgChartMode, b as AXMOrgChartStructureRefreshHub, c as AXMOrgChartCategory, d as AXM_ORG_CHART_EMPLOYEE_SUBMENU_GROUP_ID } from './acorex-platform-module-organization-management-client-acorex-platform-module-organization-management-client-ZM6X7IDO.mjs';
32
32
  import { AXLoadingDialogService } from '@acorex/components/loading-dialog';
33
33
  import { AXPExportService, AXPSettingsService } from '@acorex-platform/framework-client/common';
34
34
  import { AXPEntityRuntimeAccessorService, AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
@@ -90,7 +90,7 @@ class AXMOrgChartBusinessUnitNodeComponent {
90
90
  return this.getColorKey();
91
91
  }
92
92
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOrgChartBusinessUnitNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
93
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMOrgChartBusinessUnitNodeComponent, isStandalone: true, selector: "axm-org-chart-business-unit-node", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXPAvatarComponent, selector: "axp-avatar", inputs: ["size", "src", "fullName", "showTitle", "fallbackText", "placeholder"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
93
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMOrgChartBusinessUnitNodeComponent, isStandalone: true, selector: "axm-org-chart-business-unit-node", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXPAvatarComponent, selector: "axp-avatar", inputs: ["size", "src", "fullName", "showTitle", "fallbackText", "placeholder"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
94
94
  }
95
95
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOrgChartBusinessUnitNodeComponent, decorators: [{
96
96
  type: Component,
@@ -135,7 +135,7 @@ class AXMOrgChartCompanyNodeComponent {
135
135
  ...(ngDevMode ? [{ debugName: "companyFooterMetrics" }] : /* istanbul ignore next */ []));
136
136
  }
137
137
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOrgChartCompanyNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
138
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMOrgChartCompanyNodeComponent, isStandalone: true, selector: "axm-org-chart-company-node", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXPAvatarComponent, selector: "axp-avatar", inputs: ["size", "src", "fullName", "showTitle", "fallbackText", "placeholder"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
138
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMOrgChartCompanyNodeComponent, isStandalone: true, selector: "axm-org-chart-company-node", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXPAvatarComponent, selector: "axp-avatar", inputs: ["size", "src", "fullName", "showTitle", "fallbackText", "placeholder"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
139
139
  }
140
140
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOrgChartCompanyNodeComponent, decorators: [{
141
141
  type: Component,
@@ -171,7 +171,7 @@ class AXMOrgChartEmployeeNodeComponent {
171
171
  return 'accent3';
172
172
  }
173
173
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOrgChartEmployeeNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
174
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMOrgChartEmployeeNodeComponent, isStandalone: true, selector: "axm-org-chart-employee-node", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXPAvatarComponent, selector: "axp-avatar", inputs: ["size", "src", "fullName", "showTitle", "fallbackText", "placeholder"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
174
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMOrgChartEmployeeNodeComponent, isStandalone: true, selector: "axm-org-chart-employee-node", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXPAvatarComponent, selector: "axp-avatar", inputs: ["size", "src", "fullName", "showTitle", "fallbackText", "placeholder"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
175
175
  }
176
176
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOrgChartEmployeeNodeComponent, decorators: [{
177
177
  type: Component,
@@ -223,7 +223,7 @@ class AXMOrgChartPositionNodeComponent {
223
223
  ...(ngDevMode ? [{ debugName: "managerFooterMetrics" }] : /* istanbul ignore next */ []));
224
224
  }
225
225
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOrgChartPositionNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
226
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMOrgChartPositionNodeComponent, isStandalone: true, selector: "axm-org-chart-position-node", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXPAvatarComponent, selector: "axp-avatar", inputs: ["size", "src", "fullName", "showTitle", "fallbackText", "placeholder"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
226
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMOrgChartPositionNodeComponent, isStandalone: true, selector: "axm-org-chart-position-node", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXPAvatarComponent, selector: "axp-avatar", inputs: ["size", "src", "fullName", "showTitle", "fallbackText", "placeholder"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
227
227
  }
228
228
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOrgChartPositionNodeComponent, decorators: [{
229
229
  type: Component,
@@ -3702,7 +3702,7 @@ class AXMOrgChartPage extends AXPPageLayoutBaseComponent {
3702
3702
  { provide: AXM_ORG_CHART_HOST, useExisting: AXMOrgChartPage },
3703
3703
  ], viewQueries: [{ propertyName: "treeContainer", first: true, predicate: ["chart"], descendants: true, isSignal: true }, { propertyName: "parent", first: true, predicate: ["parent"], descendants: true, isSignal: true }, { propertyName: "contextMenu", first: true, predicate: AXContextMenuComponent, descendants: true, isSignal: true }, { propertyName: "panView", first: true, predicate: AXPanViewDirective, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<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>", styles: ["@layer properties;foreignObject.axp-chart-node{overflow:visible}.axp-chart-links path.link{pointer-events:none}.axp-chart-node{display:flex;align-items:center;justify-content:center}.axp-chart-node .--node-container{position:relative;cursor:pointer;--node-bg-color: var(--ax-sys-color-primary-surface);--node-text-color: var(--ax-sys-color-on-primary-surface);--node-border-color: var(--ax-sys-color-border-primary-surface)}.axp-chart-node .--node-container.--merged-card{box-sizing:border-box;width:100%;max-width:100%}.axp-chart-node .--node-container.--merged-card .--container{width:100%;min-width:0px}.axp-chart-node .--node-container.--selected .--container{border-style:var(--tw-border-style);border-width:2px;--tw-border-style: dashed;border-style:dashed;--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.axp-chart-node .--node-container.--search-hit .--container{box-shadow:0 0 0 2px rgb(var(--ax-sys-color-warning-500)),0 0 12px rgb(var(--ax-sys-color-warning-500))}@supports (color: color-mix(in lab,red,red)){.axp-chart-node .--node-container.--search-hit .--container{box-shadow:0 0 0 2px rgb(var(--ax-sys-color-warning-500)),0 0 12px color-mix(in srgb,rgb(var(--ax-sys-color-warning-500)) 35%,transparent)}}.axp-chart-node .--node-container .--container{display:flex;max-height:100%;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;--tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:rgba(var(--node-border-color))}.axp-chart-node .--node-container .--toggle{position:absolute;right:0;bottom:calc(var(--spacing, .25rem) * -3);left:0;display:flex;width:100%;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none}.axp-chart-node .--node-container.axm-org-chart-card{border-radius:var(--radius-2xl, 1rem);--oc-body-mix: 18%;--oc-ring-1: rgb(var(--node-bg-color));--oc-ring-2: transparent;--oc-ring-3: transparent;border:1px solid rgb(var(--node-bg-color));box-shadow:0 1px 2px #00000008,0 4px 12px #0000000d,0 14px 28px -16px #0000000f,0 0 18px var(--oc-ring-1),0 0 10px var(--oc-ring-2),0 0 14px var(--oc-ring-3),inset 0 1px #fffc}@supports (color: color-mix(in lab,red,red)){.axp-chart-node .--node-container.axm-org-chart-card{--oc-ring-1: color-mix(in srgb, rgb(var(--node-bg-color)) 5%, transparent)}}@supports (color: color-mix(in lab,red,red)){.axp-chart-node .--node-container.axm-org-chart-card{border:1px solid color-mix(in srgb,rgb(var(--node-bg-color)) 12%,transparent)}}.axp-chart-node .--node-container.axm-org-chart-card.axm-org-chart-card--vacant{border-width:2px;border-style:dashed;border-color:rgb(var(--node-bg-color))}@supports (color: color-mix(in lab,red,red)){.axp-chart-node .--node-container.axm-org-chart-card.axm-org-chart-card--vacant{border-color:color-mix(in srgb,rgb(var(--node-bg-color)) 50%,rgb(var(--ax-sys-color-border-primary-surface)))}}.dark :is(.axp-chart-node .--node-container.axm-org-chart-card.axm-org-chart-card--vacant){border-color:rgb(var(--node-bg-color))}@supports (color: color-mix(in lab,red,red)){.dark :is(.axp-chart-node .--node-container.axm-org-chart-card.axm-org-chart-card--vacant){border-color:color-mix(in srgb,rgb(var(--node-bg-color)) 58%,rgb(var(--ax-sys-color-border-primary-surface)))}}.dark :is(.axp-chart-node .--node-container.axm-org-chart-card){border-color:rgb(var(--node-bg-color));box-shadow:0 1px 2px #00000038,0 6px 18px #00000042,0 16px 36px -18px #0000004d,0 0 18px var(--oc-ring-1),0 0 10px var(--oc-ring-2),0 0 14px var(--oc-ring-3)}@supports (color: color-mix(in lab,red,red)){.dark :is(.axp-chart-node .--node-container.axm-org-chart-card){border-color:color-mix(in srgb,rgb(var(--node-bg-color)) 22%,rgb(var(--ax-sys-color-border-primary-surface)))}}.axp-chart-node .--node-container.axm-org-chart-card.--selected:not(.--search-hit){--oc-ring-1: rgb(var(--node-bg-color));--oc-ring-2: rgb(var(--node-bg-color))}@supports (color: color-mix(in lab,red,red)){.axp-chart-node .--node-container.axm-org-chart-card.--selected:not(.--search-hit){--oc-ring-1: color-mix(in srgb, rgb(var(--node-bg-color)) 32%, transparent)}}@supports (color: color-mix(in lab,red,red)){.axp-chart-node .--node-container.axm-org-chart-card.--selected:not(.--search-hit){--oc-ring-2: color-mix(in srgb, rgb(var(--node-bg-color)) 22%, transparent)}}.axp-chart-node .--node-container.axm-org-chart-card.--search-hit:not(.--selected){--oc-ring-1: rgb(var(--ax-sys-color-warning-500));--oc-ring-2: rgb(var(--ax-sys-color-warning-500))}@supports (color: color-mix(in lab,red,red)){.axp-chart-node .--node-container.axm-org-chart-card.--search-hit:not(.--selected){--oc-ring-1: color-mix(in srgb, rgb(var(--ax-sys-color-warning-500)) 30%, transparent)}}@supports (color: color-mix(in lab,red,red)){.axp-chart-node .--node-container.axm-org-chart-card.--search-hit:not(.--selected){--oc-ring-2: color-mix(in srgb, rgb(var(--ax-sys-color-warning-500)) 20%, transparent)}}.axp-chart-node .--node-container.axm-org-chart-card.--selected.--search-hit{--oc-ring-1: rgb(var(--ax-sys-color-warning-500));--oc-ring-2: rgb(var(--ax-sys-color-warning-500));--oc-ring-3: rgb(var(--node-bg-color))}@supports (color: color-mix(in lab,red,red)){.axp-chart-node .--node-container.axm-org-chart-card.--selected.--search-hit{--oc-ring-1: color-mix(in srgb, rgb(var(--ax-sys-color-warning-500)) 28%, transparent)}}@supports (color: color-mix(in lab,red,red)){.axp-chart-node .--node-container.axm-org-chart-card.--selected.--search-hit{--oc-ring-2: color-mix(in srgb, rgb(var(--ax-sys-color-warning-500)) 18%, transparent)}}@supports (color: color-mix(in lab,red,red)){.axp-chart-node .--node-container.axm-org-chart-card.--selected.--search-hit{--oc-ring-3: color-mix(in srgb, rgb(var(--node-bg-color)) 24%, transparent)}}.axp-chart-node .--node-container.axm-org-chart-card .--container{overflow:hidden;border-radius:var(--radius-2xl, 1rem);border-style:var(--tw-border-style);border-width:0px;border-style:none;box-shadow:none}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__accent{width:100%;flex:none;height:6px;border-top-left-radius:inherit;border-top-right-radius:inherit;border-bottom-left-radius:1.5rem;border-bottom-right-radius:0;background:linear-gradient(90deg,rgb(var(--node-bg-color)) 0% 50%,rgb(var(--node-bg-color)))}@supports (color: color-mix(in lab,red,red)){.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__accent{background:linear-gradient(90deg,color-mix(in srgb,rgb(var(--node-bg-color)) 70%,white),rgb(var(--node-bg-color)),color-mix(in srgb,rgb(var(--node-bg-color)) 88%,black))}}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__body{position:relative;display:flex;width:100%;min-width:0px;flex-direction:column;overflow:hidden;color:rgba(var(--ax-sys-color-on-lightest-surface));background-color:rgb(var(--ax-sys-color-lightest-surface));background-image:radial-gradient(ellipse 130% 75% at 105% -5%,rgb(var(--node-bg-color)) 0% 55%,rgb(var(--node-bg-color)))}@supports (color: color-mix(in lab,red,red)){.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__body{background-image:radial-gradient(ellipse 130% 75% at 105% -5%,color-mix(in srgb,rgb(var(--node-bg-color)) var(--oc-body-mix),rgb(var(--ax-sys-color-lightest-surface))),color-mix(in srgb,rgb(var(--node-bg-color)) 6%,rgb(var(--ax-sys-color-lightest-surface))) 55%,color-mix(in srgb,rgb(var(--node-bg-color)) 2%,rgb(var(--ax-sys-color-lightest-surface))))}}.dark :is(.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__body){color:rgba(var(--ax-sys-color-on-lighter-surface));background-color:rgb(var(--ax-sys-color-lighter-surface));background-image:radial-gradient(ellipse 130% 75% at 105% -5%,rgb(var(--node-bg-color)) 0% 55%,rgb(var(--node-bg-color)))}@supports (color: color-mix(in lab,red,red)){.dark :is(.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__body){background-image:radial-gradient(ellipse 130% 75% at 105% -5%,color-mix(in srgb,rgb(var(--node-bg-color)) var(--oc-body-mix),rgb(var(--ax-sys-color-lighter-surface))),color-mix(in srgb,rgb(var(--node-bg-color)) 6%,rgb(var(--ax-sys-color-lighter-surface))) 55%,color-mix(in srgb,rgb(var(--node-bg-color)) 2%,rgb(var(--ax-sys-color-lighter-surface))))}}.axp-chart-node .--node-container.axm-org-chart-card.axm-org-chart-card--employee .axm-org-chart-card__header--person .axm-org-chart-card__person-name{font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__header--org{display:flex;min-width:0px;align-items:flex-start;gap:calc(var(--spacing, .25rem) * 4);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 4)}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__header--person{display:flex;min-width:0px;align-items:center;gap:calc(var(--spacing, .25rem) * 4);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 4)}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__leading-icon{display:flex;width:calc(var(--spacing, .25rem) * 12);height:calc(var(--spacing, .25rem) * 12);flex:none;align-items:center;justify-content:center;border-radius:var(--radius-xl, .75rem);color:rgb(var(--node-bg-color));background-color:rgb(var(--node-bg-color))}@supports (color: color-mix(in lab,red,red)){.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__leading-icon{background-color:color-mix(in srgb,rgb(var(--node-bg-color)) 16%,white)}}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__title-block{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgba(var(--ax-sys-color-on-surface))}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__subtitle{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);opacity:90%;color:rgba(var(--ax-sys-color-on-surface-variant))}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__desc{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);opacity:85%;color:rgba(var(--ax-sys-color-on-surface-variant))}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__person{border-style:var(--tw-border-style);border-width:0px;padding-inline:calc(var(--spacing, .25rem) * 4);padding-top:calc(var(--spacing, .25rem) * 2);padding-bottom:calc(var(--spacing, .25rem) * 4)}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__person-label{margin-bottom:calc(var(--spacing, .25rem) * 2);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700);color:rgb(var(--node-bg-color))}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__person-row{display:flex;min-width:0px;align-items:center;gap:calc(var(--spacing, .25rem) * 4)}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__person-text{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__person-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700);color:rgba(var(--ax-sys-color-on-surface))}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__person-role{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);color:rgba(var(--ax-sys-color-on-surface-variant))}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__person-vacant{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);--tw-tracking: var(--tracking-wide, .025em);letter-spacing:var(--tracking-wide, .025em);text-transform:uppercase;color:rgb(var(--node-bg-color))}@supports (color: color-mix(in lab,red,red)){.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__person-vacant{color:color-mix(in srgb,rgb(var(--node-bg-color)) 72%,rgb(var(--ax-sys-color-on-surface-variant)))}}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__footer{display:flex;flex-direction:row;align-items:stretch;justify-content:center;border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-border-default);min-height:calc(var(--spacing, .25rem) * 14)}.dark :is(.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__footer){border-top-color:var(--color-border-darkest)}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__metric{display:flex;flex:1;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 4)}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__metric+.axm-org-chart-card__metric{border-inline-start-width:1px;border-inline-start-style:solid;border-inline-start-color:var(--color-border-default)}.dark :is(.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__metric+.axm-org-chart-card__metric){border-inline-start-color:var(--color-border-darkest)}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__metric-icon{flex:none;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));opacity:95%;color:rgb(var(--node-bg-color))}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__metric-col{display:flex;min-width:0px;flex:none;flex-direction:column;align-items:center;gap:calc(var(--spacing, .25rem) * .5)}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__metric-value{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: 1;line-height:1;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-chart-node .--node-container.axm-org-chart-card .axm-org-chart-card__metric-title{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);opacity:75%;color:rgba(var(--ax-sys-color-on-surface-variant))}#parent:fullscreen{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-tracking{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-font-weight: initial;--tw-leading: initial;--tw-tracking: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type:
3704
3704
  //
3705
- AXMenuModule }, { kind: "component", type: i2$1.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "closeOnRouteChange", "items", "target"], outputs: ["onItemClick", "onOpening", "onClose"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i3.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "directive", type: AXPanViewDirective, selector: "[axPanView]", inputs: ["zoomStep", "minZoom", "maxZoom", "freeMode", "fitContent", "disablePan", "disableZoom", "wrapperClasses", "panX", "panY", "zoom"], outputs: ["panXChange", "panYChange", "zoomChange", "positionChange"], exportAs: ["axPanView"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i6.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXSwitchModule }, { kind: "component", type: i7.AXSwitchComponent, selector: "ax-switch", inputs: ["disabled", "readonly", "color", "tabIndex", "value", "name", "isLoading"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged", "readonlyChange", "disabledChange"] }, { kind: "component", type:
3705
+ AXMenuModule }, { kind: "component", type: i2$1.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "closeOnRouteChange", "items", "target"], outputs: ["onItemClick", "onOpening", "onClose"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i3.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "directive", type: AXPanViewDirective, selector: "[axPanView]", inputs: ["zoomStep", "minZoom", "maxZoom", "freeMode", "fitContent", "disablePan", "disableZoom", "wrapperClasses", "panX", "panY", "zoom"], outputs: ["panXChange", "panYChange", "zoomChange", "positionChange"], exportAs: ["axPanView"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i6.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXSwitchModule }, { kind: "component", type: i7.AXSwitchComponent, selector: "ax-switch", inputs: ["disabled", "readonly", "color", "tabIndex", "value", "name", "isLoading"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged", "readonlyChange", "disabledChange"] }, { kind: "component", type:
3706
3706
  //
3707
3707
  AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPLayoutFloatingZoomBarComponent, selector: "axp-layout-floating-zoom-bar", inputs: ["zoomLevel"], outputs: ["zoomIn", "zoomOut", "zoomReset"] }, { kind: "component", type: AXPLayoutSideDetailPanelComponent, selector: "axp-layout-side-detail-panel", inputs: ["multiSelectLabel", "header", "sections", "rows", "rowsSectionTitle", "noRowsMessage", "emptyState"], outputs: ["panelClose"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
3708
3708
  }
@@ -3741,4 +3741,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
3741
3741
  }], ctorParameters: () => [], propDecorators: { treeContainer: [{ type: i0.ViewChild, args: ['chart', { isSignal: true }] }], parent: [{ type: i0.ViewChild, args: ['parent', { isSignal: true }] }], contextMenu: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXContextMenuComponent), { isSignal: true }] }], panView: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPanViewDirective), { isSignal: true }] }] } });
3742
3742
 
3743
3743
  export { AXMOrgChartPage };
3744
- //# sourceMappingURL=acorex-platform-module-organization-management-client-org-chart.page-CMd5nTa7.mjs.map
3744
+ //# sourceMappingURL=acorex-platform-module-organization-management-client-org-chart.page-BhXvP2qN.mjs.map