@acorex/modules 19.2.8 → 19.2.10

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 (77) hide show
  1. package/application-management/lib/layouts/module-entity-detail-view/module-entity-detail-view.component.d.ts +3 -0
  2. package/conversation/lib/entities/chat/chat.module.d.ts +2 -3
  3. package/fesm2022/acorex-modules-application-management.mjs +5 -2
  4. package/fesm2022/acorex-modules-application-management.mjs.map +1 -1
  5. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-HwJJs-3A.mjs → acorex-modules-auth-acorex-modules-auth-D1qxdECo.mjs} +8 -8
  6. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-HwJJs-3A.mjs.map → acorex-modules-auth-acorex-modules-auth-D1qxdECo.mjs.map} +1 -1
  7. package/fesm2022/{acorex-modules-auth-app-chooser.component-BvxMkXPp.mjs → acorex-modules-auth-app-chooser.component-8GCTwtb2.mjs} +2 -2
  8. package/fesm2022/{acorex-modules-auth-app-chooser.component-BvxMkXPp.mjs.map → acorex-modules-auth-app-chooser.component-8GCTwtb2.mjs.map} +1 -1
  9. package/fesm2022/{acorex-modules-auth-login.module-CDvLUxls.mjs → acorex-modules-auth-login.module-DR3QLEM-.mjs} +4 -4
  10. package/fesm2022/{acorex-modules-auth-login.module-CDvLUxls.mjs.map → acorex-modules-auth-login.module-DR3QLEM-.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-auth-master.layout-CnKBnl8W.mjs → acorex-modules-auth-master.layout-BMJ5mW63.mjs} +4 -4
  12. package/fesm2022/{acorex-modules-auth-master.layout-CnKBnl8W.mjs.map → acorex-modules-auth-master.layout-BMJ5mW63.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-auth-password.component-C16jeHuJ.mjs → acorex-modules-auth-password.component-EXWlXGez.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-auth-password.component-C16jeHuJ.mjs.map → acorex-modules-auth-password.component-EXWlXGez.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-auth-password.component-1FnIjiZ8.mjs → acorex-modules-auth-password.component-avrMwyr8.mjs} +2 -2
  16. package/fesm2022/{acorex-modules-auth-password.component-1FnIjiZ8.mjs.map → acorex-modules-auth-password.component-avrMwyr8.mjs.map} +1 -1
  17. package/fesm2022/{acorex-modules-auth-routes-ZDDUhAWd.mjs → acorex-modules-auth-routes-BPYBFOxg.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-auth-routes-ZDDUhAWd.mjs.map → acorex-modules-auth-routes-BPYBFOxg.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-auth-two-factor.module-C32MVGby.mjs → acorex-modules-auth-two-factor.module-B_V_nQN_.mjs} +2 -2
  20. package/fesm2022/{acorex-modules-auth-two-factor.module-C32MVGby.mjs.map → acorex-modules-auth-two-factor.module-B_V_nQN_.mjs.map} +1 -1
  21. package/fesm2022/acorex-modules-auth.mjs +1 -1
  22. package/fesm2022/acorex-modules-conversation.mjs +3 -8
  23. package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
  24. package/fesm2022/{acorex-modules-form-template-management-acorex-modules-form-template-management-CUQ-GAN5.mjs → acorex-modules-form-template-management-acorex-modules-form-template-management-BkUdHH_Y.mjs} +83 -7
  25. package/fesm2022/acorex-modules-form-template-management-acorex-modules-form-template-management-BkUdHH_Y.mjs.map +1 -0
  26. package/fesm2022/{acorex-modules-form-template-management-category.entity-WtgUidaW.mjs → acorex-modules-form-template-management-category.entity-D00XZd7o.mjs} +2 -2
  27. package/fesm2022/{acorex-modules-form-template-management-category.entity-WtgUidaW.mjs.map → acorex-modules-form-template-management-category.entity-D00XZd7o.mjs.map} +1 -1
  28. package/fesm2022/{acorex-modules-form-template-management-setting.provider-u7Jv1myU.mjs → acorex-modules-form-template-management-setting.provider-Dy-Cd_iL.mjs} +2 -2
  29. package/fesm2022/{acorex-modules-form-template-management-setting.provider-u7Jv1myU.mjs.map → acorex-modules-form-template-management-setting.provider-Dy-Cd_iL.mjs.map} +1 -1
  30. package/fesm2022/{acorex-modules-form-template-management-template-widget-edit.component-DPdPjZGi.mjs → acorex-modules-form-template-management-template-widget-edit.component-rGcHfFSh.mjs} +2 -2
  31. package/fesm2022/{acorex-modules-form-template-management-template-widget-edit.component-DPdPjZGi.mjs.map → acorex-modules-form-template-management-template-widget-edit.component-rGcHfFSh.mjs.map} +1 -1
  32. package/fesm2022/{acorex-modules-form-template-management-template.entity-BnctQkm6.mjs → acorex-modules-form-template-management-template.entity-B0DUUdPJ.mjs} +38 -2
  33. package/fesm2022/acorex-modules-form-template-management-template.entity-B0DUUdPJ.mjs.map +1 -0
  34. package/fesm2022/acorex-modules-form-template-management-viewer-popup.component-xUrGRQbQ.mjs +93 -0
  35. package/fesm2022/acorex-modules-form-template-management-viewer-popup.component-xUrGRQbQ.mjs.map +1 -0
  36. package/fesm2022/acorex-modules-form-template-management.mjs +1 -1
  37. package/fesm2022/{acorex-modules-organization-management-add-item.component-DsWqdz8M.mjs → acorex-modules-organization-management-add-item.component-PhQRBTtI.mjs} +13 -10
  38. package/fesm2022/acorex-modules-organization-management-add-item.component-PhQRBTtI.mjs.map +1 -0
  39. package/fesm2022/{acorex-modules-organization-management-org-chart-configuration.page-DBc6gISy.mjs → acorex-modules-organization-management-org-chart-configuration.page-DjzqBdaS.mjs} +3 -3
  40. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DjzqBdaS.mjs.map +1 -0
  41. package/fesm2022/{acorex-modules-organization-management-org-chart.page-e-N7Ql80.mjs → acorex-modules-organization-management-org-chart.page-BSh18amn.mjs} +167 -118
  42. package/fesm2022/acorex-modules-organization-management-org-chart.page-BSh18amn.mjs.map +1 -0
  43. package/fesm2022/acorex-modules-organization-management.mjs +2 -2
  44. package/fesm2022/acorex-modules-platform-management.mjs +397 -127
  45. package/fesm2022/acorex-modules-platform-management.mjs.map +1 -1
  46. package/form-template-management/lib/features/viewer/viewer-connector.service.d.ts +13 -0
  47. package/form-template-management/lib/features/viewer/viewer-popup.component.d.ts +25 -0
  48. package/form-template-management/lib/features/viewer/workflows/open-template.workflow.d.ts +9 -0
  49. package/organization-management/lib/features/organization-chart/add-item/add-item.component.d.ts +2 -1
  50. package/organization-management/lib/features/organization-chart/org-chart-configuration.page.d.ts +3 -0
  51. package/organization-management/lib/features/organization-chart/org-chart.page.d.ts +3 -0
  52. package/organization-management/lib/features/organization-chart/org-chart.service.d.ts +15 -13
  53. package/package.json +5 -5
  54. package/platform-management/lib/common/regional/index.d.ts +0 -2
  55. package/platform-management/lib/common/regional/language-slot/language-slot.component.d.ts +1 -1
  56. package/platform-management/lib/entities/check-version.d.ts +1 -0
  57. package/platform-management/lib/entities/data-source/data-source.types.d.ts +2 -1
  58. package/platform-management/lib/entities/data-source/datasource-provider.dynamic.d.ts +2 -0
  59. package/fesm2022/acorex-modules-form-template-management-acorex-modules-form-template-management-CUQ-GAN5.mjs.map +0 -1
  60. package/fesm2022/acorex-modules-form-template-management-template.entity-BnctQkm6.mjs.map +0 -1
  61. package/fesm2022/acorex-modules-organization-management-add-item.component-DsWqdz8M.mjs.map +0 -1
  62. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DBc6gISy.mjs.map +0 -1
  63. package/fesm2022/acorex-modules-organization-management-org-chart.page-e-N7Ql80.mjs.map +0 -1
  64. package/fesm2022/acorex-modules-platform-management-countries-0S6HdpYF.mjs +0 -500
  65. package/fesm2022/acorex-modules-platform-management-countries-0S6HdpYF.mjs.map +0 -1
  66. package/fesm2022/acorex-modules-platform-management-currencies-vgPg4Hj3.mjs +0 -13
  67. package/fesm2022/acorex-modules-platform-management-currencies-vgPg4Hj3.mjs.map +0 -1
  68. package/fesm2022/acorex-modules-platform-management-regional-formats-BaHofjWg.mjs +0 -14
  69. package/fesm2022/acorex-modules-platform-management-regional-formats-BaHofjWg.mjs.map +0 -1
  70. package/fesm2022/acorex-modules-platform-management-timezones-BoScbn0h.mjs +0 -15
  71. package/fesm2022/acorex-modules-platform-management-timezones-BoScbn0h.mjs.map +0 -1
  72. package/platform-management/lib/common/regional/data/countries.d.ts +0 -2
  73. package/platform-management/lib/common/regional/data/currencies.d.ts +0 -2
  74. package/platform-management/lib/common/regional/data/regional-formats.d.ts +0 -2
  75. package/platform-management/lib/common/regional/data/timezones.d.ts +0 -2
  76. package/platform-management/lib/common/regional/regional-util.service.d.ts +0 -12
  77. package/platform-management/lib/common/regional/regional.types.d.ts +0 -52
