@acorex-platform/module-application-management-client 0.0.18 → 0.0.21

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 (33) hide show
  1. package/fesm2022/{acorex-platform-module-application-management-client-application-status.provider-DqPlbWuW.mjs → acorex-platform-module-application-management-client-application-status.provider-Bz6cknzi.mjs} +4 -4
  2. package/fesm2022/{acorex-platform-module-application-management-client-application-status.provider-DqPlbWuW.mjs.map → acorex-platform-module-application-management-client-application-status.provider-Bz6cknzi.mjs.map} +1 -1
  3. package/fesm2022/{acorex-platform-module-application-management-client-assign-features.command-R7y4QKhC.mjs → acorex-platform-module-application-management-client-assign-features.command-BG986HtP.mjs} +23 -21
  4. package/fesm2022/acorex-platform-module-application-management-client-assign-features.command-BG986HtP.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-module-application-management-client-contracts.mjs +79 -1930
  6. package/fesm2022/acorex-platform-module-application-management-client-contracts.mjs.map +1 -1
  7. package/fesm2022/{acorex-platform-module-application-management-client-feature-definition.provider-Depetn50.mjs → acorex-platform-module-application-management-client-feature-definition.provider-V-wfUEZf.mjs} +4 -4
  8. package/fesm2022/{acorex-platform-module-application-management-client-feature-definition.provider-Depetn50.mjs.map → acorex-platform-module-application-management-client-feature-definition.provider-V-wfUEZf.mjs.map} +1 -1
  9. package/fesm2022/acorex-platform-module-application-management-client-features-editor.component-B5yrn7eX.mjs +584 -0
  10. package/fesm2022/acorex-platform-module-application-management-client-features-editor.component-B5yrn7eX.mjs.map +1 -0
  11. package/fesm2022/{acorex-platform-module-application-management-client-features-widget-column.component-CiBGmw6I.mjs → acorex-platform-module-application-management-client-features-widget-column.component-C2OEG0LL.mjs} +7 -8
  12. package/fesm2022/acorex-platform-module-application-management-client-features-widget-column.component-C2OEG0LL.mjs.map +1 -0
  13. package/fesm2022/{acorex-platform-module-application-management-client-features-widget-designer.component-nStj9BAw.mjs → acorex-platform-module-application-management-client-features-widget-designer.component-CMJwcY5f.mjs} +4 -4
  14. package/fesm2022/{acorex-platform-module-application-management-client-features-widget-designer.component-nStj9BAw.mjs.map → acorex-platform-module-application-management-client-features-widget-designer.component-CMJwcY5f.mjs.map} +1 -1
  15. package/fesm2022/{acorex-platform-module-application-management-client-features-widget-edit.component-BdHYm0Yr.mjs → acorex-platform-module-application-management-client-features-widget-edit.component-D_IBCjfM.mjs} +5 -5
  16. package/fesm2022/{acorex-platform-module-application-management-client-features-widget-edit.component-BdHYm0Yr.mjs.map → acorex-platform-module-application-management-client-features-widget-edit.component-D_IBCjfM.mjs.map} +1 -1
  17. package/fesm2022/{acorex-platform-module-application-management-client-features-widget-print.component-C6Z9uzRr.mjs → acorex-platform-module-application-management-client-features-widget-print.component-CkTEfzcY.mjs} +4 -4
  18. package/fesm2022/{acorex-platform-module-application-management-client-features-widget-print.component-C6Z9uzRr.mjs.map → acorex-platform-module-application-management-client-features-widget-print.component-CkTEfzcY.mjs.map} +1 -1
  19. package/fesm2022/{acorex-platform-module-application-management-client-features-widget-view.component-ysM1jD08.mjs → acorex-platform-module-application-management-client-features-widget-view.component-yKbBTqym.mjs} +12 -8
  20. package/fesm2022/{acorex-platform-module-application-management-client-features-widget-view.component-ysM1jD08.mjs.map → acorex-platform-module-application-management-client-features-widget-view.component-yKbBTqym.mjs.map} +1 -1
  21. package/fesm2022/acorex-platform-module-application-management-client-permission-definition.provider-MTs9VAE_.mjs +44 -0
  22. package/fesm2022/acorex-platform-module-application-management-client-permission-definition.provider-MTs9VAE_.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-module-application-management-client.mjs +256 -217
  24. package/fesm2022/acorex-platform-module-application-management-client.mjs.map +1 -1
  25. package/package.json +1 -1
  26. package/types/acorex-platform-module-application-management-client-contracts.d.ts +166 -51
  27. package/types/acorex-platform-module-application-management-client.d.ts +9 -17
  28. package/fesm2022/acorex-platform-module-application-management-client-assign-features.command-R7y4QKhC.mjs.map +0 -1
  29. package/fesm2022/acorex-platform-module-application-management-client-features-editor.component-BiYXAqYJ.mjs +0 -548
  30. package/fesm2022/acorex-platform-module-application-management-client-features-editor.component-BiYXAqYJ.mjs.map +0 -1
  31. package/fesm2022/acorex-platform-module-application-management-client-features-widget-column.component-CiBGmw6I.mjs.map +0 -1
  32. package/fesm2022/acorex-platform-module-application-management-client-permission-definition.provider-Dn5WiubC.mjs +0 -32
  33. package/fesm2022/acorex-platform-module-application-management-client-permission-definition.provider-Dn5WiubC.mjs.map +0 -1
