@acorex/modules 18.0.16 → 18.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/application-management/lib/actions/index.d.ts +1 -0
  2. package/application-management/lib/actions/show-detail.action.d.ts +8 -0
  3. package/application-management/lib/application-management-mock-data.d.ts +3 -18
  4. package/application-management/lib/application-management.module.d.ts +3 -2
  5. package/application-management/lib/layouts/index.d.ts +1 -0
  6. package/application-management/lib/layouts/module-entity-detail-view/module-entity-detail-view.component.d.ts +15 -0
  7. package/application-management/lib/module-designer/module-designer.component.d.ts +17 -3
  8. package/application-management/lib/module-designer/module-designer.type.d.ts +1 -0
  9. package/application-management/lib/services/context-menu.service.d.ts +26 -0
  10. package/application-management/lib/workflows/create-module-entity.workflow.d.ts +2 -0
  11. package/application-management/lib/workflows/index.d.ts +2 -0
  12. package/application-management/lib/workflows/show-module-entity-details.workflow.d.ts +2 -0
  13. package/esm2022/application-management/lib/actions/index.mjs +2 -0
  14. package/esm2022/application-management/lib/actions/show-detail.action.mjs +25 -0
  15. package/esm2022/application-management/lib/application-management-mock-data.mjs +4 -4
  16. package/esm2022/application-management/lib/application-management.module.mjs +44 -6
  17. package/esm2022/application-management/lib/layouts/index.mjs +2 -0
  18. package/esm2022/application-management/lib/layouts/module-entity-detail-view/module-entity-detail-view.component.mjs +77 -0
  19. package/esm2022/application-management/lib/module-designer/module-designer.component.mjs +83 -32
  20. package/esm2022/application-management/lib/module-designer/module-designer.type.mjs +2 -0
  21. package/esm2022/application-management/lib/services/context-menu.service.mjs +167 -0
  22. package/esm2022/application-management/lib/workflows/create-module-entity.workflow.mjs +42 -0
  23. package/esm2022/application-management/lib/workflows/index.mjs +3 -0
  24. package/esm2022/application-management/lib/workflows/show-module-entity-details.workflow.mjs +9 -0
  25. package/esm2022/auth/lib/shared/layouts/master/master.layout.mjs +3 -3
  26. package/esm2022/backend/lib/data/api/module-designer.service.mjs +2 -2
  27. package/fesm2022/acorex-modules-application-management-module-designer.component-Bgq9-BVv.mjs +322 -0
  28. package/fesm2022/acorex-modules-application-management-module-designer.component-Bgq9-BVv.mjs.map +1 -0
  29. package/fesm2022/acorex-modules-application-management.mjs +191 -13
  30. package/fesm2022/acorex-modules-application-management.mjs.map +1 -1
  31. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-D09VaQPe.mjs → acorex-modules-auth-acorex-modules-auth-CS3UFdX0.mjs} +8 -8
  32. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-D09VaQPe.mjs.map → acorex-modules-auth-acorex-modules-auth-CS3UFdX0.mjs.map} +1 -1
  33. package/fesm2022/{acorex-modules-auth-app-chooser.component-DN1ZJiZs.mjs → acorex-modules-auth-app-chooser.component-BlJbIMKi.mjs} +2 -2
  34. package/fesm2022/{acorex-modules-auth-app-chooser.component-DN1ZJiZs.mjs.map → acorex-modules-auth-app-chooser.component-BlJbIMKi.mjs.map} +1 -1
  35. package/fesm2022/{acorex-modules-auth-login.module-CGA5aTg2.mjs → acorex-modules-auth-login.module-DGBKGxI3.mjs} +4 -4
  36. package/fesm2022/{acorex-modules-auth-login.module-CGA5aTg2.mjs.map → acorex-modules-auth-login.module-DGBKGxI3.mjs.map} +1 -1
  37. package/fesm2022/{acorex-modules-auth-master.layout-ZJWzjLrb.mjs → acorex-modules-auth-master.layout-B_8Sfw0M.mjs} +4 -4
  38. package/fesm2022/{acorex-modules-auth-master.layout-ZJWzjLrb.mjs.map → acorex-modules-auth-master.layout-B_8Sfw0M.mjs.map} +1 -1
  39. package/fesm2022/{acorex-modules-auth-password.component-MJhNk3UI.mjs → acorex-modules-auth-password.component-BfDjRRN_.mjs} +2 -2
  40. package/fesm2022/{acorex-modules-auth-password.component-MJhNk3UI.mjs.map → acorex-modules-auth-password.component-BfDjRRN_.mjs.map} +1 -1
  41. package/fesm2022/{acorex-modules-auth-password.component-C4yqf342.mjs → acorex-modules-auth-password.component-DZJ1qwfa.mjs} +2 -2
  42. package/fesm2022/{acorex-modules-auth-password.component-C4yqf342.mjs.map → acorex-modules-auth-password.component-DZJ1qwfa.mjs.map} +1 -1
  43. package/fesm2022/{acorex-modules-auth-routes-DhORV1Js.mjs → acorex-modules-auth-routes-Bw7nXDvx.mjs} +2 -2
  44. package/fesm2022/{acorex-modules-auth-routes-DhORV1Js.mjs.map → acorex-modules-auth-routes-Bw7nXDvx.mjs.map} +1 -1
  45. package/fesm2022/{acorex-modules-auth-two-factor.module-BWKP0_jO.mjs → acorex-modules-auth-two-factor.module-DKStBo1V.mjs} +2 -2
  46. package/fesm2022/{acorex-modules-auth-two-factor.module-BWKP0_jO.mjs.map → acorex-modules-auth-two-factor.module-DKStBo1V.mjs.map} +1 -1
  47. package/fesm2022/acorex-modules-auth.mjs +1 -1
  48. package/fesm2022/acorex-modules-backend.mjs +1 -1
  49. package/fesm2022/acorex-modules-backend.mjs.map +1 -1
  50. package/package.json +7 -7
  51. package/fesm2022/acorex-modules-application-management-module-designer.component-KlwqCJCF.mjs +0 -100
  52. package/fesm2022/acorex-modules-application-management-module-designer.component-KlwqCJCF.mjs.map +0 -1