@@ -23,12 +23,12 @@ import get from 'lodash-es/get';
23
23
  import { AXMOrganizationManagementDepartmentEntityService, AXMOrganizationManagementDivisionEntityService, AXMOrganizationManagementBranchEntityService, AXMOrganizationManagementEmployeeEntityService, AXMOrganizationManagementPositionEntityService, AXMOrganizationManagementChartEntityService, AXMOrganizationNodeType, AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS, RootConfig, AXMOrganizationNodeTypeCategory } from './acorex-modules-organization-management.mjs';
24
24
  import { A as AXMOrgChartConfigService } from './acorex-modules-organization-management-org-chart-configuration.service-QLdDEdqL.mjs';
25
25
  import { AXLoadingDialogService } from '@acorex/components/loading-dialog';
26
- import { AXPExportService, AXPDataGenerator } from '@acorex/platform/common';
27
- import { AXPSessionService } from '@acorex/platform/auth';
28
- import { cloneDeep } from 'lodash-es';
26
+ import { AXPExportService, AXPRegionalService, AXPDataGenerator } from '@acorex/platform/common';
27
+ import { AXDialogService } from '@acorex/components/dialog';
29
28
  import { AXPopupService } from '@acorex/components/popup';
30
- import { AXPRegionalService } from '@acorex/modules/platform-management';
29
+ import { AXPSessionService } from '@acorex/platform/auth';
31
30
  import { applyFilterArray } from '@acorex/platform/core';
31
+ import { cloneDeep } from 'lodash-es';
32
32
  import set from 'lodash-es/set';
33
33
 