@@ -1,14 +1,14 @@
1
- import { AXPSettingsService, AXP_APP_VERSION_PROVIDER, AXPSearchCommandProvider, createEntityCommandOptions, AXPNavBarSlotComponent, AXPFooterTextSlotComponent, AXP_PLATFORM_CONFIG_TOKEN, AXP_SETTING_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER, AXP_STATUS_PROVIDERS, AXP_MENU_PROVIDER } from '@acorex-platform/framework-client/common';
2
- import { AXPPlatformScope, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';
1
+ import { AXPSettingsService, AXP_APP_VERSION_PROVIDER, AXPPlatformBrandingService, AXP_PLATFORM_BRANDING_SETTING_KEYS, AXP_EXPERIENCE_SETTINGS_GROUP, AXP_EXPERIENCE_SETTINGS_SECTIONS, AXPSearchCommandProvider, createEntityCommandOptions, AXPNavBarSlotComponent, AXP_SETTING_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER, AXP_STATUS_PROVIDERS, AXP_MENU_PROVIDER } from '@acorex-platform/framework-client/common';
3
2
  import * as i2$2 from '@acorex-platform/framework-client/core';
4
- import { objectKeyValueTransforms, AXPAppStartUpService, AXPComponentSlotModule, AXP_MODULE_MANIFEST_PROVIDER, AXP_CONTEXT_DEFINITION_PROVIDER, provideLazyProvider, AXP_FEATURE_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/core';
3
+ import { objectKeyValueTransforms, AXPAppStartUpService, AXP_APP_STARTUP_PRIORITY, AXPComponentSlotModule, AXP_MODULE_MANIFEST_PROVIDER, AXP_CONTEXT_DEFINITION_PROVIDER, provideLazyProvider, AXP_FEATURE_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/core';
5
4
  import { AXPSessionService, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';
6
- import { AXPEntityService, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER } from '@acorex-platform/framework-client/layout/entity';
5
+ import { AXPEntityService, AXP_ENTITY_CONFIG_TOKEN } from '@acorex-platform/framework-client/layout/entity';
7
6
  import { AXPCommandService, provideCommandSetups } from '@acorex-platform/framework-client/runtime';
8
7
  import * as i0 from '@angular/core';
9
- import { ChangeDetectionStrategy, Component, inject, Injectable, signal, HostListener, NgModule } from '@angular/core';
8
+ import { ChangeDetectionStrategy, Component, inject, Injectable, signal, DestroyRef, HostListener, NgModule } from '@angular/core';
10
9
  import { ROUTES } from '@angular/router';
11
10
  import { AXPopupService } from '@acorex/components/popup';
11
+ import { AXPPlatformScope, resolveMultiLanguageString, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';
12
12
  import * as i4 from '@acorex/components/button';
13
13
  import { AXButtonModule } from '@acorex/components/button';
14
14
  import * as i2 from '@acorex/components/check-box';
@@ -23,7 +23,7 @@ import * as i6 from '@acorex/core/translation';
23
23
  import { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';
24
24
  import * as i1$1 from '@angular/common';
25
25
  import { CommonModule } from '@angular/common';
26
- import { RootConfig, AXPApplicationInfoSettings, AXMPermissionsKeys, AXPApplicationManagementMenuKeys } from '@acorex-platform/module-application-management-client/contracts';
26
+ import { RootConfig, AXPApplicationInfoSettings, AXPApplicationsPlatformPermissionKeys, AXPApplicationManagementMenuKeys } from '@acorex-platform/module-application-management-client/contracts';
27
27
  import { defineCommand, AXP_COMMAND_DEFINITION_CATEGORY_PLATFORM } from '@acorex-platform/framework-shared/runtime';
28
28
  import { DomSanitizer } from '@angular/platform-browser';
29
29
  import * as i1$2 from '@acorex/components/time-line';
@@ -31,6 +31,8 @@ import { AXTimeLineModule } from '@acorex/components/time-line';
31
31
  import { AXDateTimeModule } from '@acorex/core/date-time';
32
32
  import * as i4$1 from '@acorex/core/format';
33
33
  import { AXFormatService, AXFormatModule } from '@acorex/core/format';
34
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
35
+ import { merge, filter, combineLatest, distinctUntilChanged, switchMap, EMPTY, from } from 'rxjs';
34
36
  import { AXOutlineContainerDirective } from '@acorex/cdk/outline';
35
37
  import * as i2$1 from '@acorex/components/side-menu';
36
38
  import { AXSideMenuModule, AXOutlineSideMenuDirective } from '@acorex/components/side-menu';
@@ -39,6 +41,7 @@ import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPageLayoutBase }
39
41
  import { AXPWidgetCoreModule, AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/layout/widget-core';
40
42
  import { AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';
41
43
  import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY } from '@acorex-platform/framework-client/layout/widgets';
44
+ import { AXM_APPLICATION_CONTEXT_DEFINITIONS } from '@acorex-platform/module-application-management-contracts';
42
45
 
43
46
  class AXMNotifyAppTermComponent extends AXBasePageComponent {
44
47
  constructor() {
@@ -52,10 +55,10 @@ class AXMNotifyAppTermComponent extends AXBasePageComponent {
52
55
  send() {
53
56
  this.close({ data: this.data });
54
57
  }
55
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotifyAppTermComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
56
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMNotifyAppTermComponent, isStandalone: true, selector: "axm-notify-app-term", usesInheritance: true, ngImport: i0, template: "@for (item of data; track $index) {\n <ax-content class=\"block px-4 py-4 font-bold\">{{ item.title }}</ax-content>\n <ax-content\n class=\"block px-4 pb-4 text-base/6\"\n [innerHTML]=\"transformContent(item.content) | safe: 'html'\"\n ></ax-content>\n}\n<ax-footer class=\"flex items-center justify-between p-2\">\n <ax-check-box [(value)]=\"isConfirm\">\n <ax-label>{{ 'agreeTerm' | translate: { scope: i18n } | async }}</ax-label>\n </ax-check-box>\n <ax-button\n (click)=\"send()\"\n [text]=\"'@general:actions.ok.title' | translate | async\"\n [disabled]=\"!isConfirm\"\n color=\"primary\"\n ></ax-button>\n</ax-footer>\n\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i1.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "component", type: i2.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "isLoading", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "ngmodule", type: AXDecoratorModule }, { 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-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i4.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AXSafePipe, name: "safe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
58
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMNotifyAppTermComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
59
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMNotifyAppTermComponent, isStandalone: true, selector: "axm-notify-app-term", usesInheritance: true, ngImport: i0, template: "@for (item of data; track $index) {\n <ax-content class=\"block px-4 py-4 font-bold\">{{ item.title }}</ax-content>\n <ax-content\n class=\"block px-4 pb-4 text-base/6\"\n [innerHTML]=\"transformContent(item.content) | safe: 'html'\"\n ></ax-content>\n}\n<ax-footer class=\"flex items-center justify-between p-2\">\n <ax-check-box [(value)]=\"isConfirm\">\n <ax-label>{{ 'agreeTerm' | translate: { scope: i18n } | async }}</ax-label>\n </ax-check-box>\n <ax-button\n (click)=\"send()\"\n [text]=\"'@general:actions.ok.title' | translate | async\"\n [disabled]=\"!isConfirm\"\n color=\"primary\"\n ></ax-button>\n</ax-footer>\n\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i1.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "component", type: i2.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "isLoading", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "ngmodule", type: AXDecoratorModule }, { 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-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i4.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AXSafePipe, name: "safe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
57
60
  }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotifyAppTermComponent, decorators: [{
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMNotifyAppTermComponent, decorators: [{
59
62
  type: Component,
60
63
  args: [{ selector: 'axm-notify-app-term', imports: [
61
64
  CommonModule,
@@ -93,7 +96,7 @@ class AXMNewTermCommand {
93
96
  async execute(input = []) {
94
97
  const dataList = resolveTerms(input);
95
98
  if (dataList.length === 0) {
96
- return { success: true };
99
+ return { success: true, kind: 'object', data: undefined };
97
100
  }
98
101
  await this.popupService.open(AXMNotifyAppTermComponent, {
99
102
  title: 'New Terms And Conditions',
@@ -103,12 +106,12 @@ class AXMNewTermCommand {
103
106
  for (const term of dataList) {
104
107
  await this.settingsService.scope(AXPPlatformScope.User).set(`is-confirm-term-${term.id}`, true);
105
108
  }
106
- return { success: true };
109
+ return { success: true, kind: 'object', data: undefined };
107
110
  }
108
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNewTermCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
109
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNewTermCommand, providedIn: 'root' }); }
111
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMNewTermCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
112
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMNewTermCommand, providedIn: 'root' }); }
110
113
  }
111
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNewTermCommand, decorators: [{
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMNewTermCommand, decorators: [{
112
115
  type: Injectable,
113
116
  args: [{ providedIn: 'root' }]
114
117
  }] });
@@ -155,12 +158,12 @@ class AXMShowReleaseNotesCommand {
155
158
  await this.popupService.open(comp, {
156
159
  title: await this.translateService.translateAsync('@application-management:application-info.menus.release-notes.title'),
157
160
  });
158
- return { success: true };
161
+ return { success: true, kind: 'object', data: undefined };
159
162
  }
160
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMShowReleaseNotesCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
161
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMShowReleaseNotesCommand, providedIn: 'root' }); }
163
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMShowReleaseNotesCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
164
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMShowReleaseNotesCommand, providedIn: 'root' }); }
162
165
  }
163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMShowReleaseNotesCommand, decorators: [{
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMShowReleaseNotesCommand, decorators: [{
164
167
  type: Injectable,
165
168
  args: [{ providedIn: 'root' }]
166
169
  }] });
@@ -202,10 +205,10 @@ class AXMNotifyAppVersionComponent extends AXBasePageComponent {
202
205
  send() {
203
206
  this.close({ data: this.data, isShowAgain: !this.isShowAgain });
204
207
  }
205
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotifyAppVersionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
206
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: AXMNotifyAppVersionComponent, isStandalone: true, selector: "axm-notify-app-version", usesInheritance: true, ngImport: i0, template: "<ax-content class=\"block px-4 py-4 text-base/6\" [innerHTML]=\"safeData\"></ax-content>\n<ax-footer class=\"flex items-center justify-between p-2\">\n <ax-check-box [(value)]=\"isShowAgain\">\n <ax-label>Don't Show Again</ax-label>\n </ax-check-box>\n <ax-button color=\"primary\" (click)=\"send()\" [text]=\"'@general:actions.ok.title' | translate | async\"></ax-button>\n</ax-footer>\n\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i1.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "component", type: i2.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "isLoading", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "ngmodule", type: AXDecoratorModule }, { 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-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i4.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
208
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMNotifyAppVersionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
209
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXMNotifyAppVersionComponent, isStandalone: true, selector: "axm-notify-app-version", usesInheritance: true, ngImport: i0, template: "<ax-content class=\"block px-4 py-4 text-base/6\" [innerHTML]=\"safeData\"></ax-content>\n<ax-footer class=\"flex items-center justify-between p-2\">\n <ax-check-box [(value)]=\"isShowAgain\">\n <ax-label>Don't Show Again</ax-label>\n </ax-check-box>\n <ax-button color=\"primary\" (click)=\"send()\" [text]=\"'@general:actions.ok.title' | translate | async\"></ax-button>\n</ax-footer>\n\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i1.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "component", type: i2.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "isLoading", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "ngmodule", type: AXDecoratorModule }, { 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-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i4.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
207
210
  }
208
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotifyAppVersionComponent, decorators: [{
211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMNotifyAppVersionComponent, decorators: [{
209
212
  type: Component,
210
213
  args: [{ selector: 'axm-notify-app-version', imports: [CommonModule, AXLabelModule, AXCheckBoxModule, AXDecoratorModule, AXButtonModule, AXTranslationModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ax-content class=\"block px-4 py-4 text-base/6\" [innerHTML]=\"safeData\"></ax-content>\n<ax-footer class=\"flex items-center justify-between p-2\">\n <ax-check-box [(value)]=\"isShowAgain\">\n <ax-label>Don't Show Again</ax-label>\n </ax-check-box>\n <ax-button color=\"primary\" (click)=\"send()\" [text]=\"'@general:actions.ok.title' | translate | async\"></ax-button>\n</ax-footer>\n\n" }]
211
214
  }] });
@@ -217,7 +220,8 @@ class AXMListVersionComponent extends AXBasePageComponent {
217
220
  this.appVersionService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.appVersion.name).data();
218
221
  this.formatService = inject(AXFormatService);
219
222
  this.sanitize = inject(DomSanitizer);
220
- this.versions = signal([], ...(ngDevMode ? [{ debugName: "versions" }] : /* istanbul ignore next */ []));
223
+ this.versions = signal([], /* @ts-ignore */
224
+ ...(ngDevMode ? [{ debugName: "versions" }] : /* istanbul ignore next */ []));
221
225
  }
222
226
  async ngOnInit() {
223
227
  const result = await this.appVersionService.query({
@@ -234,10 +238,10 @@ class AXMListVersionComponent extends AXBasePageComponent {
234
238
  }));
235
239
  this.versions.set(mappedItems);
236
240
  }
237
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMListVersionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
238
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMListVersionComponent, isStandalone: true, selector: "axm-list-version", usesInheritance: true, ngImport: i0, template: "<div class=\"px-12 min-h-96\">\n <ax-time-line>\n @for (version of versions(); track version.id) {\n <ax-time-line-item [text]=\"version.title\" [isCollapsed]=\"$index == 0 ? false : true\">\n <ax-icon class=\"fa-solid fa-flag-checkered\"></ax-icon>\n <ax-content class=\"px-8 py-2 text-base/6\" [innerHtml]=\"version.content\"></ax-content>\n </ax-time-line-item>\n }\n </ax-time-line>\n</div>\n<ax-footer class=\"flex justify-end!\"\n ><ax-button\n [text]=\"'@general:actions.ok.title' | translate | async\"\n color=\"primary\"\n (onClick)=\"this.close()\"\n ></ax-button\n></ax-footer>\n\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTimeLineModule }, { kind: "component", type: i1$2.AXTimeLineComponent, selector: "ax-time-line", inputs: ["mode"] }, { kind: "component", type: i1$2.AXTimeLineItemComponent, selector: "ax-time-line-item", inputs: ["text", "isActive", "isCollapsed"], outputs: ["isCollapsedChange"] }, { 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-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: AXDateTimeModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i4.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
241
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMListVersionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
242
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMListVersionComponent, isStandalone: true, selector: "axm-list-version", usesInheritance: true, ngImport: i0, template: "<div class=\"px-12 min-h-96\">\n <ax-time-line>\n @for (version of versions(); track version.id) {\n <ax-time-line-item [text]=\"version.title\" [isCollapsed]=\"$index == 0 ? false : true\">\n <ax-icon class=\"fa-solid fa-flag-checkered\"></ax-icon>\n <ax-content class=\"px-8 py-2 text-base/6\" [innerHtml]=\"version.content\"></ax-content>\n </ax-time-line-item>\n }\n </ax-time-line>\n</div>\n<ax-footer class=\"flex justify-end!\"\n ><ax-button\n [text]=\"'@general:actions.ok.title' | translate | async\"\n color=\"primary\"\n (onClick)=\"this.close()\"\n ></ax-button\n></ax-footer>\n\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTimeLineModule }, { kind: "component", type: i1$2.AXTimeLineComponent, selector: "ax-time-line", inputs: ["mode"] }, { kind: "component", type: i1$2.AXTimeLineItemComponent, selector: "ax-time-line-item", inputs: ["text", "isActive", "isCollapsed"], outputs: ["isCollapsedChange"] }, { 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-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: AXDateTimeModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i4.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
239
243
  }
240
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMListVersionComponent, decorators: [{
244
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMListVersionComponent, decorators: [{
241
245
  type: Component,
242
246
  args: [{ selector: 'axm-list-version', imports: [
243
247
  CommonModule,
@@ -255,57 +259,64 @@ var listVersion_component = /*#__PURE__*/Object.freeze({
255
259
  AXMListVersionComponent: AXMListVersionComponent
256
260
  });
257
261
 
262
+ //#region ----- Imports -----
258
263
  //#endregion
259
- //#region ---- Component ----
264
+ //#region ----- Component -----
260
265
  class AXMApplicationInfoSlotComponent {
266
+ //#endregion
267
+ //#region ----- Lifecycle -----
261
268
  constructor() {
269
+ //#region ----- Services & Dependencies -----
262
270
  this.entityService = inject(AXPEntityService);
263
- //#region ---- Services & Dependencies ----
264
271
  this.versionProvider = inject(AXP_APP_VERSION_PROVIDER);
265
272
  this.commandService = inject(AXPCommandService);
266
273
  this.sessionService = inject(AXPSessionService);
267
274
  this.settingsService = inject(AXPSettingsService);
268
- this.editionService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.edition.name).data();
269
- this.applicationService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.application.name).data();
275
+ this.translationService = inject(AXTranslationService);
276
+ this.destroyRef = inject(DestroyRef);
277
+ this.editionService = this.entityService
278
+ .withEntity(RootConfig.module.name, RootConfig.entities.edition.name)
279
+ .data();
280
+ this.applicationService = this.entityService
281
+ .withEntity(RootConfig.module.name, RootConfig.entities.application.name)
282
+ .data();
270
283
  //#endregion
271
- //#region ---- Properties ----
272
- this.displayText = signal('', ...(ngDevMode ? [{ debugName: "displayText" }] : /* istanbul ignore next */ []));
273
- }
274
- //#endregion
275
- //#region ---- Lifecycle Methods ----
276
- async ngOnInit() {
277
- await this.loadDisplayText();
284
+ //#region ----- State Signals -----
285
+ this.displayText = signal('', /* @ts-ignore */
286
+ ...(ngDevMode ? [{ debugName: "displayText" }] : /* istanbul ignore next */ []));
287
+ merge(this.sessionService.application$, this.translationService.langChanges$)
288
+ .pipe(takeUntilDestroyed(this.destroyRef))
289
+ .subscribe(() => {
290
+ void this.loadDisplayText();
291
+ });
292
+ void this.loadDisplayText();
278
293
  }
279
294
  //#endregion
280
- //#region ---- UI Handlers ----
295
+ //#region ----- Event Handlers -----
281
296
  openPopup() {
282
297
  void this.commandService.execute('show-release-notes', {});
283
298
  }
284
299
  //#endregion
285
- //#region ---- Private Methods ----
300
+ //#region ----- Private Helpers -----
286
301
  async loadDisplayText() {
287
302
  const application = this.sessionService.application;
288
303
  if (!application) {
289
304
  this.displayText.set('');
290
305
  return;
291
306
  }
292
- // Get version
293
307
  const versionInfo = await this.versionProvider.provider();
294
308
  const version = versionInfo.version;
295
- // Get application title
296
- const appTitle = application.title || application.name || '';
297
- // Check if application has multiple editions
309
+ const locale = this.translationService.getActiveLang();
310
+ const appTitle = resolveMultiLanguageString(application.title, locale).trim() || application.name || '';
298
311
  let editionName = '';
299
312
  const hasMultipleEditions = await this.checkMultipleEditions(application.id);
300
313
  if (hasMultipleEditions && application.edition?.title) {
301
- editionName = application.edition.title;
314
+ editionName = resolveMultiLanguageString(application.edition.title, locale).trim();
302
315
  }
303
- // Get display pattern from settings
304
316
  const pattern = await this.settingsService
305
317
  .scope(AXPPlatformScope.Platform)
306
318
  .get(AXPApplicationInfoSettings.DisplayPattern);
307
- const displayPattern = pattern || '{appTitle} {[editionName]} v{version}';
308
- // Replace placeholders
319
+ const displayPattern = pattern || '{appTitle} v{version}';
309
320
  this.displayText.set(displayPattern
310
321
  .replace(/\{appTitle\}/g, appTitle)
311
322
  .replace(/\{\[editionName\]\}/g, editionName ? `[${editionName}]` : '')
@@ -315,15 +326,13 @@ class AXMApplicationInfoSlotComponent {
315
326
  }
316
327
  async checkMultipleEditions(applicationId) {
317
328
  try {
318
- // Get full application entity to access editionIds
319
- const application = await this.applicationService.byKey(applicationId);
329
+ const application = (await this.applicationService.byKey(applicationId));
320
330
  if (!application || !application.editionIds || application.editionIds.length === 0) {
321
331
  return false;
322
332
  }
323
- // Query editions that belong to this application
324
- const editionsResult = await this.editionService.query({
333
+ const editionsResult = (await this.editionService.query({
325
334
  skip: 0,
326
- take: 2, // We only need to know if there are more than 1
335
+ take: 2,
327
336
  filter: {
328
337
  logic: 'and',
329
338
  filters: [
@@ -334,7 +343,7 @@ class AXMApplicationInfoSlotComponent {
334
343
  },
335
344
  ],
336
345
  },
337
- });
346
+ }));
338
347
  return editionsResult.items.length > 1;
339
348
  }
340
349
  catch (error) {
@@ -342,17 +351,66 @@ class AXMApplicationInfoSlotComponent {
342
351
  return false;
343
352
  }
344
353
  }
345
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMApplicationInfoSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
346
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: AXMApplicationInfoSlotComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: ` <small class="text-sm cursor-pointer" (click)="openPopup()">{{ displayText() }}</small> `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
354
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMApplicationInfoSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
355
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXMApplicationInfoSlotComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: ` <small class="text-sm cursor-pointer" (click)="openPopup()">{{ displayText() }}</small> `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
347
356
  }
348
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMApplicationInfoSlotComponent, decorators: [{
357
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMApplicationInfoSlotComponent, decorators: [{
349
358
  type: Component,
350
359
  args: [{
351
360
  template: ` <small class="text-sm cursor-pointer" (click)="openPopup()">{{ displayText() }}</small> `,
352
361
  standalone: true,
353
362
  changeDetection: ChangeDetectionStrategy.OnPush,
354
363
  }]
355
- }] });
364
+ }], ctorParameters: () => [] });
365
+
366
+ //#region ----- Imports -----
367
+ //#endregion
368
+ //#region ----- Component -----
369
+ /**
370
+ * Footer copyright text. Hidden on small (mobile) viewports. Re-resolves when language,
371
+ * tenant, or copyright settings change (slot `options` factories only run once at mount).
372
+ */
373
+ class AXMCopyrightFooterSlotComponent {
374
+ //#endregion
375
+ //#region ----- Lifecycle -----
376
+ constructor() {
377
+ //#region ----- Services & Dependencies -----
378
+ this.brandingService = inject(AXPPlatformBrandingService);
379
+ this.sessionService = inject(AXPSessionService);
380
+ this.translationService = inject(AXTranslationService);
381
+ this.settingsService = inject(AXPSettingsService);
382
+ this.destroyRef = inject(DestroyRef);
383
+ //#endregion
384
+ //#region ----- State Signals -----
385
+ this.text = signal('', /* @ts-ignore */
386
+ ...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
387
+ const copyrightKey = AXP_PLATFORM_BRANDING_SETTING_KEYS.copyrightText;
388
+ merge(this.translationService.langChanges$, this.sessionService.tenant$, this.settingsService.onLoaded, this.settingsService.onChanged.pipe(filter((event) => event.keys.includes(copyrightKey))))
389
+ .pipe(takeUntilDestroyed(this.destroyRef))
390
+ .subscribe(() => {
391
+ void this.reload();
392
+ });
393
+ void this.reload();
394
+ }
395
+ //#endregion
396
+ //#region ----- Private Helpers -----
397
+ async reload() {
398
+ this.text.set(await this.brandingService.resolveCopyright());
399
+ }
400
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMCopyrightFooterSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
401
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXMCopyrightFooterSlotComponent, isStandalone: true, selector: "ng-component", host: { classAttribute: "hidden sm:inline" }, ngImport: i0, template: ` <small class="text-sm" [innerHTML]="text()"></small> `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
402
+ }
403
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMCopyrightFooterSlotComponent, decorators: [{
404
+ type: Component,
405
+ args: [{
406
+ template: ` <small class="text-sm" [innerHTML]="text()"></small> `,
407
+ host: {
408
+ class: 'hidden sm:inline',
409
+ },
410
+ standalone: true,
411
+ changeDetection: ChangeDetectionStrategy.OnPush,
412
+ }]
413
+ }], ctorParameters: () => [] });
356
414
 
357
415
  class AXMListTermsComponent extends AXPPageLayoutBaseComponent {
358
416
  constructor() {
@@ -360,8 +418,10 @@ class AXMListTermsComponent extends AXPPageLayoutBaseComponent {
360
418
  this.entityService = inject(AXPEntityService);
361
419
  this.service = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.appTerm.name).data();
362
420
  this.terms = [];
363
- this.loaded = signal(false, ...(ngDevMode ? [{ debugName: "loaded" }] : /* istanbul ignore next */ []));
364
- this.showScrollSide = signal(true, ...(ngDevMode ? [{ debugName: "showScrollSide" }] : /* istanbul ignore next */ []));
421
+ this.loaded = signal(false, /* @ts-ignore */
422
+ ...(ngDevMode ? [{ debugName: "loaded" }] : /* istanbul ignore next */ []));
423
+ this.showScrollSide = signal(true, /* @ts-ignore */
424
+ ...(ngDevMode ? [{ debugName: "showScrollSide" }] : /* istanbul ignore next */ []));
365
425
  }
366
426
  ngAfterViewInit() {
367
427
  this.checkScroll();
@@ -396,15 +456,15 @@ class AXMListTermsComponent extends AXPPageLayoutBaseComponent {
396
456
  getPageDescription() {
397
457
  return `t("app-term.page-description", {scope:"${RootConfig.config.i18n}"})`;
398
458
  }
399
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMListTermsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
400
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMListTermsComponent, isStandalone: true, selector: "ng-component", host: { listeners: { "window:resize": "onResize()" } }, providers: [
459
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMListTermsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
460
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMListTermsComponent, isStandalone: true, selector: "ng-component", host: { listeners: { "window:resize": "onResize()" } }, providers: [
401
461
  {
402
462
  provide: AXPPageLayoutBase,
403
463
  useExisting: AXMListTermsComponent,
404
464
  },
405
- ], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n @if(loaded()){\n <axp-page-content id=\"contentDiv\" axOutlineContainer target=\"h2\" [scrollableElementId]=\"'axp-page-layout'\"\n [activationOffset]=\"120\" class=\"flex flex-row\">\n <div class=\"flex flex-col\">\n @for (term of terms; track term.id) {\n <div class=\"flex flex-col\">\n <h2 class=\"px-4 font-semibold text-xl\">{{ term.title }}</h2>\n <p class=\"px-4 text-sm leading-5 opacity-65\">\n {{ term.effectiveDate | format : 'datetime' | async }}\n </p>\n <div class=\"pt-3 pb-6 px-4 text-base/6\" [innerHTML]=\"term.content | safe:'html'\"></div>\n </div>\n }\n </div>\n @if(showScrollSide()){\n <div class=\"hidden lg:block min-w-60\">\n <ax-side-menu axOutlineSideMenu look=\"with-line\" class=\"w-full sticky top-24\"></ax-side-menu>\n </div>\n }\n </axp-page-content>\n }\n</axp-page-layout>\n\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXFormatModule }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i6.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXSideMenuModule }, { kind: "component", type: i2$1.AXSideMenuComponent, selector: "ax-side-menu", inputs: ["items", "look", "location", "mode"], outputs: ["itemsChange"] }, { kind: "directive", type: i2$1.AXOutlineSideMenuDirective, selector: "[axOutlineSideMenu]", exportAs: ["axOutlineSideMenu"] }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "directive", type: AXOutlineContainerDirective, selector: "[axOutlineContainer]", inputs: ["target", "smoothScroll", "showHashItem", "activationOffset", "copyUrlOnClick", "activateLastAtBottom", "scrollableElementId"], exportAs: ["axOutlineContainer"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4$1.AXFormatPipe, name: "format" }, { kind: "pipe", type: AXSafePipe, name: "safe" }] }); }
465
+ ], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n @if(loaded()){\n <axp-page-content id=\"contentDiv\" axOutlineContainer target=\"h2\" [scrollableElementId]=\"'axp-page-layout'\"\n [activationOffset]=\"120\" class=\"flex flex-row\">\n <div class=\"flex flex-col\">\n @for (term of terms; track term.id) {\n <div class=\"flex flex-col\">\n <h2 class=\"px-4 font-semibold text-xl\">{{ term.title }}</h2>\n <p class=\"px-4 text-sm leading-5 opacity-65\">\n {{ term.effectiveDate | format : 'datetime' | async }}\n </p>\n <div class=\"pt-3 pb-6 px-4 text-base/6\" [innerHTML]=\"term.content | safe:'html'\"></div>\n </div>\n }\n </div>\n @if(showScrollSide()){\n <div class=\"hidden lg:block min-w-60\">\n <ax-side-menu axOutlineSideMenu look=\"with-line\" class=\"w-full sticky top-24\"></ax-side-menu>\n </div>\n }\n </axp-page-content>\n }\n</axp-page-layout>\n\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXFormatModule }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i6.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXSideMenuModule }, { kind: "component", type: i2$1.AXSideMenuComponent, selector: "ax-side-menu", inputs: ["items", "look", "location", "mode"], outputs: ["itemsChange"] }, { kind: "directive", type: i2$1.AXOutlineSideMenuDirective, selector: "[axOutlineSideMenu]", exportAs: ["axOutlineSideMenu"] }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "directive", type: AXOutlineContainerDirective, selector: "[axOutlineContainer]", inputs: ["target", "smoothScroll", "showHashItem", "activationOffset", "copyUrlOnClick", "activateLastAtBottom", "scrollableElementId"], exportAs: ["axOutlineContainer"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4$1.AXFormatPipe, name: "format" }, { kind: "pipe", type: AXSafePipe, name: "safe" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
406
466
  }
407
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMListTermsComponent, decorators: [{
467
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMListTermsComponent, decorators: [{
408
468
  type: Component,
409
469
  args: [{ imports: [
410
470
  CommonModule,
@@ -417,7 +477,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
417
477
  AXSafePipe,
418
478
  AXOutlineContainerDirective,
419
479
  AXOutlineSideMenuDirective,
420
- ], providers: [
480
+ ], changeDetection: ChangeDetectionStrategy.Eager, providers: [
421
481
  {
422
482
  provide: AXPPageLayoutBase,
423
483
  useExisting: AXMListTermsComponent,
@@ -438,15 +498,16 @@ var listTerms_component = /*#__PURE__*/Object.freeze({
438
498
  //#region ---- Setting Provider ----
439
499
  const I18N_APP = '@application-management:application-info.settings';
440
500
  const I18N_GENERAL = '@general:settings';
501
+ const I18N_EDITION_MODULES = '@application-management:editions.modules-editor.settings';
441
502
  class AXPApplicationInfoSettingProvider {
442
503
  async provide(context) {
443
504
  // Find the 'Experience' settings group
444
- const group = context.group('experience');
505
+ const group = context.group(AXP_EXPERIENCE_SETTINGS_GROUP);
445
506
  if (!group) {
446
507
  return;
447
508
  }
448
509
  // Find the 'Startup' section
449
- const section = group.section('startup');
510
+ const section = group.section(AXP_EXPERIENCE_SETTINGS_SECTIONS.Startup);
450
511
  if (!section) {
451
512
  return;
452
513
  }
@@ -457,7 +518,7 @@ class AXPApplicationInfoSettingProvider {
457
518
  scope: AXPPlatformScope.Platform,
458
519
  overridableAt: [],
459
520
  isInherited: false,
460
- defaultValue: '{appTitle} {[editionName]} v{version}',
521
+ defaultValue: '{appTitle} v{version}',
461
522
  widget: {
462
523
  type: AXPWidgetsCatalog.text,
463
524
  options: {
@@ -500,57 +561,113 @@ class AXPApplicationInfoSettingProvider {
500
561
  },
501
562
  description: `${I18N_GENERAL}.experience.startup.release-notes.description`,
502
563
  });
564
+ section.addSetting({
565
+ key: AXPApplicationInfoSettings.EditionModulesViewMode,
566
+ title: `${I18N_EDITION_MODULES}.view-mode.title`,
567
+ description: `${I18N_EDITION_MODULES}.view-mode.description`,
568
+ scope: AXPPlatformScope.User,
569
+ overridableAt: [],
570
+ isInherited: false,
571
+ defaultValue: 'type',
572
+ widget: {
573
+ type: AXPWidgetsCatalog.select,
574
+ options: {
575
+ valueField: 'value',
576
+ textField: 'text',
577
+ dataSource: [
578
+ { value: 'type', text: '@application-management:editions.modules-editor.view-mode.type' },
579
+ { value: 'domain', text: '@application-management:editions.modules-editor.view-mode.domain' },
580
+ ],
581
+ },
582
+ },
583
+ });
503
584
  section.endSection();
504
585
  }
505
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPApplicationInfoSettingProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
506
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPApplicationInfoSettingProvider }); }
586
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPApplicationInfoSettingProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
587
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPApplicationInfoSettingProvider }); }
507
588
  }
508
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPApplicationInfoSettingProvider, decorators: [{
589
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPApplicationInfoSettingProvider, decorators: [{
509
590
  type: Injectable
510
591
  }] });
511
592
 
593
+ //#region ---- Terms check service ----
512
594
  class AXMAppTermsCheckService {
595
+ //#endregion
596
+ //#region ----- Lifecycle -----
513
597
  constructor() {
598
+ //#region ----- Services & Dependencies -----
514
599
  this.entityService = inject(AXPEntityService);
515
600
  this.settingsService = inject(AXPSettingsService);
516
601
  this.commandService = inject(AXPCommandService);
517
- this.appTermService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.appTerm.name).data();
518
602
  this.appInitService = inject(AXPAppStartUpService);
519
603
  this.sessionService = inject(AXPSessionService);
604
+ this.destroyRef = inject(DestroyRef);
605
+ this.appTermService = this.entityService
606
+ .withEntity(RootConfig.module.name, RootConfig.entities.appTerm.name)
607
+ .data();
608
+ //#endregion
609
+ //#region ----- State -----
610
+ this.termsCheckGeneration = 0;
520
611
  this.appInitService.registerTask({
521
612
  name: 'Terms',
522
613
  statusText: '@application-management:app-startup.checking-terms',
523
- priority: 6,
614
+ priority: AXP_APP_STARTUP_PRIORITY.terms,
524
615
  run: async () => {
525
- this.sessionService.application$.subscribe(async (app) => {
526
- if (app != null) {
527
- const filterTerms = [];
528
- const terms = await this.appTermService.query();
529
- for (const term of terms.items) {
530
- const isConfirm = await this.settingsService
531
- .scope(AXPPlatformScope.User)
532
- .get(`is-confirm-term-${term.id}`);
533
- const isEnableToShow = await this.settingsService
534
- .scope(AXPPlatformScope.Platform)
535
- .get(AXPApplicationInfoSettings.ApplicationTerms);
536
- if (!isConfirm && isEnableToShow) {
537
- filterTerms.push(term);
538
- }
539
- }
540
- if (filterTerms.length > 0) {
541
- setTimeout(() => {
542
- void this.commandService.execute('new-term', filterTerms);
543
- }, 500);
544
- }
545
- }
546
- });
616
+ // Terms are evaluated reactively once the session is authorized with an application.
547
617
  },
548
618
  });
619
+ combineLatest([this.sessionService.isAuthorized$, this.sessionService.application$])
620
+ .pipe(distinctUntilChanged(([authorized, app], [previousAuthorized, previousApp]) => authorized === previousAuthorized && app?.id === previousApp?.id), switchMap(([authorized, app]) => {
621
+ // Cookie sessions have no JS-readable access token — use credentials gate.
622
+ if (!authorized || !app || !this.sessionService.hasSessionCredentials()) {
623
+ this.termsCheckGeneration++;
624
+ return EMPTY;
625
+ }
626
+ const generation = this.termsCheckGeneration;
627
+ return from(this.evaluateUnconfirmedTerms(generation));
628
+ }), takeUntilDestroyed(this.destroyRef))
629
+ .subscribe();
549
630
  }
550
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAppTermsCheckService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
551
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAppTermsCheckService }); }
631
+ //#endregion
632
+ //#region ----- Terms evaluation -----
633
+ async evaluateUnconfirmedTerms(generation) {
634
+ if (!this.canCheckTerms() || generation !== this.termsCheckGeneration) {
635
+ return;
636
+ }
637
+ const filterTerms = [];
638
+ const terms = await this.appTermService.query();
639
+ if (generation !== this.termsCheckGeneration || !this.canCheckTerms()) {
640
+ return;
641
+ }
642
+ for (const term of terms.items) {
643
+ if (generation !== this.termsCheckGeneration || !this.canCheckTerms()) {
644
+ return;
645
+ }
646
+ const isConfirm = await this.settingsService.scope(AXPPlatformScope.User).get(`is-confirm-term-${term.id}`);
647
+ const isEnableToShow = await this.settingsService
648
+ .scope(AXPPlatformScope.Platform)
649
+ .get(AXPApplicationInfoSettings.ApplicationTerms);
650
+ if (!isConfirm && isEnableToShow) {
651
+ filterTerms.push(term);
652
+ }
653
+ }
654
+ if (generation !== this.termsCheckGeneration || !this.canCheckTerms() || filterTerms.length === 0) {
655
+ return;
656
+ }
657
+ setTimeout(() => {
658
+ if (generation !== this.termsCheckGeneration || !this.canCheckTerms()) {
659
+ return;
660
+ }
661
+ void this.commandService.execute('new-term', filterTerms);
662
+ }, 500);
663
+ }
664
+ canCheckTerms() {
665
+ return this.sessionService.isReadyForAppScopedApi;
666
+ }
667
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMAppTermsCheckService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
668
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMAppTermsCheckService }); }
552
669
  }
553
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAppTermsCheckService, decorators: [{
670
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMAppTermsCheckService, decorators: [{
554
671
  type: Injectable
555
672
  }], ctorParameters: () => [] });
556
673
 
@@ -565,19 +682,19 @@ const AXPModuleFeatureEditorWidget = {
565
682
  properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],
566
683
  components: {
567
684
  view: {
568
- component: () => import('./acorex-platform-module-application-management-client-features-widget-view.component-ysM1jD08.mjs').then((c) => c.AXPFeaturesWidgetViewComponent),
685
+ component: () => import('./acorex-platform-module-application-management-client-features-widget-view.component-yKbBTqym.mjs').then((c) => c.AXPFeaturesWidgetViewComponent),
569
686
  },
570
687
  edit: {
571
- component: () => import('./acorex-platform-module-application-management-client-features-widget-edit.component-BdHYm0Yr.mjs').then((c) => c.AXPModuleFeatureEditorWidgetEditComponent),
688
+ component: () => import('./acorex-platform-module-application-management-client-features-widget-edit.component-D_IBCjfM.mjs').then((c) => c.AXPModuleFeatureEditorWidgetEditComponent),
572
689
  },
573
690
  column: {
574
- component: () => import('./acorex-platform-module-application-management-client-features-widget-column.component-CiBGmw6I.mjs').then((c) => c.AXPFeaturesWidgetColumnComponent),
691
+ component: () => import('./acorex-platform-module-application-management-client-features-widget-column.component-C2OEG0LL.mjs').then((c) => c.AXPFeaturesWidgetColumnComponent),
575
692
  },
576
693
  print: {
577
- component: () => import('./acorex-platform-module-application-management-client-features-widget-print.component-C6Z9uzRr.mjs').then((c) => c.AXPFeaturesWidgetPrintComponent),
694
+ component: () => import('./acorex-platform-module-application-management-client-features-widget-print.component-CkTEfzcY.mjs').then((c) => c.AXPFeaturesWidgetPrintComponent),
578
695
  },
579
696
  designer: {
580
- component: () => import('./acorex-platform-module-application-management-client-features-widget-designer.component-nStj9BAw.mjs').then((c) => c.AXPFeaturesWidgetDesignerComponent),
697
+ component: () => import('./acorex-platform-module-application-management-client-features-widget-designer.component-CMJwcY5f.mjs').then((c) => c.AXPFeaturesWidgetDesignerComponent),
581
698
  },
582
699
  },
583
700
  };
@@ -589,21 +706,21 @@ class AXPFeaturesWidgetsProvider {
589
706
  getWidgets() {
590
707
  return WIDGETS;
591
708
  }
592
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFeaturesWidgetsProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
593
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFeaturesWidgetsProvider }); }
709
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFeaturesWidgetsProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
710
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFeaturesWidgetsProvider }); }
594
711
  }
595
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFeaturesWidgetsProvider, decorators: [{
712
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFeaturesWidgetsProvider, decorators: [{
596
713
  type: Injectable
597
714
  }] });
598
715
 
599
716
  class AXMFeaturesModule {
600
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMFeaturesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
601
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXMFeaturesModule, imports: [AXPWidgetCoreModule] }); }
602
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMFeaturesModule, providers: [
717
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMFeaturesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
718
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXMFeaturesModule, imports: [AXPWidgetCoreModule] }); }
719
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMFeaturesModule, providers: [
603
720
  { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXPFeaturesWidgetsProvider, multi: true },
604
721
  ], imports: [AXPWidgetCoreModule] }); }