@@ -1,12 +1,157 @@
1
- import { AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';
1
+ import { AXPEntityDetailViewModelResolver, AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';
2
2
  import { AXPRootLayoutComponent } from '@acorex/platform/themes/default';
3
+ import * as i1$1 from '@acorex/platform/workflow';
4
+ import { AXPWorkflowAction, AXPWorkflowModule } from '@acorex/platform/workflow';
3
5
  import * as i0 from '@angular/core';
4
- import { Injector, NgModule, Optional, Inject, Injectable } from '@angular/core';
5
- import * as i1 from '@angular/router';
6
- import { RouterModule } from '@angular/router';
7
- import { AXPDataGenerator, AXPStorageService, AXPEntityDataProviderImpl, AXPEntityQueryType, AXPEntityCommandScope } from '@acorex/platform/common';
6
+ import { inject, Injectable, signal, Component, ChangeDetectionStrategy, Injector, NgModule, Optional, Inject } from '@angular/core';
7
+ import * as i2 from '@angular/router';
8
+ import { ActivatedRoute, RouterModule } from '@angular/router';
9
+ import { AXPWorkflowNavigateAction, isSmallScreen, getChildDrawer, AXPStickyDirective, AXPGridLayoutDirective, AXPDataGenerator, AXPStorageService, AXPEntityDataProviderImpl, AXPEntityQueryType, AXPEntityCommandScope } from '@acorex/platform/common';
10
+ import { AXActionSheetModule } from '@acorex/components/action-sheet';
11
+ import * as i7 from '@acorex/components/breadcrumbs';
12
+ import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
13
+ import * as i6 from '@acorex/components/button';
14
+ import { AXButtonModule } from '@acorex/components/button';
15
+ import * as i3 from '@acorex/components/decorators';
16
+ import { AXDecoratorModule } from '@acorex/components/decorators';
17
+ import { AXDialogModule } from '@acorex/components/dialog';
18
+ import { AXDrawerModule } from '@acorex/components/drawer';
19
+ import * as i4 from '@acorex/components/dropdown';
20
+ import { AXDropdownModule } from '@acorex/components/dropdown';
21
+ import * as i5 from '@acorex/components/form';
22
+ import { AXFormModule } from '@acorex/components/form';
23
+ import { AXLoadingModule } from '@acorex/components/loading';
24
+ import { AXPopoverModule } from '@acorex/components/popover';
25
+ import { AXTabsModule } from '@acorex/components/tabs';
26
+ import { AXTranslationModule } from '@acorex/core/translation';
27
+ import * as i8 from '@acorex/platform/layout/builder';
28
+ import { AXPLayoutBuilderModule, AXPWidgetsCatalog } from '@acorex/platform/layout/builder';
29
+ import { AXPWidgetsModule } from '@acorex/platform/widgets';
30
+ import * as i1 from '@angular/common';
31
+ import { CommonModule } from '@angular/common';
32
+ import { Store } from '@ngrx/store';
8
33
  import { applySortArray, applyFilterArray } from '@acorex/platform/core';
9
- import { AXPWidgetsCatalog } from '@acorex/platform/layout/builder';
34
+
35
+ class AXPShowModuleEntityDetailViewAction extends AXPWorkflowAction {
36
+ constructor() {
37
+ super(...arguments);
38
+ this.navigation = inject(AXPWorkflowNavigateAction);
39
+ }
40
+ async execute(context) {
41
+ const [module, entity] = context.getVariable('entity').split('.');
42
+ const { id } = context.getVariable('data');
43
+ const newPayload = {
44
+ commands: `/console/module-designer/m/${module}/e/${entity}/${id}/view`,
45
+ };
46
+ context.setVariable('payload', newPayload);
47
+ this.navigation.execute(context);
48
+ }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPShowModuleEntityDetailViewAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
50
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPShowModuleEntityDetailViewAction }); }
51
+ }
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPShowModuleEntityDetailViewAction, decorators: [{
53
+ type: Injectable
54
+ }] });
55
+
56
+ class AXPModuleEntityDetailViewComponent {
57
+ constructor() {
58
+ this.activeRoute = inject(ActivatedRoute);
59
+ this.vm = this.activeRoute.snapshot.data['vm'];
60
+ //
61
+ this.store = inject((Store));
62
+ this.isSM = this.store.select(isSmallScreen());
63
+ this.isOpen = this.store.select(getChildDrawer());
64
+ this.selectedDetailTabIndex = signal(0);
65
+ }
66
+ handleActiveDetailTabChanged(e) {
67
+ this.selectedDetailTabIndex.set(e.index);
68
+ }
69
+ ngOnDestroy() {
70
+ this.vm.destroy();
71
+ }
72
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPModuleEntityDetailViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
73
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPModuleEntityDetailViewComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<div\n class=\"ax-flex ax-flex-col ax-gap-4 ax-min-h-full ax-px-4 ax-pb-4 md:ax-px-6 ax-bg-surface ax-border-b md:ax-border-0 md:ax-bg-default\"\n>\n <div\n class=\"ax-flex ax-flex-col ax-pt-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all\"\n #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-px-6 ax-py-3 -ax-mx-6 ax-shadow-xl'\"\n [stickyOffset]=\"30\"\n >\n <!-------- Begin Toolbar -------->\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <!-------- Begin Title -------->\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-transition\">\n <div class=\"ax-text-xl md:ax-text-3xl ax-font-bold\">{{ vm.title() }}</div>\n @if(vm.description()) {\n <div class=\"ax-text-sm ax-text-neutral-600\" [class.ax-hidden]=\"sticky.isSticky\">\n {{ vm.description() }}\n </div>\n }\n <ax-breadcrumbs class=\"child:ax-font-normal child:ax-text-neutral-400\" [class.ax-hidden]=\"isSM | async\">\n <ng-template #divider>\n <i class=\"fa-solid fa-chevron-right ax-text-xs ax-mx-2\"></i>\n </ng-template>\n @for(b of vm.beardcrumbs();track $index;let last=$last) {\n <ax-breadcrumbs-item\n [active]=\"last\"\n [class.!ax-font-semibold]=\"last\"\n [class.!ax-text-neutral-600]=\"last\"\n [routerLink]=\"b.url\"\n >\n @if(b.icon) {\n <i [class]=\"b.icon\"></i>\n }\n {{ b.title }}\n </ax-breadcrumbs-item>\n }\n </ax-breadcrumbs>\n </div>\n </div>\n <!-------- Finish Title -------->\n <!--------------------------------------------------------------->\n <!-- Begin Action Menu -->\n <div class=\"ax-flex ax-items-center ax-gap-3\">\n @for(tr of vm.primaryActions();track $index) {\n <ax-button [text]=\"tr.title\" [color]=\"tr.color\" (onClick)=\"vm.executeCommand(tr.name)\">\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button>\n } @if(vm.secondaryActions().length) {\n <ax-button [text]=\"(isSM | async) ? null : 'Actions'\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for(tr of vm.secondaryActions();track $index) {\n <ng-container>\n @if(tr.separated) {\n <ax-divider></ax-divider>\n }\n <ax-button-item\n [text]=\"tr.title\"\n class=\"ax-font-semibold ax-text-{{ tr.color }}\"\n (onClick)=\"vm.executeCommand(tr.name)\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n <!-- Finish Action Menu -->\n </div>\n <!-- Start Sections -->\n <div class=\"ax-grid ax-grid-cols-12 ax-gap-4\">\n @for(section of vm.sections(); track section.name()) {\n <div class=\"ax-card ax-shadow-md ax-mt-2\" [gridLayout]=\"section.layout()\">\n <ax-form #form>\n <axp-widgets-container [context]=\"vm.context()\">\n <div class=\"ax-card-header !ax-py-2 !ax-px-4\">\n <p>\n <span class=\"!ax-text-lg ax-font-semibold\">{{ section.title() }}</span>\n <br />\n @if(section.description()) {\n <span class=\"ax-text-sm ax-font-normal ax-text-gray-500\">{{ section.description() }}</span>\n }\n </p>\n @if(section.editable()) {\n <ax-button\n class=\"ax-xs\"\n color=\"ghost\"\n [look]=\"'blank'\"\n (onClick)=\"vm.executeCommand('modify-entity-section', section)\"\n >\n <ax-icon class=\"fa-solid fa-pen ax-text-gray-600\"> </ax-icon>\n </ax-button>\n }\n </div>\n <div class=\"ax-card-body !ax-grid !ax-grid-cols-12 !ax-gap-4\">\n @for(attr of section.props(); track $index) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\" [gridLayout]=\"attr.layout()\">\n <div>\n <div>\n <span class=\"ax-font-semibold\">{{ attr.title() }}</span>\n </div>\n </div>\n <div class=\"ax-text-neutral-500\">\n <axp-widget-renderer [node]=\"attr.node()\" [mode]=\"'view'\"> </axp-widget-renderer>\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n </ax-form>\n </div>\n }\n </div>\n <!-- Finish Sections -->\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i5.AXFormComponent, selector: "ax-form", inputs: ["labelMode", "messageStyle", "updateOn"], outputs: ["onValidate", "updateOnChange"] }, { kind: "ngmodule", type: AXActionSheetModule }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "ngmodule", type: AXDialogModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i6.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "component", type: i6.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i6.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: i7.AXBreadCrumbsComponent, selector: "ax-breadcrumbs" }, { kind: "component", type: i7.AXBreadCrumbsItemComponent, selector: "ax-breadcrumbs-item", inputs: ["disabled", "active"] }, { kind: "ngmodule", type:
74
+ //
75
+ AXPLayoutBuilderModule }, { kind: "component", type: i8.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "component", type: i8.AXPWidgetRendererComponent, selector: "axp-widget-renderer", inputs: ["node", "mode", "parentNode", "index"] }, { kind: "ngmodule", type: AXPWidgetsModule }, { kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }, { kind: "directive", type: AXPGridLayoutDirective, selector: "[gridLayout]", inputs: ["gridLayout"] }, { kind: "ngmodule", type:
76
+ //
77
+ AXTranslationModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
78
+ }
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPModuleEntityDetailViewComponent, decorators: [{
80
+ type: Component,
81
+ args: [{ imports: [
82
+ CommonModule,
83
+ RouterModule,
84
+ AXDecoratorModule,
85
+ AXDropdownModule,
86
+ AXPopoverModule,
87
+ AXFormModule,
88
+ AXActionSheetModule,
89
+ AXDrawerModule,
90
+ AXDialogModule,
91
+ AXLoadingModule,
92
+ AXTabsModule,
93
+ AXButtonModule,
94
+ AXBreadcrumbsModule,
95
+ //
96
+ AXPLayoutBuilderModule,
97
+ AXPWidgetsModule,
98
+ AXPStickyDirective,
99
+ AXPGridLayoutDirective,
100
+ //
101
+ AXTranslationModule,
102
+ ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"ax-flex ax-flex-col ax-gap-4 ax-min-h-full ax-px-4 ax-pb-4 md:ax-px-6 ax-bg-surface ax-border-b md:ax-border-0 md:ax-bg-default\"\n>\n <div\n class=\"ax-flex ax-flex-col ax-pt-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all\"\n #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-px-6 ax-py-3 -ax-mx-6 ax-shadow-xl'\"\n [stickyOffset]=\"30\"\n >\n <!-------- Begin Toolbar -------->\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <!-------- Begin Title -------->\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-transition\">\n <div class=\"ax-text-xl md:ax-text-3xl ax-font-bold\">{{ vm.title() }}</div>\n @if(vm.description()) {\n <div class=\"ax-text-sm ax-text-neutral-600\" [class.ax-hidden]=\"sticky.isSticky\">\n {{ vm.description() }}\n </div>\n }\n <ax-breadcrumbs class=\"child:ax-font-normal child:ax-text-neutral-400\" [class.ax-hidden]=\"isSM | async\">\n <ng-template #divider>\n <i class=\"fa-solid fa-chevron-right ax-text-xs ax-mx-2\"></i>\n </ng-template>\n @for(b of vm.beardcrumbs();track $index;let last=$last) {\n <ax-breadcrumbs-item\n [active]=\"last\"\n [class.!ax-font-semibold]=\"last\"\n [class.!ax-text-neutral-600]=\"last\"\n [routerLink]=\"b.url\"\n >\n @if(b.icon) {\n <i [class]=\"b.icon\"></i>\n }\n {{ b.title }}\n </ax-breadcrumbs-item>\n }\n </ax-breadcrumbs>\n </div>\n </div>\n <!-------- Finish Title -------->\n <!--------------------------------------------------------------->\n <!-- Begin Action Menu -->\n <div class=\"ax-flex ax-items-center ax-gap-3\">\n @for(tr of vm.primaryActions();track $index) {\n <ax-button [text]=\"tr.title\" [color]=\"tr.color\" (onClick)=\"vm.executeCommand(tr.name)\">\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button>\n } @if(vm.secondaryActions().length) {\n <ax-button [text]=\"(isSM | async) ? null : 'Actions'\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for(tr of vm.secondaryActions();track $index) {\n <ng-container>\n @if(tr.separated) {\n <ax-divider></ax-divider>\n }\n <ax-button-item\n [text]=\"tr.title\"\n class=\"ax-font-semibold ax-text-{{ tr.color }}\"\n (onClick)=\"vm.executeCommand(tr.name)\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n <!-- Finish Action Menu -->\n </div>\n <!-- Start Sections -->\n <div class=\"ax-grid ax-grid-cols-12 ax-gap-4\">\n @for(section of vm.sections(); track section.name()) {\n <div class=\"ax-card ax-shadow-md ax-mt-2\" [gridLayout]=\"section.layout()\">\n <ax-form #form>\n <axp-widgets-container [context]=\"vm.context()\">\n <div class=\"ax-card-header !ax-py-2 !ax-px-4\">\n <p>\n <span class=\"!ax-text-lg ax-font-semibold\">{{ section.title() }}</span>\n <br />\n @if(section.description()) {\n <span class=\"ax-text-sm ax-font-normal ax-text-gray-500\">{{ section.description() }}</span>\n }\n </p>\n @if(section.editable()) {\n <ax-button\n class=\"ax-xs\"\n color=\"ghost\"\n [look]=\"'blank'\"\n (onClick)=\"vm.executeCommand('modify-entity-section', section)\"\n >\n <ax-icon class=\"fa-solid fa-pen ax-text-gray-600\"> </ax-icon>\n </ax-button>\n }\n </div>\n <div class=\"ax-card-body !ax-grid !ax-grid-cols-12 !ax-gap-4\">\n @for(attr of section.props(); track $index) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\" [gridLayout]=\"attr.layout()\">\n <div>\n <div>\n <span class=\"ax-font-semibold\">{{ attr.title() }}</span>\n </div>\n </div>\n <div class=\"ax-text-neutral-500\">\n <axp-widget-renderer [node]=\"attr.node()\" [mode]=\"'view'\"> </axp-widget-renderer>\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n </ax-form>\n </div>\n }\n </div>\n <!-- Finish Sections -->\n </div>\n</div>\n" }]
103
+ }] });
104
+
105
+ const AXPCreateModuleEntityWorkflow = {
106
+ startStepId: 'show-popup',
107
+ steps: {
108
+ 'show-popup': {
109
+ action: 'AXPEntityCreatePopupAction',
110
+ nextSteps: [
111
+ {
112
+ conditions: [{ type: 'SINGLE', expression: 'context.getOutput("result") == true' }],
113
+ nextStepId: 'show-toast',
114
+ },
115
+ ],
116
+ },
117
+ 'show-toast': {
118
+ action: 'AXPToastAction',
119
+ input: {
120
+ color: 'success',
121
+ title: 'Entity Created',
122
+ content: 'New Record has been successfully created.',
123
+ },
124
+ nextSteps: [
125
+ {
126
+ conditions: [],
127
+ nextStepId: 'dispatch-event',
128
+ },
129
+ ],
130
+ },
131
+ 'dispatch-event': {
132
+ action: 'AXPEntityCreateSubmittedAction',
133
+ nextSteps: [
134
+ {
135
+ conditions: [{ type: 'SINGLE', expression: 'context.getVariable("redirect") != false' }],
136
+ nextStepId: 'show-entity',
137
+ },
138
+ ],
139
+ },
140
+ 'show-entity': {
141
+ id: 'show-entity',
142
+ action: 'AXPShowModuleEntityDetailViewAction',
143
+ },
144
+ },
145
+ };
146
+
147
+ const AXPShowModuleEntityDetailsViewWorkflow = {
148
+ startStepId: 'showDetailView',
149
+ steps: {
150
+ showDetailView: {
151
+ action: 'AXPShowModuleEntityDetailViewAction',
152
+ },
153
+ },
154
+ };
10
155
 