34
34
  /**
@@ -172,7 +172,9 @@ class AXMOrgChartService {
172
172
  this.popupService = inject(AXPopupService);
173
173
  this.layoutService = inject(AXPLayoutThemeService);
174
174
  this.regionalService = inject(AXPRegionalService);
175
- this._rootNode = signal({ id: AXPDataGenerator.uuid(), title: "Company" });
175
+ this.dialogService = inject(AXDialogService);
176
+ this.translateService = inject(AXTranslationService);
177
+ this._rootNode = signal({ id: AXPDataGenerator.uuid(), title: 'Company' });
176
178
  this.rootNode = this._rootNode.asReadonly();
177
179
  // The clipboard holds the node being cut or copied.
178
180
  this.clipboard = signal(null);
@@ -182,9 +184,7 @@ class AXMOrgChartService {
182
184
  const first = (await this.chartService.query({
183
185
  skip: 0,
184
186
  take: 1,
185
- sort: [
186
- { field: 'version', dir: 'desc' }
187
- ]
187
+ sort: [{ field: 'version', dir: 'desc' }],
188
188
  })).items[0];
189
189
  //
190
190
  if (first) {
@@ -211,14 +211,18 @@ class AXMOrgChartService {
211
211
  id: tenant.id,
212
212
  source: 'tenant',
213
213
  },
214
- children: []
214
+ children: [],
215
215
  },
216
216
  };
217
217
  await this.chartService.insertOne({ data: record.data, version: record.version });
218
218
  }
219
219
  async save() {
220
220
  const first = (await this.chartService.query()).items[0];
221
- await this.chartService.updateOne(first.id, { version: first.version, data: this._rootNode(), updateAt: new Date() });
221
+ await this.chartService.updateOne(first.id, {
222
+ version: first.version,
223
+ data: this._rootNode(),
224
+ updateAt: new Date(),
225
+ });
222
226
  }
223
227
  //#endregion
224
228
  //#region Context Menu
@@ -231,7 +235,7 @@ class AXMOrgChartService {
231
235
  Location: [],
232
236
  BusinessUnit: [],
233
237
  Role: [],
234
- Employee: []
238
+ Employee: [],
235
239
  };
236
240
  Object.entries(AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS).forEach(([entitySource, config]) => {
237
241
  if (allowedTypes.includes(config.type)) {
@@ -242,12 +246,12 @@ class AXMOrgChartService {
242
246
  data: {
243
247
  node,
244
248
  config,
245
- source: entitySource
249
+ source: entitySource,
246
250
  },
247
251
  });
248
252
  }
249
253
  });
250
- Object.values(groupedMenuItems).forEach(group => {
254
+ Object.values(groupedMenuItems).forEach((group) => {
251
255
  if (group.length > 0) {
252
256
  allowedMenuItems.push(...group);
253
257
  group[group.length - 1].break = true;
@@ -259,7 +263,7 @@ class AXMOrgChartService {
259
263
  return allowedMenuItems;
260
264
  }
261
265
  //#endregion
262
- //#region Check Permission
266
+ //#region Check Permission
263
267
  async getAllowedChildCategoriesForParent(parent) {
264
268
  await this.configService.load();
265
269
  const types = this.configService.types;
@@ -275,11 +279,16 @@ class AXMOrgChartService {
275
279
  });
276
280
  return Array.from(allowedTypes);
277
281
  }
278
- //#endregion
282
+ //#endregion
279
283
  //#region Remove/Cut/Copy/Past
280
284
  async removeNode(id) {
281
- this._rootNode.update((node) => this.removeNodeRecursively(node, id));
282
- await this.save();
285
+ const title = await this.translateService.translateAsync('dialogs.delete.title');
286
+ const message = await this.translateService.translateAsync('dialogs.delete.message');
287
+ const dialogResult = await this.dialogService.confirm(title, message, 'danger', 'horizontal');
288
+ if (dialogResult.result) {
289
+ this._rootNode.update((node) => this.removeNodeRecursively(node, id));
290
+ await this.save();
291
+ }
283
292
  }
284
293
  removeNodeRecursively(node, id) {
285
294
  // If the node itself is the one to be deleted, return null
@@ -288,8 +297,9 @@ class AXMOrgChartService {
288
297
  }
289
298
  // Otherwise, recursively check children
290
299
  if (node.children) {
291
- node.children = node.children.filter(child => child.id !== id)
292
- .map(child => {
300
+ node.children = node.children
301
+ .filter((child) => child.id !== id)
302
+ .map((child) => {
293
303
  return { ...child, children: this.removeNodeRecursively(child, id)?.children };
294
304
  });
295
305
  }
@@ -307,18 +317,18 @@ class AXMOrgChartService {
307
317
  return allowedTypes.includes(this.clipboard()?.node.type);
308
318
  }
309
319
  /**
310
- * Cuts the node with the given id.
311
- * The node is removed from the tree and stored in the clipboard.
312
- * Cutting the root node is not allowed.
313
- */
320
+ * Cuts the node with the given id.
321
+ * The node is removed from the tree and stored in the clipboard.
322
+ * Cutting the root node is not allowed.
323
+ */
314
324
  async cutNode(id) {
315
325
  const tree = this._rootNode();
316
326
  if (tree.id === id) {
317
- throw new Error("Cannot cut the root node.");
327
+ throw new Error('Cannot cut the root node.');
318
328
  }
319
329
  const result = this.findNodeAndParent(tree, id);
320
330
  if (!result) {
321
- throw new Error("Node not found.");
331
+ throw new Error('Node not found.');
322
332
  }
323
333
  // Set the clipboard signal with mode 'cut'
324
334
  this.clipboard.set({ mode: 'cut', node: result.node });
@@ -328,32 +338,32 @@ class AXMOrgChartService {
328
338
  await this.save();
329
339
  }
330
340
  /**
331
- * Copies the node with the given id.
332
- * A deep clone of the node is stored in the clipboard.
333
- */
341
+ * Copies the node with the given id.
342
+ * A deep clone of the node is stored in the clipboard.
343
+ */
334
344
  copyNode(id) {
335
345
  const tree = this._rootNode();
336
346
  const result = this.findNodeAndParent(tree, id);
337
347
  if (!result) {
338
- throw new Error("Node not found.");
348
+ throw new Error('Node not found.');
339
349
  }
340
350
  // Use lodash's cloneDeep to create a deep clone.
341
351
  const copiedNode = cloneDeep(result.node);
342
352
  this.clipboard.set({ mode: 'copy', node: copiedNode });
343
353
  }
344
354
  /**
345
- * Pastes the node in the clipboard as a child of the node with the given parentId.
346
- * For a cut, the node is moved; for a copy, new IDs are generated so the pasted node is unique.
347
- */
355
+ * Pastes the node in the clipboard as a child of the node with the given parentId.
356
+ * For a cut, the node is moved; for a copy, new IDs are generated so the pasted node is unique.
357
+ */
348
358
  async pasteNode(parentId) {
349
359
  const clipboardValue = this.clipboard();
350
360
  if (!clipboardValue) {
351
- throw new Error("Clipboard is empty.");
361
+ throw new Error('Clipboard is empty.');
352
362
  }
353
363
  const tree = this._rootNode();
354
364
  const parentResult = this.findNodeAndParent(tree, parentId);
355
365
  if (!parentResult) {
356
- throw new Error("Parent node not found.");
366
+ throw new Error('Parent node not found.');
357
367
  }
358
368
  let nodeToPaste;
359
369
  if (clipboardValue.mode === 'cut') {
@@ -369,9 +379,9 @@ class AXMOrgChartService {
369
379
  await this.save();
370
380
  }
371
381
  /**
372
- * Recursively searches the tree for the node with the given id,
373
- * returning both the node and its parent.
374
- */
382
+ * Recursively searches the tree for the node with the given id,
383
+ * returning both the node and its parent.
384
+ */
375
385
  findNodeAndParent(node, id, parent = null) {
376
386
  if (node.id === id) {
377
387
  return { node, parent };
@@ -402,7 +412,7 @@ class AXMOrgChartService {
402
412
  assignNewIds(node) {
403
413
  node.id = AXPDataGenerator.uuid();
404
414
  if (node.children) {
405
- node.children.forEach(child => this.assignNewIds(child));
415
+ node.children.forEach((child) => this.assignNewIds(child));
406
416
  }
407
417
  }
408
418
  /**
@@ -416,7 +426,7 @@ class AXMOrgChartService {
416
426
  if (node.children) {
417
427
  return {
418
428
  ...node,
419
- children: node.children.map(child => this.insertNodeRecursively(child, parentId, newNode))
429
+ children: node.children.map((child) => this.insertNodeRecursively(child, parentId, newNode)),
420
430
  };
421
431
  }
422
432
  return node;
@@ -425,84 +435,123 @@ class AXMOrgChartService {
425
435
  //#region Add Node
426
436
  async addNode(data) {
427
437
  this.layoutService.setNavigationLoading(true);
428
- const comp = (await import('./acorex-modules-organization-management-add-item.component-DsWqdz8M.mjs')).AddItemComponent;
429
- const node = get(data, 'node');
430
- const type = get(data, 'config.type');
431
- const icon = get(data, 'config.icon');
432
- const source = get(data, 'source');
433
- let query;
434
- const countrySource = async (request) => {
435
- let list = await this.regionalService.getCountries();
436
- if (request.filter) {
437
- list = applyFilterArray(list, [request.filter]);
438
- }
439
- const items = list.map((c) => ({
440
- id: c.code,
441
- title: c.title
442
- }));
443
- return {
444
- items,
445
- total: items.length
438
+ try {
439
+ const component = (await import('./acorex-modules-organization-management-add-item.component-PhQRBTtI.mjs')).AddItemComponent;
440
+ const node = get(data, 'node');
441
+ const type = get(data, 'config.type');
442
+ const icon = get(data, 'config.icon');
443
+ const source = get(data, 'source');
444
+ let query;
445
+ const countrySource = async (request) => {
446
+ let list = await this.regionalService.getCountries();
447
+ if (request.filter) {
448
+ list = applyFilterArray(list, [request.filter]);
449
+ }
450
+ const items = list.map((c) => ({
451
+ id: c.code,
452
+ title: c.title,
453
+ }));
454
+ return { items, total: items.length };
446
455
  };
447
- };
448
- let valueField = 'id';
449
- let titleField = 'title';
450
- let subtitleField = null;
451
- let descriptionField = 'description';
452
- switch (type) {
453
- case AXMOrganizationNodeType.Country:
454
- query = countrySource;
455
- break;
456
- case AXMOrganizationNodeType.Department:
457
- query = this.departmentService.query.bind(this.departmentService);
458
- break;
459
- case AXMOrganizationNodeType.Division:
460
- query = this.divisionService.query.bind(this.divisionService);
461
- break;
462
- case AXMOrganizationNodeType.Branch:
463
- query = this.branchService.query.bind(this.branchService);
464
- break;
465
- case AXMOrganizationNodeType.Position:
466
- query = this.positionService.query.bind(this.positionService);
467
- break;
468
- case AXMOrganizationNodeType.Employee:
469
- query = this.employmentService.query.bind(this.employmentService);
470
- break;
471
- default:
472
- break;
473
- }
474
- const result = await this.popupService.open(comp, {
475
- title: `Add ${get(data, 'config.title')}`,
476
- size: 'md',
477
- data: {
478
- config: {
479
- valueField,
480
- titleField,
481
- subtitleField,
482
- descriptionField,
483
- query: query
456
+ const provinceSource = async (request) => {
457
+ let list = await this.regionalService.getProvinces(node.type === AXMOrganizationNodeType.Country ? node.entity?.id : undefined);
458
+ if (request.filter) {
459
+ list = applyFilterArray(list, [request.filter]);
484
460
  }
461
+ const items = list.map((c) => ({
462
+ id: c.code,
463
+ title: c.title,
464
+ }));
465
+ return { items, total: items.length };
466
+ };
467
+ const citySource = async (request) => {
468
+ let filter = {};
469
+ if (node.type === AXMOrganizationNodeType.Country) {
470
+ filter.countryId = node.entity?.id;
471
+ }
472
+ else if (node.type === AXMOrganizationNodeType.State) {
473
+ filter.provinceId = node.entity?.id;
474
+ }
475
+ let list = await this.regionalService.getCities(filter);
476
+ if (request.filter) {
477
+ list = applyFilterArray(list, [request.filter]);
478
+ }
479
+ const items = list.map((c) => ({
480
+ id: c.code,
481
+ title: c.title,
482
+ }));
483
+ return { items, total: items.length };
484
+ };
485
+ const valueField = 'id';
486
+ const titleField = 'title';
487
+ const subtitleField = null;
488
+ const descriptionField = 'description';
489
+ switch (type) {
490
+ case AXMOrganizationNodeType.Country:
491
+ query = countrySource;
492
+ break;
493
+ case AXMOrganizationNodeType.State:
494
+ query = provinceSource;
495
+ break;
496
+ case AXMOrganizationNodeType.City:
497
+ query = citySource;
498
+ break;
499
+ case AXMOrganizationNodeType.Department:
500
+ query = this.departmentService.query.bind(this.departmentService);
501
+ break;
502
+ case AXMOrganizationNodeType.Division:
503
+ query = this.divisionService.query.bind(this.divisionService);
504
+ break;
505
+ case AXMOrganizationNodeType.Branch:
506
+ query = this.branchService.query.bind(this.branchService);
507
+ break;
508
+ case AXMOrganizationNodeType.Position:
509
+ query = this.positionService.query.bind(this.positionService);
510
+ break;
511
+ case AXMOrganizationNodeType.Employee:
512
+ query = this.employmentService.query.bind(this.employmentService);
513
+ break;
514
+ default:
515
+ throw new Error(`Unsupported node type: ${type}`);
485
516
  }
486
- });
487
- const newNode = {
488
- id: AXPDataGenerator.uuid(),
489
- title: result.data.title,
490
- description: result.data.description,
491
- subtitle: result.data.subtitle,
492
- type: type,
493
- parentId: node.id,
494
- icon,
495
- entity: {
496
- id: result.data.id,
497
- source: source
517
+ const result = await this.popupService.open(component, {
518
+ title: `Add ${get(data, 'config.title')}`,
519
+ size: 'md',
520
+ data: {
521
+ config: {
522
+ valueField,
523
+ titleField,
524
+ subtitleField,
525
+ descriptionField,
526
+ query: query,
527
+ },
528
+ },
529
+ });
530
+ if (!result.data) {
531
+ return false;
498
532
  }
499
- };
500
- const tree = this._rootNode();
501
- const newTree = this.insertNodeRecursively(tree, node.id, newNode);
502
- this._rootNode.set(newTree);
503
- await this.save();
504
- this.layoutService.setNavigationLoading(false);
505
- return result.data != null;
533
+ const newNode = {
534
+ id: AXPDataGenerator.uuid(),
535
+ title: result.data.title,
536
+ description: result.data.description,
537
+ subtitle: result.data.subtitle,
538
+ type: type,
539
+ parentId: node.id,
540
+ icon,
541
+ entity: {
542
+ id: result.data.id,
543
+ source: source,
544
+ },
545
+ };
546
+ const tree = this._rootNode();
547
+ const newTree = this.insertNodeRecursively(tree, node.id, newNode);
548
+ this._rootNode.set(newTree);
549
+ await this.save();
550
+ return true;
551
+ }
552
+ finally {
553
+ this.layoutService.setNavigationLoading(false);
554
+ }
506
555
  }
507
556
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMOrgChartService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
508
557
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMOrgChartService }); }
@@ -552,13 +601,13 @@ class AXMOrgChartPage {
552
601
  * Zooms in the chart.
553
602
  */
554
603
  zoomIn() {
555
- this.panZoomLevel.update((prev) => prev + 5);
604
+ this.panView()?.zoomIn();
556
605
  }
557
606
  /**
558
607
  * Zooms out the chart.
559
608
  */
560
609
  zoomOut() {
561
- this.panZoomLevel.update((prev) => prev - 5);
610
+ this.panView()?.zoomOut();
562
611
  }
563
612
  /**
564
613
  * Resets the zoom level and pan position of the chart.
@@ -860,7 +909,7 @@ class AXMOrgChartPage {
860
909
  this.clearChart(this.treeContainer().nativeElement);
861
910
  }
862
911
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMOrgChartPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
863
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXMOrgChartPage, isStandalone: true, selector: "ng-component", providers: [AXMOrgChartConfigService, AXMOrgChartService, AXMOrgChartPrintService], viewQueries: [{ propertyName: "nodeTemplate", first: true, predicate: ["nodeTemplate"], descendants: true, isSignal: true }, { 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 }], ngImport: i0, template: "<axp-layout-simple-page *translate=\"let t\">\n <axp-layout-header>\n <axp-layout-title> {{t(rootConfig.entities.chart.title) | async}} </axp-layout-title>\n\n <axp-layout-description> Clear and dynamic view of your organization's structure </axp-layout-description>\n\n <axp-layout-actions>\n <axp-layout-actions-primary> </axp-layout-actions-primary>\n\n <axp-layout-actions-secondary>\n <ax-button-item [text]=\"(t('print') | async)!\" (onClick)=\"printChart()\">\n <ax-prefix>\n <ax-icon [icon]=\"'fa-solid fa-print'\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </axp-layout-actions-secondary>\n </axp-layout-actions>\n\n <axp-layout-breadcrumbs>\n <ax-breadcrumbs [class.ax-hidden]=\"layout.isSmall()\">\n <ng-template #divider>\n <i class=\"fa-regular fa-slash-forward\"></i>\n </ng-template>\n <ax-breadcrumbs-item> {{(t('home') | async)}} </ax-breadcrumbs-item>\n <ax-breadcrumbs-item> Organization </ax-breadcrumbs-item>\n </ax-breadcrumbs>\n </axp-layout-breadcrumbs>\n </axp-layout-header>\n\n <axp-layout-content class=\"ax-overflow-hidden\">\n <div class=\"ax-h-[calc(100vh-290px)]\" #parent id=\"parent\">\n <div #chart axPanView [(panX)]=\"panX\" [(panY)]=\"panY\" [(zoom)]=\"panZoomLevel\" [fitContent]=\"true\"\n wrapperClasses=\"h\" class=\"ax-light\"></div>\n <ax-context-menu [target]=\"'.axp-chart-node'\" [orientation]=\"'vertical'\" [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\" (onOpening)=\"handleContextMenuOnOpening($event)\">\n </ax-context-menu>\n </div>\n </axp-layout-content>\n <axp-layout-footer>\n <axp-layout-prefix>\n <div class=\"ax-flex ax-gap-1 ax-light ax-flex-wrap ax-justify-center\">\n @let v = {cat:'Company'};\n @for (item of nodeTypes; track $index) {\n <div class=\"axp-node-hint\" [style]=\"getNodeColors(item.color)\" [class.ax-ms-4]=\"v.cat!=item.category\">\n <div class=\"--badge\">\n </div>\n {{item.title}}\n </div>\n {{updateVar(v,item.category)}}\n }\n </div>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <div class=\"ax-flex ax-gap-2 \">\n <ax-button (onClick)=\"zoomOut()\">\n <ax-icon class=\"fa-solid fa-minus\"> </ax-icon>\n </ax-button>\n <ax-button [text]=\"panZoomLevel()\" (onClick)=\"zoomReset()\"></ax-button>\n <ax-button (onClick)=\"zoomIn()\">\n <ax-icon class=\"fa-solid fa-add\"> </ax-icon>\n </ax-button>\n <ax-button (onClick)=\"toggleFullscreen()\">\n <ax-icon>\n <i class=\"fa-solid\" [class]=\"isFullscreen()? 'fa-compress' : 'fa-expand'\"></i>\n </ax-icon>\n </ax-button>\n </div>\n </axp-layout-suffix>\n </axp-layout-footer>\n</axp-layout-simple-page>\n\n<ng-template #nodeTemplate let-data>\n <div>\n @switch (data.category) {\n <!-- Company -->\n @case (NodeTypes.Company) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'primary' }\"></ng-container>\n }\n <!-- Location -->\n @case (NodeTypes.Location) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'accent1' }\"></ng-container>\n }\n <!-- BusinessUnit -->\n @case (NodeTypes.BusinessUnit) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'accent2' }\"></ng-container>\n }\n <!-- Role -->\n @case (NodeTypes.Role) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'accent3' }\"></ng-container>\n }\n <!-- Employee -->\n @case (NodeTypes.Employee) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'surface' }\"></ng-container>\n }\n }\n </div>\n</ng-template>\n\n<!----------------------------------- General Node Template ----------------------------------->\n<ng-template #generalTemplate let-data=\"data\" let-color=\"color\">\n <div #node class=\"--node-container\" [style]=\"getNodeColors(color)\">\n <div class=\"--container\">\n <div class=\"--heading-container\">\n <div class=\"--content\">\n <div class=\"--icon\">\n <i class=\"fa-light fa-xl fa-fw\" [class]=\"data.icon\"></i>\n </div>\n <div class=\"--titles\">\n <span class=\"--title\">{{data.title}}</span>\n @if(data.subtitle)\n {\n <span class=\"--sub-title\">{{data.subtitle}}</span>\n }\n </div>\n @if(data?.children?.length){\n <div class=\"--badge\">\n <span>{{data?.children?.length ?? 0}}</span>\n </div>\n }\n </div>\n </div>\n @if(data.description)\n {\n <div class=\"--body-container\">\n <div class=\"--description\" [class.ax-pb-3]=\"data.children && data.children.length > 0\">\n {{data.description}}\n </div>\n </div>\n }\n @if(data.children && data.children.length > 0){\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs ax-rounded-sm\" (onClick)=\"toggleNode(data,node)\">\n <ax-icon icon=\"fa-solid\" [class]=\"data.isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n </div>\n</ng-template>", styles: [".axp-node-hint{display:flex;align-items:center;justify-content:center;gap:.25rem;font-size:.75rem;line-height:1rem}.axp-node-hint>div.--badge{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));display:flex;width:.75rem;height:.75rem;align-items:center;justify-content:center;border-radius:.125rem}.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 .--container{display:flex;max-height:100%;width:100%;flex-direction:column;overflow:hidden;border-radius:.375rem;border-width:1px;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);border-color:rgba(var(--node-border-color))}.axp-chart-node .--node-container .--container .--heading-container{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));width:100%;padding:.5rem .75rem}.axp-chart-node .--node-container .--container .--heading-container .--content{display:flex;width:100%;align-items:center;justify-content:center;gap:.5rem;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--icon{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:2.75rem;height:2.75rem;flex:none;align-items:center;justify-content:center;border-radius:.5rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:1.5rem;height:1.5rem;flex:none;align-items:center;justify-content:center;border-radius:.375rem;line-height:1}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge>span{font-size:.75rem;line-height:1rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles{display:flex;width:100%;flex:1 1 0%;flex-direction:column;gap:.25rem;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.125rem;line-height:1.75rem;font-weight:600;line-height:1}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--sub-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--body-container{width:100%;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding:.5rem .75rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}.axp-chart-node .--node-container .--container .--body-container .--description{text-align:center;font-size:.875rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--toggle{position:absolute;left:0;right:0;bottom:-.75rem;display:flex;width:100%;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;align-items:center;justify-content:center}#parent:fullscreen{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "component", type: AXPSimplePageLayout, selector: "axp-layout-simple-page" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-layout-content, axp-layout-header-container, axp-layout-side-container, axp-layout-sections, axp-layout-section-container, axp-layout-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title, axp-layout-nav-button, axp-layout-description, axp-layout-toolbar, axp-layout-title-bar, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutHeaderTemplateComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutActionsComponent, selector: "axp-layout-actions" }, { kind: "component", type: AXPThemeLayoutPageSecondaryActionsComponent, selector: "axp-layout-actions-secondary" }, { kind: "component", type: AXPThemeLayoutPagePrimaryActionsComponent, selector: "axp-layout-actions-primary" }, { kind: "component", type: AXPThemeLayoutFooterComponent, selector: "axp-layout-footer" }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i2.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "items", "target"], outputs: ["onItemClick", "onOpening"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i3.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i4.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i5.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "directive", type: AXPanViewDirective, selector: "[axPanView]", inputs: ["minZoom", "maxZoom", "zoomStep", "fitContent", "disablePan", "disableZoom", "wrapperClasses", "panX", "panY", "zoom"], outputs: ["panXChange", "panYChange", "zoomChange", "positionChange"], exportAs: ["axPanView"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: i6.AXBreadCrumbsComponent, selector: "ax-breadcrumbs" }, { kind: "component", type: i6.AXBreadCrumbsItemComponent, selector: "ax-breadcrumbs-item", inputs: ["disabled", "active"] }, { kind: "ngmodule", type: AXBadgeModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
912
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXMOrgChartPage, isStandalone: true, selector: "ng-component", providers: [AXMOrgChartConfigService, AXMOrgChartService, AXMOrgChartPrintService], viewQueries: [{ propertyName: "nodeTemplate", first: true, predicate: ["nodeTemplate"], descendants: true, isSignal: true }, { 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 }], ngImport: i0, template: "<axp-layout-simple-page *translate=\"let t\">\n <axp-layout-header>\n <axp-layout-title> {{t(rootConfig.entities.chart.title) | async}} </axp-layout-title>\n\n <axp-layout-description> Clear and dynamic view of your organization's structure </axp-layout-description>\n\n <axp-layout-actions>\n <axp-layout-actions-primary> </axp-layout-actions-primary>\n\n <axp-layout-actions-secondary>\n <ax-button-item [text]=\"(t('print') | async)!\" (onClick)=\"printChart()\">\n <ax-prefix>\n <ax-icon [icon]=\"'fa-solid fa-print'\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </axp-layout-actions-secondary>\n </axp-layout-actions>\n\n <axp-layout-breadcrumbs>\n <ax-breadcrumbs [class.ax-hidden]=\"layout.isSmall()\">\n <ng-template #divider>\n <i class=\"fa-regular fa-slash-forward\"></i>\n </ng-template>\n <ax-breadcrumbs-item> {{(t('home') | async)}} </ax-breadcrumbs-item>\n <ax-breadcrumbs-item> Organization </ax-breadcrumbs-item>\n </ax-breadcrumbs>\n </axp-layout-breadcrumbs>\n </axp-layout-header>\n\n <axp-layout-content class=\"ax-overflow-hidden\">\n <div class=\"ax-h-[calc(100vh-290px)]\" #parent id=\"parent\">\n <div #chart axPanView [(panX)]=\"panX\" [(panY)]=\"panY\" [freeMode]=\"true\" [(zoom)]=\"panZoomLevel\"\n [fitContent]=\"true\" wrapperClasses=\"h\" class=\"ax-light\"></div>\n <ax-context-menu [target]=\"'.axp-chart-node'\" [orientation]=\"'vertical'\" [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\" (onOpening)=\"handleContextMenuOnOpening($event)\">\n </ax-context-menu>\n </div>\n </axp-layout-content>\n <axp-layout-footer>\n <axp-layout-prefix>\n <div class=\"ax-flex ax-gap-1 ax-light ax-flex-wrap ax-justify-center\">\n @let v = {cat:'Company'};\n @for (item of nodeTypes; track $index) {\n <div class=\"axp-node-hint\" [style]=\"getNodeColors(item.color)\" [class.ax-ms-4]=\"v.cat!=item.category\">\n <div class=\"--badge\">\n </div>\n {{item.title}}\n </div>\n {{updateVar(v,item.category)}}\n }\n </div>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <div class=\"ax-flex ax-gap-2 \">\n <ax-button (onClick)=\"zoomOut()\">\n <ax-icon class=\"fa-solid fa-minus\"> </ax-icon>\n </ax-button>\n <ax-button [text]=\"panZoomLevel()\" (onClick)=\"zoomReset()\"></ax-button>\n <ax-button (onClick)=\"zoomIn()\">\n <ax-icon class=\"fa-solid fa-add\"> </ax-icon>\n </ax-button>\n <ax-button (onClick)=\"toggleFullscreen()\">\n <ax-icon>\n <i class=\"fa-solid\" [class]=\"isFullscreen()? 'fa-compress' : 'fa-expand'\"></i>\n </ax-icon>\n </ax-button>\n </div>\n </axp-layout-suffix>\n </axp-layout-footer>\n</axp-layout-simple-page>\n\n<ng-template #nodeTemplate let-data>\n <div>\n @switch (data.category) {\n <!-- Company -->\n @case (NodeTypes.Company) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'primary' }\"></ng-container>\n }\n <!-- Location -->\n @case (NodeTypes.Location) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'accent1' }\"></ng-container>\n }\n <!-- BusinessUnit -->\n @case (NodeTypes.BusinessUnit) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'accent2' }\"></ng-container>\n }\n <!-- Role -->\n @case (NodeTypes.Role) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'accent3' }\"></ng-container>\n }\n <!-- Employee -->\n @case (NodeTypes.Employee) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'surface' }\"></ng-container>\n }\n }\n </div>\n</ng-template>\n\n<!----------------------------------- General Node Template ----------------------------------->\n<ng-template #generalTemplate let-data=\"data\" let-color=\"color\">\n <div #node class=\"--node-container\" [style]=\"getNodeColors(color)\">\n <div class=\"--container\">\n <div class=\"--heading-container\">\n <div class=\"--content\">\n <div class=\"--icon\">\n <i class=\"fa-light fa-xl fa-fw\" [class]=\"data.icon\"></i>\n </div>\n <div class=\"--titles\">\n <span class=\"--title\">{{data.title}}</span>\n @if(data.subtitle)\n {\n <span class=\"--sub-title\">{{data.subtitle}}</span>\n }\n </div>\n @if(data?.children?.length){\n <div class=\"--badge\">\n <span>{{data?.children?.length ?? 0}}</span>\n </div>\n }\n </div>\n </div>\n @if(data.description)\n {\n <div class=\"--body-container\">\n <div class=\"--description\" [class.ax-pb-3]=\"data.children && data.children.length > 0\">\n {{data.description}}\n </div>\n </div>\n }\n @if(data.children && data.children.length > 0){\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs ax-rounded-sm\" (onClick)=\"toggleNode(data,node)\">\n <ax-icon icon=\"fa-solid\" [class]=\"data.isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n </div>\n</ng-template>", styles: [".axp-node-hint{display:flex;align-items:center;justify-content:center;gap:.25rem;font-size:.75rem;line-height:1rem}.axp-node-hint>div.--badge{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));display:flex;width:.75rem;height:.75rem;align-items:center;justify-content:center;border-radius:.125rem}.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 .--container{display:flex;max-height:100%;width:100%;flex-direction:column;overflow:hidden;border-radius:.375rem;border-width:1px;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);border-color:rgba(var(--node-border-color))}.axp-chart-node .--node-container .--container .--heading-container{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));width:100%;padding:.5rem .75rem}.axp-chart-node .--node-container .--container .--heading-container .--content{display:flex;width:100%;align-items:center;justify-content:center;gap:.5rem;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--icon{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:2.75rem;height:2.75rem;flex:none;align-items:center;justify-content:center;border-radius:.5rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:1.5rem;height:1.5rem;flex:none;align-items:center;justify-content:center;border-radius:.375rem;line-height:1}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge>span{font-size:.75rem;line-height:1rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles{display:flex;width:100%;flex:1 1 0%;flex-direction:column;gap:.25rem;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.125rem;line-height:1.75rem;font-weight:600;line-height:1}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--sub-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--body-container{width:100%;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding:.5rem .75rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}.axp-chart-node .--node-container .--container .--body-container .--description{text-align:center;font-size:.875rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--toggle{position:absolute;left:0;right:0;bottom:-.75rem;display:flex;width:100%;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;align-items:center;justify-content:center}#parent:fullscreen{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "component", type: AXPSimplePageLayout, selector: "axp-layout-simple-page" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-layout-content, axp-layout-header-container, axp-layout-side-container, axp-layout-sections, axp-layout-section-container, axp-layout-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title, axp-layout-nav-button, axp-layout-description, axp-layout-toolbar, axp-layout-title-bar, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutHeaderTemplateComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutActionsComponent, selector: "axp-layout-actions" }, { kind: "component", type: AXPThemeLayoutPageSecondaryActionsComponent, selector: "axp-layout-actions-secondary" }, { kind: "component", type: AXPThemeLayoutPagePrimaryActionsComponent, selector: "axp-layout-actions-primary" }, { kind: "component", type: AXPThemeLayoutFooterComponent, selector: "axp-layout-footer" }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i2.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "items", "target"], outputs: ["onItemClick", "onOpening"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i3.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i4.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i5.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "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: "component", type: i6.AXBreadCrumbsComponent, selector: "ax-breadcrumbs" }, { kind: "component", type: i6.AXBreadCrumbsItemComponent, selector: "ax-breadcrumbs-item", inputs: ["disabled", "active"] }, { kind: "ngmodule", type: AXBadgeModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
864
913
  }
865
914
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMOrgChartPage, decorators: [{
866
915
  type: Component,
@@ -883,8 +932,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
883
932
  AXLoadingModule,
884
933
  AXBreadcrumbsModule,
885
934
  AXBadgeModule,
886
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [AXMOrgChartConfigService, AXMOrgChartService, AXMOrgChartPrintService], template: "<axp-layout-simple-page *translate=\"let t\">\n <axp-layout-header>\n <axp-layout-title> {{t(rootConfig.entities.chart.title) | async}} </axp-layout-title>\n\n <axp-layout-description> Clear and dynamic view of your organization's structure </axp-layout-description>\n\n <axp-layout-actions>\n <axp-layout-actions-primary> </axp-layout-actions-primary>\n\n <axp-layout-actions-secondary>\n <ax-button-item [text]=\"(t('print') | async)!\" (onClick)=\"printChart()\">\n <ax-prefix>\n <ax-icon [icon]=\"'fa-solid fa-print'\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </axp-layout-actions-secondary>\n </axp-layout-actions>\n\n <axp-layout-breadcrumbs>\n <ax-breadcrumbs [class.ax-hidden]=\"layout.isSmall()\">\n <ng-template #divider>\n <i class=\"fa-regular fa-slash-forward\"></i>\n </ng-template>\n <ax-breadcrumbs-item> {{(t('home') | async)}} </ax-breadcrumbs-item>\n <ax-breadcrumbs-item> Organization </ax-breadcrumbs-item>\n </ax-breadcrumbs>\n </axp-layout-breadcrumbs>\n </axp-layout-header>\n\n <axp-layout-content class=\"ax-overflow-hidden\">\n <div class=\"ax-h-[calc(100vh-290px)]\" #parent id=\"parent\">\n <div #chart axPanView [(panX)]=\"panX\" [(panY)]=\"panY\" [(zoom)]=\"panZoomLevel\" [fitContent]=\"true\"\n wrapperClasses=\"h\" class=\"ax-light\"></div>\n <ax-context-menu [target]=\"'.axp-chart-node'\" [orientation]=\"'vertical'\" [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\" (onOpening)=\"handleContextMenuOnOpening($event)\">\n </ax-context-menu>\n </div>\n </axp-layout-content>\n <axp-layout-footer>\n <axp-layout-prefix>\n <div class=\"ax-flex ax-gap-1 ax-light ax-flex-wrap ax-justify-center\">\n @let v = {cat:'Company'};\n @for (item of nodeTypes; track $index) {\n <div class=\"axp-node-hint\" [style]=\"getNodeColors(item.color)\" [class.ax-ms-4]=\"v.cat!=item.category\">\n <div class=\"--badge\">\n </div>\n {{item.title}}\n </div>\n {{updateVar(v,item.category)}}\n }\n </div>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <div class=\"ax-flex ax-gap-2 \">\n <ax-button (onClick)=\"zoomOut()\">\n <ax-icon class=\"fa-solid fa-minus\"> </ax-icon>\n </ax-button>\n <ax-button [text]=\"panZoomLevel()\" (onClick)=\"zoomReset()\"></ax-button>\n <ax-button (onClick)=\"zoomIn()\">\n <ax-icon class=\"fa-solid fa-add\"> </ax-icon>\n </ax-button>\n <ax-button (onClick)=\"toggleFullscreen()\">\n <ax-icon>\n <i class=\"fa-solid\" [class]=\"isFullscreen()? 'fa-compress' : 'fa-expand'\"></i>\n </ax-icon>\n </ax-button>\n </div>\n </axp-layout-suffix>\n </axp-layout-footer>\n</axp-layout-simple-page>\n\n<ng-template #nodeTemplate let-data>\n <div>\n @switch (data.category) {\n <!-- Company -->\n @case (NodeTypes.Company) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'primary' }\"></ng-container>\n }\n <!-- Location -->\n @case (NodeTypes.Location) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'accent1' }\"></ng-container>\n }\n <!-- BusinessUnit -->\n @case (NodeTypes.BusinessUnit) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'accent2' }\"></ng-container>\n }\n <!-- Role -->\n @case (NodeTypes.Role) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'accent3' }\"></ng-container>\n }\n <!-- Employee -->\n @case (NodeTypes.Employee) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'surface' }\"></ng-container>\n }\n }\n </div>\n</ng-template>\n\n<!----------------------------------- General Node Template ----------------------------------->\n<ng-template #generalTemplate let-data=\"data\" let-color=\"color\">\n <div #node class=\"--node-container\" [style]=\"getNodeColors(color)\">\n <div class=\"--container\">\n <div class=\"--heading-container\">\n <div class=\"--content\">\n <div class=\"--icon\">\n <i class=\"fa-light fa-xl fa-fw\" [class]=\"data.icon\"></i>\n </div>\n <div class=\"--titles\">\n <span class=\"--title\">{{data.title}}</span>\n @if(data.subtitle)\n {\n <span class=\"--sub-title\">{{data.subtitle}}</span>\n }\n </div>\n @if(data?.children?.length){\n <div class=\"--badge\">\n <span>{{data?.children?.length ?? 0}}</span>\n </div>\n }\n </div>\n </div>\n @if(data.description)\n {\n <div class=\"--body-container\">\n <div class=\"--description\" [class.ax-pb-3]=\"data.children && data.children.length > 0\">\n {{data.description}}\n </div>\n </div>\n }\n @if(data.children && data.children.length > 0){\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs ax-rounded-sm\" (onClick)=\"toggleNode(data,node)\">\n <ax-icon icon=\"fa-solid\" [class]=\"data.isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n </div>\n</ng-template>", styles: [".axp-node-hint{display:flex;align-items:center;justify-content:center;gap:.25rem;font-size:.75rem;line-height:1rem}.axp-node-hint>div.--badge{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));display:flex;width:.75rem;height:.75rem;align-items:center;justify-content:center;border-radius:.125rem}.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 .--container{display:flex;max-height:100%;width:100%;flex-direction:column;overflow:hidden;border-radius:.375rem;border-width:1px;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);border-color:rgba(var(--node-border-color))}.axp-chart-node .--node-container .--container .--heading-container{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));width:100%;padding:.5rem .75rem}.axp-chart-node .--node-container .--container .--heading-container .--content{display:flex;width:100%;align-items:center;justify-content:center;gap:.5rem;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--icon{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:2.75rem;height:2.75rem;flex:none;align-items:center;justify-content:center;border-radius:.5rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:1.5rem;height:1.5rem;flex:none;align-items:center;justify-content:center;border-radius:.375rem;line-height:1}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge>span{font-size:.75rem;line-height:1rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles{display:flex;width:100%;flex:1 1 0%;flex-direction:column;gap:.25rem;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.125rem;line-height:1.75rem;font-weight:600;line-height:1}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--sub-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--body-container{width:100%;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding:.5rem .75rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}.axp-chart-node .--node-container .--container .--body-container .--description{text-align:center;font-size:.875rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--toggle{position:absolute;left:0;right:0;bottom:-.75rem;display:flex;width:100%;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;align-items:center;justify-content:center}#parent:fullscreen{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}\n"] }]
935
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [AXMOrgChartConfigService, AXMOrgChartService, AXMOrgChartPrintService], template: "<axp-layout-simple-page *translate=\"let t\">\n <axp-layout-header>\n <axp-layout-title> {{t(rootConfig.entities.chart.title) | async}} </axp-layout-title>\n\n <axp-layout-description> Clear and dynamic view of your organization's structure </axp-layout-description>\n\n <axp-layout-actions>\n <axp-layout-actions-primary> </axp-layout-actions-primary>\n\n <axp-layout-actions-secondary>\n <ax-button-item [text]=\"(t('print') | async)!\" (onClick)=\"printChart()\">\n <ax-prefix>\n <ax-icon [icon]=\"'fa-solid fa-print'\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </axp-layout-actions-secondary>\n </axp-layout-actions>\n\n <axp-layout-breadcrumbs>\n <ax-breadcrumbs [class.ax-hidden]=\"layout.isSmall()\">\n <ng-template #divider>\n <i class=\"fa-regular fa-slash-forward\"></i>\n </ng-template>\n <ax-breadcrumbs-item> {{(t('home') | async)}} </ax-breadcrumbs-item>\n <ax-breadcrumbs-item> Organization </ax-breadcrumbs-item>\n </ax-breadcrumbs>\n </axp-layout-breadcrumbs>\n </axp-layout-header>\n\n <axp-layout-content class=\"ax-overflow-hidden\">\n <div class=\"ax-h-[calc(100vh-290px)]\" #parent id=\"parent\">\n <div #chart axPanView [(panX)]=\"panX\" [(panY)]=\"panY\" [freeMode]=\"true\" [(zoom)]=\"panZoomLevel\"\n [fitContent]=\"true\" wrapperClasses=\"h\" class=\"ax-light\"></div>\n <ax-context-menu [target]=\"'.axp-chart-node'\" [orientation]=\"'vertical'\" [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\" (onOpening)=\"handleContextMenuOnOpening($event)\">\n </ax-context-menu>\n </div>\n </axp-layout-content>\n <axp-layout-footer>\n <axp-layout-prefix>\n <div class=\"ax-flex ax-gap-1 ax-light ax-flex-wrap ax-justify-center\">\n @let v = {cat:'Company'};\n @for (item of nodeTypes; track $index) {\n <div class=\"axp-node-hint\" [style]=\"getNodeColors(item.color)\" [class.ax-ms-4]=\"v.cat!=item.category\">\n <div class=\"--badge\">\n </div>\n {{item.title}}\n </div>\n {{updateVar(v,item.category)}}\n }\n </div>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <div class=\"ax-flex ax-gap-2 \">\n <ax-button (onClick)=\"zoomOut()\">\n <ax-icon class=\"fa-solid fa-minus\"> </ax-icon>\n </ax-button>\n <ax-button [text]=\"panZoomLevel()\" (onClick)=\"zoomReset()\"></ax-button>\n <ax-button (onClick)=\"zoomIn()\">\n <ax-icon class=\"fa-solid fa-add\"> </ax-icon>\n </ax-button>\n <ax-button (onClick)=\"toggleFullscreen()\">\n <ax-icon>\n <i class=\"fa-solid\" [class]=\"isFullscreen()? 'fa-compress' : 'fa-expand'\"></i>\n </ax-icon>\n </ax-button>\n </div>\n </axp-layout-suffix>\n </axp-layout-footer>\n</axp-layout-simple-page>\n\n<ng-template #nodeTemplate let-data>\n <div>\n @switch (data.category) {\n <!-- Company -->\n @case (NodeTypes.Company) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'primary' }\"></ng-container>\n }\n <!-- Location -->\n @case (NodeTypes.Location) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'accent1' }\"></ng-container>\n }\n <!-- BusinessUnit -->\n @case (NodeTypes.BusinessUnit) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'accent2' }\"></ng-container>\n }\n <!-- Role -->\n @case (NodeTypes.Role) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'accent3' }\"></ng-container>\n }\n <!-- Employee -->\n @case (NodeTypes.Employee) {\n <ng-container *ngTemplateOutlet=\"generalTemplate; context: { data,color:'surface' }\"></ng-container>\n }\n }\n </div>\n</ng-template>\n\n<!----------------------------------- General Node Template ----------------------------------->\n<ng-template #generalTemplate let-data=\"data\" let-color=\"color\">\n <div #node class=\"--node-container\" [style]=\"getNodeColors(color)\">\n <div class=\"--container\">\n <div class=\"--heading-container\">\n <div class=\"--content\">\n <div class=\"--icon\">\n <i class=\"fa-light fa-xl fa-fw\" [class]=\"data.icon\"></i>\n </div>\n <div class=\"--titles\">\n <span class=\"--title\">{{data.title}}</span>\n @if(data.subtitle)\n {\n <span class=\"--sub-title\">{{data.subtitle}}</span>\n }\n </div>\n @if(data?.children?.length){\n <div class=\"--badge\">\n <span>{{data?.children?.length ?? 0}}</span>\n </div>\n }\n </div>\n </div>\n @if(data.description)\n {\n <div class=\"--body-container\">\n <div class=\"--description\" [class.ax-pb-3]=\"data.children && data.children.length > 0\">\n {{data.description}}\n </div>\n </div>\n }\n @if(data.children && data.children.length > 0){\n <div class=\"--toggle\">\n <ax-button class=\"ax-xs ax-rounded-sm\" (onClick)=\"toggleNode(data,node)\">\n <ax-icon icon=\"fa-solid\" [class]=\"data.isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\"></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n </div>\n</ng-template>", styles: [".axp-node-hint{display:flex;align-items:center;justify-content:center;gap:.25rem;font-size:.75rem;line-height:1rem}.axp-node-hint>div.--badge{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));display:flex;width:.75rem;height:.75rem;align-items:center;justify-content:center;border-radius:.125rem}.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 .--container{display:flex;max-height:100%;width:100%;flex-direction:column;overflow:hidden;border-radius:.375rem;border-width:1px;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);border-color:rgba(var(--node-border-color))}.axp-chart-node .--node-container .--container .--heading-container{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));width:100%;padding:.5rem .75rem}.axp-chart-node .--node-container .--container .--heading-container .--content{display:flex;width:100%;align-items:center;justify-content:center;gap:.5rem;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--icon{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:2.75rem;height:2.75rem;flex:none;align-items:center;justify-content:center;border-radius:.5rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:1.5rem;height:1.5rem;flex:none;align-items:center;justify-content:center;border-radius:.375rem;line-height:1}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge>span{font-size:.75rem;line-height:1rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles{display:flex;width:100%;flex:1 1 0%;flex-direction:column;gap:.25rem;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.125rem;line-height:1.75rem;font-weight:600;line-height:1}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--sub-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--body-container{width:100%;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding:.5rem .75rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}.axp-chart-node .--node-container .--container .--body-container .--description{text-align:center;font-size:.875rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--toggle{position:absolute;left:0;right:0;bottom:-.75rem;display:flex;width:100%;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;align-items:center;justify-content:center}#parent:fullscreen{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}\n"] }]
887
936
  }] });
888
937
 
889
938
  export { AXMOrgChartPage };
890
- //# sourceMappingURL=acorex-modules-organization-management-org-chart.page-e-N7Ql80.mjs.map
939
+ //# sourceMappingURL=acorex-modules-organization-management-org-chart.page-BSh18amn.mjs.map