605
722
  }
606
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMFeaturesModule, decorators: [{
723
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMFeaturesModule, decorators: [{
607
724
  type: NgModule,
608
725
  args: [{
609
726
  imports: [
@@ -628,6 +745,8 @@ const ApplicationManagementManifest = {
628
745
  title: RootConfig.module.title,
629
746
  icon: RootConfig.module.icon,
630
747
  i18n: RootConfig.config.i18n,
748
+ type: 'platform',
749
+ domain: 'platform',
631
750
  required: true,
632
751
  // Module dependencies (optional)
633
752
  };
@@ -654,56 +773,33 @@ class AXMSearchCommandProvider extends AXPSearchCommandProvider {
654
773
  },
655
774
  ];
656
775
  }
657
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMSearchCommandProvider, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
658
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMSearchCommandProvider }); }
776
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSearchCommandProvider, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
777
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSearchCommandProvider }); }
659
778
  }
660
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMSearchCommandProvider, decorators: [{
779
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSearchCommandProvider, decorators: [{
661
780
  type: Injectable
662
781
  }] });
663
782
 
664
783
  //#region ---- Application context definitions ----
665
784
  class AXMApplicationManagementContextDefinitionProvider {
666
785
  async items() {
667
- return [
668
- {
669
- name: 'applicationId',
670
- title: 'Application ID',
671
- description: 'Identifier of the application edition currently selected in the session. Narrows features, menus, and permissions.',
672
- ai: {
673
- promptLabel: 'Application id',
674
- usageHint: 'Scope product-specific behavior to this application unless the user names another app.',
675
- valueKind: 'string',
676
- order: 30,
677
- },
678
- },
679
- {
680
- name: 'applicationTitle',
681
- title: 'Application title',
682
- description: 'Display name of the active application from the session (title or name).',
683
- ai: {
684
- promptLabel: 'Application title',
685
- usageHint: 'Use when referring to the product or app shell the user is working in.',
686
- valueKind: 'string',
687
- order: 31,
688
- },
689
- },
690
- ];
786
+ return AXM_APPLICATION_CONTEXT_DEFINITIONS;
691
787
  }
692
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMApplicationManagementContextDefinitionProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
693
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMApplicationManagementContextDefinitionProvider }); }
788
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMApplicationManagementContextDefinitionProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
789
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMApplicationManagementContextDefinitionProvider }); }
694
790
  }