11
156
  const routes = [
12
157
  {
@@ -15,7 +160,20 @@ const routes = [
15
160
  children: [
16
161
  {
17
162
  path: 'module-designer',
18
- loadComponent: () => import('./acorex-modules-application-management-module-designer.component-KlwqCJCF.mjs').then((c) => c.AXMModuleDesignerComponent),
163
+ loadComponent: () => import('./acorex-modules-application-management-module-designer.component-Bgq9-BVv.mjs').then((c) => c.AXMModuleDesignerComponent),
164
+ children: [
165
+ {
166
+ path: 'm/:module',
167
+ children: [
168
+ {
169
+ path: 'e/:entity/:id/view',
170
+ resolve: { vm: AXPEntityDetailViewModelResolver },
171
+ component: AXPModuleEntityDetailViewComponent,
172
+ },
173
+ ],
174
+ data: { reuse: false },
175
+ },
176
+ ],
19
177
  },
20
178
  ],
21
179
  },
@@ -50,13 +208,33 @@ class AXMApplicationManagementModule {
50
208
  */
51
209
  constructor(instances) { }
52
210
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMApplicationManagementModule, deps: [{ token: 'AXP_REGISTER_MODULES_ENTITIES', optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
53
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: AXMApplicationManagementModule, imports: [i1.RouterModule] }); }
54
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMApplicationManagementModule, imports: [RouterModule.forChild(routes)] }); }
211
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: AXMApplicationManagementModule, imports: [i1$1.AXPWorkflowModule, i2.RouterModule] }); }
212
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMApplicationManagementModule, imports: [AXPWorkflowModule.forChild({
213
+ actions: {
214
+ AXPShowModuleEntityDetailViewAction,
215
+ },
216
+ workflows: {
217
+ 'create-module-entity': AXPCreateModuleEntityWorkflow,
218
+ 'show-module-entity-details': AXPShowModuleEntityDetailsViewWorkflow,
219
+ },
220
+ }),
221
+ RouterModule.forChild(routes)] }); }
55
222
  }
