@acorex-platform/module-platform-management-client 0.0.38 → 0.0.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{acorex-platform-module-platform-management-client-acorex-platform-module-platform-management-client-BGVhn6wv.mjs → acorex-platform-module-platform-management-client-acorex-platform-module-platform-management-client-YuJijjKh.mjs} +465 -101
- package/fesm2022/acorex-platform-module-platform-management-client-acorex-platform-module-platform-management-client-YuJijjKh.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-command-definition.mjs +20 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-command-definition.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-entity-access-policy.mjs +20 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-entity-access-policy.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-entity-definition.mjs +1499 -30
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-entity-definition.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-module-definition.mjs +396 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-module-definition.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-plugin-definition.mjs +20 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-plugin-definition.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-query-definition.mjs +49 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-query-definition.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-token.mjs +20 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-token.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-widget.mjs +20 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-widget.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-platform-management-client-contracts-entity-catalog-acorex-platform-module-platform-management-client-contracts-entity-catalog-BOwC5Ns9.mjs → acorex-platform-module-platform-management-client-contracts-entity-catalog-acorex-platform-module-platform-management-client-contracts-entity-catalog-HWczTPH2.mjs} +15 -8
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-acorex-platform-module-platform-management-client-contracts-entity-catalog-HWczTPH2.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-platform-management-client-contracts-entity-catalog-command-definition.entity-CdvQlwAk.mjs → acorex-platform-module-platform-management-client-contracts-entity-catalog-command-definition.entity-C3B1_QMs.mjs} +16 -2
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-command-definition.entity-C3B1_QMs.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-platform-management-client-contracts-entity-catalog-entity-access-policy.entity-Dye4aSKE.mjs → acorex-platform-module-platform-management-client-contracts-entity-catalog-entity-access-policy.entity-BPkJloHy.mjs} +16 -2
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-entity-access-policy.entity-BPkJloHy.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-entity-definition.entity-BL1I9pmK.mjs +1621 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-entity-definition.entity-BL1I9pmK.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-module-definition.entity-Cknl0vbc.mjs +299 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-module-definition.entity-Cknl0vbc.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-platform-management-client-contracts-entity-catalog-plugin-definition.entity-CwU5hMjI.mjs → acorex-platform-module-platform-management-client-contracts-entity-catalog-plugin-definition.entity-BxABTl8L.mjs} +16 -2
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-plugin-definition.entity-BxABTl8L.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-platform-management-client-contracts-entity-catalog-query-definition.entity-DGK684Q1.mjs → acorex-platform-module-platform-management-client-contracts-entity-catalog-query-definition.entity-Cv6HVQOU.mjs} +45 -3
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-query-definition.entity-Cv6HVQOU.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-platform-management-client-contracts-entity-catalog-token.entity-DI_k6-ha.mjs → acorex-platform-module-platform-management-client-contracts-entity-catalog-token.entity-BV8iSuoK.mjs} +16 -2
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-token.entity-BV8iSuoK.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-platform-management-client-contracts-entity-catalog-widget.entity-C18msniH.mjs → acorex-platform-module-platform-management-client-contracts-entity-catalog-widget.entity-BYH6SIqU.mjs} +16 -2
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-widget.entity-BYH6SIqU.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog.mjs +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts.mjs +1664 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-create-user-query-contract.util-D_af2BUi.mjs +586 -0
- package/fesm2022/acorex-platform-module-platform-management-client-create-user-query-contract.util-D_af2BUi.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-platform-management-client-create-user-query.command-9Ku7C1BC.mjs → acorex-platform-module-platform-management-client-create-user-query.command-Bh49QHkl.mjs} +374 -324
- package/fesm2022/acorex-platform-module-platform-management-client-create-user-query.command-Bh49QHkl.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-entity-definition-form-page.component-BgBWob9p.mjs +329 -0
- package/fesm2022/acorex-platform-module-platform-management-client-entity-definition-form-page.component-BgBWob9p.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-entity-definition-form-page.provider-hLzgoJu3.mjs +23 -0
- package/fesm2022/acorex-platform-module-platform-management-client-entity-definition-form-page.provider-hLzgoJu3.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-list-registered-entities.query-CZM6JQou.mjs +197 -0
- package/fesm2022/acorex-platform-module-platform-management-client-list-registered-entities.query-CZM6JQou.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-local-entities.mjs +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-local-entities.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-platform-management-client-menu-list.component-uF5w1c7t.mjs → acorex-platform-module-platform-management-client-menu-list.component-iMEnFPEY.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-platform-management-client-menu-list.component-uF5w1c7t.mjs.map → acorex-platform-module-platform-management-client-menu-list.component-iMEnFPEY.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-query-contract-widget-column.component-COfOzMGh.mjs +45 -0
- package/fesm2022/acorex-platform-module-platform-management-client-query-contract-widget-column.component-COfOzMGh.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-query-contract-widget-edit.component-BW2pBOeg.mjs +166 -0
- package/fesm2022/acorex-platform-module-platform-management-client-query-contract-widget-edit.component-BW2pBOeg.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-query-contract-widget-view.component-DD9ETjFD.mjs +45 -0
- package/fesm2022/acorex-platform-module-platform-management-client-query-contract-widget-view.component-DD9ETjFD.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-platform-management-client-rest-api-generator-widget-column.component-B0g6dweQ.mjs → acorex-platform-module-platform-management-client-rest-api-generator-widget-column.component-DRkE2a7n.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-platform-management-client-rest-api-generator-widget-column.component-B0g6dweQ.mjs.map → acorex-platform-module-platform-management-client-rest-api-generator-widget-column.component-DRkE2a7n.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-platform-management-client-rest-api-generator-widget-edit.component-A0v5MWRU.mjs → acorex-platform-module-platform-management-client-rest-api-generator-widget-edit.component-CXI6fJi3.mjs} +2 -3
- package/fesm2022/{acorex-platform-module-platform-management-client-rest-api-generator-widget-edit.component-A0v5MWRU.mjs.map → acorex-platform-module-platform-management-client-rest-api-generator-widget-edit.component-CXI6fJi3.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-platform-management-client-rest-api-generator-widget-view.component-RR5zcsnI.mjs → acorex-platform-module-platform-management-client-rest-api-generator-widget-view.component-C3iHgoC2.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-platform-management-client-rest-api-generator-widget-view.component-RR5zcsnI.mjs.map → acorex-platform-module-platform-management-client-rest-api-generator-widget-view.component-C3iHgoC2.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-run-user-query.command-BzNa3B48.mjs +144 -0
- package/fesm2022/acorex-platform-module-platform-management-client-run-user-query.command-BzNa3B48.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client.mjs +1 -1
- package/package.json +7 -3
- package/types/acorex-platform-module-platform-management-client-contracts-entities-module-definition.d.ts +5 -0
- package/types/acorex-platform-module-platform-management-client-contracts.d.ts +225 -5
- package/types/acorex-platform-module-platform-management-client.d.ts +35 -3
- package/fesm2022/acorex-platform-module-platform-management-client-acorex-platform-module-platform-management-client-BGVhn6wv.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-acorex-platform-module-platform-management-client-contracts-entity-catalog-BOwC5Ns9.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-command-definition.entity-CdvQlwAk.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-entity-access-policy.entity-Dye4aSKE.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-entity-definition.entity-CcJ58vfr.mjs +0 -158
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-entity-definition.entity-CcJ58vfr.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-plugin-definition.entity-CwU5hMjI.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-query-definition.entity-DGK684Q1.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-token.entity-DI_k6-ha.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-widget.entity-C18msniH.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-create-user-query.command-9Ku7C1BC.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-create-user-query.types-DdygAori.mjs +0 -71
- package/fesm2022/acorex-platform-module-platform-management-client-create-user-query.types-DdygAori.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-list-registered-entities.query-DjStd3a8.mjs +0 -136
- package/fesm2022/acorex-platform-module-platform-management-client-list-registered-entities.query-DjStd3a8.mjs.map +0 -1
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
import { AXPSessionService, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';
|
|
2
2
|
import { AXPSettingsService, AXPMenuProviderService, AXPTokenDefinitionService, AXP_TOKEN_DEFINITION_PROVIDER, AXP_PROTECTED_ROUTE_GUARDS, AXP_MENU_MIDDLEWARE, AXP_MENU_PROVIDER } from '@acorex-platform/framework-client/common';
|
|
3
3
|
import { AXPEntityService, AXP_ENTITY_MODIFIER } from '@acorex-platform/framework-client/layout/entity';
|
|
4
|
-
import { AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/core';
|
|
4
|
+
import { AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER, provideLazyProvider } from '@acorex-platform/framework-client/core';
|
|
5
5
|
import { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';
|
|
6
6
|
import { AXP_WIDGETS_EDITOR_CATEGORY, AXPWidgetCoreModule, AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/layout/widget-core';
|
|
7
|
-
import {
|
|
7
|
+
import { AXPMenuCustomizerService, AXP_MENU_CUSTOMIZER_SERVICE, AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';
|
|
8
|
+
import { provideCommandSetups, AXPCommandExecutor, AXPQueryService, provideQuerySetups } from '@acorex-platform/framework-client/runtime';
|
|
8
9
|
import * as i0 from '@angular/core';
|
|
9
10
|
import { Injectable, inject, NgModule, Injector, input, output, viewChild, signal, DestroyRef, computed, afterNextRender, effect, ViewEncapsulation, ChangeDetectionStrategy, Component, Directive } from '@angular/core';
|
|
10
11
|
import { ROUTES } from '@angular/router';
|
|
11
12
|
import { AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';
|
|
12
13
|
import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_READONLY_PROPERTY, AXP_DISABLED_PROPERTY } from '@acorex-platform/framework-client/layout/widgets';
|
|
13
|
-
import {
|
|
14
|
-
import { AXPPlatformScope, runtimeCommandPayloadData } from '@acorex-platform/framework-shared/core';
|
|
15
|
-
import { AXPMenuCustomizerService, AXP_MENU_CUSTOMIZER_SERVICE } from '@acorex-platform/framework-client/layout/components';
|
|
14
|
+
import { RootConfig, AXPPlatformManagementFeatureKeys, AXM_TOKEN_RESOLVE_COMMAND_KEY, AXPApplicationsPlatformPermissionKeys, AXPPlatformManagementMenuKeys } from '@acorex-platform/module-platform-management-client/contracts';
|
|
15
|
+
import { AXPPlatformScope, runtimeCommandPayloadData, runtimeQueryCollectionData } from '@acorex-platform/framework-shared/core';
|
|
16
16
|
import { cloneDeep } from 'lodash';
|
|
17
17
|
import { AXDialogService } from '@acorex/components/dialog';
|
|
18
18
|
import { AXTranslationService } from '@acorex/core/translation';
|
|
19
19
|
import { SwUpdate } from '@angular/service-worker';
|
|
20
|
+
import { ENTITY_QUERY_DEFAULT } from '@acorex-platform/framework-shared/runtime';
|
|
20
21
|
import { AXPCommonMenuKeys, AXPCommonPermissionGroupKeys } from '@acorex-platform/module-common-client/contracts';
|
|
21
22
|
import { AXP_ENTITY_DEFINITION_CRUD_SERVICE } from '@acorex-platform/framework-client/domain';
|
|
22
23
|
import { commandDefinitionEntityFactory } from '@acorex-platform/module-platform-management-client/contracts/entities/command-definition';
|
|
24
|
+
import { moduleDefinitionEntityFactory } from '@acorex-platform/module-platform-management-client/contracts/entities/module-definition';
|
|
23
25
|
import { entityDefinitionEntityFactory } from '@acorex-platform/module-platform-management-client/contracts/entities/entity-definition';
|
|
24
26
|
import { pluginDefinitionEntityFactory } from '@acorex-platform/module-platform-management-client/contracts/entities/plugin-definition';
|
|
25
27
|
import { queryDefinitionEntityFactory } from '@acorex-platform/module-platform-management-client/contracts/entities/query-definition';
|
|
@@ -33,6 +35,206 @@ import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
|
33
35
|
import * as i1 from '@angular/common';
|
|
34
36
|
import { CommonModule } from '@angular/common';
|
|
35
37
|
|
|
38
|
+
const CREATE_USER_QUERY_COMMAND_KEY = 'PlatformManagement:CreateUserQuery';
|
|
39
|
+
const CREATE_USER_QUERY_WIZARD_NAME = 'create-user-query-wizard';
|
|
40
|
+
const CREATE_USER_QUERY_ENTITY_CATALOG = `${RootConfig.module.name}.${RootConfig.entities.entityDefinition.name}`;
|
|
41
|
+
const CREATE_USER_QUERY_I18N = {
|
|
42
|
+
titles: {
|
|
43
|
+
entity: '@platform-management:query-definitions.wizard.create.titles.entity',
|
|
44
|
+
static: '@platform-management:query-definitions.wizard.create.titles.static-list',
|
|
45
|
+
api: '@platform-management:query-definitions.wizard.create.titles.external-api',
|
|
46
|
+
advanced: '@platform-management:query-definitions.wizard.create.titles.advanced',
|
|
47
|
+
},
|
|
48
|
+
steps: {
|
|
49
|
+
source: '@platform-management:query-definitions.wizard.create.steps.source',
|
|
50
|
+
entity: '@platform-management:query-definitions.wizard.create.steps.entity',
|
|
51
|
+
fields: '@platform-management:query-definitions.wizard.create.steps.fields',
|
|
52
|
+
contract: '@platform-management:query-definitions.wizard.create.steps.contract',
|
|
53
|
+
},
|
|
54
|
+
fields: {
|
|
55
|
+
entity: '@platform-management:query-definitions.wizard.create.fields.entity',
|
|
56
|
+
fields: '@platform-management:query-definitions.wizard.create.fields.fields',
|
|
57
|
+
hostFields: '@platform-management:query-definitions.wizard.create.fields.host-fields',
|
|
58
|
+
value: '@platform-management:query-definitions.wizard.create.fields.value',
|
|
59
|
+
title: '@platform-management:query-definitions.wizard.create.fields.title',
|
|
60
|
+
queryName: '@platform-management:query-definitions.wizard.create.fields.query-name',
|
|
61
|
+
catalogTitle: '@platform-management:query-definitions.wizard.create.fields.catalog-title',
|
|
62
|
+
description: '@platform-management:query-definitions.wizard.create.fields.description',
|
|
63
|
+
identity: '@platform-management:query-definitions.wizard.create.fields.identity',
|
|
64
|
+
capabilities: '@platform-management:query-definitions.wizard.create.fields.capabilities',
|
|
65
|
+
predicates: '@platform-management:query-definitions.wizard.create.fields.predicates',
|
|
66
|
+
kind: '@platform-management:query-definitions.entities.query-definition.fields.kind.title',
|
|
67
|
+
valueType: '@platform-management:query-definitions.entities.query-definition.fields.value-type.title',
|
|
68
|
+
measure: '@platform-management:query-definitions.wizard.create.fields.measure',
|
|
69
|
+
measureField: '@platform-management:query-definitions.wizard.create.fields.measure-field',
|
|
70
|
+
filterableFields: '@platform-management:query-definitions.wizard.create.fields.filterable-fields',
|
|
71
|
+
sortableFields: '@platform-management:query-definitions.wizard.create.fields.sortable-fields',
|
|
72
|
+
paging: '@platform-management:query-definitions.wizard.create.fields.paging',
|
|
73
|
+
valueField: '@platform-management:query-definitions.wizard.create.fields.value-field',
|
|
74
|
+
textField: '@platform-management:query-definitions.wizard.create.fields.text-field',
|
|
75
|
+
connection: '@platform-management:query-definitions.wizard.create.fields.connection',
|
|
76
|
+
method: '@platform-management:query-definitions.wizard.create.fields.method',
|
|
77
|
+
path: '@platform-management:query-definitions.wizard.create.fields.path',
|
|
78
|
+
request: '@platform-management:query-definitions.wizard.create.fields.request',
|
|
79
|
+
sample: '@platform-management:query-definitions.wizard.create.fields.sample',
|
|
80
|
+
status: '@platform-management:query-definitions.wizard.create.fields.status',
|
|
81
|
+
response: '@platform-management:query-definitions.wizard.create.fields.response',
|
|
82
|
+
},
|
|
83
|
+
import: {
|
|
84
|
+
title: '@platform-management:query-definitions.wizard.create.import.title',
|
|
85
|
+
placeholder: '@platform-management:query-definitions.wizard.create.import.placeholder',
|
|
86
|
+
apply: '@platform-management:query-definitions.wizard.create.import.apply',
|
|
87
|
+
parseFailed: '@platform-management:query-definitions.wizard.create.errors.parse-failed',
|
|
88
|
+
},
|
|
89
|
+
methods: {
|
|
90
|
+
get: '@platform-management:query-definitions.wizard.create.methods.get',
|
|
91
|
+
post: '@platform-management:query-definitions.wizard.create.methods.post',
|
|
92
|
+
},
|
|
93
|
+
placeholders: {
|
|
94
|
+
contract: '@platform-management:query-definitions.wizard.create.placeholders.contract',
|
|
95
|
+
contractNext: '@platform-management:query-definitions.wizard.create.placeholders.contract-next',
|
|
96
|
+
identity: '@platform-management:query-definitions.wizard.create.placeholders.identity',
|
|
97
|
+
kind: '@platform-management:query-definitions.wizard.create.placeholders.kind',
|
|
98
|
+
valueType: '@platform-management:query-definitions.wizard.create.placeholders.value-type',
|
|
99
|
+
measure: '@platform-management:query-definitions.wizard.create.placeholders.measure',
|
|
100
|
+
predicates: '@platform-management:query-definitions.wizard.create.placeholders.predicates',
|
|
101
|
+
capabilities: '@platform-management:query-definitions.wizard.create.placeholders.capabilities',
|
|
102
|
+
filterableFields: '@platform-management:query-definitions.wizard.create.placeholders.filterable-fields',
|
|
103
|
+
sortableFields: '@platform-management:query-definitions.wizard.create.placeholders.sortable-fields',
|
|
104
|
+
paging: '@platform-management:query-definitions.wizard.create.placeholders.paging',
|
|
105
|
+
advanced: '@platform-management:query-definitions.wizard.create.placeholders.advanced',
|
|
106
|
+
itemsHint: '@platform-management:query-definitions.wizard.create.items-hint',
|
|
107
|
+
entityFields: '@platform-management:query-definitions.wizard.create.placeholders.entity-fields',
|
|
108
|
+
fieldsNext: '@platform-management:query-definitions.wizard.create.placeholders.fields-next',
|
|
109
|
+
selectedEntityHint: '@platform-management:query-definitions.wizard.create.placeholders.selected-entity-hint',
|
|
110
|
+
relatedTo: '@platform-management:query-definitions.wizard.create.placeholders.related-to',
|
|
111
|
+
apiFieldsNext: '@platform-management:query-definitions.wizard.create.placeholders.api-fields-next',
|
|
112
|
+
selectedApiHint: '@platform-management:query-definitions.wizard.create.placeholders.selected-api-hint',
|
|
113
|
+
apiFields: '@platform-management:query-definitions.wizard.create.placeholders.api-fields',
|
|
114
|
+
apiTestOk: '@platform-management:query-definitions.wizard.create.placeholders.api-test-ok',
|
|
115
|
+
persistOk: '@platform-management:query-definitions.wizard.create.placeholders.persist-ok',
|
|
116
|
+
},
|
|
117
|
+
errors: {
|
|
118
|
+
entityRequired: '@platform-management:query-definitions.wizard.create.errors.entity-required',
|
|
119
|
+
entityLoadFailed: '@platform-management:query-definitions.wizard.create.errors.entity-load-failed',
|
|
120
|
+
fieldsRequired: '@platform-management:query-definitions.wizard.create.errors.fields-required',
|
|
121
|
+
staticRequired: '@platform-management:query-definitions.wizard.create.errors.static-required',
|
|
122
|
+
apiConnectionRequired: '@platform-management:query-definitions.wizard.create.errors.api-connection-required',
|
|
123
|
+
apiPathRequired: '@platform-management:query-definitions.wizard.create.errors.api-path-required',
|
|
124
|
+
apiUrlRequired: '@platform-management:query-definitions.wizard.create.errors.api-url-required',
|
|
125
|
+
apiTestFailed: '@platform-management:query-definitions.wizard.create.errors.api-test-failed',
|
|
126
|
+
apiTestNetwork: '@platform-management:query-definitions.wizard.create.errors.api-test-network',
|
|
127
|
+
contractNameRequired: '@platform-management:query-definitions.wizard.create.errors.contract-name-required',
|
|
128
|
+
contractTitleRequired: '@platform-management:query-definitions.wizard.create.errors.contract-title-required',
|
|
129
|
+
contractBindingInvalid: '@platform-management:query-definitions.wizard.create.errors.contract-binding-invalid',
|
|
130
|
+
contractMeasureInvalid: '@platform-management:query-definitions.wizard.create.errors.contract-measure-invalid',
|
|
131
|
+
persistFailed: '@platform-management:query-definitions.wizard.create.errors.persist-failed',
|
|
132
|
+
persistDuplicate: '@platform-management:query-definitions.wizard.create.errors.persist-duplicate',
|
|
133
|
+
},
|
|
134
|
+
widget: {
|
|
135
|
+
title: '@platform-management:query-definitions.wizard.create.contract-editor.title',
|
|
136
|
+
description: '@platform-management:query-definitions.wizard.create.contract-editor.description',
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
const USER_QUERY_KIND_OPTIONS = [
|
|
140
|
+
{
|
|
141
|
+
value: 'value',
|
|
142
|
+
text: '@platform-management:query-definitions.entities.query-definition.fields.kind.options.value',
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
value: 'object',
|
|
146
|
+
text: '@platform-management:query-definitions.entities.query-definition.fields.kind.options.object',
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
value: 'collection',
|
|
150
|
+
text: '@platform-management:query-definitions.entities.query-definition.fields.kind.options.collection',
|
|
151
|
+
},
|
|
152
|
+
];
|
|
153
|
+
const USER_QUERY_VALUE_TYPE_OPTIONS = [
|
|
154
|
+
{
|
|
155
|
+
value: 'string',
|
|
156
|
+
text: '@platform-management:query-definitions.entities.query-definition.fields.value-type.options.string',
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
value: 'number',
|
|
160
|
+
text: '@platform-management:query-definitions.entities.query-definition.fields.value-type.options.number',
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
value: 'boolean',
|
|
164
|
+
text: '@platform-management:query-definitions.entities.query-definition.fields.value-type.options.boolean',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
value: 'date',
|
|
168
|
+
text: '@platform-management:query-definitions.entities.query-definition.fields.value-type.options.date',
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
value: 'datetime',
|
|
172
|
+
text: '@platform-management:query-definitions.entities.query-definition.fields.value-type.options.datetime',
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
value: 'json',
|
|
176
|
+
text: '@platform-management:query-definitions.entities.query-definition.fields.value-type.options.json',
|
|
177
|
+
},
|
|
178
|
+
];
|
|
179
|
+
const USER_QUERY_MEASURE_REDUCER_OPTIONS = [
|
|
180
|
+
{
|
|
181
|
+
value: 'count',
|
|
182
|
+
text: '@platform-management:query-definitions.wizard.create.fields.measure-reducers.count',
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
value: 'sum',
|
|
186
|
+
text: '@platform-management:query-definitions.wizard.create.fields.measure-reducers.sum',
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
value: 'avg',
|
|
190
|
+
text: '@platform-management:query-definitions.wizard.create.fields.measure-reducers.avg',
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
value: 'min',
|
|
194
|
+
text: '@platform-management:query-definitions.wizard.create.fields.measure-reducers.min',
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
value: 'max',
|
|
198
|
+
text: '@platform-management:query-definitions.wizard.create.fields.measure-reducers.max',
|
|
199
|
+
},
|
|
200
|
+
];
|
|
201
|
+
//#endregion
|
|
202
|
+
|
|
203
|
+
const QUERY_CONTRACT_WIDGET_NAME = 'query-contract-editor';
|
|
204
|
+
|
|
205
|
+
//#region ----- Imports -----
|
|
206
|
+
//#endregion
|
|
207
|
+
//#region ----- Config -----
|
|
208
|
+
const AXMQueryContractWidget = {
|
|
209
|
+
name: QUERY_CONTRACT_WIDGET_NAME,
|
|
210
|
+
title: CREATE_USER_QUERY_I18N.widget.title,
|
|
211
|
+
description: CREATE_USER_QUERY_I18N.widget.description,
|
|
212
|
+
icon: 'fa-light fa-file-contract',
|
|
213
|
+
categories: AXP_WIDGETS_EDITOR_CATEGORY,
|
|
214
|
+
groups: [AXPWidgetGroupEnum.UtilityWidget],
|
|
215
|
+
type: 'editor',
|
|
216
|
+
defaultFilterWidgetName: 'string-filter',
|
|
217
|
+
options: {
|
|
218
|
+
needLabel: false,
|
|
219
|
+
},
|
|
220
|
+
properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_READONLY_PROPERTY, AXP_DISABLED_PROPERTY],
|
|
221
|
+
components: {
|
|
222
|
+
edit: {
|
|
223
|
+
component: () => import('./acorex-platform-module-platform-management-client-query-contract-widget-edit.component-BW2pBOeg.mjs').then((c) => c.AXMQueryContractWidgetEditComponent),
|
|
224
|
+
},
|
|
225
|
+
designer: {
|
|
226
|
+
component: () => import('./acorex-platform-module-platform-management-client-query-contract-widget-edit.component-BW2pBOeg.mjs').then((c) => c.AXMQueryContractWidgetEditComponent),
|
|
227
|
+
},
|
|
228
|
+
view: {
|
|
229
|
+
component: () => import('./acorex-platform-module-platform-management-client-query-contract-widget-view.component-DD9ETjFD.mjs').then((c) => c.AXMQueryContractWidgetViewComponent),
|
|
230
|
+
},
|
|
231
|
+
column: {
|
|
232
|
+
component: () => import('./acorex-platform-module-platform-management-client-query-contract-widget-column.component-COfOzMGh.mjs').then((c) => c.AXMQueryContractWidgetColumnComponent),
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
//#endregion
|
|
237
|
+
|
|
36
238
|
const REST_API_GENERATOR_WIDGET_NAME = 'rest-api-generator-editor';
|
|
37
239
|
const REST_API_GENERATOR_IMPORT_DEBOUNCE_MS = 500;
|
|
38
240
|
|
|
@@ -54,16 +256,16 @@ const AXMRestApiGeneratorWidget = {
|
|
|
54
256
|
properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_READONLY_PROPERTY, AXP_DISABLED_PROPERTY],
|
|
55
257
|
components: {
|
|
56
258
|
edit: {
|
|
57
|
-
component: () => import('./acorex-platform-module-platform-management-client-rest-api-generator-widget-edit.component-
|
|
259
|
+
component: () => import('./acorex-platform-module-platform-management-client-rest-api-generator-widget-edit.component-CXI6fJi3.mjs').then((c) => c.AXMRestApiGeneratorWidgetEditComponent),
|
|
58
260
|
},
|
|
59
261
|
designer: {
|
|
60
|
-
component: () => import('./acorex-platform-module-platform-management-client-rest-api-generator-widget-edit.component-
|
|
262
|
+
component: () => import('./acorex-platform-module-platform-management-client-rest-api-generator-widget-edit.component-CXI6fJi3.mjs').then((c) => c.AXMRestApiGeneratorWidgetEditComponent),
|
|
61
263
|
},
|
|
62
264
|
view: {
|
|
63
|
-
component: () => import('./acorex-platform-module-platform-management-client-rest-api-generator-widget-view.component-
|
|
265
|
+
component: () => import('./acorex-platform-module-platform-management-client-rest-api-generator-widget-view.component-C3iHgoC2.mjs').then((c) => c.AXMRestApiGeneratorWidgetViewComponent),
|
|
64
266
|
},
|
|
65
267
|
column: {
|
|
66
|
-
component: () => import('./acorex-platform-module-platform-management-client-rest-api-generator-widget-column.component-
|
|
268
|
+
component: () => import('./acorex-platform-module-platform-management-client-rest-api-generator-widget-column.component-DRkE2a7n.mjs').then((c) => c.AXMRestApiGeneratorWidgetColumnComponent),
|
|
67
269
|
},
|
|
68
270
|
},
|
|
69
271
|
};
|
|
@@ -958,7 +1160,7 @@ function newTempId() {
|
|
|
958
1160
|
|
|
959
1161
|
//#endregion
|
|
960
1162
|
//#region ----- Platform Management Widgets Provider -----
|
|
961
|
-
const WIDGETS = [AXMRestApiGeneratorWidget];
|
|
1163
|
+
const WIDGETS = [AXMRestApiGeneratorWidget, AXMQueryContractWidget];
|
|
962
1164
|
class AXMPlatformManagementWidgetsProvider {
|
|
963
1165
|
getWidgets() {
|
|
964
1166
|
return WIDGETS;
|
|
@@ -2030,29 +2232,73 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
2030
2232
|
}]
|
|
2031
2233
|
}], ctorParameters: () => [{ type: AXPUpdaterService }] });
|
|
2032
2234
|
|
|
2033
|
-
//#region
|
|
2235
|
+
//#region ----- Imports -----
|
|
2236
|
+
//#endregion
|
|
2237
|
+
//#region ----- Constants -----
|
|
2238
|
+
const MODULE_DEFINITION_ENTITY = `${RootConfig.module.name}.${RootConfig.entities.moduleDefinition.name}`;
|
|
2239
|
+
//#endregion
|
|
2240
|
+
//#region ----- Mapping -----
|
|
2241
|
+
function toModuleManifest(row) {
|
|
2242
|
+
if (!row?.name || !row?.version) {
|
|
2243
|
+
return null;
|
|
2244
|
+
}
|
|
2245
|
+
return {
|
|
2246
|
+
name: row.name,
|
|
2247
|
+
version: row.version,
|
|
2248
|
+
title: row.title || row.name,
|
|
2249
|
+
description: row.description,
|
|
2250
|
+
icon: row.icon,
|
|
2251
|
+
i18n: row.i18n,
|
|
2252
|
+
dependencies: row.dependencies,
|
|
2253
|
+
required: row.required,
|
|
2254
|
+
type: row.type,
|
|
2255
|
+
domain: row.domain,
|
|
2256
|
+
};
|
|
2257
|
+
}
|
|
2034
2258
|
//#endregion
|
|
2035
|
-
//#region
|
|
2259
|
+
//#region ----- Discovery -----
|
|
2036
2260
|
/**
|
|
2037
|
-
*
|
|
2038
|
-
*
|
|
2261
|
+
* Loads every `PlatformManagement.ModuleDefinition` row and maps it to a manifest.
|
|
2262
|
+
* One catalog query → one manifest per row (same shape as workflow task-board discovery).
|
|
2039
2263
|
*/
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
}
|
|
2264
|
+
async function discoverModuleManifests(queryService) {
|
|
2265
|
+
try {
|
|
2266
|
+
const page = runtimeQueryCollectionData(await queryService.fetch(ENTITY_QUERY_DEFAULT, {
|
|
2267
|
+
entity: MODULE_DEFINITION_ENTITY,
|
|
2268
|
+
resultMode: 'all',
|
|
2269
|
+
}));
|
|
2270
|
+
const items = page?.items ?? [];
|
|
2271
|
+
const manifests = [];
|
|
2272
|
+
for (const row of items) {
|
|
2273
|
+
const manifest = toModuleManifest(row);
|
|
2274
|
+
if (manifest) {
|
|
2275
|
+
manifests.push(manifest);
|
|
2276
|
+
}
|
|
2277
|
+
}
|
|
2278
|
+
return manifests;
|
|
2279
|
+
}
|
|
2280
|
+
catch (error) {
|
|
2281
|
+
console.error('Failed to load module manifests from ModuleDefinition catalog:', error);
|
|
2282
|
+
return [];
|
|
2283
|
+
}
|
|
2284
|
+
}
|
|
2285
|
+
//#endregion
|
|
2286
|
+
//#region ----- Provider -----
|
|
2287
|
+
/**
|
|
2288
|
+
* One `AXP_MODULE_MANIFEST_PROVIDER` slot that resolves to N manifests from the API.
|
|
2289
|
+
*/
|
|
2290
|
+
function provideModuleManifestsFromApi() {
|
|
2291
|
+
return {
|
|
2292
|
+
provide: AXP_MODULE_MANIFEST_PROVIDER,
|
|
2293
|
+
multi: true,
|
|
2294
|
+
useFactory: () => {
|
|
2295
|
+
const queryService = inject(AXPQueryService);
|
|
2296
|
+
// Return a loader, not the promise. The first startup call is unauthenticated and
|
|
2297
|
+
// would otherwise stay cached, so the post-login feature load never sees modules.
|
|
2298
|
+
return () => discoverModuleManifests(queryService);
|
|
2299
|
+
},
|
|
2300
|
+
};
|
|
2301
|
+
}
|
|
2056
2302
|
//#endregion
|
|
2057
2303
|
|
|
2058
2304
|
class AXMMenuProvider {
|
|
@@ -2094,6 +2340,14 @@ class AXMMenuProvider {
|
|
|
2094
2340
|
]);
|
|
2095
2341
|
}
|
|
2096
2342
|
context.find(AXPCommonMenuKeys.PlatformDefinitions).addItems([
|
|
2343
|
+
{
|
|
2344
|
+
name: AXPPlatformManagementMenuKeys.ModuleDefinitions,
|
|
2345
|
+
text: `@${scope}:menus.module-definitions.title`,
|
|
2346
|
+
path: this.entityService.createPath(moduleName, RootConfig.entities.moduleDefinition.name),
|
|
2347
|
+
icon: RootConfig.entities.moduleDefinition.icon,
|
|
2348
|
+
priority: 0,
|
|
2349
|
+
policy: platformShellPolicy,
|
|
2350
|
+
},
|
|
2097
2351
|
{
|
|
2098
2352
|
name: AXPPlatformManagementMenuKeys.EntityDefinitions,
|
|
2099
2353
|
text: `@${scope}:menus.entity-definitions.title`,
|
|
@@ -2437,6 +2691,7 @@ function providePlatformCommandCatalogCrudService() {
|
|
|
2437
2691
|
//#endregion
|
|
2438
2692
|
//#region ----- Constants -----
|
|
2439
2693
|
const CATALOG_FACTORY_BY_NAME = {
|
|
2694
|
+
[RootConfig.entities.moduleDefinition.name]: moduleDefinitionEntityFactory,
|
|
2440
2695
|
[RootConfig.entities.entityDefinition.name]: entityDefinitionEntityFactory,
|
|
2441
2696
|
[RootConfig.entities.commandDefinition.name]: commandDefinitionEntityFactory,
|
|
2442
2697
|
[RootConfig.entities.queryDefinition.name]: queryDefinitionEntityFactory,
|
|
@@ -2490,6 +2745,11 @@ function applyCatalogFactoryLayout(ctx, factory) {
|
|
|
2490
2745
|
if (factory.formats) {
|
|
2491
2746
|
ctx.formats.update(() => factory.formats);
|
|
2492
2747
|
}
|
|
2748
|
+
if (factory.relatedEntities?.length) {
|
|
2749
|
+
ctx.relatedEntities.remove(() => true);
|
|
2750
|
+
ctx.relatedEntities.add(...factory.relatedEntities);
|
|
2751
|
+
}
|
|
2752
|
+
ctx.entity.pages = factory.pages ? [...factory.pages] : [];
|
|
2493
2753
|
const factoryMaster = factory.interfaces?.master;
|
|
2494
2754
|
ctx.interfaces.master.update((current) => {
|
|
2495
2755
|
const listActions = [...(factoryMaster?.list?.actions ?? current?.list?.actions ?? [])];
|
|
@@ -2504,6 +2764,7 @@ function applyCatalogFactoryLayout(ctx, factory) {
|
|
|
2504
2764
|
views: factoryMaster?.list?.views ?? current?.list?.views ?? [],
|
|
2505
2765
|
actions: listActions,
|
|
2506
2766
|
},
|
|
2767
|
+
create: factoryMaster?.create ?? current?.create,
|
|
2507
2768
|
single: {
|
|
2508
2769
|
title: factoryMaster?.single?.title ?? '{{ name }}',
|
|
2509
2770
|
description: factoryMaster?.single?.description,
|
|
@@ -2553,7 +2814,7 @@ function routesFactory() {
|
|
|
2553
2814
|
children: [
|
|
2554
2815
|
{
|
|
2555
2816
|
path: '',
|
|
2556
|
-
loadComponent: () => import('./acorex-platform-module-platform-management-client-menu-list.component-
|
|
2817
|
+
loadComponent: () => import('./acorex-platform-module-platform-management-client-menu-list.component-iMEnFPEY.mjs').then((c) => c.AXMMenuListComponent),
|
|
2557
2818
|
data: { reuse: true },
|
|
2558
2819
|
},
|
|
2559
2820
|
],
|
|
@@ -2579,12 +2840,7 @@ class AXMPlatformManagementModule {
|
|
|
2579
2840
|
multi: true,
|
|
2580
2841
|
useFactory: routesFactory,
|
|
2581
2842
|
},
|
|
2582
|
-
|
|
2583
|
-
{
|
|
2584
|
-
provide: AXP_MODULE_MANIFEST_PROVIDER,
|
|
2585
|
-
useValue: PlatformManagementManifest,
|
|
2586
|
-
multi: true,
|
|
2587
|
-
},
|
|
2843
|
+
provideModuleManifestsFromApi(),
|
|
2588
2844
|
// Provider references (now using tokens)
|
|
2589
2845
|
{
|
|
2590
2846
|
provide: AXP_PERMISSION_DEFINITION_PROVIDER,
|
|
@@ -2611,6 +2867,7 @@ class AXMPlatformManagementModule {
|
|
|
2611
2867
|
useValue: AXMPlatformDefinitionCatalogEntityModifier,
|
|
2612
2868
|
multi: true,
|
|
2613
2869
|
},
|
|
2870
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-platform-management-client-entity-definition-form-page.provider-hLzgoJu3.mjs').then((m) => m.AXMEntityDefinitionFormPageComponentProvider)),
|
|
2614
2871
|
providePlatformCommandCatalogCrudService(),
|
|
2615
2872
|
provideCommandSetups([
|
|
2616
2873
|
{
|
|
@@ -2619,13 +2876,17 @@ class AXMPlatformManagementModule {
|
|
|
2619
2876
|
},
|
|
2620
2877
|
{
|
|
2621
2878
|
key: 'PlatformManagement:CreateUserQuery',
|
|
2622
|
-
command: () => import('./acorex-platform-module-platform-management-client-create-user-query.command-
|
|
2879
|
+
command: () => import('./acorex-platform-module-platform-management-client-create-user-query.command-Bh49QHkl.mjs').then((c) => c.AXMCreateUserQueryCommand),
|
|
2880
|
+
},
|
|
2881
|
+
{
|
|
2882
|
+
key: 'PlatformManagement.QueryDefinition:Execute',
|
|
2883
|
+
command: () => import('./acorex-platform-module-platform-management-client-run-user-query.command-BzNa3B48.mjs').then((c) => c.AXMRunUserQueryCommand),
|
|
2623
2884
|
},
|
|
2624
2885
|
]),
|
|
2625
2886
|
provideQuerySetups([
|
|
2626
2887
|
{
|
|
2627
2888
|
key: 'PlatformManagement:ListRegisteredEntities',
|
|
2628
|
-
loader: () => import('./acorex-platform-module-platform-management-client-list-registered-entities.query-
|
|
2889
|
+
loader: () => import('./acorex-platform-module-platform-management-client-list-registered-entities.query-CZM6JQou.mjs').then((c) => c.AXMListRegisteredEntitiesQuery),
|
|
2629
2890
|
},
|
|
2630
2891
|
{
|
|
2631
2892
|
key: 'PlatformManagement:ListRegisteredQueries',
|
|
@@ -2705,12 +2966,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
2705
2966
|
multi: true,
|
|
2706
2967
|
useFactory: routesFactory,
|
|
2707
2968
|
},
|
|
2708
|
-
|
|
2709
|
-
{
|
|
2710
|
-
provide: AXP_MODULE_MANIFEST_PROVIDER,
|
|
2711
|
-
useValue: PlatformManagementManifest,
|
|
2712
|
-
multi: true,
|
|
2713
|
-
},
|
|
2969
|
+
provideModuleManifestsFromApi(),
|
|
2714
2970
|
// Provider references (now using tokens)
|
|
2715
2971
|
{
|
|
2716
2972
|
provide: AXP_PERMISSION_DEFINITION_PROVIDER,
|
|
@@ -2737,6 +2993,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
2737
2993
|
useValue: AXMPlatformDefinitionCatalogEntityModifier,
|
|
2738
2994
|
multi: true,
|
|
2739
2995
|
},
|
|
2996
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-platform-management-client-entity-definition-form-page.provider-hLzgoJu3.mjs').then((m) => m.AXMEntityDefinitionFormPageComponentProvider)),
|
|
2740
2997
|
providePlatformCommandCatalogCrudService(),
|
|
2741
2998
|
provideCommandSetups([
|
|
2742
2999
|
{
|
|
@@ -2745,13 +3002,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
2745
3002
|
},
|
|
2746
3003
|
{
|
|
2747
3004
|
key: 'PlatformManagement:CreateUserQuery',
|
|
2748
|
-
command: () => import('./acorex-platform-module-platform-management-client-create-user-query.command-
|
|
3005
|
+
command: () => import('./acorex-platform-module-platform-management-client-create-user-query.command-Bh49QHkl.mjs').then((c) => c.AXMCreateUserQueryCommand),
|
|
3006
|
+
},
|
|
3007
|
+
{
|
|
3008
|
+
key: 'PlatformManagement.QueryDefinition:Execute',
|
|
3009
|
+
command: () => import('./acorex-platform-module-platform-management-client-run-user-query.command-BzNa3B48.mjs').then((c) => c.AXMRunUserQueryCommand),
|
|
2749
3010
|
},
|
|
2750
3011
|
]),
|
|
2751
3012
|
provideQuerySetups([
|
|
2752
3013
|
{
|
|
2753
3014
|
key: 'PlatformManagement:ListRegisteredEntities',
|
|
2754
|
-
loader: () => import('./acorex-platform-module-platform-management-client-list-registered-entities.query-
|
|
3015
|
+
loader: () => import('./acorex-platform-module-platform-management-client-list-registered-entities.query-CZM6JQou.mjs').then((c) => c.AXMListRegisteredEntitiesQuery),
|
|
2755
3016
|
},
|
|
2756
3017
|
{
|
|
2757
3018
|
key: 'PlatformManagement:ListRegisteredQueries',
|
|
@@ -3256,23 +3517,69 @@ function waypointsToRoundedPath(points, radius) {
|
|
|
3256
3517
|
return cmds.join(' ');
|
|
3257
3518
|
}
|
|
3258
3519
|
/**
|
|
3259
|
-
*
|
|
3260
|
-
* orthogonal/rounded
|
|
3261
|
-
* passing through them. The `straight` style always draws a direct line.
|
|
3520
|
+
* Waypoints used to stroke a connector. The `straight` style is two points;
|
|
3521
|
+
* orthogonal/rounded styles include stub-outs and obstacle detours.
|
|
3262
3522
|
*/
|
|
3263
|
-
function
|
|
3523
|
+
function connectorRoutePoints(from, to, style, sourceSide, options = {}) {
|
|
3264
3524
|
if (style === 'straight') {
|
|
3265
|
-
return
|
|
3525
|
+
return [from, to];
|
|
3266
3526
|
}
|
|
3267
3527
|
const targetSide = options.targetSide ?? oppositeSide(sourceSide);
|
|
3268
|
-
|
|
3528
|
+
return routeOrthogonalConnector(from, sourceSide, to, targetSide, options.obstacles ?? [], {
|
|
3269
3529
|
stub: options.stub,
|
|
3270
3530
|
obstaclePadding: options.obstaclePadding,
|
|
3271
3531
|
});
|
|
3272
|
-
|
|
3273
|
-
|
|
3532
|
+
}
|
|
3533
|
+
/**
|
|
3534
|
+
* Builds the SVG `d` string for a connector. When `options.obstacles` is supplied,
|
|
3535
|
+
* orthogonal/rounded routes detour around the obstacle rectangles instead of
|
|
3536
|
+
* passing through them. The `straight` style always draws a direct line.
|
|
3537
|
+
*/
|
|
3538
|
+
function connectorPath(from, to, style, sourceSide, options = {}) {
|
|
3539
|
+
const points = connectorRoutePoints(from, to, style, sourceSide, options);
|
|
3540
|
+
if (style === 'rounded') {
|
|
3541
|
+
return waypointsToRoundedPath(points, options.cornerRadius ?? 14);
|
|
3542
|
+
}
|
|
3543
|
+
return waypointsToOrthogonalPath(points);
|
|
3544
|
+
}
|
|
3545
|
+
function longestConnectorSegment(points) {
|
|
3546
|
+
if (points.length < 2) {
|
|
3547
|
+
return null;
|
|
3548
|
+
}
|
|
3549
|
+
let from = points[0];
|
|
3550
|
+
let to = points[1];
|
|
3551
|
+
let bestLen = -1;
|
|
3552
|
+
for (let i = 0; i < points.length - 1; i++) {
|
|
3553
|
+
const a = points[i];
|
|
3554
|
+
const b = points[i + 1];
|
|
3555
|
+
const len = Math.hypot(b.x - a.x, b.y - a.y);
|
|
3556
|
+
if (len > bestLen) {
|
|
3557
|
+
bestLen = len;
|
|
3558
|
+
from = a;
|
|
3559
|
+
to = b;
|
|
3560
|
+
}
|
|
3274
3561
|
}
|
|
3275
|
-
return
|
|
3562
|
+
return {
|
|
3563
|
+
from,
|
|
3564
|
+
to,
|
|
3565
|
+
mid: { x: (from.x + to.x) * 0.5, y: (from.y + to.y) * 0.5 },
|
|
3566
|
+
};
|
|
3567
|
+
}
|
|
3568
|
+
/** Offsets a point off the segment so a label sits beside the stroke, not on it. */
|
|
3569
|
+
function offsetPointOffSegment(point, from, to, distance) {
|
|
3570
|
+
const dx = to.x - from.x;
|
|
3571
|
+
const dy = to.y - from.y;
|
|
3572
|
+
const len = Math.hypot(dx, dy);
|
|
3573
|
+
if (len < 0.001) {
|
|
3574
|
+
return { x: point.x, y: point.y - distance };
|
|
3575
|
+
}
|
|
3576
|
+
let nx = -dy / len;
|
|
3577
|
+
let ny = dx / len;
|
|
3578
|
+
if (ny > 0) {
|
|
3579
|
+
nx = -nx;
|
|
3580
|
+
ny = -ny;
|
|
3581
|
+
}
|
|
3582
|
+
return { x: point.x + nx * distance, y: point.y + ny * distance };
|
|
3276
3583
|
}
|
|
3277
3584
|
//#endregion
|
|
3278
3585
|
//#region ---- Model helpers ----
|
|
@@ -3655,6 +3962,9 @@ class AXPWorkflowDesignerComponent {
|
|
|
3655
3962
|
...(ngDevMode ? [{ debugName: "snapToGrid" }] : /* istanbul ignore next */ []));
|
|
3656
3963
|
this.connectionPreviewStyle = input('orthogonal', /* @ts-ignore */
|
|
3657
3964
|
...(ngDevMode ? [{ debugName: "connectionPreviewStyle" }] : /* istanbul ignore next */ []));
|
|
3965
|
+
/** Distance (px) the connector extends straight out of a port before turning. */
|
|
3966
|
+
this.connectorStub = input(undefined, /* @ts-ignore */
|
|
3967
|
+
...(ngDevMode ? [{ debugName: "connectorStub" }] : /* istanbul ignore next */ []));
|
|
3658
3968
|
this.backgroundPattern = input('dots', /* @ts-ignore */
|
|
3659
3969
|
...(ngDevMode ? [{ debugName: "backgroundPattern" }] : /* istanbul ignore next */ []));
|
|
3660
3970
|
this.zoomChange = output();
|
|
@@ -3667,6 +3977,22 @@ class AXPWorkflowDesignerComponent {
|
|
|
3667
3977
|
/** When false, port labels are hidden (ports remain interactive). */
|
|
3668
3978
|
this.showPortLabels = input(true, /* @ts-ignore */
|
|
3669
3979
|
...(ngDevMode ? [{ debugName: "showPortLabels" }] : /* istanbul ignore next */ []));
|
|
3980
|
+
/** When false, inbound/outbound port markers are hidden (routing still uses port anchors). */
|
|
3981
|
+
this.showPorts = input(true, /* @ts-ignore */
|
|
3982
|
+
...(ngDevMode ? [{ debugName: "showPorts" }] : /* istanbul ignore next */ []));
|
|
3983
|
+
/** When false, connector `label` text is hidden. */
|
|
3984
|
+
this.showConnectorLabels = input(true, /* @ts-ignore */
|
|
3985
|
+
...(ngDevMode ? [{ debugName: "showConnectorLabels" }] : /* istanbul ignore next */ []));
|
|
3986
|
+
/** Free space (px) kept around the content so nodes can be dragged outward. */
|
|
3987
|
+
this.canvasPadding = input(320, /* @ts-ignore */
|
|
3988
|
+
...(ngDevMode ? [{ debugName: "canvasPadding" }] : /* istanbul ignore next */ []));
|
|
3989
|
+
/**
|
|
3990
|
+
* Smallest canvas the surface reserves. Editors keep a large drawing area;
|
|
3991
|
+
* readonly diagrams can pass `{ width: 0, height: 0 }` so `fitContent` does not
|
|
3992
|
+
* shrink a small graph to fit an oversized empty canvas.
|
|
3993
|
+
*/
|
|
3994
|
+
this.minCanvasSize = input({ width: 1600, height: 1000 }, /* @ts-ignore */
|
|
3995
|
+
...(ngDevMode ? [{ debugName: "minCanvasSize" }] : /* istanbul ignore next */ []));
|
|
3670
3996
|
this.nodeBodyTemplate = input(null, /* @ts-ignore */
|
|
3671
3997
|
...(ngDevMode ? [{ debugName: "nodeBodyTemplate" }] : /* istanbul ignore next */ []));
|
|
3672
3998
|
this.designerPointerDown = output();
|
|
@@ -3741,9 +4067,8 @@ class AXPWorkflowDesignerComponent {
|
|
|
3741
4067
|
...(ngDevMode ? [{ debugName: "gridStyle" }] : /* istanbul ignore next */ []));
|
|
3742
4068
|
this.canvasViewport = computed(() => {
|
|
3743
4069
|
const model = this.model();
|
|
3744
|
-
const contentPadding =
|
|
3745
|
-
const minCanvasWidth =
|
|
3746
|
-
const minCanvasHeight = 1000;
|
|
4070
|
+
const contentPadding = this.canvasPadding();
|
|
4071
|
+
const { width: minCanvasWidth, height: minCanvasHeight } = this.minCanvasSize();
|
|
3747
4072
|
const nodeMinX = model.nodes.reduce((acc, node) => Math.min(acc, node.position.x), 0);
|
|
3748
4073
|
const nodeMinY = model.nodes.reduce((acc, node) => Math.min(acc, node.position.y), 0);
|
|
3749
4074
|
const nodeMaxRight = model.nodes.reduce((acc, node) => Math.max(acc, node.position.x + node.size.width), 0);
|
|
@@ -4470,22 +4795,37 @@ class AXPWorkflowDesignerComponent {
|
|
|
4470
4795
|
//#endregion
|
|
4471
4796
|
//#region ---- Connectors UI ----
|
|
4472
4797
|
connectorPathD(c) {
|
|
4473
|
-
const
|
|
4474
|
-
|
|
4475
|
-
const tn = findNode(model, c.targetNodeId);
|
|
4476
|
-
if (!sn || !tn)
|
|
4798
|
+
const ends = this.connectorEnds(c);
|
|
4799
|
+
if (!ends)
|
|
4477
4800
|
return '';
|
|
4478
|
-
|
|
4479
|
-
|
|
4480
|
-
|
|
4481
|
-
return '';
|
|
4482
|
-
const from = this.modelPointToSurface(portCanvasPosition(sn, sp));
|
|
4483
|
-
const to = this.trimmedConnectorTarget(from, this.modelPointToSurface(portCanvasPosition(tn, tp)));
|
|
4484
|
-
return connectorPath(from, to, this.connectionPreviewStyle(), sp.side, {
|
|
4485
|
-
targetSide: tp.side,
|
|
4486
|
-
obstacles: this.collectObstaclesInSurface(),
|
|
4801
|
+
return connectorPath(ends.from, ends.to, this.connectionPreviewStyle(), ends.sourceSide, {
|
|
4802
|
+
...this.connectorRouteOptions(),
|
|
4803
|
+
targetSide: ends.targetSide,
|
|
4487
4804
|
});
|
|
4488
4805
|
}
|
|
4806
|
+
connectorLabelText(c) {
|
|
4807
|
+
const fromField = c.label?.trim();
|
|
4808
|
+
if (fromField) {
|
|
4809
|
+
return fromField;
|
|
4810
|
+
}
|
|
4811
|
+
const fromData = c.data?.['label'];
|
|
4812
|
+
return typeof fromData === 'string' ? fromData.trim() : '';
|
|
4813
|
+
}
|
|
4814
|
+
connectorLabelPoint(c) {
|
|
4815
|
+
const ends = this.connectorEnds(c);
|
|
4816
|
+
if (!ends) {
|
|
4817
|
+
return null;
|
|
4818
|
+
}
|
|
4819
|
+
const points = connectorRoutePoints(ends.from, ends.to, this.connectionPreviewStyle(), ends.sourceSide, {
|
|
4820
|
+
...this.connectorRouteOptions(),
|
|
4821
|
+
targetSide: ends.targetSide,
|
|
4822
|
+
});
|
|
4823
|
+
const segment = longestConnectorSegment(points);
|
|
4824
|
+
if (!segment) {
|
|
4825
|
+
return null;
|
|
4826
|
+
}
|
|
4827
|
+
return offsetPointOffSegment(segment.mid, segment.from, segment.to, 12);
|
|
4828
|
+
}
|
|
4489
4829
|
connectorMidpoint(c) {
|
|
4490
4830
|
const model = this.model();
|
|
4491
4831
|
const sn = findNode(model, c.sourceNodeId);
|
|
@@ -4548,8 +4888,8 @@ class AXPWorkflowDesignerComponent {
|
|
|
4548
4888
|
const hoverNode = hover ? findNode(model, hover.nodeId) : undefined;
|
|
4549
4889
|
const hoverPort = hover && hoverNode ? findPort(hoverNode, hover.portId)?.port : undefined;
|
|
4550
4890
|
return connectorPath(from, this.trimmedConnectorTarget(from, to), this.connectionPreviewStyle(), sp.side, {
|
|
4891
|
+
...this.connectorRouteOptions(),
|
|
4551
4892
|
targetSide: hoverPort?.side,
|
|
4552
|
-
obstacles: this.collectObstaclesInSurface(),
|
|
4553
4893
|
});
|
|
4554
4894
|
}
|
|
4555
4895
|
//#endregion
|
|
@@ -4577,13 +4917,14 @@ class AXPWorkflowDesignerComponent {
|
|
|
4577
4917
|
portLabelY(node, port) {
|
|
4578
4918
|
return this.portLabelCanvasPoint(node, port).y;
|
|
4579
4919
|
}
|
|
4580
|
-
portLabelAnchor(
|
|
4581
|
-
|
|
4582
|
-
|
|
4583
|
-
|
|
4584
|
-
if (
|
|
4585
|
-
return '
|
|
4586
|
-
|
|
4920
|
+
portLabelAnchor(port) {
|
|
4921
|
+
if (port.side === 'left') {
|
|
4922
|
+
return 'end';
|
|
4923
|
+
}
|
|
4924
|
+
if (port.side === 'right') {
|
|
4925
|
+
return 'start';
|
|
4926
|
+
}
|
|
4927
|
+
return 'middle';
|
|
4587
4928
|
}
|
|
4588
4929
|
nodeSurfaceLeft(node) {
|
|
4589
4930
|
return node.position.x + this.canvasViewport().offsetX;
|
|
@@ -4597,29 +4938,45 @@ class AXPWorkflowDesignerComponent {
|
|
|
4597
4938
|
const len = Math.hypot(dx, dy);
|
|
4598
4939
|
if (len < 0.001)
|
|
4599
4940
|
return to;
|
|
4600
|
-
// Keep arrowhead
|
|
4601
|
-
const trim = 7;
|
|
4941
|
+
// Keep the arrowhead off the port marker; sit on the node edge when ports are hidden.
|
|
4942
|
+
const trim = this.showPorts() ? 7 : 2;
|
|
4602
4943
|
return {
|
|
4603
4944
|
x: to.x - (dx / len) * trim,
|
|
4604
4945
|
y: to.y - (dy / len) * trim,
|
|
4605
4946
|
};
|
|
4606
4947
|
}
|
|
4948
|
+
connectorEnds(c) {
|
|
4949
|
+
const model = this.model();
|
|
4950
|
+
const sn = findNode(model, c.sourceNodeId);
|
|
4951
|
+
const tn = findNode(model, c.targetNodeId);
|
|
4952
|
+
if (!sn || !tn) {
|
|
4953
|
+
return null;
|
|
4954
|
+
}
|
|
4955
|
+
const sp = findPort(sn, c.sourcePortId)?.port;
|
|
4956
|
+
const tp = findPort(tn, c.targetPortId)?.port;
|
|
4957
|
+
if (!sp || !tp) {
|
|
4958
|
+
return null;
|
|
4959
|
+
}
|
|
4960
|
+
const from = this.modelPointToSurface(portCanvasPosition(sn, sp));
|
|
4961
|
+
const to = this.trimmedConnectorTarget(from, this.modelPointToSurface(portCanvasPosition(tn, tp)));
|
|
4962
|
+
return { from, to, sourceSide: sp.side, targetSide: tp.side };
|
|
4963
|
+
}
|
|
4607
4964
|
portLabelCanvasPoint(node, port) {
|
|
4608
4965
|
const anchor = this.modelPointToSurface(portCanvasPosition(node, port));
|
|
4609
|
-
const
|
|
4610
|
-
|
|
4611
|
-
|
|
4612
|
-
|
|
4613
|
-
|
|
4614
|
-
|
|
4615
|
-
|
|
4616
|
-
|
|
4617
|
-
|
|
4618
|
-
|
|
4619
|
-
|
|
4620
|
-
|
|
4621
|
-
|
|
4622
|
-
}
|
|
4966
|
+
const outward = this.showPorts() ? 22 : 12;
|
|
4967
|
+
const lift = 12;
|
|
4968
|
+
switch (port.side) {
|
|
4969
|
+
case 'left':
|
|
4970
|
+
return { x: anchor.x - outward, y: anchor.y - lift };
|
|
4971
|
+
case 'right':
|
|
4972
|
+
return { x: anchor.x + outward, y: anchor.y - lift };
|
|
4973
|
+
case 'top':
|
|
4974
|
+
return { x: anchor.x, y: anchor.y - outward };
|
|
4975
|
+
case 'bottom':
|
|
4976
|
+
return { x: anchor.x, y: anchor.y + outward };
|
|
4977
|
+
default:
|
|
4978
|
+
return anchor;
|
|
4979
|
+
}
|
|
4623
4980
|
}
|
|
4624
4981
|
//#endregion
|
|
4625
4982
|
//#region ---- Canvas mapping ----
|
|
@@ -4655,6 +5012,13 @@ class AXPWorkflowDesignerComponent {
|
|
|
4655
5012
|
}
|
|
4656
5013
|
return obstacles;
|
|
4657
5014
|
}
|
|
5015
|
+
connectorRouteOptions() {
|
|
5016
|
+
const stub = this.connectorStub();
|
|
5017
|
+
return {
|
|
5018
|
+
obstacles: this.collectObstaclesInSurface(),
|
|
5019
|
+
...(stub != null && stub >= 0 ? { stub } : {}),
|
|
5020
|
+
};
|
|
5021
|
+
}
|
|
4658
5022
|
//#endregion
|
|
4659
5023
|
//#region ---- Wrapper visuals ----
|
|
4660
5024
|
syncWrapperBackgroundStyle() {
|
|
@@ -4684,15 +5048,15 @@ class AXPWorkflowDesignerComponent {
|
|
|
4684
5048
|
window.removeEventListener('pointercancel', this.onWindowPointerUpForLink);
|
|
4685
5049
|
}
|
|
4686
5050
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWorkflowDesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4687
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPWorkflowDesignerComponent, isStandalone: true, selector: "axp-workflow-designer", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, highlightedNodeIds: { classPropertyName: "highlightedNodeIds", publicName: "highlightedNodeIds", isSignal: true, isRequired: false, transformFunction: null }, gridSize: { classPropertyName: "gridSize", publicName: "gridSize", isSignal: true, isRequired: false, transformFunction: null }, snapToGrid: { classPropertyName: "snapToGrid", publicName: "snapToGrid", isSignal: true, isRequired: false, transformFunction: null }, connectionPreviewStyle: { classPropertyName: "connectionPreviewStyle", publicName: "connectionPreviewStyle", isSignal: true, isRequired: false, transformFunction: null }, backgroundPattern: { classPropertyName: "backgroundPattern", publicName: "backgroundPattern", isSignal: true, isRequired: false, transformFunction: null }, canConnect: { classPropertyName: "canConnect", publicName: "canConnect", isSignal: true, isRequired: false, transformFunction: null }, paletteItems: { classPropertyName: "paletteItems", publicName: "paletteItems", isSignal: true, isRequired: false, transformFunction: null }, showPortLabels: { classPropertyName: "showPortLabels", publicName: "showPortLabels", isSignal: true, isRequired: false, transformFunction: null }, nodeBodyTemplate: { classPropertyName: "nodeBodyTemplate", publicName: "nodeBodyTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { modelChange: "modelChange", zoomChange: "zoomChange", designerPointerDown: "designerPointerDown", designerClick: "designerClick", designerDoubleClick: "designerDoubleClick", nodePointerDown: "nodePointerDown", nodeClick: "nodeClick", nodeDoubleClick: "nodeDoubleClick", nodeContextMenu: "nodeContextMenu", nodeDragStart: "nodeDragStart", nodeDragEnd: "nodeDragEnd", portPointerDown: "portPointerDown", linkDragStart: "linkDragStart", linkDragMove: "linkDragMove", linkDragEnd: "linkDragEnd", connectorClick: "connectorClick", connectorDoubleClick: "connectorDoubleClick", connectionCreated: "connectionCreated", connectionRejected: "connectionRejected", activationChange: "activationChange" }, host: { listeners: { "window:keydown": "onWindowKeydown($event)" }, classAttribute: "axp-workflow-designer-host" }, viewQueries: [{ propertyName: "surfaceRef", first: true, predicate: ["surface"], descendants: true, isSignal: true }, { propertyName: "panViewRef", first: true, predicate: AXPanViewDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"axp-workflow-designer\" [ngStyle]=\"gridStyle()\">\n <div\n #surface\n class=\"axp-workflow-designer__surface\"\n axPanView\n [(panX)]=\"panX\"\n [(panY)]=\"panY\"\n [(zoom)]=\"panZoomLevel\"\n [maxZoom]=\"10000\"\n [freeMode]=\"true\"\n [fitContent]=\"true\"\n wrapperClasses=\"h\"\n [ngStyle]=\"surfaceStyle()\"\n (pointerdown)=\"onSurfacePointerDown($event)\"\n (click)=\"onSurfaceClick($event)\"\n (dblclick)=\"onSurfaceDoubleClick($event)\"\n (dragover)=\"onCanvasDragOver($event)\"\n (drop)=\"onCanvasDrop($event)\"\n >\n <svg\n class=\"axp-workflow-designer__svg\"\n width=\"100%\"\n height=\"100%\"\n preserveAspectRatio=\"xMinYMin meet\"\n >\n <defs>\n <marker\n [attr.id]=\"svgMarkerId\"\n markerWidth=\"6\"\n markerHeight=\"6\"\n refX=\"3.9\"\n refY=\"3\"\n orient=\"auto\"\n >\n <path\n d=\"M0,0 L4,3 L0,6 Q1.5,3 0,0 Z\"\n class=\"axp-workflow-designer__arrow-head\"\n ></path>\n </marker>\n </defs>\n @for (c of model().connectors; track c.id) {\n <path\n class=\"axp-workflow-designer__edge-hit\"\n [attr.d]=\"connectorPathD(c)\"\n fill=\"none\"\n stroke=\"transparent\"\n stroke-width=\"16\"\n pointer-events=\"stroke\"\n (click)=\"onConnectorClick(c, $event)\"\n (dblclick)=\"onConnectorDoubleClick(c, $event)\"\n />\n <path\n [class]=\"connectorEdgeClasses(c)\"\n [attr.d]=\"connectorPathD(c)\"\n fill=\"none\"\n [attr.marker-end]=\"'url(#' + svgMarkerId + ')'\"\n />\n }\n @if (linkDrag()) {\n <path\n class=\"axp-workflow-designer__edge-preview\"\n [attr.d]=\"previewPath()\"\n fill=\"none\"\n />\n }\n @if (showPortLabels()) {\n @for (node of model().nodes; track node.id) {\n @for (port of node.inboundPorts; track port.id) {\n @if (portLabelText(port)) {\n <text\n class=\"axp-workflow-designer__port-label-svg\"\n [attr.x]=\"portLabelX(node, port)\"\n [attr.y]=\"portLabelY(node, port)\"\n [attr.text-anchor]=\"portLabelAnchor(node, port)\"\n >\n {{ portLabelText(port) }}\n </text>\n }\n }\n @for (port of node.outboundPorts; track port.id) {\n @if (portLabelText(port)) {\n <text\n class=\"axp-workflow-designer__port-label-svg\"\n [attr.x]=\"portLabelX(node, port)\"\n [attr.y]=\"portLabelY(node, port)\"\n [attr.text-anchor]=\"portLabelAnchor(node, port)\"\n >\n {{ portLabelText(port) }}\n </text>\n }\n }\n }\n }\n </svg>\n\n @for (c of model().connectors; track c.id) {\n @if (isConnectorActive(c.id) && !isConnectorReadonly(c)) {\n <div\n class=\"axp-workflow-designer__connector-actions\"\n [style.left.px]=\"connectorMidpoint(c).x - 16\"\n [style.top.px]=\"connectorMidpoint(c).y - 16\"\n >\n <ax-button\n look=\"blank\"\n class=\"ax-sm axp-workflow-designer__icon-btn\"\n (onClick)=\"removeConnector(c)\"\n >\n <ax-icon class=\"fa-solid fa-minus\"></ax-icon>\n </ax-button>\n </div>\n }\n }\n\n @for (node of model().nodes; track node.id) {\n <div\n class=\"axp-workflow-designer__node\"\n [class.axp-workflow-designer__node--active]=\"isNodeActive(node.id)\"\n [class.axp-workflow-designer__node--highlighted]=\"\n isNodeHighlighted(node.id)\n \"\n [style.left.px]=\"nodeSurfaceLeft(node)\"\n [style.top.px]=\"nodeSurfaceTop(node)\"\n [style.width.px]=\"node.size.width\"\n [style.height.px]=\"node.size.height\"\n (pointerdown)=\"onNodePointerDown(node, $event)\"\n (click)=\"onNodeClick(node, $event)\"\n (dblclick)=\"onNodeDoubleClick(node, $event)\"\n (contextmenu)=\"onNodeContextMenu(node, $event)\"\n >\n <div [class]=\"nodeShapeClasses(node)\">\n <div\n class=\"axp-workflow-designer__node-body\"\n (pointerdown)=\"onNodeBodyPointerDown(node, $event)\"\n >\n @if (nodeBodyTemplate(); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"templateContext(node)\"\n />\n } @else {\n <div class=\"axp-workflow-designer__node-default\">\n @if (node.icon) {\n <ax-icon\n class=\"axp-workflow-designer__node-default-icon\"\n [class]=\"node.icon\"\n ></ax-icon>\n }\n <span class=\"axp-workflow-designer__node-default-title\">{{\n node.title\n }}</span>\n </div>\n }\n </div>\n </div>\n\n @for (port of node.inboundPorts; track port.id) {\n <div\n class=\"axp-workflow-designer__port-cluster\"\n [class.axp-workflow-designer__port-cluster--side-top]=\"\n port.side === 'top'\n \"\n [class.axp-workflow-designer__port-cluster--side-right]=\"\n port.side === 'right'\n \"\n [class.axp-workflow-designer__port-cluster--side-bottom]=\"\n port.side === 'bottom'\n \"\n [class.axp-workflow-designer__port-cluster--side-left]=\"\n port.side === 'left'\n \"\n [ngStyle]=\"portClusterStyle(node, port)\"\n >\n <button\n type=\"button\"\n class=\"axp-workflow-designer__port axp-workflow-designer__port--inbound\"\n [class.axp-workflow-designer__port--active]=\"\n isPortActive(node.id, port.id)\n \"\n [class.axp-workflow-designer__port--link-hover]=\"\n isPortLinkHoverTarget(node.id, port.id)\n \"\n [class.axp-workflow-designer__port--disabled]=\"port.disabled\"\n [disabled]=\"isNodeReadonly(node) || port.disabled === true\"\n (pointerdown)=\"onPortPointerDown(node, port, $event)\"\n ></button>\n </div>\n }\n @for (port of node.outboundPorts; track port.id) {\n <div\n class=\"axp-workflow-designer__port-cluster\"\n [class.axp-workflow-designer__port-cluster--side-top]=\"\n port.side === 'top'\n \"\n [class.axp-workflow-designer__port-cluster--side-right]=\"\n port.side === 'right'\n \"\n [class.axp-workflow-designer__port-cluster--side-bottom]=\"\n port.side === 'bottom'\n \"\n [class.axp-workflow-designer__port-cluster--side-left]=\"\n port.side === 'left'\n \"\n [ngStyle]=\"portClusterStyle(node, port)\"\n >\n <button\n type=\"button\"\n class=\"axp-workflow-designer__port axp-workflow-designer__port--outbound\"\n [class.axp-workflow-designer__port--active]=\"\n isPortActive(node.id, port.id)\n \"\n [class.axp-workflow-designer__port--disabled]=\"port.disabled\"\n [disabled]=\"isNodeReadonly(node) || port.disabled === true\"\n (pointerdown)=\"onPortPointerDown(node, port, $event)\"\n ></button>\n </div>\n }\n\n @if (isNodeActive(node.id) && !isNodeReadonly(node)) {\n <span\n class=\"axp-workflow-designer__resize axp-workflow-designer__resize--nw\"\n (pointerdown)=\"onResizePointerDown(node, 'nw', $event)\"\n ></span>\n <span\n class=\"axp-workflow-designer__resize axp-workflow-designer__resize--ne\"\n (pointerdown)=\"onResizePointerDown(node, 'ne', $event)\"\n ></span>\n <span\n class=\"axp-workflow-designer__resize axp-workflow-designer__resize--sw\"\n (pointerdown)=\"onResizePointerDown(node, 'sw', $event)\"\n ></span>\n <span\n class=\"axp-workflow-designer__resize axp-workflow-designer__resize--se\"\n (pointerdown)=\"onResizePointerDown(node, 'se', $event)\"\n ></span>\n }\n </div>\n }\n </div>\n</div>\n", styles: ["@layer properties;.axp-workflow-designer-host{box-sizing:border-box;display:block;height:100%;width:100%;min-height:360px;user-select:none;-webkit-user-select:none}.axp-workflow-designer{display:flex;height:100%;width:100%;min-height:inherit}.axp-workflow-designer .axp-workflow-designer__surface{position:relative;min-height:100%;min-width:100%;flex:auto;overflow:auto;border-radius:10px;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__surface::ng-deep .pan-view__wrapper{height:100%;width:100%}.axp-workflow-designer .axp-workflow-designer__svg{pointer-events:none;position:absolute;inset:0;height:100%;width:100%;z-index:1}.axp-workflow-designer .axp-workflow-designer__edge-hit{pointer-events:stroke;cursor:pointer}.axp-workflow-designer .axp-workflow-designer__edge{pointer-events:none;stroke:rgb(var(--ax-sys-color-neutral-500));stroke-width:2;transition:stroke .12s ease}.axp-workflow-designer .axp-workflow-designer__edge.primary-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-primary-500))}.axp-workflow-designer .axp-workflow-designer__edge.secondary-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-secondary-500))}.axp-workflow-designer .axp-workflow-designer__edge.success-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-success-500))}.axp-workflow-designer .axp-workflow-designer__edge.warning-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-warning-500))}.axp-workflow-designer .axp-workflow-designer__edge.danger-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-danger-500))}.axp-workflow-designer .axp-workflow-designer__edge--active{stroke:rgb(var(--ax-sys-color-primary-500));stroke-dasharray:2}.axp-workflow-designer .axp-workflow-designer__edge-preview{pointer-events:none;stroke:rgb(var(--ax-sys-color-primary-400));stroke-width:2;stroke-dasharray:6 4}.axp-workflow-designer .axp-workflow-designer__port-label-svg{fill:rgb(var(--ax-sys-color-on-surface));font-size:10px;font-weight:600;dominant-baseline:middle;pointer-events:none;paint-order:stroke;stroke:rgb(var(--ax-sys-color-surface));stroke-width:4px;stroke-linejoin:round}.axp-workflow-designer .axp-workflow-designer__arrow-head{fill:rgb(var(--ax-sys-color-neutral-500))}.axp-workflow-designer .axp-workflow-designer__connector-actions{position:absolute;display:flex;align-items:center;justify-content:center;z-index:4}.axp-workflow-designer .axp-workflow-designer__icon-btn{border-radius:999px;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__node{position:absolute;box-sizing:border-box;z-index:2;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__node.axp-workflow-designer__node--active .axp-workflow-designer__node-shape{border:2px dotted rgb(var(--ax-sys-color-primary-500))}.axp-workflow-designer .axp-workflow-designer__node.axp-workflow-designer__node--highlighted .axp-workflow-designer__node-shape{border:2px solid rgb(var(--ax-sys-color-primary-500));box-shadow:0 0 0 3px rgb(var(--ax-sys-color-primary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape{position:absolute;inset:0;box-sizing:border-box;overflow:visible;background:rgb(var(--ax-sys-color-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-primary-surface{background:rgb(var(--ax-sys-color-primary-surface));color:rgb(var(--ax-sys-color-on-primary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-secondary-surface{background:rgb(var(--ax-sys-color-secondary-surface));color:rgb(var(--ax-sys-color-on-secondary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-success-surface{background:rgb(var(--ax-sys-color-success-surface));color:rgb(var(--ax-sys-color-on-success-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-warning-surface{background:rgb(var(--ax-sys-color-warning-surface));color:rgb(var(--ax-sys-color-on-warning-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-danger-surface{background:rgb(var(--ax-sys-color-danger-surface));color:rgb(var(--ax-sys-color-on-danger-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-primary-border{border:2px solid rgb(var(--ax-sys-color-border-primary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-secondary-border{border:2px solid rgb(var(--ax-sys-color-border-secondary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-success-border{border:2px solid rgb(var(--ax-sys-color-border-success-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-warning-border{border:2px solid rgb(var(--ax-sys-color-border-warning-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-danger-border{border:2px solid rgb(var(--ax-sys-color-border-danger-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape--rectangle{border-radius:4px}.axp-workflow-designer .axp-workflow-designer__node-shape--rounded-rectangle{border-radius:14px}.axp-workflow-designer .axp-workflow-designer__node-shape--circle,.axp-workflow-designer .axp-workflow-designer__node-shape--ellipse{border-radius:50%}.axp-workflow-designer .axp-workflow-designer__node-shape--diamond{border-radius:0;clip-path:polygon(50% 0%,100% 50%,50% 100%,0% 50%)}.axp-workflow-designer .axp-workflow-designer__node-body{position:absolute;inset:0;display:flex;cursor:grab;align-items:center;justify-content:center;padding:8px 12px;touch-action:none;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__node-default{display:flex;min-width:0px;align-items:center;gap:8px}.axp-workflow-designer .axp-workflow-designer__node-default-icon{flex-shrink:0}.axp-workflow-designer .axp-workflow-designer__node-default-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-workflow-designer .axp-workflow-designer__port-cluster{pointer-events:none;position:absolute;overflow:visible;width:0;height:0;transform:translate(-50%,-50%);z-index:3}.axp-workflow-designer .axp-workflow-designer__port{position:absolute;flex-shrink:0;cursor:crosshair;border-radius:calc(infinity * 1px);left:50%;top:50%;transform:translate(-50%,-50%);width:14px;height:14px;padding:0;border:1px solid rgb(var(--ax-sys-color-surface));touch-action:none;pointer-events:auto;transition:transform .12s ease}.axp-workflow-designer .axp-workflow-designer__port:disabled{opacity:.45;cursor:not-allowed}.axp-workflow-designer .axp-workflow-designer__port--inbound{background:rgb(var(--ax-sys-color-success-500))}.axp-workflow-designer .axp-workflow-designer__port--outbound{background:rgb(var(--ax-sys-color-primary-500))}.axp-workflow-designer .axp-workflow-designer__port--active{box-shadow:0 0 0 3px #3b82f659}.axp-workflow-designer .axp-workflow-designer__port--link-hover{border:1px solid rgb(var(--ax-sys-color-primary-500));transform:translate(-50%,-50%) scale(1.12)}.axp-workflow-designer .axp-workflow-designer__port--disabled{opacity:.45;cursor:not-allowed}.axp-workflow-designer .axp-workflow-designer__resize{position:absolute;border-radius:calc(infinity * 1px);width:7px;height:7px;background:rgb(var(--ax-sys-color-primary-500));border:1px solid rgb(var(--ax-sys-color-surface));z-index:4;touch-action:none;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__resize--nw{left:-6px;top:-6px;cursor:nwse-resize}.axp-workflow-designer .axp-workflow-designer__resize--ne{right:-6px;top:-6px;cursor:nesw-resize}.axp-workflow-designer .axp-workflow-designer__resize--sw{left:-6px;bottom:-6px;cursor:nesw-resize}.axp-workflow-designer .axp-workflow-designer__resize--se{right:-6px;bottom:-6px;cursor:nwse-resize}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "directive", type: AXPanViewDirective, selector: "[axPanView]", inputs: ["zoomStep", "minZoom", "maxZoom", "freeMode", "fitContent", "disablePan", "disableZoom", "wrapperClasses", "panX", "panY", "zoom"], outputs: ["panXChange", "panYChange", "zoomChange", "positionChange"], exportAs: ["axPanView"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
5051
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPWorkflowDesignerComponent, isStandalone: true, selector: "axp-workflow-designer", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, highlightedNodeIds: { classPropertyName: "highlightedNodeIds", publicName: "highlightedNodeIds", isSignal: true, isRequired: false, transformFunction: null }, gridSize: { classPropertyName: "gridSize", publicName: "gridSize", isSignal: true, isRequired: false, transformFunction: null }, snapToGrid: { classPropertyName: "snapToGrid", publicName: "snapToGrid", isSignal: true, isRequired: false, transformFunction: null }, connectionPreviewStyle: { classPropertyName: "connectionPreviewStyle", publicName: "connectionPreviewStyle", isSignal: true, isRequired: false, transformFunction: null }, connectorStub: { classPropertyName: "connectorStub", publicName: "connectorStub", isSignal: true, isRequired: false, transformFunction: null }, backgroundPattern: { classPropertyName: "backgroundPattern", publicName: "backgroundPattern", isSignal: true, isRequired: false, transformFunction: null }, canConnect: { classPropertyName: "canConnect", publicName: "canConnect", isSignal: true, isRequired: false, transformFunction: null }, paletteItems: { classPropertyName: "paletteItems", publicName: "paletteItems", isSignal: true, isRequired: false, transformFunction: null }, showPortLabels: { classPropertyName: "showPortLabels", publicName: "showPortLabels", isSignal: true, isRequired: false, transformFunction: null }, showPorts: { classPropertyName: "showPorts", publicName: "showPorts", isSignal: true, isRequired: false, transformFunction: null }, showConnectorLabels: { classPropertyName: "showConnectorLabels", publicName: "showConnectorLabels", isSignal: true, isRequired: false, transformFunction: null }, canvasPadding: { classPropertyName: "canvasPadding", publicName: "canvasPadding", isSignal: true, isRequired: false, transformFunction: null }, minCanvasSize: { classPropertyName: "minCanvasSize", publicName: "minCanvasSize", isSignal: true, isRequired: false, transformFunction: null }, nodeBodyTemplate: { classPropertyName: "nodeBodyTemplate", publicName: "nodeBodyTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { modelChange: "modelChange", zoomChange: "zoomChange", designerPointerDown: "designerPointerDown", designerClick: "designerClick", designerDoubleClick: "designerDoubleClick", nodePointerDown: "nodePointerDown", nodeClick: "nodeClick", nodeDoubleClick: "nodeDoubleClick", nodeContextMenu: "nodeContextMenu", nodeDragStart: "nodeDragStart", nodeDragEnd: "nodeDragEnd", portPointerDown: "portPointerDown", linkDragStart: "linkDragStart", linkDragMove: "linkDragMove", linkDragEnd: "linkDragEnd", connectorClick: "connectorClick", connectorDoubleClick: "connectorDoubleClick", connectionCreated: "connectionCreated", connectionRejected: "connectionRejected", activationChange: "activationChange" }, host: { listeners: { "window:keydown": "onWindowKeydown($event)" }, classAttribute: "axp-workflow-designer-host" }, viewQueries: [{ propertyName: "surfaceRef", first: true, predicate: ["surface"], descendants: true, isSignal: true }, { propertyName: "panViewRef", first: true, predicate: AXPanViewDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"axp-workflow-designer\" [ngStyle]=\"gridStyle()\">\n <div\n #surface\n class=\"axp-workflow-designer__surface\"\n axPanView\n [(panX)]=\"panX\"\n [(panY)]=\"panY\"\n [(zoom)]=\"panZoomLevel\"\n [maxZoom]=\"10000\"\n [freeMode]=\"true\"\n [fitContent]=\"true\"\n wrapperClasses=\"h\"\n [ngStyle]=\"surfaceStyle()\"\n (pointerdown)=\"onSurfacePointerDown($event)\"\n (click)=\"onSurfaceClick($event)\"\n (dblclick)=\"onSurfaceDoubleClick($event)\"\n (dragover)=\"onCanvasDragOver($event)\"\n (drop)=\"onCanvasDrop($event)\"\n >\n <svg\n class=\"axp-workflow-designer__svg\"\n width=\"100%\"\n height=\"100%\"\n preserveAspectRatio=\"xMinYMin meet\"\n >\n <defs>\n <marker\n [attr.id]=\"svgMarkerId\"\n markerWidth=\"6\"\n markerHeight=\"6\"\n refX=\"3.9\"\n refY=\"3\"\n orient=\"auto\"\n >\n <path\n d=\"M0,0 L4,3 L0,6 Q1.5,3 0,0 Z\"\n class=\"axp-workflow-designer__arrow-head\"\n ></path>\n </marker>\n </defs>\n @for (c of model().connectors; track c.id) {\n <path\n class=\"axp-workflow-designer__edge-hit\"\n [attr.d]=\"connectorPathD(c)\"\n fill=\"none\"\n stroke=\"transparent\"\n stroke-width=\"16\"\n pointer-events=\"stroke\"\n (click)=\"onConnectorClick(c, $event)\"\n (dblclick)=\"onConnectorDoubleClick(c, $event)\"\n />\n <path\n [class]=\"connectorEdgeClasses(c)\"\n [attr.d]=\"connectorPathD(c)\"\n fill=\"none\"\n [attr.marker-end]=\"'url(#' + svgMarkerId + ')'\"\n />\n }\n @if (linkDrag()) {\n <path\n class=\"axp-workflow-designer__edge-preview\"\n [attr.d]=\"previewPath()\"\n fill=\"none\"\n />\n }\n </svg>\n\n @for (c of model().connectors; track c.id) {\n @if (isConnectorActive(c.id) && !isConnectorReadonly(c)) {\n <div\n class=\"axp-workflow-designer__connector-actions\"\n [style.left.px]=\"connectorMidpoint(c).x - 16\"\n [style.top.px]=\"connectorMidpoint(c).y - 16\"\n >\n <ax-button\n look=\"blank\"\n class=\"ax-sm axp-workflow-designer__icon-btn\"\n (onClick)=\"removeConnector(c)\"\n >\n <ax-icon class=\"fa-solid fa-minus\"></ax-icon>\n </ax-button>\n </div>\n }\n }\n\n @for (node of model().nodes; track node.id) {\n <div\n class=\"axp-workflow-designer__node\"\n [class.axp-workflow-designer__node--active]=\"isNodeActive(node.id)\"\n [class.axp-workflow-designer__node--highlighted]=\"\n isNodeHighlighted(node.id)\n \"\n [style.left.px]=\"nodeSurfaceLeft(node)\"\n [style.top.px]=\"nodeSurfaceTop(node)\"\n [style.width.px]=\"node.size.width\"\n [style.height.px]=\"node.size.height\"\n (pointerdown)=\"onNodePointerDown(node, $event)\"\n (click)=\"onNodeClick(node, $event)\"\n (dblclick)=\"onNodeDoubleClick(node, $event)\"\n (contextmenu)=\"onNodeContextMenu(node, $event)\"\n >\n <div [class]=\"nodeShapeClasses(node)\">\n <div\n class=\"axp-workflow-designer__node-body\"\n (pointerdown)=\"onNodeBodyPointerDown(node, $event)\"\n >\n @if (nodeBodyTemplate(); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"templateContext(node)\"\n />\n } @else {\n <div class=\"axp-workflow-designer__node-default\">\n @if (node.icon) {\n <ax-icon\n class=\"axp-workflow-designer__node-default-icon\"\n [class]=\"node.icon\"\n ></ax-icon>\n }\n <span class=\"axp-workflow-designer__node-default-title\">{{\n node.title\n }}</span>\n </div>\n }\n </div>\n </div>\n\n <!--->\n <!-- ----- Optional inbound / outbound port markers ----- -->\n @if (showPorts()) {\n @for (port of node.inboundPorts; track port.id) {\n <div\n class=\"axp-workflow-designer__port-cluster\"\n [class.axp-workflow-designer__port-cluster--side-top]=\"\n port.side === 'top'\n \"\n [class.axp-workflow-designer__port-cluster--side-right]=\"\n port.side === 'right'\n \"\n [class.axp-workflow-designer__port-cluster--side-bottom]=\"\n port.side === 'bottom'\n \"\n [class.axp-workflow-designer__port-cluster--side-left]=\"\n port.side === 'left'\n \"\n [ngStyle]=\"portClusterStyle(node, port)\"\n >\n <button\n type=\"button\"\n class=\"axp-workflow-designer__port axp-workflow-designer__port--inbound\"\n [class.axp-workflow-designer__port--active]=\"\n isPortActive(node.id, port.id)\n \"\n [class.axp-workflow-designer__port--link-hover]=\"\n isPortLinkHoverTarget(node.id, port.id)\n \"\n [class.axp-workflow-designer__port--disabled]=\"port.disabled\"\n [disabled]=\"isNodeReadonly(node) || port.disabled === true\"\n (pointerdown)=\"onPortPointerDown(node, port, $event)\"\n ></button>\n </div>\n }\n @for (port of node.outboundPorts; track port.id) {\n <div\n class=\"axp-workflow-designer__port-cluster\"\n [class.axp-workflow-designer__port-cluster--side-top]=\"\n port.side === 'top'\n \"\n [class.axp-workflow-designer__port-cluster--side-right]=\"\n port.side === 'right'\n \"\n [class.axp-workflow-designer__port-cluster--side-bottom]=\"\n port.side === 'bottom'\n \"\n [class.axp-workflow-designer__port-cluster--side-left]=\"\n port.side === 'left'\n \"\n [ngStyle]=\"portClusterStyle(node, port)\"\n >\n <button\n type=\"button\"\n class=\"axp-workflow-designer__port axp-workflow-designer__port--outbound\"\n [class.axp-workflow-designer__port--active]=\"\n isPortActive(node.id, port.id)\n \"\n [class.axp-workflow-designer__port--disabled]=\"port.disabled\"\n [disabled]=\"isNodeReadonly(node) || port.disabled === true\"\n (pointerdown)=\"onPortPointerDown(node, port, $event)\"\n ></button>\n </div>\n }\n }\n\n @if (isNodeActive(node.id) && !isNodeReadonly(node)) {\n <span\n class=\"axp-workflow-designer__resize axp-workflow-designer__resize--nw\"\n (pointerdown)=\"onResizePointerDown(node, 'nw', $event)\"\n ></span>\n <span\n class=\"axp-workflow-designer__resize axp-workflow-designer__resize--ne\"\n (pointerdown)=\"onResizePointerDown(node, 'ne', $event)\"\n ></span>\n <span\n class=\"axp-workflow-designer__resize axp-workflow-designer__resize--sw\"\n (pointerdown)=\"onResizePointerDown(node, 'sw', $event)\"\n ></span>\n <span\n class=\"axp-workflow-designer__resize axp-workflow-designer__resize--se\"\n (pointerdown)=\"onResizePointerDown(node, 'se', $event)\"\n ></span>\n }\n </div>\n }\n\n <svg\n class=\"axp-workflow-designer__svg axp-workflow-designer__svg--labels\"\n width=\"100%\"\n height=\"100%\"\n preserveAspectRatio=\"xMinYMin meet\"\n >\n @if (showPortLabels()) {\n @for (node of model().nodes; track node.id) {\n @for (port of node.inboundPorts; track port.id) {\n <!--->\n <!-- ----- Cardinality / port name on the inbound side ----- -->\n @if (portLabelText(port)) {\n <text\n class=\"axp-workflow-designer__port-label-svg\"\n [attr.x]=\"portLabelX(node, port)\"\n [attr.y]=\"portLabelY(node, port)\"\n [attr.text-anchor]=\"portLabelAnchor(port)\"\n >\n {{ portLabelText(port) }}\n </text>\n }\n }\n @for (port of node.outboundPorts; track port.id) {\n <!--->\n <!-- ----- Cardinality / port name on the outbound side ----- -->\n @if (portLabelText(port)) {\n <text\n class=\"axp-workflow-designer__port-label-svg\"\n [attr.x]=\"portLabelX(node, port)\"\n [attr.y]=\"portLabelY(node, port)\"\n [attr.text-anchor]=\"portLabelAnchor(port)\"\n >\n {{ portLabelText(port) }}\n </text>\n }\n }\n }\n }\n @if (showConnectorLabels()) {\n @for (c of model().connectors; track c.id) {\n <!--->\n <!-- ----- Skip connectors without a label ----- -->\n @if (connectorLabelText(c); as text) {\n <!--->\n <!-- ----- Relation name beside the longest connector segment ----- -->\n @if (connectorLabelPoint(c); as point) {\n <text\n class=\"axp-workflow-designer__edge-label-svg\"\n [attr.x]=\"point.x\"\n [attr.y]=\"point.y\"\n text-anchor=\"middle\"\n >\n {{ text }}\n </text>\n }\n }\n }\n }\n </svg>\n </div>\n</div>\n", styles: ["@layer properties;.axp-workflow-designer-host{box-sizing:border-box;display:block;height:100%;width:100%;min-height:360px;user-select:none;-webkit-user-select:none}.axp-workflow-designer{display:flex;height:100%;width:100%;min-height:inherit}.axp-workflow-designer .axp-workflow-designer__surface{position:relative;min-height:100%;min-width:100%;flex:auto;overflow:auto;border-radius:10px;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__surface::ng-deep .pan-view__wrapper{height:100%;width:100%}.axp-workflow-designer .axp-workflow-designer__svg{pointer-events:none;position:absolute;inset:0;height:100%;width:100%;z-index:1}.axp-workflow-designer .axp-workflow-designer__svg--labels{z-index:4}.axp-workflow-designer .axp-workflow-designer__edge-hit{pointer-events:stroke;cursor:pointer}.axp-workflow-designer .axp-workflow-designer__edge{pointer-events:none;stroke:rgb(var(--ax-sys-color-neutral-500));stroke-width:2;transition:stroke .12s ease}.axp-workflow-designer .axp-workflow-designer__edge.primary-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-primary-500))}.axp-workflow-designer .axp-workflow-designer__edge.secondary-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-secondary-500))}.axp-workflow-designer .axp-workflow-designer__edge.success-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-success-500))}.axp-workflow-designer .axp-workflow-designer__edge.warning-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-warning-500))}.axp-workflow-designer .axp-workflow-designer__edge.danger-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-danger-500))}.axp-workflow-designer .axp-workflow-designer__edge--active{stroke:rgb(var(--ax-sys-color-primary-500));stroke-dasharray:2}.axp-workflow-designer .axp-workflow-designer__edge-preview{pointer-events:none;stroke:rgb(var(--ax-sys-color-primary-400));stroke-width:2;stroke-dasharray:6 4}.axp-workflow-designer .axp-workflow-designer__port-label-svg,.axp-workflow-designer .axp-workflow-designer__edge-label-svg{fill:rgb(var(--ax-sys-color-on-surface));font-size:10px;font-weight:600;dominant-baseline:middle;pointer-events:none;paint-order:stroke;stroke:rgb(var(--ax-sys-color-surface));stroke-width:4px;stroke-linejoin:round}.axp-workflow-designer .axp-workflow-designer__arrow-head{fill:rgb(var(--ax-sys-color-neutral-500))}.axp-workflow-designer .axp-workflow-designer__connector-actions{position:absolute;display:flex;align-items:center;justify-content:center;z-index:4}.axp-workflow-designer .axp-workflow-designer__icon-btn{border-radius:999px;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__node{position:absolute;box-sizing:border-box;z-index:2;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__node.axp-workflow-designer__node--active .axp-workflow-designer__node-shape{border:2px dotted rgb(var(--ax-sys-color-primary-500))}.axp-workflow-designer .axp-workflow-designer__node.axp-workflow-designer__node--highlighted .axp-workflow-designer__node-shape{border:2px solid rgb(var(--ax-sys-color-primary-500));box-shadow:0 0 0 3px rgb(var(--ax-sys-color-primary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape{position:absolute;inset:0;box-sizing:border-box;overflow:visible;background:rgb(var(--ax-sys-color-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-primary-surface{background:rgb(var(--ax-sys-color-primary-surface));color:rgb(var(--ax-sys-color-on-primary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-secondary-surface{background:rgb(var(--ax-sys-color-secondary-surface));color:rgb(var(--ax-sys-color-on-secondary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-success-surface{background:rgb(var(--ax-sys-color-success-surface));color:rgb(var(--ax-sys-color-on-success-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-warning-surface{background:rgb(var(--ax-sys-color-warning-surface));color:rgb(var(--ax-sys-color-on-warning-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-danger-surface{background:rgb(var(--ax-sys-color-danger-surface));color:rgb(var(--ax-sys-color-on-danger-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-primary-border{border:2px solid rgb(var(--ax-sys-color-border-primary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-secondary-border{border:2px solid rgb(var(--ax-sys-color-border-secondary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-success-border{border:2px solid rgb(var(--ax-sys-color-border-success-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-warning-border{border:2px solid rgb(var(--ax-sys-color-border-warning-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-danger-border{border:2px solid rgb(var(--ax-sys-color-border-danger-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape--rectangle{border-radius:4px}.axp-workflow-designer .axp-workflow-designer__node-shape--rounded-rectangle{border-radius:14px}.axp-workflow-designer .axp-workflow-designer__node-shape--circle,.axp-workflow-designer .axp-workflow-designer__node-shape--ellipse{border-radius:50%}.axp-workflow-designer .axp-workflow-designer__node-shape--diamond{border-radius:0;clip-path:polygon(50% 0%,100% 50%,50% 100%,0% 50%)}.axp-workflow-designer .axp-workflow-designer__node-body{position:absolute;inset:0;display:flex;cursor:grab;align-items:center;justify-content:center;padding:8px 12px;touch-action:none;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__node-default{display:flex;min-width:0px;align-items:center;gap:8px}.axp-workflow-designer .axp-workflow-designer__node-default-icon{flex-shrink:0}.axp-workflow-designer .axp-workflow-designer__node-default-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-workflow-designer .axp-workflow-designer__port-cluster{pointer-events:none;position:absolute;overflow:visible;width:0;height:0;transform:translate(-50%,-50%);z-index:3}.axp-workflow-designer .axp-workflow-designer__port{position:absolute;flex-shrink:0;cursor:crosshair;border-radius:calc(infinity * 1px);left:50%;top:50%;transform:translate(-50%,-50%);width:14px;height:14px;padding:0;border:1px solid rgb(var(--ax-sys-color-surface));touch-action:none;pointer-events:auto;transition:transform .12s ease}.axp-workflow-designer .axp-workflow-designer__port:disabled{opacity:.45;cursor:not-allowed}.axp-workflow-designer .axp-workflow-designer__port--inbound{background:rgb(var(--ax-sys-color-success-500))}.axp-workflow-designer .axp-workflow-designer__port--outbound{background:rgb(var(--ax-sys-color-primary-500))}.axp-workflow-designer .axp-workflow-designer__port--active{box-shadow:0 0 0 3px #3b82f659}.axp-workflow-designer .axp-workflow-designer__port--link-hover{border:1px solid rgb(var(--ax-sys-color-primary-500));transform:translate(-50%,-50%) scale(1.12)}.axp-workflow-designer .axp-workflow-designer__port--disabled{opacity:.45;cursor:not-allowed}.axp-workflow-designer .axp-workflow-designer__resize{position:absolute;border-radius:calc(infinity * 1px);width:7px;height:7px;background:rgb(var(--ax-sys-color-primary-500));border:1px solid rgb(var(--ax-sys-color-surface));z-index:4;touch-action:none;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__resize--nw{left:-6px;top:-6px;cursor:nwse-resize}.axp-workflow-designer .axp-workflow-designer__resize--ne{right:-6px;top:-6px;cursor:nesw-resize}.axp-workflow-designer .axp-workflow-designer__resize--sw{left:-6px;bottom:-6px;cursor:nesw-resize}.axp-workflow-designer .axp-workflow-designer__resize--se{right:-6px;bottom:-6px;cursor:nwse-resize}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "directive", type: AXPanViewDirective, selector: "[axPanView]", inputs: ["zoomStep", "minZoom", "maxZoom", "freeMode", "fitContent", "disablePan", "disableZoom", "wrapperClasses", "panX", "panY", "zoom"], outputs: ["panXChange", "panYChange", "zoomChange", "positionChange"], exportAs: ["axPanView"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
4688
5052
|
}
|
|
4689
5053
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWorkflowDesignerComponent, decorators: [{
|
|
4690
5054
|
type: Component,
|
|
4691
5055
|
args: [{ selector: 'axp-workflow-designer', imports: [CommonModule, AXDecoratorModule, AXButtonModule, AXPanViewDirective], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
4692
5056
|
class: 'axp-workflow-designer-host',
|
|
4693
5057
|
'(window:keydown)': 'onWindowKeydown($event)',
|
|
4694
|
-
}, template: "<div class=\"axp-workflow-designer\" [ngStyle]=\"gridStyle()\">\n <div\n #surface\n class=\"axp-workflow-designer__surface\"\n axPanView\n [(panX)]=\"panX\"\n [(panY)]=\"panY\"\n [(zoom)]=\"panZoomLevel\"\n [maxZoom]=\"10000\"\n [freeMode]=\"true\"\n [fitContent]=\"true\"\n wrapperClasses=\"h\"\n [ngStyle]=\"surfaceStyle()\"\n (pointerdown)=\"onSurfacePointerDown($event)\"\n (click)=\"onSurfaceClick($event)\"\n (dblclick)=\"onSurfaceDoubleClick($event)\"\n (dragover)=\"onCanvasDragOver($event)\"\n (drop)=\"onCanvasDrop($event)\"\n >\n <svg\n class=\"axp-workflow-designer__svg\"\n width=\"100%\"\n height=\"100%\"\n preserveAspectRatio=\"xMinYMin meet\"\n >\n <defs>\n <marker\n [attr.id]=\"svgMarkerId\"\n markerWidth=\"6\"\n markerHeight=\"6\"\n refX=\"3.9\"\n refY=\"3\"\n orient=\"auto\"\n >\n <path\n d=\"M0,0 L4,3 L0,6 Q1.5,3 0,0 Z\"\n class=\"axp-workflow-designer__arrow-head\"\n ></path>\n </marker>\n </defs>\n @for (c of model().connectors; track c.id) {\n <path\n class=\"axp-workflow-designer__edge-hit\"\n [attr.d]=\"connectorPathD(c)\"\n fill=\"none\"\n stroke=\"transparent\"\n stroke-width=\"16\"\n pointer-events=\"stroke\"\n (click)=\"onConnectorClick(c, $event)\"\n (dblclick)=\"onConnectorDoubleClick(c, $event)\"\n />\n <path\n [class]=\"connectorEdgeClasses(c)\"\n [attr.d]=\"connectorPathD(c)\"\n fill=\"none\"\n [attr.marker-end]=\"'url(#' + svgMarkerId + ')'\"\n />\n }\n @if (linkDrag()) {\n <path\n class=\"axp-workflow-designer__edge-preview\"\n [attr.d]=\"previewPath()\"\n fill=\"none\"\n />\n }\n @if (showPortLabels()) {\n @for (node of model().nodes; track node.id) {\n @for (port of node.inboundPorts; track port.id) {\n @if (portLabelText(port)) {\n <text\n class=\"axp-workflow-designer__port-label-svg\"\n [attr.x]=\"portLabelX(node, port)\"\n [attr.y]=\"portLabelY(node, port)\"\n [attr.text-anchor]=\"portLabelAnchor(node, port)\"\n >\n {{ portLabelText(port) }}\n </text>\n }\n }\n @for (port of node.outboundPorts; track port.id) {\n @if (portLabelText(port)) {\n <text\n class=\"axp-workflow-designer__port-label-svg\"\n [attr.x]=\"portLabelX(node, port)\"\n [attr.y]=\"portLabelY(node, port)\"\n [attr.text-anchor]=\"portLabelAnchor(node, port)\"\n >\n {{ portLabelText(port) }}\n </text>\n }\n }\n }\n }\n </svg>\n\n @for (c of model().connectors; track c.id) {\n @if (isConnectorActive(c.id) && !isConnectorReadonly(c)) {\n <div\n class=\"axp-workflow-designer__connector-actions\"\n [style.left.px]=\"connectorMidpoint(c).x - 16\"\n [style.top.px]=\"connectorMidpoint(c).y - 16\"\n >\n <ax-button\n look=\"blank\"\n class=\"ax-sm axp-workflow-designer__icon-btn\"\n (onClick)=\"removeConnector(c)\"\n >\n <ax-icon class=\"fa-solid fa-minus\"></ax-icon>\n </ax-button>\n </div>\n }\n }\n\n @for (node of model().nodes; track node.id) {\n <div\n class=\"axp-workflow-designer__node\"\n [class.axp-workflow-designer__node--active]=\"isNodeActive(node.id)\"\n [class.axp-workflow-designer__node--highlighted]=\"\n isNodeHighlighted(node.id)\n \"\n [style.left.px]=\"nodeSurfaceLeft(node)\"\n [style.top.px]=\"nodeSurfaceTop(node)\"\n [style.width.px]=\"node.size.width\"\n [style.height.px]=\"node.size.height\"\n (pointerdown)=\"onNodePointerDown(node, $event)\"\n (click)=\"onNodeClick(node, $event)\"\n (dblclick)=\"onNodeDoubleClick(node, $event)\"\n (contextmenu)=\"onNodeContextMenu(node, $event)\"\n >\n <div [class]=\"nodeShapeClasses(node)\">\n <div\n class=\"axp-workflow-designer__node-body\"\n (pointerdown)=\"onNodeBodyPointerDown(node, $event)\"\n >\n @if (nodeBodyTemplate(); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"templateContext(node)\"\n />\n } @else {\n <div class=\"axp-workflow-designer__node-default\">\n @if (node.icon) {\n <ax-icon\n class=\"axp-workflow-designer__node-default-icon\"\n [class]=\"node.icon\"\n ></ax-icon>\n }\n <span class=\"axp-workflow-designer__node-default-title\">{{\n node.title\n }}</span>\n </div>\n }\n </div>\n </div>\n\n @for (port of node.inboundPorts; track port.id) {\n <div\n class=\"axp-workflow-designer__port-cluster\"\n [class.axp-workflow-designer__port-cluster--side-top]=\"\n port.side === 'top'\n \"\n [class.axp-workflow-designer__port-cluster--side-right]=\"\n port.side === 'right'\n \"\n [class.axp-workflow-designer__port-cluster--side-bottom]=\"\n port.side === 'bottom'\n \"\n [class.axp-workflow-designer__port-cluster--side-left]=\"\n port.side === 'left'\n \"\n [ngStyle]=\"portClusterStyle(node, port)\"\n >\n <button\n type=\"button\"\n class=\"axp-workflow-designer__port axp-workflow-designer__port--inbound\"\n [class.axp-workflow-designer__port--active]=\"\n isPortActive(node.id, port.id)\n \"\n [class.axp-workflow-designer__port--link-hover]=\"\n isPortLinkHoverTarget(node.id, port.id)\n \"\n [class.axp-workflow-designer__port--disabled]=\"port.disabled\"\n [disabled]=\"isNodeReadonly(node) || port.disabled === true\"\n (pointerdown)=\"onPortPointerDown(node, port, $event)\"\n ></button>\n </div>\n }\n @for (port of node.outboundPorts; track port.id) {\n <div\n class=\"axp-workflow-designer__port-cluster\"\n [class.axp-workflow-designer__port-cluster--side-top]=\"\n port.side === 'top'\n \"\n [class.axp-workflow-designer__port-cluster--side-right]=\"\n port.side === 'right'\n \"\n [class.axp-workflow-designer__port-cluster--side-bottom]=\"\n port.side === 'bottom'\n \"\n [class.axp-workflow-designer__port-cluster--side-left]=\"\n port.side === 'left'\n \"\n [ngStyle]=\"portClusterStyle(node, port)\"\n >\n <button\n type=\"button\"\n class=\"axp-workflow-designer__port axp-workflow-designer__port--outbound\"\n [class.axp-workflow-designer__port--active]=\"\n isPortActive(node.id, port.id)\n \"\n [class.axp-workflow-designer__port--disabled]=\"port.disabled\"\n [disabled]=\"isNodeReadonly(node) || port.disabled === true\"\n (pointerdown)=\"onPortPointerDown(node, port, $event)\"\n ></button>\n </div>\n }\n\n @if (isNodeActive(node.id) && !isNodeReadonly(node)) {\n <span\n class=\"axp-workflow-designer__resize axp-workflow-designer__resize--nw\"\n (pointerdown)=\"onResizePointerDown(node, 'nw', $event)\"\n ></span>\n <span\n class=\"axp-workflow-designer__resize axp-workflow-designer__resize--ne\"\n (pointerdown)=\"onResizePointerDown(node, 'ne', $event)\"\n ></span>\n <span\n class=\"axp-workflow-designer__resize axp-workflow-designer__resize--sw\"\n (pointerdown)=\"onResizePointerDown(node, 'sw', $event)\"\n ></span>\n <span\n class=\"axp-workflow-designer__resize axp-workflow-designer__resize--se\"\n (pointerdown)=\"onResizePointerDown(node, 'se', $event)\"\n ></span>\n }\n </div>\n }\n </div>\n</div>\n", styles: ["@layer properties;.axp-workflow-designer-host{box-sizing:border-box;display:block;height:100%;width:100%;min-height:360px;user-select:none;-webkit-user-select:none}.axp-workflow-designer{display:flex;height:100%;width:100%;min-height:inherit}.axp-workflow-designer .axp-workflow-designer__surface{position:relative;min-height:100%;min-width:100%;flex:auto;overflow:auto;border-radius:10px;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__surface::ng-deep .pan-view__wrapper{height:100%;width:100%}.axp-workflow-designer .axp-workflow-designer__svg{pointer-events:none;position:absolute;inset:0;height:100%;width:100%;z-index:1}.axp-workflow-designer .axp-workflow-designer__edge-hit{pointer-events:stroke;cursor:pointer}.axp-workflow-designer .axp-workflow-designer__edge{pointer-events:none;stroke:rgb(var(--ax-sys-color-neutral-500));stroke-width:2;transition:stroke .12s ease}.axp-workflow-designer .axp-workflow-designer__edge.primary-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-primary-500))}.axp-workflow-designer .axp-workflow-designer__edge.secondary-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-secondary-500))}.axp-workflow-designer .axp-workflow-designer__edge.success-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-success-500))}.axp-workflow-designer .axp-workflow-designer__edge.warning-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-warning-500))}.axp-workflow-designer .axp-workflow-designer__edge.danger-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-danger-500))}.axp-workflow-designer .axp-workflow-designer__edge--active{stroke:rgb(var(--ax-sys-color-primary-500));stroke-dasharray:2}.axp-workflow-designer .axp-workflow-designer__edge-preview{pointer-events:none;stroke:rgb(var(--ax-sys-color-primary-400));stroke-width:2;stroke-dasharray:6 4}.axp-workflow-designer .axp-workflow-designer__port-label-svg{fill:rgb(var(--ax-sys-color-on-surface));font-size:10px;font-weight:600;dominant-baseline:middle;pointer-events:none;paint-order:stroke;stroke:rgb(var(--ax-sys-color-surface));stroke-width:4px;stroke-linejoin:round}.axp-workflow-designer .axp-workflow-designer__arrow-head{fill:rgb(var(--ax-sys-color-neutral-500))}.axp-workflow-designer .axp-workflow-designer__connector-actions{position:absolute;display:flex;align-items:center;justify-content:center;z-index:4}.axp-workflow-designer .axp-workflow-designer__icon-btn{border-radius:999px;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__node{position:absolute;box-sizing:border-box;z-index:2;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__node.axp-workflow-designer__node--active .axp-workflow-designer__node-shape{border:2px dotted rgb(var(--ax-sys-color-primary-500))}.axp-workflow-designer .axp-workflow-designer__node.axp-workflow-designer__node--highlighted .axp-workflow-designer__node-shape{border:2px solid rgb(var(--ax-sys-color-primary-500));box-shadow:0 0 0 3px rgb(var(--ax-sys-color-primary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape{position:absolute;inset:0;box-sizing:border-box;overflow:visible;background:rgb(var(--ax-sys-color-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-primary-surface{background:rgb(var(--ax-sys-color-primary-surface));color:rgb(var(--ax-sys-color-on-primary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-secondary-surface{background:rgb(var(--ax-sys-color-secondary-surface));color:rgb(var(--ax-sys-color-on-secondary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-success-surface{background:rgb(var(--ax-sys-color-success-surface));color:rgb(var(--ax-sys-color-on-success-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-warning-surface{background:rgb(var(--ax-sys-color-warning-surface));color:rgb(var(--ax-sys-color-on-warning-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-danger-surface{background:rgb(var(--ax-sys-color-danger-surface));color:rgb(var(--ax-sys-color-on-danger-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-primary-border{border:2px solid rgb(var(--ax-sys-color-border-primary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-secondary-border{border:2px solid rgb(var(--ax-sys-color-border-secondary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-success-border{border:2px solid rgb(var(--ax-sys-color-border-success-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-warning-border{border:2px solid rgb(var(--ax-sys-color-border-warning-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-danger-border{border:2px solid rgb(var(--ax-sys-color-border-danger-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape--rectangle{border-radius:4px}.axp-workflow-designer .axp-workflow-designer__node-shape--rounded-rectangle{border-radius:14px}.axp-workflow-designer .axp-workflow-designer__node-shape--circle,.axp-workflow-designer .axp-workflow-designer__node-shape--ellipse{border-radius:50%}.axp-workflow-designer .axp-workflow-designer__node-shape--diamond{border-radius:0;clip-path:polygon(50% 0%,100% 50%,50% 100%,0% 50%)}.axp-workflow-designer .axp-workflow-designer__node-body{position:absolute;inset:0;display:flex;cursor:grab;align-items:center;justify-content:center;padding:8px 12px;touch-action:none;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__node-default{display:flex;min-width:0px;align-items:center;gap:8px}.axp-workflow-designer .axp-workflow-designer__node-default-icon{flex-shrink:0}.axp-workflow-designer .axp-workflow-designer__node-default-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-workflow-designer .axp-workflow-designer__port-cluster{pointer-events:none;position:absolute;overflow:visible;width:0;height:0;transform:translate(-50%,-50%);z-index:3}.axp-workflow-designer .axp-workflow-designer__port{position:absolute;flex-shrink:0;cursor:crosshair;border-radius:calc(infinity * 1px);left:50%;top:50%;transform:translate(-50%,-50%);width:14px;height:14px;padding:0;border:1px solid rgb(var(--ax-sys-color-surface));touch-action:none;pointer-events:auto;transition:transform .12s ease}.axp-workflow-designer .axp-workflow-designer__port:disabled{opacity:.45;cursor:not-allowed}.axp-workflow-designer .axp-workflow-designer__port--inbound{background:rgb(var(--ax-sys-color-success-500))}.axp-workflow-designer .axp-workflow-designer__port--outbound{background:rgb(var(--ax-sys-color-primary-500))}.axp-workflow-designer .axp-workflow-designer__port--active{box-shadow:0 0 0 3px #3b82f659}.axp-workflow-designer .axp-workflow-designer__port--link-hover{border:1px solid rgb(var(--ax-sys-color-primary-500));transform:translate(-50%,-50%) scale(1.12)}.axp-workflow-designer .axp-workflow-designer__port--disabled{opacity:.45;cursor:not-allowed}.axp-workflow-designer .axp-workflow-designer__resize{position:absolute;border-radius:calc(infinity * 1px);width:7px;height:7px;background:rgb(var(--ax-sys-color-primary-500));border:1px solid rgb(var(--ax-sys-color-surface));z-index:4;touch-action:none;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__resize--nw{left:-6px;top:-6px;cursor:nwse-resize}.axp-workflow-designer .axp-workflow-designer__resize--ne{right:-6px;top:-6px;cursor:nesw-resize}.axp-workflow-designer .axp-workflow-designer__resize--sw{left:-6px;bottom:-6px;cursor:nesw-resize}.axp-workflow-designer .axp-workflow-designer__resize--se{right:-6px;bottom:-6px;cursor:nwse-resize}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
4695
|
-
}], ctorParameters: () => [], propDecorators: { model: [{ type: i0.Input, args: [{ isSignal: true, alias: "model", required: true }] }], modelChange: [{ type: i0.Output, args: ["modelChange"] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], highlightedNodeIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightedNodeIds", required: false }] }], gridSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "gridSize", required: false }] }], snapToGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapToGrid", required: false }] }], connectionPreviewStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "connectionPreviewStyle", required: false }] }], backgroundPattern: [{ type: i0.Input, args: [{ isSignal: true, alias: "backgroundPattern", required: false }] }], zoomChange: [{ type: i0.Output, args: ["zoomChange"] }], canConnect: [{ type: i0.Input, args: [{ isSignal: true, alias: "canConnect", required: false }] }], paletteItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "paletteItems", required: false }] }], showPortLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPortLabels", required: false }] }], nodeBodyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodeBodyTemplate", required: false }] }], designerPointerDown: [{ type: i0.Output, args: ["designerPointerDown"] }], designerClick: [{ type: i0.Output, args: ["designerClick"] }], designerDoubleClick: [{ type: i0.Output, args: ["designerDoubleClick"] }], nodePointerDown: [{ type: i0.Output, args: ["nodePointerDown"] }], nodeClick: [{ type: i0.Output, args: ["nodeClick"] }], nodeDoubleClick: [{ type: i0.Output, args: ["nodeDoubleClick"] }], nodeContextMenu: [{ type: i0.Output, args: ["nodeContextMenu"] }], nodeDragStart: [{ type: i0.Output, args: ["nodeDragStart"] }], nodeDragEnd: [{ type: i0.Output, args: ["nodeDragEnd"] }], portPointerDown: [{ type: i0.Output, args: ["portPointerDown"] }], linkDragStart: [{ type: i0.Output, args: ["linkDragStart"] }], linkDragMove: [{ type: i0.Output, args: ["linkDragMove"] }], linkDragEnd: [{ type: i0.Output, args: ["linkDragEnd"] }], connectorClick: [{ type: i0.Output, args: ["connectorClick"] }], connectorDoubleClick: [{ type: i0.Output, args: ["connectorDoubleClick"] }], connectionCreated: [{ type: i0.Output, args: ["connectionCreated"] }], connectionRejected: [{ type: i0.Output, args: ["connectionRejected"] }], activationChange: [{ type: i0.Output, args: ["activationChange"] }], surfaceRef: [{ type: i0.ViewChild, args: ['surface', { isSignal: true }] }], panViewRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPanViewDirective), { isSignal: true }] }] } });
|
|
5058
|
+
}, template: "<div class=\"axp-workflow-designer\" [ngStyle]=\"gridStyle()\">\n <div\n #surface\n class=\"axp-workflow-designer__surface\"\n axPanView\n [(panX)]=\"panX\"\n [(panY)]=\"panY\"\n [(zoom)]=\"panZoomLevel\"\n [maxZoom]=\"10000\"\n [freeMode]=\"true\"\n [fitContent]=\"true\"\n wrapperClasses=\"h\"\n [ngStyle]=\"surfaceStyle()\"\n (pointerdown)=\"onSurfacePointerDown($event)\"\n (click)=\"onSurfaceClick($event)\"\n (dblclick)=\"onSurfaceDoubleClick($event)\"\n (dragover)=\"onCanvasDragOver($event)\"\n (drop)=\"onCanvasDrop($event)\"\n >\n <svg\n class=\"axp-workflow-designer__svg\"\n width=\"100%\"\n height=\"100%\"\n preserveAspectRatio=\"xMinYMin meet\"\n >\n <defs>\n <marker\n [attr.id]=\"svgMarkerId\"\n markerWidth=\"6\"\n markerHeight=\"6\"\n refX=\"3.9\"\n refY=\"3\"\n orient=\"auto\"\n >\n <path\n d=\"M0,0 L4,3 L0,6 Q1.5,3 0,0 Z\"\n class=\"axp-workflow-designer__arrow-head\"\n ></path>\n </marker>\n </defs>\n @for (c of model().connectors; track c.id) {\n <path\n class=\"axp-workflow-designer__edge-hit\"\n [attr.d]=\"connectorPathD(c)\"\n fill=\"none\"\n stroke=\"transparent\"\n stroke-width=\"16\"\n pointer-events=\"stroke\"\n (click)=\"onConnectorClick(c, $event)\"\n (dblclick)=\"onConnectorDoubleClick(c, $event)\"\n />\n <path\n [class]=\"connectorEdgeClasses(c)\"\n [attr.d]=\"connectorPathD(c)\"\n fill=\"none\"\n [attr.marker-end]=\"'url(#' + svgMarkerId + ')'\"\n />\n }\n @if (linkDrag()) {\n <path\n class=\"axp-workflow-designer__edge-preview\"\n [attr.d]=\"previewPath()\"\n fill=\"none\"\n />\n }\n </svg>\n\n @for (c of model().connectors; track c.id) {\n @if (isConnectorActive(c.id) && !isConnectorReadonly(c)) {\n <div\n class=\"axp-workflow-designer__connector-actions\"\n [style.left.px]=\"connectorMidpoint(c).x - 16\"\n [style.top.px]=\"connectorMidpoint(c).y - 16\"\n >\n <ax-button\n look=\"blank\"\n class=\"ax-sm axp-workflow-designer__icon-btn\"\n (onClick)=\"removeConnector(c)\"\n >\n <ax-icon class=\"fa-solid fa-minus\"></ax-icon>\n </ax-button>\n </div>\n }\n }\n\n @for (node of model().nodes; track node.id) {\n <div\n class=\"axp-workflow-designer__node\"\n [class.axp-workflow-designer__node--active]=\"isNodeActive(node.id)\"\n [class.axp-workflow-designer__node--highlighted]=\"\n isNodeHighlighted(node.id)\n \"\n [style.left.px]=\"nodeSurfaceLeft(node)\"\n [style.top.px]=\"nodeSurfaceTop(node)\"\n [style.width.px]=\"node.size.width\"\n [style.height.px]=\"node.size.height\"\n (pointerdown)=\"onNodePointerDown(node, $event)\"\n (click)=\"onNodeClick(node, $event)\"\n (dblclick)=\"onNodeDoubleClick(node, $event)\"\n (contextmenu)=\"onNodeContextMenu(node, $event)\"\n >\n <div [class]=\"nodeShapeClasses(node)\">\n <div\n class=\"axp-workflow-designer__node-body\"\n (pointerdown)=\"onNodeBodyPointerDown(node, $event)\"\n >\n @if (nodeBodyTemplate(); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"templateContext(node)\"\n />\n } @else {\n <div class=\"axp-workflow-designer__node-default\">\n @if (node.icon) {\n <ax-icon\n class=\"axp-workflow-designer__node-default-icon\"\n [class]=\"node.icon\"\n ></ax-icon>\n }\n <span class=\"axp-workflow-designer__node-default-title\">{{\n node.title\n }}</span>\n </div>\n }\n </div>\n </div>\n\n <!--->\n <!-- ----- Optional inbound / outbound port markers ----- -->\n @if (showPorts()) {\n @for (port of node.inboundPorts; track port.id) {\n <div\n class=\"axp-workflow-designer__port-cluster\"\n [class.axp-workflow-designer__port-cluster--side-top]=\"\n port.side === 'top'\n \"\n [class.axp-workflow-designer__port-cluster--side-right]=\"\n port.side === 'right'\n \"\n [class.axp-workflow-designer__port-cluster--side-bottom]=\"\n port.side === 'bottom'\n \"\n [class.axp-workflow-designer__port-cluster--side-left]=\"\n port.side === 'left'\n \"\n [ngStyle]=\"portClusterStyle(node, port)\"\n >\n <button\n type=\"button\"\n class=\"axp-workflow-designer__port axp-workflow-designer__port--inbound\"\n [class.axp-workflow-designer__port--active]=\"\n isPortActive(node.id, port.id)\n \"\n [class.axp-workflow-designer__port--link-hover]=\"\n isPortLinkHoverTarget(node.id, port.id)\n \"\n [class.axp-workflow-designer__port--disabled]=\"port.disabled\"\n [disabled]=\"isNodeReadonly(node) || port.disabled === true\"\n (pointerdown)=\"onPortPointerDown(node, port, $event)\"\n ></button>\n </div>\n }\n @for (port of node.outboundPorts; track port.id) {\n <div\n class=\"axp-workflow-designer__port-cluster\"\n [class.axp-workflow-designer__port-cluster--side-top]=\"\n port.side === 'top'\n \"\n [class.axp-workflow-designer__port-cluster--side-right]=\"\n port.side === 'right'\n \"\n [class.axp-workflow-designer__port-cluster--side-bottom]=\"\n port.side === 'bottom'\n \"\n [class.axp-workflow-designer__port-cluster--side-left]=\"\n port.side === 'left'\n \"\n [ngStyle]=\"portClusterStyle(node, port)\"\n >\n <button\n type=\"button\"\n class=\"axp-workflow-designer__port axp-workflow-designer__port--outbound\"\n [class.axp-workflow-designer__port--active]=\"\n isPortActive(node.id, port.id)\n \"\n [class.axp-workflow-designer__port--disabled]=\"port.disabled\"\n [disabled]=\"isNodeReadonly(node) || port.disabled === true\"\n (pointerdown)=\"onPortPointerDown(node, port, $event)\"\n ></button>\n </div>\n }\n }\n\n @if (isNodeActive(node.id) && !isNodeReadonly(node)) {\n <span\n class=\"axp-workflow-designer__resize axp-workflow-designer__resize--nw\"\n (pointerdown)=\"onResizePointerDown(node, 'nw', $event)\"\n ></span>\n <span\n class=\"axp-workflow-designer__resize axp-workflow-designer__resize--ne\"\n (pointerdown)=\"onResizePointerDown(node, 'ne', $event)\"\n ></span>\n <span\n class=\"axp-workflow-designer__resize axp-workflow-designer__resize--sw\"\n (pointerdown)=\"onResizePointerDown(node, 'sw', $event)\"\n ></span>\n <span\n class=\"axp-workflow-designer__resize axp-workflow-designer__resize--se\"\n (pointerdown)=\"onResizePointerDown(node, 'se', $event)\"\n ></span>\n }\n </div>\n }\n\n <svg\n class=\"axp-workflow-designer__svg axp-workflow-designer__svg--labels\"\n width=\"100%\"\n height=\"100%\"\n preserveAspectRatio=\"xMinYMin meet\"\n >\n @if (showPortLabels()) {\n @for (node of model().nodes; track node.id) {\n @for (port of node.inboundPorts; track port.id) {\n <!--->\n <!-- ----- Cardinality / port name on the inbound side ----- -->\n @if (portLabelText(port)) {\n <text\n class=\"axp-workflow-designer__port-label-svg\"\n [attr.x]=\"portLabelX(node, port)\"\n [attr.y]=\"portLabelY(node, port)\"\n [attr.text-anchor]=\"portLabelAnchor(port)\"\n >\n {{ portLabelText(port) }}\n </text>\n }\n }\n @for (port of node.outboundPorts; track port.id) {\n <!--->\n <!-- ----- Cardinality / port name on the outbound side ----- -->\n @if (portLabelText(port)) {\n <text\n class=\"axp-workflow-designer__port-label-svg\"\n [attr.x]=\"portLabelX(node, port)\"\n [attr.y]=\"portLabelY(node, port)\"\n [attr.text-anchor]=\"portLabelAnchor(port)\"\n >\n {{ portLabelText(port) }}\n </text>\n }\n }\n }\n }\n @if (showConnectorLabels()) {\n @for (c of model().connectors; track c.id) {\n <!--->\n <!-- ----- Skip connectors without a label ----- -->\n @if (connectorLabelText(c); as text) {\n <!--->\n <!-- ----- Relation name beside the longest connector segment ----- -->\n @if (connectorLabelPoint(c); as point) {\n <text\n class=\"axp-workflow-designer__edge-label-svg\"\n [attr.x]=\"point.x\"\n [attr.y]=\"point.y\"\n text-anchor=\"middle\"\n >\n {{ text }}\n </text>\n }\n }\n }\n }\n </svg>\n </div>\n</div>\n", styles: ["@layer properties;.axp-workflow-designer-host{box-sizing:border-box;display:block;height:100%;width:100%;min-height:360px;user-select:none;-webkit-user-select:none}.axp-workflow-designer{display:flex;height:100%;width:100%;min-height:inherit}.axp-workflow-designer .axp-workflow-designer__surface{position:relative;min-height:100%;min-width:100%;flex:auto;overflow:auto;border-radius:10px;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__surface::ng-deep .pan-view__wrapper{height:100%;width:100%}.axp-workflow-designer .axp-workflow-designer__svg{pointer-events:none;position:absolute;inset:0;height:100%;width:100%;z-index:1}.axp-workflow-designer .axp-workflow-designer__svg--labels{z-index:4}.axp-workflow-designer .axp-workflow-designer__edge-hit{pointer-events:stroke;cursor:pointer}.axp-workflow-designer .axp-workflow-designer__edge{pointer-events:none;stroke:rgb(var(--ax-sys-color-neutral-500));stroke-width:2;transition:stroke .12s ease}.axp-workflow-designer .axp-workflow-designer__edge.primary-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-primary-500))}.axp-workflow-designer .axp-workflow-designer__edge.secondary-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-secondary-500))}.axp-workflow-designer .axp-workflow-designer__edge.success-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-success-500))}.axp-workflow-designer .axp-workflow-designer__edge.warning-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-warning-500))}.axp-workflow-designer .axp-workflow-designer__edge.danger-surface:not(.axp-workflow-designer__edge--active){stroke:rgb(var(--ax-sys-color-danger-500))}.axp-workflow-designer .axp-workflow-designer__edge--active{stroke:rgb(var(--ax-sys-color-primary-500));stroke-dasharray:2}.axp-workflow-designer .axp-workflow-designer__edge-preview{pointer-events:none;stroke:rgb(var(--ax-sys-color-primary-400));stroke-width:2;stroke-dasharray:6 4}.axp-workflow-designer .axp-workflow-designer__port-label-svg,.axp-workflow-designer .axp-workflow-designer__edge-label-svg{fill:rgb(var(--ax-sys-color-on-surface));font-size:10px;font-weight:600;dominant-baseline:middle;pointer-events:none;paint-order:stroke;stroke:rgb(var(--ax-sys-color-surface));stroke-width:4px;stroke-linejoin:round}.axp-workflow-designer .axp-workflow-designer__arrow-head{fill:rgb(var(--ax-sys-color-neutral-500))}.axp-workflow-designer .axp-workflow-designer__connector-actions{position:absolute;display:flex;align-items:center;justify-content:center;z-index:4}.axp-workflow-designer .axp-workflow-designer__icon-btn{border-radius:999px;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__node{position:absolute;box-sizing:border-box;z-index:2;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__node.axp-workflow-designer__node--active .axp-workflow-designer__node-shape{border:2px dotted rgb(var(--ax-sys-color-primary-500))}.axp-workflow-designer .axp-workflow-designer__node.axp-workflow-designer__node--highlighted .axp-workflow-designer__node-shape{border:2px solid rgb(var(--ax-sys-color-primary-500));box-shadow:0 0 0 3px rgb(var(--ax-sys-color-primary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape{position:absolute;inset:0;box-sizing:border-box;overflow:visible;background:rgb(var(--ax-sys-color-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-primary-surface{background:rgb(var(--ax-sys-color-primary-surface));color:rgb(var(--ax-sys-color-on-primary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-secondary-surface{background:rgb(var(--ax-sys-color-secondary-surface));color:rgb(var(--ax-sys-color-on-secondary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-success-surface{background:rgb(var(--ax-sys-color-success-surface));color:rgb(var(--ax-sys-color-on-success-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-warning-surface{background:rgb(var(--ax-sys-color-warning-surface));color:rgb(var(--ax-sys-color-on-warning-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-danger-surface{background:rgb(var(--ax-sys-color-danger-surface));color:rgb(var(--ax-sys-color-on-danger-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-primary-border{border:2px solid rgb(var(--ax-sys-color-border-primary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-secondary-border{border:2px solid rgb(var(--ax-sys-color-border-secondary-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-success-border{border:2px solid rgb(var(--ax-sys-color-border-success-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-warning-border{border:2px solid rgb(var(--ax-sys-color-border-warning-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape.axp-danger-border{border:2px solid rgb(var(--ax-sys-color-border-danger-surface))}.axp-workflow-designer .axp-workflow-designer__node-shape--rectangle{border-radius:4px}.axp-workflow-designer .axp-workflow-designer__node-shape--rounded-rectangle{border-radius:14px}.axp-workflow-designer .axp-workflow-designer__node-shape--circle,.axp-workflow-designer .axp-workflow-designer__node-shape--ellipse{border-radius:50%}.axp-workflow-designer .axp-workflow-designer__node-shape--diamond{border-radius:0;clip-path:polygon(50% 0%,100% 50%,50% 100%,0% 50%)}.axp-workflow-designer .axp-workflow-designer__node-body{position:absolute;inset:0;display:flex;cursor:grab;align-items:center;justify-content:center;padding:8px 12px;touch-action:none;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__node-default{display:flex;min-width:0px;align-items:center;gap:8px}.axp-workflow-designer .axp-workflow-designer__node-default-icon{flex-shrink:0}.axp-workflow-designer .axp-workflow-designer__node-default-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-workflow-designer .axp-workflow-designer__port-cluster{pointer-events:none;position:absolute;overflow:visible;width:0;height:0;transform:translate(-50%,-50%);z-index:3}.axp-workflow-designer .axp-workflow-designer__port{position:absolute;flex-shrink:0;cursor:crosshair;border-radius:calc(infinity * 1px);left:50%;top:50%;transform:translate(-50%,-50%);width:14px;height:14px;padding:0;border:1px solid rgb(var(--ax-sys-color-surface));touch-action:none;pointer-events:auto;transition:transform .12s ease}.axp-workflow-designer .axp-workflow-designer__port:disabled{opacity:.45;cursor:not-allowed}.axp-workflow-designer .axp-workflow-designer__port--inbound{background:rgb(var(--ax-sys-color-success-500))}.axp-workflow-designer .axp-workflow-designer__port--outbound{background:rgb(var(--ax-sys-color-primary-500))}.axp-workflow-designer .axp-workflow-designer__port--active{box-shadow:0 0 0 3px #3b82f659}.axp-workflow-designer .axp-workflow-designer__port--link-hover{border:1px solid rgb(var(--ax-sys-color-primary-500));transform:translate(-50%,-50%) scale(1.12)}.axp-workflow-designer .axp-workflow-designer__port--disabled{opacity:.45;cursor:not-allowed}.axp-workflow-designer .axp-workflow-designer__resize{position:absolute;border-radius:calc(infinity * 1px);width:7px;height:7px;background:rgb(var(--ax-sys-color-primary-500));border:1px solid rgb(var(--ax-sys-color-surface));z-index:4;touch-action:none;user-select:none;-webkit-user-select:none}.axp-workflow-designer .axp-workflow-designer__resize--nw{left:-6px;top:-6px;cursor:nwse-resize}.axp-workflow-designer .axp-workflow-designer__resize--ne{right:-6px;top:-6px;cursor:nesw-resize}.axp-workflow-designer .axp-workflow-designer__resize--sw{left:-6px;bottom:-6px;cursor:nesw-resize}.axp-workflow-designer .axp-workflow-designer__resize--se{right:-6px;bottom:-6px;cursor:nwse-resize}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
5059
|
+
}], ctorParameters: () => [], propDecorators: { model: [{ type: i0.Input, args: [{ isSignal: true, alias: "model", required: true }] }], modelChange: [{ type: i0.Output, args: ["modelChange"] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], highlightedNodeIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightedNodeIds", required: false }] }], gridSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "gridSize", required: false }] }], snapToGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapToGrid", required: false }] }], connectionPreviewStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "connectionPreviewStyle", required: false }] }], connectorStub: [{ type: i0.Input, args: [{ isSignal: true, alias: "connectorStub", required: false }] }], backgroundPattern: [{ type: i0.Input, args: [{ isSignal: true, alias: "backgroundPattern", required: false }] }], zoomChange: [{ type: i0.Output, args: ["zoomChange"] }], canConnect: [{ type: i0.Input, args: [{ isSignal: true, alias: "canConnect", required: false }] }], paletteItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "paletteItems", required: false }] }], showPortLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPortLabels", required: false }] }], showPorts: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPorts", required: false }] }], showConnectorLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "showConnectorLabels", required: false }] }], canvasPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "canvasPadding", required: false }] }], minCanvasSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "minCanvasSize", required: false }] }], nodeBodyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodeBodyTemplate", required: false }] }], designerPointerDown: [{ type: i0.Output, args: ["designerPointerDown"] }], designerClick: [{ type: i0.Output, args: ["designerClick"] }], designerDoubleClick: [{ type: i0.Output, args: ["designerDoubleClick"] }], nodePointerDown: [{ type: i0.Output, args: ["nodePointerDown"] }], nodeClick: [{ type: i0.Output, args: ["nodeClick"] }], nodeDoubleClick: [{ type: i0.Output, args: ["nodeDoubleClick"] }], nodeContextMenu: [{ type: i0.Output, args: ["nodeContextMenu"] }], nodeDragStart: [{ type: i0.Output, args: ["nodeDragStart"] }], nodeDragEnd: [{ type: i0.Output, args: ["nodeDragEnd"] }], portPointerDown: [{ type: i0.Output, args: ["portPointerDown"] }], linkDragStart: [{ type: i0.Output, args: ["linkDragStart"] }], linkDragMove: [{ type: i0.Output, args: ["linkDragMove"] }], linkDragEnd: [{ type: i0.Output, args: ["linkDragEnd"] }], connectorClick: [{ type: i0.Output, args: ["connectorClick"] }], connectorDoubleClick: [{ type: i0.Output, args: ["connectorDoubleClick"] }], connectionCreated: [{ type: i0.Output, args: ["connectionCreated"] }], connectionRejected: [{ type: i0.Output, args: ["connectionRejected"] }], activationChange: [{ type: i0.Output, args: ["activationChange"] }], surfaceRef: [{ type: i0.ViewChild, args: ['surface', { isSignal: true }] }], panViewRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPanViewDirective), { isSignal: true }] }] } });
|
|
4696
5060
|
|
|
4697
5061
|
/**
|
|
4698
5062
|
* Makes any host element a draggable palette source. Set `[axpWorkflowPaletteItem]="item"` and optional outputs.
|
|
@@ -4753,5 +5117,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
4753
5117
|
* Generated bundle index. Do not edit.
|
|
4754
5118
|
*/
|
|
4755
5119
|
|
|
4756
|
-
export { AXPMenuManagementService as A,
|
|
4757
|
-
//# sourceMappingURL=acorex-platform-module-platform-management-client-acorex-platform-module-platform-management-client-
|
|
5120
|
+
export { AXPMenuManagementService as A, findPort as B, CREATE_USER_QUERY_I18N as C, longestConnectorSegment as D, offsetPointOffSegment as E, parsePaletteItemDragPayload as F, portAnchorOnNode as G, portCanvasPosition as H, routeOrthogonalConnector as I, snapPoint as J, snapScalar as K, QUERY_CONTRACT_WIDGET_NAME as Q, REST_API_GENERATOR_WIDGET_NAME as R, USER_QUERY_KIND_OPTIONS as U, CREATE_USER_QUERY_WIZARD_NAME as a, CREATE_USER_QUERY_ENTITY_CATALOG as b, createEmptyRestApiOutput as c, USER_QUERY_VALUE_TYPE_OPTIONS as d, USER_QUERY_MEASURE_REDUCER_OPTIONS as e, REST_API_GENERATOR_IMPORT_DEBOUNCE_MS as f, formatRestApiSummary as g, hasParsedContent as h, AXMPlatformManagementModule as i, AXPWorkflowDesignerComponent as j, AXPWorkflowPaletteItemDragDirective as k, AXP_WORKFLOW_PALETTE_MIME as l, arrangeWorkflowDiagram as m, normalizeRestApiOutput as n, cloneDiagram as o, parseHttpRequest as p, connectorPath as q, connectorRoutePoints as r, createNodeFromPaletteItem as s, createPortsFromPalette as t, createWorkflowConnectorId as u, createWorkflowNodeId as v, createWorkflowPortId as w, defaultCanConnectRequest as x, findConnector as y, findNode as z };
|
|
5121
|
+
//# sourceMappingURL=acorex-platform-module-platform-management-client-acorex-platform-module-platform-management-client-YuJijjKh.mjs.map
|