695
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMApplicationManagementContextDefinitionProvider, decorators: [{
791
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMApplicationManagementContextDefinitionProvider, decorators: [{
696
792
  type: Injectable
697
793
  }] });
698
794
 
699
795
  class AXMApplicationManagementModule {
700
796
  constructor(appTermsCheck) { }
701
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMApplicationManagementModule, deps: [{ token: AXMAppTermsCheckService }], target: i0.ɵɵFactoryTarget.NgModule }); }
702
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXMApplicationManagementModule, imports: [
797
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMApplicationManagementModule, deps: [{ token: AXMAppTermsCheckService }], target: i0.ɵɵFactoryTarget.NgModule }); }
798
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXMApplicationManagementModule, imports: [
703
799
  // Entity Modules
704
800
  // Features Modules
705
801
  AXMFeaturesModule, i2$2.AXPComponentSlotModule] }); }
706
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMApplicationManagementModule, providers: [
802
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMApplicationManagementModule, providers: [
707
803
  {
708
804
  provide: ROUTES,
709
805
  multi: true,
@@ -746,7 +842,7 @@ class AXMApplicationManagementModule {
746
842
  },
747
843
  {
748
844
  key: 'assign-features',
749
- command: () => import('./acorex-platform-module-application-management-client-assign-features.command-R7y4QKhC.mjs').then((c) => c.AXMAssignFeaturesCommand),
845
+ command: () => import('./acorex-platform-module-application-management-client-assign-features.command-BG986HtP.mjs').then((c) => c.AXMAssignFeaturesCommand),
750
846
  },
751
847
  ]),
752
848
  // Module Manifest Provider
@@ -756,11 +852,10 @@ class AXMApplicationManagementModule {
756
852
  multi: true,
757
853
  },
758
854
  // Provider references (now using tokens)
759
- provideLazyProvider(AXP_STATUS_PROVIDERS, () => import('./acorex-platform-module-application-management-client-application-status.provider-DqPlbWuW.mjs').then(m => m.AXMApplicationStatusProvider)),
760
- provideLazyProvider(AXP_FEATURE_DEFINITION_PROVIDER, () => import('./acorex-platform-module-application-management-client-feature-definition.provider-Depetn50.mjs').then(m => m.AXPApplicationManagementFeatureDefinitionProvider)),
761
- provideLazyProvider(AXP_PERMISSION_DEFINITION_PROVIDER, () => import('./acorex-platform-module-application-management-client-permission-definition.provider-Dn5WiubC.mjs').then(m => m.AXMPermissionDefinitionProvider)),
855
+ provideLazyProvider(AXP_STATUS_PROVIDERS, () => import('./acorex-platform-module-application-management-client-application-status.provider-Bz6cknzi.mjs').then(m => m.AXMApplicationStatusProvider)),
856
+ provideLazyProvider(AXP_FEATURE_DEFINITION_PROVIDER, () => import('./acorex-platform-module-application-management-client-feature-definition.provider-V-wfUEZf.mjs').then(m => m.AXPApplicationManagementFeatureDefinitionProvider)),
857
+ provideLazyProvider(AXP_PERMISSION_DEFINITION_PROVIDER, () => import('./acorex-platform-module-application-management-client-permission-definition.provider-MTs9VAE_.mjs').then(m => m.AXMPermissionDefinitionProvider)),
762
858
  provideLazyProvider(AXP_MENU_PROVIDER, () => Promise.resolve().then(function () { return menu_provider; }).then(m => m.AXMApplicationManagmentModuleMenuProvider)),
763
- provideLazyProvider(AXP_ENTITY_DEFINITION_LOADER, () => Promise.resolve().then(function () { return entity_provider; }).then(m => m.AXMEntityProvider)),
764
859
  {
765
860
  provide: AXP_SEARCH_PROVIDER,
766
861
  useClass: AXMSearchCommandProvider,
@@ -784,15 +879,7 @@ class AXMApplicationManagementModule {
784
879
  },
785
880
  {
786
881
  name: 'copyright',
787
- component: AXPFooterTextSlotComponent,
788
- options: async () => {
789
- const platformConfig = inject(AXP_PLATFORM_CONFIG_TOKEN);
790
- const settingsService = inject(AXPSettingsService);
791
- const copyrightText = await settingsService
792
- .scope(AXPPlatformScope.Tenant)
793
- .get('organization:copyright-text');
794
- return { text: copyrightText ?? platformConfig.copyright };
795
- },
882
+ component: AXMCopyrightFooterSlotComponent,
796
883
  priority: 2,
797
884
  },
798
885
  ],
@@ -804,7 +891,7 @@ class AXMApplicationManagementModule {
804
891
  ],
805
892
  })] }); }