56
223
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMApplicationManagementModule, decorators: [{
57
224
  type: NgModule,
58
225
  args: [{
59
- imports: [RouterModule.forChild(routes)],
226
+ imports: [
227
+ AXPWorkflowModule.forChild({
228
+ actions: {
229
+ AXPShowModuleEntityDetailViewAction,
230
+ },
231
+ workflows: {
232
+ 'create-module-entity': AXPCreateModuleEntityWorkflow,
233
+ 'show-module-entity-details': AXPShowModuleEntityDetailsViewWorkflow,
234
+ },
235
+ }),
236
+ RouterModule.forChild(routes),
237
+ ],
60
238
  exports: [],
61
239
  declarations: [],
62
240
  }]
@@ -126,7 +304,7 @@ const FEATURES = Array.from({ length: 5 }).map((_, i) => {
126
304
  const name = AXPDataGenerator.pick(source);
127
305
  return {
128
306
  id: AXPDataGenerator.uuid(),
129
- module: AXPDataGenerator.pick(MODULES),
307
+ moduleId: AXPDataGenerator.pick(MODULES).id,
130
308
  name: name,
131
309
  title: name,
132
310
  isArchived: AXPDataGenerator.boolean(),
@@ -137,7 +315,7 @@ const ENTITIES = Array.from({ length: 5 }).map((_, i) => {
137
315
  const name = AXPDataGenerator.pick(source);
138
316
  return {
139
317
  id: AXPDataGenerator.uuid(),
140
- module: AXPDataGenerator.pick(MODULES),
318
+ moduleId: AXPDataGenerator.pick(MODULES).id,
141
319
  name: name,
142
320
  title: name,
143
321
  isArchived: AXPDataGenerator.boolean(),
@@ -148,7 +326,7 @@ const PERMISSIONS = Array.from({ length: 5 }).map((_, i) => {
148
326
  const name = AXPDataGenerator.pick(source);
149
327
  return {
150
328
  id: AXPDataGenerator.uuid(),
151
- module: AXPDataGenerator.pick(MODULES),
329
+ moduleId: AXPDataGenerator.pick(MODULES).id,
152
330
  name: name,
153
331
  title: name,
154
332
  isArchived: AXPDataGenerator.boolean(),