@acorex/modules 19.2.7 → 19.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/application-management/lib/layouts/module-entity-detail-view/module-entity-detail-view.component.d.ts +3 -0
- package/conversation/lib/entities/chat/chat.module.d.ts +2 -3
- package/fesm2022/acorex-modules-application-management.mjs +15 -2
- package/fesm2022/acorex-modules-application-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-HwJJs-3A.mjs → acorex-modules-auth-acorex-modules-auth-D1qxdECo.mjs} +8 -8
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-HwJJs-3A.mjs.map → acorex-modules-auth-acorex-modules-auth-D1qxdECo.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-app-chooser.component-BvxMkXPp.mjs → acorex-modules-auth-app-chooser.component-8GCTwtb2.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-app-chooser.component-BvxMkXPp.mjs.map → acorex-modules-auth-app-chooser.component-8GCTwtb2.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-login.module-CDvLUxls.mjs → acorex-modules-auth-login.module-DR3QLEM-.mjs} +4 -4
- package/fesm2022/{acorex-modules-auth-login.module-CDvLUxls.mjs.map → acorex-modules-auth-login.module-DR3QLEM-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-master.layout-CnKBnl8W.mjs → acorex-modules-auth-master.layout-BMJ5mW63.mjs} +4 -4
- package/fesm2022/{acorex-modules-auth-master.layout-CnKBnl8W.mjs.map → acorex-modules-auth-master.layout-BMJ5mW63.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-C16jeHuJ.mjs → acorex-modules-auth-password.component-EXWlXGez.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-C16jeHuJ.mjs.map → acorex-modules-auth-password.component-EXWlXGez.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-1FnIjiZ8.mjs → acorex-modules-auth-password.component-avrMwyr8.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-1FnIjiZ8.mjs.map → acorex-modules-auth-password.component-avrMwyr8.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-routes-ZDDUhAWd.mjs → acorex-modules-auth-routes-BPYBFOxg.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-routes-ZDDUhAWd.mjs.map → acorex-modules-auth-routes-BPYBFOxg.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-two-factor.module-C32MVGby.mjs → acorex-modules-auth-two-factor.module-B_V_nQN_.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-two-factor.module-C32MVGby.mjs.map → acorex-modules-auth-two-factor.module-B_V_nQN_.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth.mjs +1 -1
- package/fesm2022/acorex-modules-conversation.mjs +3 -8
- package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
- package/fesm2022/{acorex-modules-form-template-management-acorex-modules-form-template-management-DGGKoVbL.mjs → acorex-modules-form-template-management-acorex-modules-form-template-management-gE7jDpjq.mjs} +99 -7
- package/fesm2022/acorex-modules-form-template-management-acorex-modules-form-template-management-gE7jDpjq.mjs.map +1 -0
- package/fesm2022/{acorex-modules-form-template-management-category.entity-B1X2QyYV.mjs → acorex-modules-form-template-management-category.entity-BaX5yaK9.mjs} +2 -2
- package/fesm2022/{acorex-modules-form-template-management-category.entity-B1X2QyYV.mjs.map → acorex-modules-form-template-management-category.entity-BaX5yaK9.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-form-template-management-setting.provider-D-HyCbH7.mjs → acorex-modules-form-template-management-setting.provider-h3v_4sR9.mjs} +2 -2
- package/fesm2022/{acorex-modules-form-template-management-setting.provider-D-HyCbH7.mjs.map → acorex-modules-form-template-management-setting.provider-h3v_4sR9.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-form-template-management-template-widget-edit.component-CyZLM6M9.mjs → acorex-modules-form-template-management-template-widget-edit.component-GxCDqH9d.mjs} +2 -2
- package/fesm2022/{acorex-modules-form-template-management-template-widget-edit.component-CyZLM6M9.mjs.map → acorex-modules-form-template-management-template-widget-edit.component-GxCDqH9d.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-form-template-management-template.entity-DXIhxJeU.mjs → acorex-modules-form-template-management-template.entity-CzmbpLj_.mjs} +33 -2
- package/fesm2022/acorex-modules-form-template-management-template.entity-CzmbpLj_.mjs.map +1 -0
- package/fesm2022/acorex-modules-form-template-management-viewer-popup.component-CJKcMi8Q.mjs +93 -0
- package/fesm2022/acorex-modules-form-template-management-viewer-popup.component-CJKcMi8Q.mjs.map +1 -0
- package/fesm2022/acorex-modules-form-template-management.mjs +1 -1
- package/fesm2022/{acorex-modules-organization-management-add-item.component-D0tN7Se4.mjs → acorex-modules-organization-management-add-item.component-PhQRBTtI.mjs} +22 -16
- package/fesm2022/acorex-modules-organization-management-add-item.component-PhQRBTtI.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-branch.entity-CbmnpHl2.mjs → acorex-modules-organization-management-branch.entity-CxxFiBPd.mjs} +48 -4
- package/fesm2022/acorex-modules-organization-management-branch.entity-CxxFiBPd.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-department.entity-Dl7y4Rva.mjs → acorex-modules-organization-management-department.entity-BxyeK3lU.mjs} +48 -4
- package/fesm2022/acorex-modules-organization-management-department.entity-BxyeK3lU.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-division.entity-Ckmu2Tj9.mjs → acorex-modules-organization-management-division.entity-Dh54R4es.mjs} +48 -4
- package/fesm2022/acorex-modules-organization-management-division.entity-Dh54R4es.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-employment-type.entity-9aOaYT_-.mjs → acorex-modules-organization-management-employment-type.entity-aNkt-l_e.mjs} +48 -4
- package/fesm2022/acorex-modules-organization-management-employment-type.entity-aNkt-l_e.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-org-chart-configuration.page-BzjTyYyS.mjs → acorex-modules-organization-management-org-chart-configuration.page-DjzqBdaS.mjs} +4 -4
- package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DjzqBdaS.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-org-chart-configuration.service-DObuNZKQ.mjs → acorex-modules-organization-management-org-chart-configuration.service-QLdDEdqL.mjs} +4 -3
- package/fesm2022/acorex-modules-organization-management-org-chart-configuration.service-QLdDEdqL.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-org-chart.page-Cz4ENQRa.mjs → acorex-modules-organization-management-org-chart.page-BSh18amn.mjs} +181 -110
- package/fesm2022/acorex-modules-organization-management-org-chart.page-BSh18amn.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-position.entity-DDkiBefn.mjs → acorex-modules-organization-management-position.entity-B7ceEEbu.mjs} +49 -5
- package/fesm2022/acorex-modules-organization-management-position.entity-B7ceEEbu.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management.mjs +8 -15
- package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-platform-management.mjs +476 -245
- package/fesm2022/acorex-modules-platform-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-security-management.mjs +3 -3
- package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
- package/form-template-management/lib/features/viewer/viewer-connector.service.d.ts +12 -0
- package/form-template-management/lib/features/viewer/viewer-popup.component.d.ts +23 -0
- package/form-template-management/lib/features/viewer/workflows/open-template.workflow.d.ts +9 -0
- package/organization-management/lib/entities/branch/branch.types.d.ts +1 -0
- package/organization-management/lib/entities/department/department.types.d.ts +1 -0
- package/organization-management/lib/entities/division/division.types.d.ts +1 -0
- package/organization-management/lib/entities/employment-type/employment-type.types.d.ts +1 -0
- package/organization-management/lib/entities/position/position.types.d.ts +1 -0
- package/organization-management/lib/features/organization-chart/add-item/add-item.component.d.ts +5 -3
- package/organization-management/lib/features/organization-chart/org-chart-configuration.page.d.ts +3 -0
- package/organization-management/lib/features/organization-chart/org-chart-configuration.service.d.ts +2 -6
- package/organization-management/lib/features/organization-chart/org-chart.page.d.ts +3 -0
- package/organization-management/lib/features/organization-chart/org-chart.service.d.ts +16 -13
- package/organization-management/lib/features/organization-chart/org-chart.type.d.ts +5 -5
- package/package.json +5 -5
- package/platform-management/lib/common/index.d.ts +1 -0
- package/platform-management/lib/common/regional/index.d.ts +1 -0
- package/platform-management/lib/common/regional/language-slot/language-slot.component.d.ts +1 -1
- package/platform-management/lib/entities/check-version.d.ts +1 -0
- package/platform-management/lib/entities/data-source/coulmn-def.widget.d.ts +11 -0
- package/platform-management/lib/entities/data-source/data-source.types.d.ts +2 -1
- package/platform-management/lib/entities/data-source/datasource-provider.dynamic.d.ts +2 -0
- package/fesm2022/acorex-modules-form-template-management-acorex-modules-form-template-management-DGGKoVbL.mjs.map +0 -1
- package/fesm2022/acorex-modules-form-template-management-template.entity-DXIhxJeU.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-add-item.component-D0tN7Se4.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-branch.entity-CbmnpHl2.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-department.entity-Dl7y4Rva.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-division.entity-Ckmu2Tj9.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-employment-type.entity-9aOaYT_-.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-BzjTyYyS.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-org-chart-configuration.service-DObuNZKQ.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-org-chart.page-Cz4ENQRa.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-position.entity-DDkiBefn.mjs.map +0 -1
- package/fesm2022/acorex-modules-platform-management-countries-CuJVdPLt.mjs +0 -19
- package/fesm2022/acorex-modules-platform-management-countries-CuJVdPLt.mjs.map +0 -1
- package/fesm2022/acorex-modules-platform-management-currencies-vgPg4Hj3.mjs +0 -13
- package/fesm2022/acorex-modules-platform-management-currencies-vgPg4Hj3.mjs.map +0 -1
- package/fesm2022/acorex-modules-platform-management-regional-formats-BaHofjWg.mjs +0 -14
- package/fesm2022/acorex-modules-platform-management-regional-formats-BaHofjWg.mjs.map +0 -1
- package/fesm2022/acorex-modules-platform-management-timezones-BoScbn0h.mjs +0 -15
- package/fesm2022/acorex-modules-platform-management-timezones-BoScbn0h.mjs.map +0 -1
- package/platform-management/lib/common/regional/data/countries.d.ts +0 -2
- package/platform-management/lib/common/regional/data/currencies.d.ts +0 -2
- package/platform-management/lib/common/regional/data/regional-formats.d.ts +0 -2
- package/platform-management/lib/common/regional/data/timezones.d.ts +0 -2
- package/platform-management/lib/common/regional/regional-util.service.d.ts +0 -12
- package/platform-management/lib/common/regional/regional.types.d.ts +0 -37
@@ -21,12 +21,14 @@ import { inject, Injectable, signal, viewChild, NgZone, ViewContainerRef, afterN
|
|
21
21
|
import { RouterModule } from '@angular/router';
|
22
22
|
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
|
-
import { A as AXMOrgChartConfigService } from './acorex-modules-organization-management-org-chart-configuration.service-
|
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';
|
26
|
+
import { AXPExportService, AXPRegionalService, AXPDataGenerator } from '@acorex/platform/common';
|
27
|
+
import { AXDialogService } from '@acorex/components/dialog';
|
28
|
+
import { AXPopupService } from '@acorex/components/popup';
|
27
29
|
import { AXPSessionService } from '@acorex/platform/auth';
|
30
|
+
import { applyFilterArray } from '@acorex/platform/core';
|
28
31
|
import { cloneDeep } from 'lodash-es';
|
29
|
-
import { AXPopupService } from '@acorex/components/popup';
|
30
32
|
import set from 'lodash-es/set';
|
31
33
|
|
32
34
|
/**
|
@@ -169,7 +171,10 @@ class AXMOrgChartService {
|
|
169
171
|
this.configService = inject(AXMOrgChartConfigService);
|
170
172
|
this.popupService = inject(AXPopupService);
|
171
173
|
this.layoutService = inject(AXPLayoutThemeService);
|
172
|
-
this.
|
174
|
+
this.regionalService = inject(AXPRegionalService);
|
175
|
+
this.dialogService = inject(AXDialogService);
|
176
|
+
this.translateService = inject(AXTranslationService);
|
177
|
+
this._rootNode = signal({ id: AXPDataGenerator.uuid(), title: 'Company' });
|
173
178
|
this.rootNode = this._rootNode.asReadonly();
|
174
179
|
// The clipboard holds the node being cut or copied.
|
175
180
|
this.clipboard = signal(null);
|
@@ -179,9 +184,7 @@ class AXMOrgChartService {
|
|
179
184
|
const first = (await this.chartService.query({
|
180
185
|
skip: 0,
|
181
186
|
take: 1,
|
182
|
-
sort: [
|
183
|
-
{ field: 'version', dir: 'desc' }
|
184
|
-
]
|
187
|
+
sort: [{ field: 'version', dir: 'desc' }],
|
185
188
|
})).items[0];
|
186
189
|
//
|
187
190
|
if (first) {
|
@@ -208,19 +211,23 @@ class AXMOrgChartService {
|
|
208
211
|
id: tenant.id,
|
209
212
|
source: 'tenant',
|
210
213
|
},
|
211
|
-
children: []
|
214
|
+
children: [],
|
212
215
|
},
|
213
216
|
};
|
214
217
|
await this.chartService.insertOne({ data: record.data, version: record.version });
|
215
218
|
}
|
216
219
|
async save() {
|
217
220
|
const first = (await this.chartService.query()).items[0];
|
218
|
-
await this.chartService.updateOne(first.id, {
|
221
|
+
await this.chartService.updateOne(first.id, {
|
222
|
+
version: first.version,
|
223
|
+
data: this._rootNode(),
|
224
|
+
updateAt: new Date(),
|
225
|
+
});
|
219
226
|
}
|
220
227
|
//#endregion
|
221
228
|
//#region Context Menu
|
222
229
|
async getAllowedAddMenuItems(node) {
|
223
|
-
const
|
230
|
+
const allowedTypes = await this.getAllowedChildCategoriesForParent(node);
|
224
231
|
const allowedMenuItems = [];
|
225
232
|
// Group items by category for visual breaks.
|
226
233
|
const groupedMenuItems = {
|
@@ -228,10 +235,10 @@ class AXMOrgChartService {
|
|
228
235
|
Location: [],
|
229
236
|
BusinessUnit: [],
|
230
237
|
Role: [],
|
231
|
-
Employee: []
|
238
|
+
Employee: [],
|
232
239
|
};
|
233
240
|
Object.entries(AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS).forEach(([entitySource, config]) => {
|
234
|
-
if (
|
241
|
+
if (allowedTypes.includes(config.type)) {
|
235
242
|
groupedMenuItems[config.category].push({
|
236
243
|
name: 'add',
|
237
244
|
text: `${config.title}`,
|
@@ -239,12 +246,12 @@ class AXMOrgChartService {
|
|
239
246
|
data: {
|
240
247
|
node,
|
241
248
|
config,
|
242
|
-
source: entitySource
|
249
|
+
source: entitySource,
|
243
250
|
},
|
244
251
|
});
|
245
252
|
}
|
246
253
|
});
|
247
|
-
Object.values(groupedMenuItems).forEach(group => {
|
254
|
+
Object.values(groupedMenuItems).forEach((group) => {
|
248
255
|
if (group.length > 0) {
|
249
256
|
allowedMenuItems.push(...group);
|
250
257
|
group[group.length - 1].break = true;
|
@@ -256,27 +263,32 @@ class AXMOrgChartService {
|
|
256
263
|
return allowedMenuItems;
|
257
264
|
}
|
258
265
|
//#endregion
|
259
|
-
//#region Check Permission
|
266
|
+
//#region Check Permission
|
260
267
|
async getAllowedChildCategoriesForParent(parent) {
|
261
268
|
await this.configService.load();
|
262
|
-
const types = this.configService.types;
|
263
|
-
const currentType =
|
269
|
+
const types = this.configService.types;
|
270
|
+
const currentType = parent.type;
|
264
271
|
if (!parent || !currentType) {
|
265
272
|
return [];
|
266
273
|
}
|
267
|
-
const
|
274
|
+
const allowedTypes = new Set();
|
268
275
|
Object.entries(AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS).forEach(([entitySource, config]) => {
|
269
|
-
if (this.configService.isAllowed(currentType, config.
|
270
|
-
|
276
|
+
if (this.configService.isAllowed(currentType, config.type) && types.includes(config.type)) {
|
277
|
+
allowedTypes.add(config.type);
|
271
278
|
}
|
272
279
|
});
|
273
|
-
return Array.from(
|
280
|
+
return Array.from(allowedTypes);
|
274
281
|
}
|
275
|
-
//#endregion
|
282
|
+
//#endregion
|
276
283
|
//#region Remove/Cut/Copy/Past
|
277
284
|
async removeNode(id) {
|
278
|
-
this.
|
279
|
-
await this.
|
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
|
+
}
|
280
292
|
}
|
281
293
|
removeNodeRecursively(node, id) {
|
282
294
|
// If the node itself is the one to be deleted, return null
|
@@ -285,8 +297,9 @@ class AXMOrgChartService {
|
|
285
297
|
}
|
286
298
|
// Otherwise, recursively check children
|
287
299
|
if (node.children) {
|
288
|
-
node.children = node.children
|
289
|
-
.
|
300
|
+
node.children = node.children
|
301
|
+
.filter((child) => child.id !== id)
|
302
|
+
.map((child) => {
|
290
303
|
return { ...child, children: this.removeNodeRecursively(child, id)?.children };
|
291
304
|
});
|
292
305
|
}
|
@@ -299,23 +312,23 @@ class AXMOrgChartService {
|
|
299
312
|
if (!this.isPasteAvailable()) {
|
300
313
|
return false;
|
301
314
|
}
|
302
|
-
const
|
315
|
+
const allowedTypes = await this.getAllowedChildCategoriesForParent(target);
|
303
316
|
// Compare using the clipboard node's category.
|
304
|
-
return
|
317
|
+
return allowedTypes.includes(this.clipboard()?.node.type);
|
305
318
|
}
|
306
319
|
/**
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
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
|
+
*/
|
311
324
|
async cutNode(id) {
|
312
325
|
const tree = this._rootNode();
|
313
326
|
if (tree.id === id) {
|
314
|
-
throw new Error(
|
327
|
+
throw new Error('Cannot cut the root node.');
|
315
328
|
}
|
316
329
|
const result = this.findNodeAndParent(tree, id);
|
317
330
|
if (!result) {
|
318
|
-
throw new Error(
|
331
|
+
throw new Error('Node not found.');
|
319
332
|
}
|
320
333
|
// Set the clipboard signal with mode 'cut'
|
321
334
|
this.clipboard.set({ mode: 'cut', node: result.node });
|
@@ -325,32 +338,32 @@ class AXMOrgChartService {
|
|
325
338
|
await this.save();
|
326
339
|
}
|
327
340
|
/**
|
328
|
-
|
329
|
-
|
330
|
-
|
341
|
+
* Copies the node with the given id.
|
342
|
+
* A deep clone of the node is stored in the clipboard.
|
343
|
+
*/
|
331
344
|
copyNode(id) {
|
332
345
|
const tree = this._rootNode();
|
333
346
|
const result = this.findNodeAndParent(tree, id);
|
334
347
|
if (!result) {
|
335
|
-
throw new Error(
|
348
|
+
throw new Error('Node not found.');
|
336
349
|
}
|
337
350
|
// Use lodash's cloneDeep to create a deep clone.
|
338
351
|
const copiedNode = cloneDeep(result.node);
|
339
352
|
this.clipboard.set({ mode: 'copy', node: copiedNode });
|
340
353
|
}
|
341
354
|
/**
|
342
|
-
|
343
|
-
|
344
|
-
|
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
|
+
*/
|
345
358
|
async pasteNode(parentId) {
|
346
359
|
const clipboardValue = this.clipboard();
|
347
360
|
if (!clipboardValue) {
|
348
|
-
throw new Error(
|
361
|
+
throw new Error('Clipboard is empty.');
|
349
362
|
}
|
350
363
|
const tree = this._rootNode();
|
351
364
|
const parentResult = this.findNodeAndParent(tree, parentId);
|
352
365
|
if (!parentResult) {
|
353
|
-
throw new Error(
|
366
|
+
throw new Error('Parent node not found.');
|
354
367
|
}
|
355
368
|
let nodeToPaste;
|
356
369
|
if (clipboardValue.mode === 'cut') {
|
@@ -366,9 +379,9 @@ class AXMOrgChartService {
|
|
366
379
|
await this.save();
|
367
380
|
}
|
368
381
|
/**
|
369
|
-
|
370
|
-
|
371
|
-
|
382
|
+
* Recursively searches the tree for the node with the given id,
|
383
|
+
* returning both the node and its parent.
|
384
|
+
*/
|
372
385
|
findNodeAndParent(node, id, parent = null) {
|
373
386
|
if (node.id === id) {
|
374
387
|
return { node, parent };
|
@@ -399,7 +412,7 @@ class AXMOrgChartService {
|
|
399
412
|
assignNewIds(node) {
|
400
413
|
node.id = AXPDataGenerator.uuid();
|
401
414
|
if (node.children) {
|
402
|
-
node.children.forEach(child => this.assignNewIds(child));
|
415
|
+
node.children.forEach((child) => this.assignNewIds(child));
|
403
416
|
}
|
404
417
|
}
|
405
418
|
/**
|
@@ -413,7 +426,7 @@ class AXMOrgChartService {
|
|
413
426
|
if (node.children) {
|
414
427
|
return {
|
415
428
|
...node,
|
416
|
-
children: node.children.map(child => this.insertNodeRecursively(child, parentId, newNode))
|
429
|
+
children: node.children.map((child) => this.insertNodeRecursively(child, parentId, newNode)),
|
417
430
|
};
|
418
431
|
}
|
419
432
|
return node;
|
@@ -421,61 +434,124 @@ class AXMOrgChartService {
|
|
421
434
|
//#endregion
|
422
435
|
//#region Add Node
|
423
436
|
async addNode(data) {
|
424
|
-
console.log(data);
|
425
437
|
this.layoutService.setNavigationLoading(true);
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
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 };
|
455
|
+
};
|
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]);
|
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;
|
458
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}`);
|
459
516
|
}
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
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;
|
471
532
|
}
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
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
|
+
}
|
479
555
|
}
|
480
556
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMOrgChartService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
481
557
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMOrgChartService }); }
|
@@ -525,13 +601,13 @@ class AXMOrgChartPage {
|
|
525
601
|
* Zooms in the chart.
|
526
602
|
*/
|
527
603
|
zoomIn() {
|
528
|
-
this.
|
604
|
+
this.panView()?.zoomIn();
|
529
605
|
}
|
530
606
|
/**
|
531
607
|
* Zooms out the chart.
|
532
608
|
*/
|
533
609
|
zoomOut() {
|
534
|
-
this.
|
610
|
+
this.panView()?.zoomOut();
|
535
611
|
}
|
536
612
|
/**
|
537
613
|
* Resets the zoom level and pan position of the chart.
|
@@ -833,7 +909,7 @@ class AXMOrgChartPage {
|
|
833
909
|
this.clearChart(this.treeContainer().nativeElement);
|
834
910
|
}
|
835
911
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMOrgChartPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
836
|
-
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 <span class=\"--sub-title\">{{data.subtitle}}</span>\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 <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 @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(--axp-brand-color))}\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", "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 }); }
|
837
913
|
}
|
838
914
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMOrgChartPage, decorators: [{
|
839
915
|
type: Component,
|
@@ -856,13 +932,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
|
|
856
932
|
AXLoadingModule,
|
857
933
|
AXBreadcrumbsModule,
|
858
934
|
AXBadgeModule,
|
859
|
-
], 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\"
|
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"] }]
|
860
936
|
}] });
|
861
937
|
|
862
|
-
|
863
|
-
|
864
|
-
AXMOrgChartPage: AXMOrgChartPage
|
865
|
-
});
|
866
|
-
|
867
|
-
export { AXMOrgChartService as A, orgChart_page as o };
|
868
|
-
//# sourceMappingURL=acorex-modules-organization-management-org-chart.page-Cz4ENQRa.mjs.map
|
938
|
+
export { AXMOrgChartPage };
|
939
|
+
//# sourceMappingURL=acorex-modules-organization-management-org-chart.page-BSh18amn.mjs.map
|