806
893
  }
807
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMApplicationManagementModule, decorators: [{
894
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMApplicationManagementModule, decorators: [{
808
895
  type: NgModule,
809
896
  args: [{
810
897
  imports: [
@@ -820,15 +907,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
820
907
  },
821
908
  {
822
909
  name: 'copyright',
823
- component: AXPFooterTextSlotComponent,
824
- options: async () => {
825
- const platformConfig = inject(AXP_PLATFORM_CONFIG_TOKEN);
826
- const settingsService = inject(AXPSettingsService);
827
- const copyrightText = await settingsService
828
- .scope(AXPPlatformScope.Tenant)
829
- .get('organization:copyright-text');
830
- return { text: copyrightText ?? platformConfig.copyright };
831
- },
910
+ component: AXMCopyrightFooterSlotComponent,
832
911
  priority: 2,
833
912
  },
834
913
  ],
@@ -885,7 +964,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
885
964
  },
886
965
  {
887
966
  key: 'assign-features',
888
- command: () => import('./acorex-platform-module-application-management-client-assign-features.command-R7y4QKhC.mjs').then((c) => c.AXMAssignFeaturesCommand),
967
+ command: () => import('./acorex-platform-module-application-management-client-assign-features.command-BG986HtP.mjs').then((c) => c.AXMAssignFeaturesCommand),
889
968
  },
890
969
  ]),
891
970
  // Module Manifest Provider
@@ -895,11 +974,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
895
974
  multi: true,
896
975
  },
897
976
  // Provider references (now using tokens)
898
- provideLazyProvider(AXP_STATUS_PROVIDERS, () => import('./acorex-platform-module-application-management-client-application-status.provider-DqPlbWuW.mjs').then(m => m.AXMApplicationStatusProvider)),
899
- provideLazyProvider(AXP_FEATURE_DEFINITION_PROVIDER, () => import('./acorex-platform-module-application-management-client-feature-definition.provider-Depetn50.mjs').then(m => m.AXPApplicationManagementFeatureDefinitionProvider)),
900
- provideLazyProvider(AXP_PERMISSION_DEFINITION_PROVIDER, () => import('./acorex-platform-module-application-management-client-permission-definition.provider-Dn5WiubC.mjs').then(m => m.AXMPermissionDefinitionProvider)),
977
+ provideLazyProvider(AXP_STATUS_PROVIDERS, () => import('./acorex-platform-module-application-management-client-application-status.provider-Bz6cknzi.mjs').then(m => m.AXMApplicationStatusProvider)),
978
+ provideLazyProvider(AXP_FEATURE_DEFINITION_PROVIDER, () => import('./acorex-platform-module-application-management-client-feature-definition.provider-V-wfUEZf.mjs').then(m => m.AXPApplicationManagementFeatureDefinitionProvider)),
979
+ provideLazyProvider(AXP_PERMISSION_DEFINITION_PROVIDER, () => import('./acorex-platform-module-application-management-client-permission-definition.provider-MTs9VAE_.mjs').then(m => m.AXMPermissionDefinitionProvider)),
901
980
  provideLazyProvider(AXP_MENU_PROVIDER, () => Promise.resolve().then(function () { return menu_provider; }).then(m => m.AXMApplicationManagmentModuleMenuProvider)),
902
- provideLazyProvider(AXP_ENTITY_DEFINITION_LOADER, () => Promise.resolve().then(function () { return entity_provider; }).then(m => m.AXMEntityProvider)),
903
981
  {
904
982
  provide: AXP_SEARCH_PROVIDER,
905
983
  useClass: AXMSearchCommandProvider,
@@ -914,46 +992,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
914
992
  }]
915
993
  }], ctorParameters: () => [{ type: AXMAppTermsCheckService }] });
916
994
 
917
- class AXMEntityProvider {
918
- async get(moduleName, entityName) {
919
- if (moduleName == RootConfig.module.name) {
920
- switch (entityName) {
921
- case RootConfig.entities.application.name: {
922
- const entity = (await import('@acorex-platform/module-application-management-client/contracts')).applicationEntityFactory;
923
- return entity();
924
- }
925
- case RootConfig.entities.edition.name: {
926
- const entity = (await import('@acorex-platform/module-application-management-client/contracts')).editionEntityFactory;
927
- return entity();
928
- }
929
- case RootConfig.entities.appVersion.name: {
930
- const entity = (await import('@acorex-platform/module-application-management-client/contracts')).appVersionEntityEntityFactory;
931
- return entity();
932
- }
933
- case RootConfig.entities.appTerm.name: {
934
- const entity = (await import('@acorex-platform/module-application-management-client/contracts')).appTermEntityEntityFactory;
935
- return entity();
936
- }
937
- }
938
- }
939
- return null;
940
- }
941
- async list() {
942
- const m = RootConfig.module.name;
943
- return Promise.resolve(Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m })));
944
- }
945
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
946
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityProvider }); }
947
- }
948
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityProvider, decorators: [{
949
- type: Injectable
950
- }] });
951
-
952
- var entity_provider = /*#__PURE__*/Object.freeze({
953
- __proto__: null,
954
- AXMEntityProvider: AXMEntityProvider
955
- });
956
-
957
995
  class AXMApplicationManagmentModuleMenuProvider {
958
996
  constructor() {
959
997
  this.entityService = inject(AXPEntityService);
@@ -963,6 +1001,7 @@ class AXMApplicationManagmentModuleMenuProvider {
963
1001
  const scope = RootConfig.config.i18n;
964
1002
  const module = RootConfig.module;
965
1003
  const appName = this.sessionService.application?.name;
1004
+ const maintainApps = AXPApplicationsPlatformPermissionKeys.MaintainApplications;
966
1005
  context.find('Common:Menu:Platform').addItems([
967
1006
  {
968
1007
  name: AXPApplicationManagementMenuKeys.Applications,
@@ -972,7 +1011,7 @@ class AXMApplicationManagmentModuleMenuProvider {
972
1011
  priority: 1,
973
1012
  policy: {
974
1013
  features: [module.name],
975
- permissions: [AXMPermissionsKeys.ApplicationManagement.Applications],
1014
+ permissions: [maintainApps],
976
1015
  },
977
1016
  },
978
1017
  {
@@ -983,12 +1022,12 @@ class AXMApplicationManagmentModuleMenuProvider {
983
1022
  icon: RootConfig.entities.appVersion.icon,
984
1023
  policy: {
985
1024
  features: [module.name],
986
- permissions: [AXMPermissionsKeys.ApplicationManagement.ReleaseNotes],
1025
+ permissions: [maintainApps],
987
1026
  },
988
1027
  },
989
1028
  { name: `${AXPApplicationManagementMenuKeys.Root}:divider1`, text: '', type: 'break', priority: 3 },
990
1029
  ]);
991
- //#region ---- Help Menu Extensions ----
1030
+ //#region ---- Help Menu Extensions ----
992
1031
  // Help menu is created by common module's menu provider
993
1032
  context.find('Common:Menu:Help').addItems([
994
1033
  {
@@ -1010,10 +1049,10 @@ class AXMApplicationManagmentModuleMenuProvider {
1010
1049
  ]);
1011
1050
  //#endregion
1012
1051
  }
1013
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMApplicationManagmentModuleMenuProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1014
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMApplicationManagmentModuleMenuProvider }); }
1052
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMApplicationManagmentModuleMenuProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1053
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMApplicationManagmentModuleMenuProvider }); }
1015
1054
  }
1016
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMApplicationManagmentModuleMenuProvider, decorators: [{
1055
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMApplicationManagmentModuleMenuProvider, decorators: [{
1017
1056
  type: Injectable
1018
1057
  }] });
1019
1058
 
@@ -1026,5 +1065,5 @@ var menu_provider = /*#__PURE__*/Object.freeze({
1026
1065
  * Generated bundle index. Do not edit.
1027
1066
  */
1028
1067
 
1029
- export { AXMApplicationManagementModule, AXMApplicationManagmentModuleMenuProvider, AXMEntityProvider, AXMSearchCommandProvider };
1068
+ export { AXMApplicationManagementModule, AXMApplicationManagmentModuleMenuProvider, AXMSearchCommandProvider };
1030
1069
  //# sourceMappingURL=acorex-platform-module-application-management-client.mjs.map