@acorex-platform/framework-client 0.0.18 → 0.0.20

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 (108) hide show
  1. package/fesm2022/acorex-platform-framework-client-auth.mjs +872 -314
  2. package/fesm2022/acorex-platform-framework-client-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-Euotv9l0.mjs → acorex-platform-framework-client-common-common-settings.provider-CLm2BVk-.mjs} +88 -5
  4. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CLm2BVk-.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-framework-client-common.mjs +2666 -693
  6. package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-framework-client-core.mjs +685 -721
  8. package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-framework-client-domain.mjs +16 -16
  10. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +124 -72
  11. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
  12. package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CjnQ9hAJ.mjs → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-oE8CeLE8.mjs} +8 -6
  13. package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CjnQ9hAJ.mjs.map → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-oE8CeLE8.mjs.map} +1 -1
  14. package/fesm2022/{acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-fFen8w8M.mjs → acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs} +4 -4
  15. package/fesm2022/{acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-fFen8w8M.mjs.map → acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs.map} +1 -1
  16. package/fesm2022/acorex-platform-framework-client-layout-components.mjs +2988 -857
  17. package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
  18. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +277 -185
  19. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
  20. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BXOMs6oD.mjs +29184 -0
  21. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BXOMs6oD.mjs.map +1 -0
  22. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-BzUM-JMC.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-DCK-qb-F.mjs} +34 -20
  23. package/fesm2022/acorex-platform-framework-client-layout-entity-attachments-page.component-DCK-qb-F.mjs.map +1 -0
  24. package/fesm2022/acorex-platform-framework-client-layout-entity-bulk-entity.command-Cs3agnpF.mjs +162 -0
  25. package/fesm2022/acorex-platform-framework-client-layout-entity-bulk-entity.command-Cs3agnpF.mjs.map +1 -0
  26. package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-Ci_CTFtq.mjs → acorex-platform-framework-client-layout-entity-file-list-popup.component-p0hxDb0W.mjs} +31 -19
  27. package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-p0hxDb0W.mjs.map +1 -0
  28. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-DmiB__JR.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-DYV9YPyw.mjs} +30 -18
  29. package/fesm2022/acorex-platform-framework-client-layout-entity-gallery-page.component-DYV9YPyw.mjs.map +1 -0
  30. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +2 -27090
  31. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs.map +1 -1
  32. package/fesm2022/acorex-platform-framework-client-layout-views.mjs +382 -154
  33. package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
  34. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +646 -280
  35. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
  36. package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CIwpAXbL.mjs → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BiWerYcu.mjs} +16 -10
  37. package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CIwpAXbL.mjs.map → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BiWerYcu.mjs.map} +1 -1
  38. package/fesm2022/{acorex-platform-framework-client-layout-widgets-image-preview.popup-CazpERbX.mjs → acorex-platform-framework-client-layout-widgets-image-preview.popup-BOrrMm3U.mjs} +9 -8
  39. package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-BOrrMm3U.mjs.map +1 -0
  40. package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-DKkJi40s.mjs → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs} +20 -12
  41. package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-DKkJi40s.mjs.map → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs.map} +1 -1
  42. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DtYZfA79.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-3CO4xJB3.mjs} +32 -18
  43. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DtYZfA79.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-3CO4xJB3.mjs.map} +1 -1
  44. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-nMUtxAyy.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-CRST84ou.mjs} +8 -7
  45. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-nMUtxAyy.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-CRST84ou.mjs.map} +1 -1
  46. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-DvUSZ4hJ.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-FjtSRxIX.mjs} +4 -4
  47. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-DvUSZ4hJ.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-FjtSRxIX.mjs.map} +1 -1
  48. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BihIfkZW.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs} +10 -8
  49. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BihIfkZW.mjs.map → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs.map} +1 -1
  50. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +4868 -2548
  51. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs.map +1 -1
  52. package/fesm2022/acorex-platform-framework-client-native.mjs +7 -7
  53. package/fesm2022/acorex-platform-framework-client-realtime-set-presence-availability.command-CetlUjnM.mjs +29 -0
  54. package/fesm2022/acorex-platform-framework-client-realtime-set-presence-availability.command-CetlUjnM.mjs.map +1 -0
  55. package/fesm2022/acorex-platform-framework-client-realtime.mjs +463 -26
  56. package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -1
  57. package/fesm2022/acorex-platform-framework-client-runtime.mjs +300 -137
  58. package/fesm2022/acorex-platform-framework-client-runtime.mjs.map +1 -1
  59. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-create-view.component-QIFX11dh.mjs → acorex-platform-framework-client-themes-default-entity-master-create-view.component-yeftgJ_K.mjs} +10 -7
  60. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-create-view.component-QIFX11dh.mjs.map → acorex-platform-framework-client-themes-default-entity-master-create-view.component-yeftgJ_K.mjs.map} +1 -1
  61. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BBdellyL.mjs → acorex-platform-framework-client-themes-default-entity-master-modify-view.component-DWE3OWGm.mjs} +10 -7
  62. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BBdellyL.mjs.map → acorex-platform-framework-client-themes-default-entity-master-modify-view.component-DWE3OWGm.mjs.map} +1 -1
  63. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-CIf1VWNW.mjs → acorex-platform-framework-client-themes-default-entity-master-single-view.component-C2Abf7Lb.mjs} +21 -19
  64. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-C2Abf7Lb.mjs.map +1 -0
  65. package/fesm2022/{acorex-platform-framework-client-themes-default-error-401.component-C_czT_JC.mjs → acorex-platform-framework-client-themes-default-error-401.component-BrTotLx1.mjs} +5 -5
  66. package/fesm2022/{acorex-platform-framework-client-themes-default-error-401.component-C_czT_JC.mjs.map → acorex-platform-framework-client-themes-default-error-401.component-BrTotLx1.mjs.map} +1 -1
  67. package/fesm2022/{acorex-platform-framework-client-themes-default-error-404.component-C2Wu0YtF.mjs → acorex-platform-framework-client-themes-default-error-404.component-DsC7_s59.mjs} +5 -5
  68. package/fesm2022/{acorex-platform-framework-client-themes-default-error-404.component-C2Wu0YtF.mjs.map → acorex-platform-framework-client-themes-default-error-404.component-DsC7_s59.mjs.map} +1 -1
  69. package/fesm2022/{acorex-platform-framework-client-themes-default-error-offline.component-DRz-kVsT.mjs → acorex-platform-framework-client-themes-default-error-offline.component-CngiQycG.mjs} +6 -6
  70. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-CngiQycG.mjs.map +1 -0
  71. package/fesm2022/acorex-platform-framework-client-themes-default.mjs +421 -265
  72. package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
  73. package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-column.component-Ci_oH7NE.mjs → acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CbZALjB5.mjs} +8 -6
  74. package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-column.component-Ci_oH7NE.mjs.map → acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CbZALjB5.mjs.map} +1 -1
  75. package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-view.component-Lb1G2Xz7.mjs → acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BRrNT6x2.mjs} +8 -6
  76. package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-view.component-Lb1G2Xz7.mjs.map → acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BRrNT6x2.mjs.map} +1 -1
  77. package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-D4ubvFYf.mjs → acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BIsQTr6B.mjs} +4 -4
  78. package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-D4ubvFYf.mjs.map → acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BIsQTr6B.mjs.map} +1 -1
  79. package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-Br8j_BF_.mjs → acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-ZclmSbt9.mjs} +16 -10
  80. package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-Br8j_BF_.mjs.map → acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-ZclmSbt9.mjs.map} +1 -1
  81. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +538 -133
  82. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
  83. package/fesm2022/acorex-platform-framework-client-workflow.mjs +26 -66
  84. package/fesm2022/acorex-platform-framework-client-workflow.mjs.map +1 -1
  85. package/package.json +10 -10
  86. package/realtime/README.md +16 -0
  87. package/runtime/README.md +14 -0
  88. package/types/acorex-platform-framework-client-auth.d.ts +291 -52
  89. package/types/acorex-platform-framework-client-common.d.ts +613 -87
  90. package/types/acorex-platform-framework-client-core.d.ts +213 -206
  91. package/types/acorex-platform-framework-client-layout-builder.d.ts +14 -8
  92. package/types/acorex-platform-framework-client-layout-components.d.ts +392 -28
  93. package/types/acorex-platform-framework-client-layout-entity.d.ts +667 -417
  94. package/types/acorex-platform-framework-client-layout-views.d.ts +31 -11
  95. package/types/acorex-platform-framework-client-layout-widget-core.d.ts +66 -17
  96. package/types/acorex-platform-framework-client-layout-widgets.d.ts +294 -67
  97. package/types/acorex-platform-framework-client-realtime.d.ts +183 -6
  98. package/types/acorex-platform-framework-client-runtime.d.ts +134 -28
  99. package/types/acorex-platform-framework-client-themes-default.d.ts +9 -1
  100. package/types/acorex-platform-framework-client-themes-shared.d.ts +8 -2
  101. package/types/acorex-platform-framework-client-workflow.d.ts +11 -35
  102. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-Euotv9l0.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-framework-client-layout-entity-attachments-page.component-BzUM-JMC.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-Ci_CTFtq.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-framework-client-layout-entity-gallery-page.component-DmiB__JR.mjs.map +0 -1
  106. package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-CazpERbX.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-CIf1VWNW.mjs.map +0 -1
  108. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DRz-kVsT.mjs.map +0 -1
@@ -1,14 +1,15 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, inject, Injectable, Directive, computed, Injector, ChangeDetectionStrategy, Component, input, ElementRef, ViewContainerRef, signal, effect, runInInjectionContext, Optional, Inject, NgModule, EventEmitter, HostListener, Output, DestroyRef, untracked, provideAppInitializer, Pipe } from '@angular/core';
3
3
  import { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';
4
- import { AXDataSource, convertArrayToDataSource } from '@acorex/cdk/common';
5
- import { AXPPlatformCoreDataSourceKeys, isFormContextDirty, getSmart, isSelectionValueEqual, isFormValueEqual, setSmart, AXPExpressionEvaluatorScopeProviderContext, ExpressionEvaluatorEngine, extractValue, AXPKeyboardShortcutPriority, getSystemActions, isLocaleStringMap } from '@acorex-platform/framework-shared/core';
6
- import { cloneDeep, isEmpty, isEqual, has, unset, isPlainObject, get, sortBy, set, isNil, castArray, isString, isUndefined, endsWith, startsWith, includes, lte, gte, lt, gt, orderBy } from 'lodash-es';
4
+ import { cloneDeep, isEmpty, isEqual, has, unset, isPlainObject, get, sortBy, set, isUndefined, isNil, endsWith, startsWith, includes, lte, gte, lt, gt, orderBy } from 'lodash-es';
7
5
  import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
6
+ import { isFormContextDirty, getSmart, isSelectionValueEqual, isFormValueEqual, setSmart, summarizeFormContextDirtyDiff, AXPExpressionEvaluatorScopeProviderContext, ExpressionEvaluatorEngine, extractValue, AXPKeyboardShortcutPriority, getSystemActions, isLocaleStringMap } from '@acorex-platform/framework-shared/core';
7
+ export { axpContextDefinitionIsAiPrompt } from '@acorex-platform/framework-shared/core';
8
8
  import { AXFormatService } from '@acorex/core/format';
9
9
  import * as i1 from '@acorex/components/skeleton';
10
10
  import { AXSkeletonModule } from '@acorex/components/skeleton';
11
- import { filter, take, ReplaySubject, Subject, interval, fromEvent } from 'rxjs';
11
+ import { Subject, interval, fromEvent } from 'rxjs';
12
+ import { AXPEntityEventsKeys } from '@acorex-platform/framework-shared/entity';
12
13
  import { toSignal } from '@angular/core/rxjs-interop';
13
14
  import * as i1$1 from '@angular/common';
14
15
  import { DOCUMENT, CommonModule } from '@angular/common';
@@ -32,10 +33,10 @@ class AXPActivityLogService {
32
33
  async getHistoryByIds(refId, refType, ids) {
33
34
  return (await Promise.all(this.providers?.map((p) => p.getHistoryByIds(refId, refType, ids)) ?? [])).flat();
34
35
  }
35
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPActivityLogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
36
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPActivityLogService, providedIn: 'root' }); }
36
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPActivityLogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
37
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPActivityLogService, providedIn: 'root' }); }
37
38
  }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPActivityLogService, decorators: [{
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPActivityLogService, decorators: [{
39
40
  type: Injectable,
40
41
  args: [{ providedIn: 'root' }]
41
42
  }] });
@@ -120,103 +121,14 @@ class AXPCatalogScopeDefinitionProviderService {
120
121
  }
121
122
  return resolveMultiLanguageString(definition.title, locale) || definition.name;
122
123
  }
123
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPCatalogScopeDefinitionProviderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
124
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPCatalogScopeDefinitionProviderService, providedIn: 'root' }); }
124
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPCatalogScopeDefinitionProviderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
125
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPCatalogScopeDefinitionProviderService, providedIn: 'root' }); }
125
126
  }
126
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPCatalogScopeDefinitionProviderService, decorators: [{
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPCatalogScopeDefinitionProviderService, decorators: [{
127
128
  type: Injectable,
128
129
  args: [{ providedIn: 'root' }]
129
130
  }] });
130
131
 
131
- //#region ---- Imports ----
132
- //#endregion
133
- //#region ---- Data source definition ----
134
- /**
135
- * Registered catalog scopes for select / selection-list widgets via {@link AXPPlatformCoreDataSourceKeys.CatalogScopes}.
136
- */
137
- class AXPCatalogScopeDefinitionsDataSourceDefinition {
138
- constructor() {
139
- //#region ---- Services & Dependencies ----
140
- this.catalogScopeRegistry = inject(AXPCatalogScopeDefinitionProviderService);
141
- //#endregion
142
- }
143
- //#endregion
144
- //#region ---- Public API ----
145
- async items() {
146
- return [
147
- {
148
- name: AXPPlatformCoreDataSourceKeys.CatalogScopes,
149
- title: 'Catalog scopes',
150
- source: () => new AXDataSource({
151
- key: 'name',
152
- pageSize: 500,
153
- load: async (e) => {
154
- const all = await this.catalogScopeRegistry.items();
155
- const localeFilter = this.readTargetFilter(e?.filter);
156
- const items = all
157
- .filter((scope) => !localeFilter || scope.targets?.includes(localeFilter))
158
- .map((scope) => ({
159
- name: scope.name,
160
- title: this.catalogScopeRegistry.resolveTitle(scope),
161
- description: scope.description,
162
- targets: scope.targets,
163
- icon: scope.icon,
164
- cssClass: scope.cssClass,
165
- }));
166
- return { items, total: items.length };
167
- },
168
- byKey: async (key) => {
169
- const name = String(key ?? '').trim();
170
- if (!name) {
171
- return undefined;
172
- }
173
- const scope = await this.catalogScopeRegistry.get(name);
174
- if (!scope) {
175
- return undefined;
176
- }
177
- return {
178
- name: scope.name,
179
- title: this.catalogScopeRegistry.resolveTitle(scope),
180
- description: scope.description,
181
- targets: scope.targets,
182
- icon: scope.icon,
183
- cssClass: scope.cssClass,
184
- };
185
- },
186
- }),
187
- columns: [
188
- { name: 'name', title: 'Name', datatype: 'string', type: 'text-editor' },
189
- { name: 'title', title: 'Title', datatype: 'string', type: 'text-editor' },
190
- ],
191
- filters: [
192
- {
193
- field: 'targets',
194
- title: 'Target entity',
195
- operator: { type: 'contains' },
196
- widget: { type: 'text-editor' },
197
- filterType: { advance: false, inline: false },
198
- },
199
- ],
200
- textField: { name: 'title', title: 'Title' },
201
- valueField: { name: 'name', title: 'Name' },
202
- },
203
- ];
204
- }
205
- //#endregion
206
- //#region ---- Helpers ----
207
- readTargetFilter(filter) {
208
- if (!filter || typeof filter !== 'object') {
209
- return undefined;
210
- }
211
- const f = filter;
212
- if (f.field === 'targets' && typeof f.value === 'string' && f.value.trim()) {
213
- return f.value.trim();
214
- }
215
- return undefined;
216
- }
217
- }
218
- //#endregion
219
-
220
132
  //#region ---- Color Palette Provider ----
221
133
  /**
222
134
  * Abstract class for color palette providers
@@ -359,10 +271,10 @@ class AXPColorPaletteService {
359
271
  const uniquePalettes = allPalettes.filter((palette, index, self) => index === self.findIndex((p) => p.name === palette.name));
360
272
  this.cache = uniquePalettes;
361
273
  }
362
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColorPaletteService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
363
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColorPaletteService, providedIn: 'root' }); }
274
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPColorPaletteService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
275
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPColorPaletteService, providedIn: 'root' }); }
364
276
  }
365
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColorPaletteService, decorators: [{
277
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPColorPaletteService, decorators: [{
366
278
  type: Injectable,
367
279
  args: [{
368
280
  providedIn: 'root',
@@ -477,10 +389,10 @@ class AXPDefaultColorPalettesProvider extends AXPColorPaletteProvider {
477
389
  },
478
390
  ];
479
391
  }
480
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDefaultColorPalettesProvider, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
481
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDefaultColorPalettesProvider }); }
392
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPDefaultColorPalettesProvider, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
393
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPDefaultColorPalettesProvider }); }
482
394
  }
483
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDefaultColorPalettesProvider, decorators: [{
395
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPDefaultColorPalettesProvider, decorators: [{
484
396
  type: Injectable
485
397
  }] });
486
398
 
@@ -666,10 +578,10 @@ class AXPColumnWidthService {
666
578
  }
667
579
  return width;
668
580
  }
669
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColumnWidthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
670
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColumnWidthService, providedIn: 'root' }); }
581
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPColumnWidthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
582
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPColumnWidthService, providedIn: 'root' }); }
671
583
  }
672
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColumnWidthService, decorators: [{
584
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPColumnWidthService, decorators: [{
673
585
  type: Injectable,
674
586
  args: [{
675
587
  providedIn: 'root',
@@ -705,13 +617,131 @@ const defaultColumnWidthProvider = {
705
617
  //#endregion
706
618
 
707
619
  class AXPComponentSlot {
708
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPComponentSlot, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
709
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: AXPComponentSlot, isStandalone: true, ngImport: i0 }); }
620
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPComponentSlot, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
621
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: AXPComponentSlot, isStandalone: true, ngImport: i0 }); }
710
622
  }
711
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPComponentSlot, decorators: [{
623
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPComponentSlot, decorators: [{
712
624
  type: Directive
713
625
  }] });
714
626
 
627
+ //#region ---- Imports ----
628
+ //#endregion
629
+ //#region ---- Debug Service ----
630
+ /**
631
+ * Platform debug and trace logging.
632
+ * Call `trace` / `traceGroup` for diagnostics (gated by tenant Debug Mode).
633
+ * Call `warn` / `error` for always-on console output.
634
+ *
635
+ * Debug Mode is applied via `setDebugMode()` (wired from settings in platform common).
636
+ */
637
+ class AXPDebugService {
638
+ //#endregion
639
+ //#region ---- Lifecycle ----
640
+ constructor() {
641
+ //#endregion
642
+ //#region ---- State ----
643
+ this.debugModeEnabled = false;
644
+ AXPDebugService.instance = this;
645
+ }
646
+ //#endregion
647
+ //#region ---- Debug Mode ----
648
+ isDebugMode() {
649
+ return this.debugModeEnabled;
650
+ }
651
+ setDebugMode(enabled) {
652
+ this.debugModeEnabled = enabled;
653
+ }
654
+ //#endregion
655
+ //#region ---- Trace API ----
656
+ /**
657
+ * @param namespace Module/feature namespace (kebab-case). Filter console with `[AXP:<namespace>]`.
658
+ * @param title Short area name (component, service, middleware).
659
+ * @param message What happened.
660
+ * @param data Optional structured payload, or a factory evaluated only when Debug Mode is on.
661
+ */
662
+ trace(namespace, title, message, data) {
663
+ if (!this.debugModeEnabled) {
664
+ return;
665
+ }
666
+ this.log('log', namespace, title, message, data);
667
+ }
668
+ /**
669
+ * Same as {@link trace} but emits a collapsible console group (useful for multi-field payloads).
670
+ */
671
+ traceGroup(namespace, title, message, data) {
672
+ if (!this.debugModeEnabled) {
673
+ return;
674
+ }
675
+ const resolved = this.resolveData(data);
676
+ console.groupCollapsed(this.formatPrefix(namespace, title, message));
677
+ if (resolved != null) {
678
+ for (const [key, value] of Object.entries(resolved)) {
679
+ if (value !== undefined) {
680
+ console.log(key, value);
681
+ }
682
+ }
683
+ }
684
+ console.groupEnd();
685
+ }
686
+ warn(namespace, title, message, data) {
687
+ this.log('warn', namespace, title, message, data);
688
+ }
689
+ error(namespace, title, message, data) {
690
+ this.log('error', namespace, title, message, data);
691
+ }
692
+ //#endregion
693
+ //#region ---- Utility Methods ----
694
+ formatPrefix(namespace, title, message) {
695
+ return `[AXP:${namespace}] ${title} — ${message}`;
696
+ }
697
+ resolveData(data) {
698
+ if (data == null) {
699
+ return undefined;
700
+ }
701
+ return typeof data === 'function' ? data() : data;
702
+ }
703
+ log(level, namespace, title, message, data) {
704
+ const prefix = this.formatPrefix(namespace, title, message);
705
+ const resolved = this.resolveData(data);
706
+ if (resolved != null) {
707
+ console[level](prefix, resolved);
708
+ return;
709
+ }
710
+ console[level](prefix);
711
+ }
712
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPDebugService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
713
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPDebugService, providedIn: 'root' }); }
714
+ }
715
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPDebugService, decorators: [{
716
+ type: Injectable,
717
+ args: [{
718
+ providedIn: 'root',
719
+ }]
720
+ }], ctorParameters: () => [] });
721
+
722
+ /** Trace namespace for form dirty-state diagnostics (lookup/select revert, discard, baseline). */
723
+ const FORM_DIRTY_TRACE_NS = 'FORM STATE';
724
+
725
+ //#region ---- Debug helpers ----
726
+ function previewFormDebugValue(value) {
727
+ if (value == null) {
728
+ return value;
729
+ }
730
+ if (typeof value === 'string') {
731
+ return value.length > 160 ? `${value.slice(0, 160)}…` : value;
732
+ }
733
+ if (typeof value === 'number' || typeof value === 'boolean') {
734
+ return value;
735
+ }
736
+ try {
737
+ const json = JSON.stringify(value);
738
+ return json.length > 280 ? `${json.slice(0, 280)}…` : JSON.parse(json);
739
+ }
740
+ catch {
741
+ return String(value);
742
+ }
743
+ }
744
+ //#endregion
715
745
  //#region ---- Context signal store ----
716
746
  const AXPContextStore = signalStore(withState(() => ({
717
747
  data: {},
@@ -776,10 +806,11 @@ const AXPContextStore = signalStore(withState(() => ({
776
806
  }
777
807
  const updatedData = setSmart(currentData, path, value);
778
808
  const isStillDirty = hasSaved && isFormContextDirty(updatedData, saved);
809
+ const prevUserEdited = store.userEditedSinceCommit();
779
810
  const nextUserEdited = isStillDirty
780
811
  ? origin === 'user'
781
812
  ? true
782
- : store.userEditedSinceCommit()
813
+ : prevUserEdited
783
814
  : false;
784
815
  const changeEvent = {
785
816
  oldValue,
@@ -789,6 +820,24 @@ const AXPContextStore = signalStore(withState(() => ({
789
820
  data: updatedData,
790
821
  origin,
791
822
  };
823
+ if (hasSaved && (prevUserEdited !== nextUserEdited || (origin === 'user' && isStillDirty))) {
824
+ AXPDebugService.instance?.trace(FORM_DIRTY_TRACE_NS, 'context-store', 'updateValue dirty transition', () => ({
825
+ path,
826
+ origin,
827
+ prevUserEdited,
828
+ nextUserEdited,
829
+ isStillDirty,
830
+ selectionEqual: isSelectionValueEqual(value, savedAtPath),
831
+ formValueEqual: isFormValueEqual(value, savedAtPath),
832
+ lodashEqual: isEqual(value, savedAtPath),
833
+ oldPreview: previewFormDebugValue(oldValue),
834
+ newPreview: previewFormDebugValue(value),
835
+ savedPreview: previewFormDebugValue(savedAtPath),
836
+ dirtyPaths: isStillDirty
837
+ ? summarizeFormContextDirtyDiff(updatedData, saved)
838
+ : [],
839
+ }));
840
+ }
792
841
  patchState(store, {
793
842
  previousSnapshot: store.snapshot(),
794
843
  data: updatedData,
@@ -932,6 +981,12 @@ const AXPContextStore = signalStore(withState(() => ({
932
981
  /** Marks the current data as the saved baseline. */
933
982
  commitSaved() {
934
983
  const snapshot = cloneDeep(store.data());
984
+ const prevUserEdited = store.userEditedSinceCommit();
985
+ AXPDebugService.instance?.trace(FORM_DIRTY_TRACE_NS, 'context-store', 'commitSaved', () => ({
986
+ prevUserEdited,
987
+ hadSaved: !isEmpty(store.savedSnapshot()),
988
+ topKeys: Object.keys(snapshot ?? {}).slice(0, 24),
989
+ }));
935
990
  patchState(store, {
936
991
  savedSnapshot: snapshot,
937
992
  previousSnapshot: snapshot,
@@ -1022,10 +1077,10 @@ class AXPContextEvalFactory {
1022
1077
  eval: (path, options) => this.create(getData())(path, options),
1023
1078
  };
1024
1079
  }
1025
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPContextEvalFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1026
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPContextEvalFactory, providedIn: 'root' }); }
1080
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPContextEvalFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1081
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPContextEvalFactory, providedIn: 'root' }); }
1027
1082
  }
1028
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPContextEvalFactory, decorators: [{
1083
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPContextEvalFactory, decorators: [{
1029
1084
  type: Injectable,
1030
1085
  args: [{ providedIn: 'root' }]
1031
1086
  }] });
@@ -1078,10 +1133,10 @@ class AXPExpressionEvaluatorScopeProviderService {
1078
1133
  await this.load();
1079
1134
  return this.cache || {};
1080
1135
  }
1081
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPExpressionEvaluatorScopeProviderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1082
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPExpressionEvaluatorScopeProviderService, providedIn: 'root' }); }
1136
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPExpressionEvaluatorScopeProviderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1137
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPExpressionEvaluatorScopeProviderService, providedIn: 'root' }); }
1083
1138
  }
1084
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPExpressionEvaluatorScopeProviderService, decorators: [{
1139
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPExpressionEvaluatorScopeProviderService, decorators: [{
1085
1140
  type: Injectable,
1086
1141
  args: [{ providedIn: 'root' }]
1087
1142
  }] });
@@ -1106,21 +1161,21 @@ class AXPExpressionEvaluatorService {
1106
1161
  isExpression(expression) {
1107
1162
  return this.engine.isExpression(expression);
1108
1163
  }
1109
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPExpressionEvaluatorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1110
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPExpressionEvaluatorService, providedIn: 'root' }); }
1164
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPExpressionEvaluatorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1165
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPExpressionEvaluatorService, providedIn: 'root' }); }
1111
1166
  }
1112
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPExpressionEvaluatorService, decorators: [{
1167
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPExpressionEvaluatorService, decorators: [{
1113
1168
  type: Injectable,
1114
1169
  args: [{ providedIn: 'root' }]
1115
1170
  }] });
1116
1171
 
1117
1172
  class AXPComponentSlotPlaceholderComponent {
1118
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPComponentSlotPlaceholderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1119
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: AXPComponentSlotPlaceholderComponent, isStandalone: true, selector: "axp-component-slot-placeholder", ngImport: i0, template: `<div>
1173
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPComponentSlotPlaceholderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1174
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXPComponentSlotPlaceholderComponent, isStandalone: true, selector: "axp-component-slot-placeholder", ngImport: i0, template: `<div>
1120
1175
  <ax-skeleton class="w-full h-10 rounded-md"></ax-skeleton>
1121
1176
  </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1122
1177
  }
1123
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPComponentSlotPlaceholderComponent, decorators: [{
1178
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPComponentSlotPlaceholderComponent, decorators: [{
1124
1179
  type: Component,
1125
1180
  args: [{
1126
1181
  selector: 'axp-component-slot-placeholder',
@@ -1149,10 +1204,10 @@ class AXPComponentSlotRegistryService {
1149
1204
  get(slotName) {
1150
1205
  return this.registry.get(slotName) || [];
1151
1206
  }
1152
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPComponentSlotRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1153
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPComponentSlotRegistryService, providedIn: 'root' }); }
1207
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPComponentSlotRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1208
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPComponentSlotRegistryService, providedIn: 'root' }); }
1154
1209
  }
1155
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPComponentSlotRegistryService, decorators: [{
1210
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPComponentSlotRegistryService, decorators: [{
1156
1211
  type: Injectable,
1157
1212
  args: [{
1158
1213
  providedIn: 'root'
@@ -1161,18 +1216,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1161
1216
 
1162
1217
  class AXPComponentSlotDirective {
1163
1218
  constructor() {
1164
- this.name = input.required(...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
1165
- this.host = input(...(ngDevMode ? [undefined, { debugName: "host" }] : /* istanbul ignore next */ []));
1166
- this.context = input(...(ngDevMode ? [undefined, { debugName: "context" }] : /* istanbul ignore next */ []));
1219
+ this.name = input.required(/* @ts-ignore */
1220
+ ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
1221
+ this.host = input(/* @ts-ignore */
1222
+ ...(ngDevMode ? [undefined, { debugName: "host" }] : /* istanbul ignore next */ []));
1223
+ this.context = input(/* @ts-ignore */
1224
+ ...(ngDevMode ? [undefined, { debugName: "context" }] : /* istanbul ignore next */ []));
1167
1225
  this.elementRef = inject(ElementRef);
1168
1226
  this.registryService = inject(AXPComponentSlotRegistryService);
1169
1227
  this.injector = inject(Injector);
1170
1228
  this.evaluator = inject(AXPExpressionEvaluatorService);
1171
1229
  this.viewContainerRef = inject(ViewContainerRef);
1172
1230
  this.contextStore = inject(AXPContextStore);
1173
- this.isEmpty = computed(() => this._viewCount() === 0, ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
1231
+ this.isEmpty = computed(() => this._viewCount() === 0, /* @ts-ignore */
1232
+ ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
1174
1233
  // Create a signal to store the count of children
1175
- this._viewCount = signal(0, ...(ngDevMode ? [{ debugName: "_viewCount" }] : /* istanbul ignore next */ []));
1234
+ this._viewCount = signal(0, /* @ts-ignore */
1235
+ ...(ngDevMode ? [{ debugName: "_viewCount" }] : /* istanbul ignore next */ []));
1176
1236
  // Track component references for updates
1177
1237
  this.componentRefs = [];
1178
1238
  // Track placeholder references for replacement
@@ -1293,10 +1353,10 @@ class AXPComponentSlotDirective {
1293
1353
  return condition(this.contextStore.data());
1294
1354
  //return condition(this.context());
1295
1355
  }
1296
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPComponentSlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1297
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: AXPComponentSlotDirective, isStandalone: false, selector: "axp-component-slot", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, host: { classPropertyName: "host", publicName: "host", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["slot"], ngImport: i0 }); }
1356
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPComponentSlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1357
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: AXPComponentSlotDirective, isStandalone: false, selector: "axp-component-slot", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, host: { classPropertyName: "host", publicName: "host", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["slot"], ngImport: i0 }); }
1298
1358
  }
1299
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPComponentSlotDirective, decorators: [{
1359
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPComponentSlotDirective, decorators: [{
1300
1360
  type: Directive,
1301
1361
  args: [{
1302
1362
  selector: 'axp-component-slot',
@@ -1356,11 +1416,11 @@ class AXPComponentSlotModule {
1356
1416
  f();
1357
1417
  });
1358
1418
  }
1359
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPComponentSlotModule, deps: [{ token: 'AXPComponentSlotModuleFactory', optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
1360
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXPComponentSlotModule, declarations: [AXPComponentSlotDirective], exports: [AXPComponentSlotDirective] }); }
1361
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPComponentSlotModule }); }
1419
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPComponentSlotModule, deps: [{ token: 'AXPComponentSlotModuleFactory', optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
1420
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXPComponentSlotModule, declarations: [AXPComponentSlotDirective], exports: [AXPComponentSlotDirective] }); }
1421
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPComponentSlotModule }); }
1362
1422
  }
1363
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPComponentSlotModule, decorators: [{
1423
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPComponentSlotModule, decorators: [{
1364
1424
  type: NgModule,
1365
1425
  args: [{
1366
1426
  declarations: [AXPComponentSlotDirective],
@@ -1373,12 +1433,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1373
1433
  args: ['AXPComponentSlotModuleFactory']
1374
1434
  }] }] });
1375
1435
 
1376
- /** Trace namespace for form dirty-state diagnostics (lookup/select revert, discard, baseline). */
1377
- const FORM_DIRTY_TRACE_NS = 'FORM STATE';
1378
-
1379
- //#region ---- AI metadata ----
1380
- //#endregion
1381
-
1382
1436
  const AXP_CONTEXT_DEFINITION_PROVIDER = new InjectionToken('AXP_CONTEXT_DEFINITION_PROVIDER');
1383
1437
  //#endregion
1384
1438
 
@@ -1409,109 +1463,14 @@ class AXPContextDefinitionProviderService {
1409
1463
  async get(name) {
1410
1464
  return (await this.items()).find((d) => d.name === name);
1411
1465
  }
1412
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPContextDefinitionProviderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1413
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPContextDefinitionProviderService, providedIn: 'root' }); }
1466
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPContextDefinitionProviderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1467
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPContextDefinitionProviderService, providedIn: 'root' }); }
1414
1468
  }
1415
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPContextDefinitionProviderService, decorators: [{
1469
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPContextDefinitionProviderService, decorators: [{
1416
1470
  type: Injectable,
1417
1471
  args: [{ providedIn: 'root' }]
1418
1472
  }] });
1419
1473
 
1420
- //#region ---- Imports ----
1421
- //#endregion
1422
- //#region ---- Debug Service ----
1423
- /**
1424
- * Platform debug and trace logging.
1425
- * Call `trace` / `traceGroup` for diagnostics (gated by tenant Debug Mode).
1426
- * Call `warn` / `error` for always-on console output.
1427
- *
1428
- * Debug Mode is applied via `setDebugMode()` (wired from settings in platform common).
1429
- */
1430
- class AXPDebugService {
1431
- //#endregion
1432
- //#region ---- Lifecycle ----
1433
- constructor() {
1434
- //#endregion
1435
- //#region ---- State ----
1436
- this.debugModeEnabled = false;
1437
- AXPDebugService.instance = this;
1438
- }
1439
- //#endregion
1440
- //#region ---- Debug Mode ----
1441
- isDebugMode() {
1442
- return this.debugModeEnabled;
1443
- }
1444
- setDebugMode(enabled) {
1445
- this.debugModeEnabled = enabled;
1446
- }
1447
- //#endregion
1448
- //#region ---- Trace API ----
1449
- /**
1450
- * @param namespace Module/feature namespace (kebab-case). Filter console with `[AXP:<namespace>]`.
1451
- * @param title Short area name (component, service, middleware).
1452
- * @param message What happened.
1453
- * @param data Optional structured payload, or a factory evaluated only when Debug Mode is on.
1454
- */
1455
- trace(namespace, title, message, data) {
1456
- if (!this.debugModeEnabled) {
1457
- return;
1458
- }
1459
- this.log('log', namespace, title, message, data);
1460
- }
1461
- /**
1462
- * Same as {@link trace} but emits a collapsible console group (useful for multi-field payloads).
1463
- */
1464
- traceGroup(namespace, title, message, data) {
1465
- if (!this.debugModeEnabled) {
1466
- return;
1467
- }
1468
- const resolved = this.resolveData(data);
1469
- console.groupCollapsed(this.formatPrefix(namespace, title, message));
1470
- if (resolved != null) {
1471
- for (const [key, value] of Object.entries(resolved)) {
1472
- if (value !== undefined) {
1473
- console.log(key, value);
1474
- }
1475
- }
1476
- }
1477
- console.groupEnd();
1478
- }
1479
- warn(namespace, title, message, data) {
1480
- this.log('warn', namespace, title, message, data);
1481
- }
1482
- error(namespace, title, message, data) {
1483
- this.log('error', namespace, title, message, data);
1484
- }
1485
- //#endregion
1486
- //#region ---- Utility Methods ----
1487
- formatPrefix(namespace, title, message) {
1488
- return `[AXP:${namespace}] ${title} — ${message}`;
1489
- }
1490
- resolveData(data) {
1491
- if (data == null) {
1492
- return undefined;
1493
- }
1494
- return typeof data === 'function' ? data() : data;
1495
- }
1496
- log(level, namespace, title, message, data) {
1497
- const prefix = this.formatPrefix(namespace, title, message);
1498
- const resolved = this.resolveData(data);
1499
- if (resolved != null) {
1500
- console[level](prefix, resolved);
1501
- return;
1502
- }
1503
- console[level](prefix);
1504
- }
1505
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDebugService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1506
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDebugService, providedIn: 'root' }); }
1507
- }
1508
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDebugService, decorators: [{
1509
- type: Injectable,
1510
- args: [{
1511
- providedIn: 'root',
1512
- }]
1513
- }], ctorParameters: () => [] });
1514
-
1515
1474
  class AXPDataGenerator {
1516
1475
  static uuid() {
1517
1476
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (char) => {
@@ -1693,287 +1652,18 @@ function objectKeyValueTransforms(keyName) {
1693
1652
  };
1694
1653
  }
1695
1654
 
1696
- const AXP_DATASOURCE_DEFINITION_PROVIDER = new InjectionToken('AXP_DATASOURCE_TYPE_PROVIDER');
1697
- class AXPDataSourceDefinitionProviderService {
1698
- constructor() {
1699
- this.providers = inject(AXP_DATASOURCE_DEFINITION_PROVIDER, { optional: true });
1700
- }
1701
- async items() {
1702
- const items = [];
1703
- // Load from DI tokens; resolve lazy providers (provideLazyProvider uses useFactory that returns Promise<T>)
1704
- if (Array.isArray(this.providers)) {
1705
- for (const raw of this.providers) {
1706
- const provider = await Promise.resolve(raw);
1707
- if (provider && typeof provider.items === 'function') {
1708
- set(provider, '__parent__', this);
1709
- items.push(...(await provider.items()));
1710
- }
1711
- }
1712
- }
1713
- return items;
1714
- }
1715
- async get(name) {
1716
- return (await this.items()).find((c) => c.name == name);
1717
- }
1718
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataSourceDefinitionProviderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1719
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataSourceDefinitionProviderService, providedIn: 'root' }); }
1720
- }
1721
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataSourceDefinitionProviderService, decorators: [{
1722
- type: Injectable,
1723
- args: [{ providedIn: 'root' }]
1724
- }] });
1725
-
1726
- //#region ---- Imports ----
1727
- //#endregion
1728
- /**
1729
- * Resolves registry-backed {@link AXDataSource} instances and exposes readiness (`isReady`, `whenReady`)
1730
- * so widgets do not bind selected values before the provider datasource is available.
1731
- */
1732
- class AXPDataSourceQueryService {
1733
- constructor() {
1734
- //#region ---- Services & State ----
1735
- this.definitionService = inject(AXPDataSourceDefinitionProviderService);
1736
- this.entries = new Map();
1737
- }
1738
- //#endregion
1739
- //#region ---- Public API ----
1740
- /**
1741
- * Returns true when the named registry datasource has been resolved for the given options.
1742
- */
1743
- isReady(name, options) {
1744
- const entry = this.entries.get(this.buildCacheKey(name, options));
1745
- return entry?.result?.ready === true && entry.result.dataSource != null;
1746
- }
1747
- /**
1748
- * Emits once when the registry datasource is resolved (or fails) for the given options.
1749
- */
1750
- whenReady(name, options) {
1751
- return this.ensureLoading(name, options).readySubject.asObservable().pipe(filter((result) => result.ready), take(1));
1752
- }
1753
- /**
1754
- * Resolves and returns the {@link AXDataSource} for a registry name, waiting for providers when needed.
1755
- */
1756
- async getDataSource(name, options) {
1757
- const result = await this.resolve(name, options);
1758
- return result.dataSource;
1759
- }
1760
- /**
1761
- * Resolves the registry datasource, then looks up one or more keys via `byKey`.
1762
- */
1763
- async queryByKey(name, key, options) {
1764
- if (isNil(key)) {
1765
- return null;
1766
- }
1767
- const result = await this.resolve(name, options);
1768
- const dataSource = result.dataSource;
1769
- if (!dataSource?.config?.byKey) {
1770
- return null;
1771
- }
1772
- if (Array.isArray(key)) {
1773
- const items = await Promise.all(key.map((k) => dataSource.config.byKey(k)));
1774
- return items.filter((item) => item != null);
1775
- }
1776
- return (await dataSource.config.byKey(key)) ?? null;
1777
- }
1778
- /**
1779
- * Fully resolves a registry datasource (definition + AXDataSource instance).
1780
- */
1781
- async resolve(name, options) {
1782
- const entry = this.ensureLoading(name, options);
1783
- if (entry.result?.ready) {
1784
- return entry.result;
1785
- }
1786
- return entry.loadPromise;
1787
- }
1788
- /**
1789
- * Clears cached query state. Pass a registry name to invalidate one datasource, or omit to clear all.
1790
- */
1791
- invalidate(name) {
1792
- if (!name) {
1793
- this.entries.clear();
1794
- return;
1795
- }
1796
- const prefix = `${name}::`;
1797
- for (const key of [...this.entries.keys()]) {
1798
- if (key === name || key.startsWith(prefix)) {
1799
- this.entries.delete(key);
1800
- }
1801
- }
1802
- }
1803
- //#endregion
1804
- //#region ---- Loading ----
1805
- ensureLoading(name, options) {
1806
- const cacheKey = this.buildCacheKey(name, options);
1807
- let entry = this.entries.get(cacheKey);
1808
- if (!entry) {
1809
- entry = {
1810
- name,
1811
- cacheKey,
1812
- readySubject: new ReplaySubject(1),
1813
- };
1814
- this.entries.set(cacheKey, entry);
1815
- entry.loadPromise = this.loadEntry(entry, name, options);
1816
- }
1817
- return entry;
1818
- }
1819
- async loadEntry(entry, name, options) {
1820
- const pending = {
1821
- name,
1822
- ready: false,
1823
- dataSource: null,
1824
- valueField: options?.valueField ?? 'id',
1825
- textField: 'title',
1826
- };
1827
- try {
1828
- const definition = await this.waitForDefinition(name, options);
1829
- if (!definition) {
1830
- const failed = {
1831
- ...pending,
1832
- ready: true,
1833
- error: new Error(`Data source '${name}' was not found in the registry`),
1834
- };
1835
- entry.result = failed;
1836
- entry.readySubject.next(failed);
1837
- return failed;
1838
- }
1839
- const valueField = options?.valueField ?? definition.valueField?.name ?? 'id';
1840
- const textField = definition.textField?.name ?? 'title';
1841
- const dataSource = await this.createDataSource(definition, {
1842
- ...options,
1843
- valueField,
1844
- });
1845
- const translated = dataSource ? this.wrapTranslatedDataSource(dataSource, textField) : null;
1846
- const success = {
1847
- name,
1848
- ready: true,
1849
- dataSource: translated,
1850
- definition,
1851
- valueField,
1852
- textField,
1853
- };
1854
- entry.result = success;
1855
- entry.readySubject.next(success);
1856
- return success;
1857
- }
1858
- catch (error) {
1859
- const failed = {
1860
- ...pending,
1861
- ready: true,
1862
- error,
1863
- };
1864
- entry.result = failed;
1865
- entry.readySubject.next(failed);
1866
- return failed;
1867
- }
1868
- }
1869
- async waitForDefinition(name, options) {
1870
- const waitForRegistry = options?.waitForRegistry ?? true;
1871
- const maxAttempts = options?.maxRegistryAttempts ?? 20;
1872
- const retryDelayMs = options?.registryRetryDelayMs ?? 50;
1873
- const attempts = waitForRegistry ? maxAttempts : 1;
1874
- for (let attempt = 0; attempt < attempts; attempt++) {
1875
- const definition = await this.definitionService.get(name);
1876
- if (definition) {
1877
- return definition;
1878
- }
1879
- if (attempt < attempts - 1) {
1880
- await this.sleep(retryDelayMs);
1881
- }
1882
- }
1883
- return undefined;
1884
- }
1885
- async createDataSource(definition, options) {
1886
- if (options.useSamples && definition.samples) {
1887
- const samples = await this.resolveSamples(definition.samples);
1888
- return convertArrayToDataSource(samples, {
1889
- key: options.valueField,
1890
- pageSize: 500,
1891
- });
1892
- }
1893
- const sourceResult = definition.source();
1894
- const resolved = await Promise.resolve(sourceResult);
1895
- if (resolved instanceof AXDataSource) {
1896
- this.applyValueFieldAsKey(resolved, options.valueField);
1897
- return resolved;
1898
- }
1899
- if (Array.isArray(resolved)) {
1900
- return convertArrayToDataSource(resolved, {
1901
- key: options.valueField,
1902
- pageSize: 500,
1903
- });
1904
- }
1905
- return null;
1906
- }
1907
- async resolveSamples(samples) {
1908
- return castArray(await Promise.resolve(samples));
1909
- }
1910
- applyValueFieldAsKey(dataSource, valueField) {
1911
- if (dataSource.config?.key !== valueField) {
1912
- dataSource.config = { ...dataSource.config, key: valueField };
1913
- }
1914
- }
1915
- wrapTranslatedDataSource(dataSource, textField) {
1916
- const config = dataSource.config;
1917
- if (!config) {
1918
- return dataSource;
1919
- }
1920
- const originalByKey = config.byKey;
1921
- const originalLoad = config.load;
1922
- if (originalByKey) {
1923
- config.byKey = async (key) => this.translateItem(await originalByKey(key), textField);
1924
- }
1925
- if (originalLoad) {
1926
- config.load = async (event) => {
1927
- const result = await originalLoad(event);
1928
- if (!result?.items?.length) {
1929
- return result;
1930
- }
1931
- return {
1932
- ...result,
1933
- items: result.items.map((item) => this.translateItem(item, textField)),
1934
- };
1935
- };
1936
- }
1937
- return dataSource;
1938
- }
1939
- translateItem(item, textField) {
1940
- if (item == null || typeof item !== 'object') {
1941
- return item;
1942
- }
1943
- const title = get(item, textField);
1944
- // Keep i18n keys for UI widgets (ax-select-box translate pipe) so labels react to locale changes.
1945
- if (isString(title) && title.startsWith('@')) {
1946
- return item;
1947
- }
1948
- return item;
1949
- }
1950
- buildCacheKey(name, options) {
1951
- const valueField = options?.valueField ?? '';
1952
- const useSamples = options?.useSamples ? '1' : '0';
1953
- return `${name}::${valueField}::${useSamples}`;
1954
- }
1955
- sleep(ms) {
1956
- return new Promise((resolve) => setTimeout(resolve, ms));
1957
- }
1958
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataSourceQueryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1959
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataSourceQueryService, providedIn: 'root' }); }
1960
- }
1961
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataSourceQueryService, decorators: [{
1962
- type: Injectable,
1963
- args: [{ providedIn: 'root' }]
1964
- }] });
1965
-
1966
1655
  // src/app/directives/grid-layout.directive.ts
1967
1656
  class AXPContentCheckerDirective {
1968
1657
  constructor() {
1969
1658
  this.viewContainerRef = inject(ViewContainerRef);
1970
1659
  this.elementRef = inject((ElementRef));
1971
- this.isEmpty = computed(() => this.viewContainerRef.length === 0, ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
1660
+ this.isEmpty = computed(() => this.viewContainerRef.length === 0, /* @ts-ignore */
1661
+ ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
1972
1662
  }
1973
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPContentCheckerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1974
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: AXPContentCheckerDirective, isStandalone: true, selector: "[axp-content-checker]", exportAs: ["checker"], ngImport: i0 }); }
1663
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPContentCheckerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1664
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: AXPContentCheckerDirective, isStandalone: true, selector: "[axp-content-checker]", exportAs: ["checker"], ngImport: i0 }); }
1975
1665
  }
1976
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPContentCheckerDirective, decorators: [{
1666
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPContentCheckerDirective, decorators: [{
1977
1667
  type: Directive,
1978
1668
  args: [{
1979
1669
  selector: '[axp-content-checker]',
@@ -2003,10 +1693,10 @@ class AXPDblClickDirective {
2003
1693
  }
2004
1694
  this.lastTap = currentTime;
2005
1695
  }
2006
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDblClickDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2007
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: AXPDblClickDirective, isStandalone: true, selector: "[onDblClick]", outputs: { onDblClick: "onDblClick" }, host: { listeners: { "dblclick": "handleOnDblClick($event)", "touchend": "onTouchEnd($event)" } }, ngImport: i0 }); }
1696
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPDblClickDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1697
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: AXPDblClickDirective, isStandalone: true, selector: "[onDblClick]", outputs: { onDblClick: "onDblClick" }, host: { listeners: { "dblclick": "handleOnDblClick($event)", "touchend": "onTouchEnd($event)" } }, ngImport: i0 }); }
2008
1698
  }
2009
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDblClickDirective, decorators: [{
1699
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPDblClickDirective, decorators: [{
2010
1700
  type: Directive,
2011
1701
  args: [{
2012
1702
  selector: '[onDblClick]'
@@ -2031,7 +1721,8 @@ class AXPElementDataDirective {
2031
1721
  const currentData = this.data();
2032
1722
  const currentPath = this.path();
2033
1723
  set(this.elementRef.nativeElement, currentPath, currentData);
2034
- }, ...(ngDevMode ? [{ debugName: "updateEffect" }] : /* istanbul ignore next */ []));
1724
+ }, /* @ts-ignore */
1725
+ ...(ngDevMode ? [{ debugName: "updateEffect" }] : /* istanbul ignore next */ []));
2035
1726
  }
2036
1727
  ngOnInit() {
2037
1728
  // Initial data setup
@@ -2049,10 +1740,10 @@ class AXPElementDataDirective {
2049
1740
  setData(data) {
2050
1741
  set(this.elementRef.nativeElement, this.path(), data);
2051
1742
  }
2052
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPElementDataDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
2053
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: AXPElementDataDirective, isStandalone: true, selector: "[axp-data]", inputs: { data: { classPropertyName: "data", publicName: "axp-data", isSignal: true, isRequired: false, transformFunction: null }, path: { classPropertyName: "path", publicName: "axp-data-path", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
1743
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPElementDataDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
1744
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: AXPElementDataDirective, isStandalone: true, selector: "[axp-data]", inputs: { data: { classPropertyName: "data", publicName: "axp-data", isSignal: true, isRequired: false, transformFunction: null }, path: { classPropertyName: "path", publicName: "axp-data-path", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
2054
1745
  }
2055
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPElementDataDirective, decorators: [{
1746
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPElementDataDirective, decorators: [{
2056
1747
  type: Directive,
2057
1748
  args: [{
2058
1749
  selector: '[axp-data]',
@@ -2109,10 +1800,10 @@ class AXPGridLayoutDirective {
2109
1800
  }
2110
1801
  });
2111
1802
  }
2112
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPGridLayoutDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
2113
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: AXPGridLayoutDirective, isStandalone: true, selector: "[axp-grid-layout]", inputs: { options: { classPropertyName: "options", publicName: "axp-grid-layout", isSignal: true, isRequired: true, transformFunction: null } }, usesOnChanges: true, ngImport: i0 }); }
1803
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPGridLayoutDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
1804
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: AXPGridLayoutDirective, isStandalone: true, selector: "[axp-grid-layout]", inputs: { options: { classPropertyName: "options", publicName: "axp-grid-layout", isSignal: true, isRequired: true, transformFunction: null } }, usesOnChanges: true, ngImport: i0 }); }
2114
1805
  }
2115
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPGridLayoutDirective, decorators: [{
1806
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPGridLayoutDirective, decorators: [{
2116
1807
  type: Directive,
2117
1808
  args: [{
2118
1809
  selector: '[axp-grid-layout]',
@@ -2256,22 +1947,26 @@ class AXPDistributedEventListenerService {
2256
1947
  this.listenersByKey.clear();
2257
1948
  this.providersLoaded = false;
2258
1949
  }
2259
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDistributedEventListenerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2260
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDistributedEventListenerService, providedIn: 'root' }); }
1950
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPDistributedEventListenerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1951
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPDistributedEventListenerService, providedIn: 'root' }); }
2261
1952
  }
2262
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDistributedEventListenerService, decorators: [{
1953
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPDistributedEventListenerService, decorators: [{
2263
1954
  type: Injectable,
2264
1955
  args: [{
2265
1956
  providedIn: 'root',
2266
1957
  }]
2267
1958
  }] });
2268
1959
 
1960
+ //#endregion
1961
+ //#region ---- Broadcast event service ----
2269
1962
  class AXPBroadcastEventService {
2270
1963
  constructor() {
2271
1964
  this.eventSubjects = new Map();
2272
1965
  this.pendingRequests = new Map();
2273
1966
  this.multiTabEventHistory = new Set(); // Prevent duplicate processing of the same event
2274
1967
  this.instanceId = AXPDataGenerator.uuid();
1968
+ this.publishPolicies = new Map();
1969
+ this.pendingPublishes = new Map();
2275
1970
  this.channel = new BroadcastChannel('platform_global_events');
2276
1971
  // Handle incoming messages
2277
1972
  this.channel.onmessage = (event) => {
@@ -2301,14 +1996,35 @@ class AXPBroadcastEventService {
2301
1996
  };
2302
1997
  }
2303
1998
  /**
2304
- * Publish an event without expecting a response
1999
+ * Registers a publish-side debounce/throttle policy for an event type.
2000
+ * Prevents duplicate dispatches (channel + local echo) for rapid identical/grouped publishes.
2001
+ */
2002
+ setPublishPolicy(type, policy) {
2003
+ this.publishPolicies.set(type, policy);
2004
+ }
2005
+ clearPublishPolicy(type) {
2006
+ this.publishPolicies.delete(type);
2007
+ this.clearPendingForType(type);
2008
+ }
2009
+ /**
2010
+ * Publish an event without expecting a response.
2011
+ * When a {@link setPublishPolicy} exists for `type`, rapid publishes are collapsed before dispatch.
2305
2012
  */
2306
2013
  publish(type, payload) {
2307
- this.channel.postMessage({ type, payload, sourceId: this.instanceId });
2308
- // Local echo so same-tab listeners receive the event as well
2309
- if (this.eventSubjects.has(type)) {
2310
- this.eventSubjects.get(type).next({ data: payload });
2014
+ const policy = this.publishPolicies.get(type);
2015
+ if (!policy) {
2016
+ this.dispatchPublish(type, payload);
2017
+ return;
2311
2018
  }
2019
+ const bucketKey = policy.key?.(payload) ?? '';
2020
+ const pendingKey = `${type}::${bucketKey}`;
2021
+ const strategy = policy.strategy ?? 'debounce';
2022
+ const existing = this.pendingPublishes.get(pendingKey);
2023
+ if (strategy === 'throttle') {
2024
+ this.publishThrottled(type, payload, policy, pendingKey, existing);
2025
+ return;
2026
+ }
2027
+ this.publishDebounced(type, payload, policy, pendingKey, existing);
2312
2028
  }
2313
2029
  /**
2314
2030
  * Subscribe to an event
@@ -2372,6 +2088,13 @@ class AXPBroadcastEventService {
2372
2088
  */
2373
2089
  ngOnDestroy() {
2374
2090
  this.channel.close();
2091
+ for (const entry of this.pendingPublishes.values()) {
2092
+ if (entry.timer) {
2093
+ clearTimeout(entry.timer);
2094
+ }
2095
+ }
2096
+ this.pendingPublishes.clear();
2097
+ this.publishPolicies.clear();
2375
2098
  // Complete all subjects
2376
2099
  this.eventSubjects.forEach((subject) => subject.complete());
2377
2100
  this.eventSubjects.clear();
@@ -2383,16 +2106,155 @@ class AXPBroadcastEventService {
2383
2106
  // Cleanup multi-tab event history
2384
2107
  this.multiTabEventHistory.clear();
2385
2108
  }
2386
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBroadcastEventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2387
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBroadcastEventService, providedIn: 'root' }); }
2109
+ //#region ---- Publish coalesce helpers ----
2110
+ dispatchPublish(type, payload) {
2111
+ this.channel.postMessage({ type, payload, sourceId: this.instanceId });
2112
+ // Local echo so same-tab listeners receive the event as well
2113
+ if (this.eventSubjects.has(type)) {
2114
+ this.eventSubjects.get(type).next({ data: payload });
2115
+ }
2116
+ }
2117
+ publishDebounced(type, payload, policy, pendingKey, existing) {
2118
+ const merged = existing ? (policy.merge?.(existing.payload, payload) ?? payload) : payload;
2119
+ if (existing?.timer) {
2120
+ clearTimeout(existing.timer);
2121
+ }
2122
+ const entry = { payload: merged };
2123
+ entry.timer = setTimeout(() => {
2124
+ this.pendingPublishes.delete(pendingKey);
2125
+ this.dispatchPublish(type, entry.payload);
2126
+ }, policy.windowMs);
2127
+ this.pendingPublishes.set(pendingKey, entry);
2128
+ }
2129
+ publishThrottled(type, payload, policy, pendingKey, existing) {
2130
+ // Leading edge: first publish in the window dispatches immediately.
2131
+ if (!existing) {
2132
+ this.dispatchPublish(type, payload);
2133
+ const entry = { payload: undefined, throttled: true };
2134
+ entry.timer = setTimeout(() => {
2135
+ const pending = this.pendingPublishes.get(pendingKey);
2136
+ this.pendingPublishes.delete(pendingKey);
2137
+ // Trailing flush if anything arrived during the window after the lead.
2138
+ if (pending && pending.payload !== undefined) {
2139
+ this.dispatchPublish(type, pending.payload);
2140
+ }
2141
+ }, policy.windowMs);
2142
+ this.pendingPublishes.set(pendingKey, entry);
2143
+ return;
2144
+ }
2145
+ // Within window: merge into trailing slot (dispatched when window ends, if any).
2146
+ existing.payload = policy.merge?.(existing.payload, payload) ?? payload;
2147
+ this.pendingPublishes.set(pendingKey, existing);
2148
+ }
2149
+ clearPendingForType(type) {
2150
+ const prefix = `${type}::`;
2151
+ for (const [key, entry] of this.pendingPublishes.entries()) {
2152
+ if (key === type || key.startsWith(prefix)) {
2153
+ if (entry.timer) {
2154
+ clearTimeout(entry.timer);
2155
+ }
2156
+ this.pendingPublishes.delete(key);
2157
+ }
2158
+ }
2159
+ }
2160
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPBroadcastEventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2161
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPBroadcastEventService, providedIn: 'root' }); }
2388
2162
  }
2389
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBroadcastEventService, decorators: [{
2163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPBroadcastEventService, decorators: [{
2390
2164
  type: Injectable,
2391
2165
  args: [{
2392
2166
  providedIn: 'root',
2393
2167
  }]
2394
2168
  }], ctorParameters: () => [] });
2395
2169
 
2170
+ //#region ---- Constants ----
2171
+ const DEFAULT_LAYOUT_REFRESH_COALESCE_MS = 200;
2172
+ //#endregion
2173
+ //#region ---- Refresh meta merge ----
2174
+ function mergeRefreshMeta(existing, incoming) {
2175
+ if (!existing && !incoming) {
2176
+ return undefined;
2177
+ }
2178
+ const merged = { ...existing, ...incoming };
2179
+ if (existing?.resetPagination || incoming?.resetPagination) {
2180
+ merged.resetPagination = true;
2181
+ }
2182
+ const highlight = incoming?.highlightRowId ?? existing?.highlightRowId;
2183
+ if (highlight) {
2184
+ merged.highlightRowId = highlight;
2185
+ }
2186
+ else {
2187
+ delete merged.highlightRowId;
2188
+ }
2189
+ return Object.keys(merged).length > 0 ? merged : undefined;
2190
+ }
2191
+ function mergeLayoutRefreshPayload(previous, incoming) {
2192
+ if (!previous) {
2193
+ return incoming;
2194
+ }
2195
+ if (!incoming) {
2196
+ return previous;
2197
+ }
2198
+ const meta = mergeRefreshMeta(previous.meta, incoming.meta);
2199
+ return meta !== undefined ? { name: incoming.name, meta } : { name: incoming.name };
2200
+ }
2201
+ //#endregion
2202
+ //#region ---- Entity broadcast service ----
2203
+ /**
2204
+ * Typed publish/listen helpers for entity UI events over {@link AXPBroadcastEventService}.
2205
+ * Layout refresh publishes are debounced per entity name on the broadcast service
2206
+ * so local + realtime echoes collapse before dispatch.
2207
+ */
2208
+ class AXPEntityBroadcastService {
2209
+ constructor() {
2210
+ this.broadcast = inject(AXPBroadcastEventService);
2211
+ this.broadcast.setPublishPolicy(AXPEntityEventsKeys.REFRESH_LAYOUT, {
2212
+ windowMs: DEFAULT_LAYOUT_REFRESH_COALESCE_MS,
2213
+ strategy: 'debounce',
2214
+ key: (payload) => payload?.name?.trim() || '',
2215
+ merge: mergeLayoutRefreshPayload,
2216
+ });
2217
+ }
2218
+ publishLayoutRefresh(name, meta) {
2219
+ const payload = meta !== undefined ? { name, meta } : { name };
2220
+ this.broadcast.publish(AXPEntityEventsKeys.REFRESH_LAYOUT, payload);
2221
+ }
2222
+ publishDataReload(name, meta) {
2223
+ const payload = meta !== undefined ? { name, meta } : { name };
2224
+ this.broadcast.publish(AXPEntityEventsKeys.REFRESH_DATA, payload);
2225
+ }
2226
+ publishCreated(payload) {
2227
+ this.broadcast.publish(AXPEntityEventsKeys.CREATED, payload);
2228
+ }
2229
+ publishDeleted(payload) {
2230
+ this.broadcast.publish(AXPEntityEventsKeys.DELETED, payload);
2231
+ }
2232
+ publishModified(payload) {
2233
+ this.broadcast.publish(AXPEntityEventsKeys.MODIFIED, payload);
2234
+ }
2235
+ listenLayoutRefresh() {
2236
+ return this.broadcast.listen(AXPEntityEventsKeys.REFRESH_LAYOUT);
2237
+ }
2238
+ listenDataReload() {
2239
+ return this.broadcast.listen(AXPEntityEventsKeys.REFRESH_DATA);
2240
+ }
2241
+ listenCreated() {
2242
+ return this.broadcast.listen(AXPEntityEventsKeys.CREATED);
2243
+ }
2244
+ listenDeleted() {
2245
+ return this.broadcast.listen(AXPEntityEventsKeys.DELETED);
2246
+ }
2247
+ listenModified() {
2248
+ return this.broadcast.listen(AXPEntityEventsKeys.MODIFIED);
2249
+ }
2250
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityBroadcastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2251
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityBroadcastService, providedIn: 'root' }); }
2252
+ }
2253
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityBroadcastService, decorators: [{
2254
+ type: Injectable,
2255
+ args: [{ providedIn: 'root' }]
2256
+ }], ctorParameters: () => [] });
2257
+
2396
2258
  class AXPHookService {
2397
2259
  constructor() {
2398
2260
  this.listenerProviders = inject(AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, { optional: true }) || [];
@@ -2439,10 +2301,10 @@ class AXPHookService {
2439
2301
  }
2440
2302
  return data;
2441
2303
  }
2442
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPHookService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2443
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPHookService, providedIn: 'root' }); }
2304
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPHookService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2305
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPHookService, providedIn: 'root' }); }
2444
2306
  }
2445
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPHookService, decorators: [{
2307
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPHookService, decorators: [{
2446
2308
  type: Injectable,
2447
2309
  args: [{ providedIn: 'root' }]
2448
2310
  }] });
@@ -2944,7 +2806,8 @@ class AXPKeyboardShortcutRegistry {
2944
2806
  this.activeProfile = toSignal(this.localeService.profileChanged$, {
2945
2807
  initialValue: this.localeService.activeProfile(),
2946
2808
  });
2947
- this.registrations = signal([], ...(ngDevMode ? [{ debugName: "registrations" }] : /* istanbul ignore next */ []));
2809
+ this.registrations = signal([], /* @ts-ignore */
2810
+ ...(ngDevMode ? [{ debugName: "registrations" }] : /* istanbul ignore next */ []));
2948
2811
  this.helpDialogHandler = null;
2949
2812
  this.listenerAttached = false;
2950
2813
  //#endregion
@@ -2953,7 +2816,8 @@ class AXPKeyboardShortcutRegistry {
2953
2816
  this.helpEntries = computed(() => {
2954
2817
  this.activeProfile();
2955
2818
  return this.buildHelpEntries();
2956
- }, ...(ngDevMode ? [{ debugName: "helpEntries" }] : /* istanbul ignore next */ []));
2819
+ }, /* @ts-ignore */
2820
+ ...(ngDevMode ? [{ debugName: "helpEntries" }] : /* istanbul ignore next */ []));
2957
2821
  this.onDocumentKeyDown = (event) => {
2958
2822
  if (event.key === 'Escape' && shouldDeferEscapeToOpenOverlay(this.document)) {
2959
2823
  return;
@@ -3135,10 +2999,10 @@ class AXPKeyboardShortcutRegistry {
3135
2999
  }
3136
3000
  return entries.sort((a, b) => b.priority - a.priority || a.bindingTitle.localeCompare(b.bindingTitle));
3137
3001
  }
3138
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPKeyboardShortcutRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3139
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPKeyboardShortcutRegistry, providedIn: 'root' }); }
3002
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPKeyboardShortcutRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3003
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPKeyboardShortcutRegistry, providedIn: 'root' }); }
3140
3004
  }
3141
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPKeyboardShortcutRegistry, decorators: [{
3005
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPKeyboardShortcutRegistry, decorators: [{
3142
3006
  type: Injectable,
3143
3007
  args: [{
3144
3008
  providedIn: 'root',
@@ -3428,7 +3292,8 @@ class AXPLogoRegistryService {
3428
3292
  constructor() {
3429
3293
  this.providers = new Map();
3430
3294
  this.componentCache = new Map();
3431
- this.revision = signal(0, ...(ngDevMode ? [{ debugName: "revision" }] : /* istanbul ignore next */ []));
3295
+ this.revision = signal(0, /* @ts-ignore */
3296
+ ...(ngDevMode ? [{ debugName: "revision" }] : /* istanbul ignore next */ []));
3432
3297
  /** Bumps when a provider is registered or replaced. */
3433
3298
  this.registryRevision = this.revision.asReadonly();
3434
3299
  const injected = inject(AXP_LOGO_PROVIDER, { optional: true }) ?? [];
@@ -3466,10 +3331,10 @@ class AXPLogoRegistryService {
3466
3331
  inputs: view.inputs,
3467
3332
  };
3468
3333
  }
3469
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPLogoRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3470
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPLogoRegistryService, providedIn: 'root' }); }
3334
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLogoRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3335
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLogoRegistryService, providedIn: 'root' }); }
3471
3336
  }
3472
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPLogoRegistryService, decorators: [{
3337
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLogoRegistryService, decorators: [{
3473
3338
  type: Injectable,
3474
3339
  args: [{ providedIn: 'root' }]
3475
3340
  }], ctorParameters: () => [] });
@@ -3511,10 +3376,10 @@ class AXPEntityLogoRegistrationService {
3511
3376
  }
3512
3377
  return { kind: 'icon', icon: 'fa-solid fa-building', color: 'neutral-400' };
3513
3378
  }
3514
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPEntityLogoRegistrationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3515
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPEntityLogoRegistrationService, providedIn: 'root' }); }
3379
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityLogoRegistrationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3380
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityLogoRegistrationService, providedIn: 'root' }); }
3516
3381
  }
3517
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPEntityLogoRegistrationService, decorators: [{
3382
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityLogoRegistrationService, decorators: [{
3518
3383
  type: Injectable,
3519
3384
  args: [{ providedIn: 'root' }]
3520
3385
  }] });
@@ -3538,42 +3403,54 @@ const AXP_LOGO_IMAGE_SRC_RESOLVER = new InjectionToken('AXP_LOGO_IMAGE_SRC_RESOL
3538
3403
  //#region ---- Unified logo component ----
3539
3404
  class AXPLogoComponent {
3540
3405
  constructor() {
3541
- this.logoKey = input.required(...(ngDevMode ? [{ debugName: "logoKey" }] : /* istanbul ignore next */ []));
3542
- this.appearance = input('auto', ...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
3543
- this.size = input(20, ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
3544
- this.format = input('mark', ...(ngDevMode ? [{ debugName: "format" }] : /* istanbul ignore next */ []));
3406
+ this.logoKey = input.required(/* @ts-ignore */
3407
+ ...(ngDevMode ? [{ debugName: "logoKey" }] : /* istanbul ignore next */ []));
3408
+ this.appearance = input('auto', /* @ts-ignore */
3409
+ ...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
3410
+ this.size = input(20, /* @ts-ignore */
3411
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
3412
+ this.format = input('mark', /* @ts-ignore */
3413
+ ...(ngDevMode ? [{ debugName: "format" }] : /* istanbul ignore next */ []));
3545
3414
  this.registry = inject(AXPLogoRegistryService);
3546
3415
  this.imageSrcResolver = inject(AXP_LOGO_IMAGE_SRC_RESOLVER, { optional: true });
3547
3416
  this.themeResolver = inject(AXP_LOGO_THEME_RESOLVER, { optional: true });
3548
- this.resolvedView = signal(null, ...(ngDevMode ? [{ debugName: "resolvedView" }] : /* istanbul ignore next */ []));
3417
+ this.resolvedView = signal(null, /* @ts-ignore */
3418
+ ...(ngDevMode ? [{ debugName: "resolvedView" }] : /* istanbul ignore next */ []));
3549
3419
  this.blobObjectUrl = null;
3550
3420
  this.resolveGeneration = 0;
3551
- this.resolvedAppearance = computed(() => this.normalizeAppearance(this.appearance()), ...(ngDevMode ? [{ debugName: "resolvedAppearance" }] : /* istanbul ignore next */ []));
3421
+ this.resolvedAppearance = computed(() => this.normalizeAppearance(this.appearance()), /* @ts-ignore */
3422
+ ...(ngDevMode ? [{ debugName: "resolvedAppearance" }] : /* istanbul ignore next */ []));
3552
3423
  this.request = computed(() => ({
3553
3424
  appearance: this.resolvedAppearance(),
3554
3425
  size: this.size(),
3555
3426
  format: this.format(),
3556
- }), ...(ngDevMode ? [{ debugName: "request" }] : /* istanbul ignore next */ []));
3427
+ }), /* @ts-ignore */
3428
+ ...(ngDevMode ? [{ debugName: "request" }] : /* istanbul ignore next */ []));
3557
3429
  this.imageView = computed(() => {
3558
3430
  const view = this.resolvedView();
3559
3431
  return view?.kind === 'image' ? view : null;
3560
- }, ...(ngDevMode ? [{ debugName: "imageView" }] : /* istanbul ignore next */ []));
3432
+ }, /* @ts-ignore */
3433
+ ...(ngDevMode ? [{ debugName: "imageView" }] : /* istanbul ignore next */ []));
3561
3434
  this.componentView = computed(() => {
3562
3435
  const view = this.resolvedView();
3563
3436
  return view?.kind === 'component' ? view : null;
3564
- }, ...(ngDevMode ? [{ debugName: "componentView" }] : /* istanbul ignore next */ []));
3437
+ }, /* @ts-ignore */
3438
+ ...(ngDevMode ? [{ debugName: "componentView" }] : /* istanbul ignore next */ []));
3565
3439
  this.iconView = computed(() => {
3566
3440
  const view = this.resolvedView();
3567
3441
  return view?.kind === 'icon' ? view : null;
3568
- }, ...(ngDevMode ? [{ debugName: "iconView" }] : /* istanbul ignore next */ []));
3442
+ }, /* @ts-ignore */
3443
+ ...(ngDevMode ? [{ debugName: "iconView" }] : /* istanbul ignore next */ []));
3569
3444
  this.imageWidth = computed(() => {
3570
3445
  const view = this.resolvedView();
3571
3446
  return view?.kind === 'image' ? (view.width ?? this.size()) : this.size();
3572
- }, ...(ngDevMode ? [{ debugName: "imageWidth" }] : /* istanbul ignore next */ []));
3447
+ }, /* @ts-ignore */
3448
+ ...(ngDevMode ? [{ debugName: "imageWidth" }] : /* istanbul ignore next */ []));
3573
3449
  this.imageHeight = computed(() => {
3574
3450
  const view = this.resolvedView();
3575
3451
  return view?.kind === 'image' ? (view.height ?? this.size()) : this.size();
3576
- }, ...(ngDevMode ? [{ debugName: "imageHeight" }] : /* istanbul ignore next */ []));
3452
+ }, /* @ts-ignore */
3453
+ ...(ngDevMode ? [{ debugName: "imageHeight" }] : /* istanbul ignore next */ []));
3577
3454
  this.componentInputs = computed(() => {
3578
3455
  const view = this.resolvedView();
3579
3456
  if (view?.kind !== 'component') {
@@ -3584,7 +3461,8 @@ class AXPLogoComponent {
3584
3461
  size: this.size(),
3585
3462
  ...view.inputs,
3586
3463
  };
3587
- }, ...(ngDevMode ? [{ debugName: "componentInputs" }] : /* istanbul ignore next */ []));
3464
+ }, /* @ts-ignore */
3465
+ ...(ngDevMode ? [{ debugName: "componentInputs" }] : /* istanbul ignore next */ []));
3588
3466
  effect((onCleanup) => {
3589
3467
  this.registry.registryRevision();
3590
3468
  const key = this.logoKey();
@@ -3646,14 +3524,14 @@ class AXPLogoComponent {
3646
3524
  }
3647
3525
  return this.themeResolver?.isDarkMode() ? 'dark' : 'light';
3648
3526
  }
3649
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPLogoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3650
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPLogoComponent, isStandalone: true, selector: "axp-logo", inputs: { logoKey: { classPropertyName: "logoKey", publicName: "logoKey", isSignal: true, isRequired: true, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "inline-flex items-center justify-center shrink-0" }, ngImport: i0, template: "@switch (resolvedView()?.kind) {\n @case ('image') {\n @if (imageView(); as view) {\n <ax-image [width]=\"imageWidth()\" [height]=\"imageHeight()\" [src]=\"view.src\"></ax-image>\n }\n }\n @case ('component') {\n @if (componentView(); as view) {\n <ng-container *ngComponentOutlet=\"view.component; inputs: componentInputs()\"></ng-container>\n }\n }\n @case ('icon') {\n @if (iconView(); as view) {\n <ax-icon><i [class]=\"view.icon\" [style.color]=\"view.color\"></i></ax-icon>\n }\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: AXImageModule }, { kind: "component", type: i2.AXImageComponent, selector: "ax-image", inputs: ["width", "height", "overlayMode", "src", "alt", "priority", "lazy"], outputs: ["onLoad", "onError"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3527
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLogoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3528
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLogoComponent, isStandalone: true, selector: "axp-logo", inputs: { logoKey: { classPropertyName: "logoKey", publicName: "logoKey", isSignal: true, isRequired: true, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "inline-flex items-center justify-center shrink-0" }, ngImport: i0, template: "@switch (resolvedView()?.kind) {\n @case ('image') {\n @if (imageView(); as view) {\n <ax-image [width]=\"imageWidth()\" [height]=\"imageHeight()\" [src]=\"view.src\"></ax-image>\n }\n }\n @case ('component') {\n @if (componentView(); as view) {\n <ng-container *ngComponentOutlet=\"view.component; inputs: componentInputs()\"></ng-container>\n }\n }\n @case ('icon') {\n @if (iconView(); as view) {\n <ax-icon><i [class]=\"view.icon\" [style.color]=\"view.color\"></i></ax-icon>\n }\n }\n}\n", styles: [":host ax-image img{object-fit:contain;image-rendering:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: AXImageModule }, { kind: "component", type: i2.AXImageComponent, selector: "ax-image", inputs: ["width", "height", "overlayMode", "src", "alt", "priority", "lazy"], outputs: ["onLoad", "onError"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3651
3529
  }
3652
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPLogoComponent, decorators: [{
3530
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLogoComponent, decorators: [{
3653
3531
  type: Component,
3654
3532
  args: [{ selector: 'axp-logo', imports: [CommonModule, AXImageModule, AXDecoratorModule], host: {
3655
3533
  class: 'inline-flex items-center justify-center shrink-0',
3656
- }, changeDetection: ChangeDetectionStrategy.OnPush, template: "@switch (resolvedView()?.kind) {\n @case ('image') {\n @if (imageView(); as view) {\n <ax-image [width]=\"imageWidth()\" [height]=\"imageHeight()\" [src]=\"view.src\"></ax-image>\n }\n }\n @case ('component') {\n @if (componentView(); as view) {\n <ng-container *ngComponentOutlet=\"view.component; inputs: componentInputs()\"></ng-container>\n }\n }\n @case ('icon') {\n @if (iconView(); as view) {\n <ax-icon><i [class]=\"view.icon\" [style.color]=\"view.color\"></i></ax-icon>\n }\n }\n}\n" }]
3534
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "@switch (resolvedView()?.kind) {\n @case ('image') {\n @if (imageView(); as view) {\n <ax-image [width]=\"imageWidth()\" [height]=\"imageHeight()\" [src]=\"view.src\"></ax-image>\n }\n }\n @case ('component') {\n @if (componentView(); as view) {\n <ng-container *ngComponentOutlet=\"view.component; inputs: componentInputs()\"></ng-container>\n }\n }\n @case ('icon') {\n @if (iconView(); as view) {\n <ax-icon><i [class]=\"view.icon\" [style.color]=\"view.color\"></i></ax-icon>\n }\n }\n}\n", styles: [":host ax-image img{object-fit:contain;image-rendering:auto}\n"] }]
3657
3535
  }], ctorParameters: () => [], propDecorators: { logoKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "logoKey", required: true }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], format: [{ type: i0.Input, args: [{ isSignal: true, alias: "format", required: false }] }] } });
3658
3536
 
3659
3537
  /** Global overlay flag + task count ({@link AXPLayoutThemeService}). */
@@ -3665,7 +3543,63 @@ const OVERLAY_DETAILS_VIEW_TRACE_NS = 'OVERLAY-DETAILS-VIEW';
3665
3543
  /** Widget tree mount / settle polling ({@link AXPWidgetContainerComponent}). */
3666
3544
  const OVERLAY_WIDGET_SETTLE_TRACE_NS = 'OVERLAY-WIDGET-SETTLE';
3667
3545
 
3668
- //#region ---- Imports ----
3546
+ //#region ----- Imports -----
3547
+ //#endregion
3548
+
3549
+ //#region ----- Types -----
3550
+ /**
3551
+ * Packaging kind for edition modules checklist (view mode: By Type).
3552
+ */
3553
+ const AXP_MODULE_TYPE = {
3554
+ platform: 'platform',
3555
+ domain: 'domain',
3556
+ integration: 'integration',
3557
+ };
3558
+ /**
3559
+ * Business-area domain for edition modules checklist (view mode: By Domain).
3560
+ * Aligns with integration domain ids where applicable.
3561
+ */
3562
+ const AXP_MODULE_DOMAIN = {
3563
+ platform: 'platform',
3564
+ humanCapital: 'human-capital',
3565
+ projectManagement: 'project-management',
3566
+ assetMaintenance: 'asset-maintenance',
3567
+ workplaceSafety: 'workplace-safety',
3568
+ assessmentLearning: 'assessment-learning',
3569
+ financeCommerce: 'finance-commerce',
3570
+ customerSupplier: 'customer-supplier',
3571
+ communication: 'communication',
3572
+ ai: 'ai',
3573
+ contentDocuments: 'content-documents',
3574
+ data: 'data',
3575
+ operations: 'operations',
3576
+ weather: 'weather',
3577
+ sourceControl: 'source-control',
3578
+ general: 'general',
3579
+ };
3580
+ //#endregion
3581
+ //#region ----- Resolvers -----
3582
+ /**
3583
+ * Resolves module packaging type with fallbacks when unset on the manifest.
3584
+ */
3585
+ function resolveModuleType(manifest) {
3586
+ if (manifest.type) {
3587
+ return manifest.type;
3588
+ }
3589
+ if (manifest.required) {
3590
+ return AXP_MODULE_TYPE.platform;
3591
+ }
3592
+ if (manifest.name.endsWith('Extension')) {
3593
+ return AXP_MODULE_TYPE.integration;
3594
+ }
3595
+ return AXP_MODULE_TYPE.domain;
3596
+ }
3597
+ /**
3598
+ * Resolves module business domain with fallback when unset on the manifest.
3599
+ */
3600
+ function resolveModuleDomain(manifest) {
3601
+ return manifest.domain || AXP_MODULE_DOMAIN.general;
3602
+ }
3669
3603
  //#endregion
3670
3604
 
3671
3605
  //#region ---- Provider Interfaces ----
@@ -3940,97 +3874,99 @@ class AXPModuleManifestRegistry {
3940
3874
  }
3941
3875
  return { missingModules, missingFeatures };
3942
3876
  }
3943
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPModuleManifestRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3944
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPModuleManifestRegistry, providedIn: 'root' }); }
3877
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPModuleManifestRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3878
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPModuleManifestRegistry, providedIn: 'root' }); }
3945
3879
  }
3946
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPModuleManifestRegistry, decorators: [{
3880
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPModuleManifestRegistry, decorators: [{
3947
3881
  type: Injectable,
3948
3882
  args: [{ providedIn: 'root' }]
3949
3883
  }] });
3950
3884
 
3951
- //#region ---- Imports ----
3952
3885
  //#endregion
3953
- //#region ---- Module manifests data source ----
3886
+ //#region ----- Tokens -----
3954
3887
  /**
3955
- * Data source definition for module names/titles from {@link AXPModuleManifestRegistry}.
3888
+ * Multi provider for declarative app-startup tasks.
3889
+ * Collected once by {@link AXPAppStartUpProvider} — do not use APP_INITIALIZER in features.
3956
3890
  */
3957
- class AXPModuleManifestsDataSourceDefinition {
3958
- constructor() {
3959
- //#region ---- Services & Dependencies ----
3960
- this.manifestRegistry = inject(AXPModuleManifestRegistry);
3961
- //#endregion
3962
- }
3963
- //#endregion
3964
- //#region ---- Public API ----
3965
- async items() {
3966
- return [
3967
- {
3968
- name: AXPPlatformCoreDataSourceKeys.ModuleManifests,
3969
- title: 'Module manifests',
3970
- source: () => new AXDataSource({
3971
- key: 'id',
3972
- load: async () => {
3973
- await this.manifestRegistry.initialize();
3974
- const list = this.manifestRegistry.getAll().map((m) => ({
3975
- id: m.name,
3976
- title: m.title || m.name,
3977
- }));
3978
- return { items: list, total: list.length };
3979
- },
3980
- byKey: async (key) => {
3981
- await this.manifestRegistry.initialize();
3982
- const m = this.manifestRegistry.getAll().find((x) => x.name === key);
3983
- return m ? { id: m.name, title: m.title || m.name } : undefined;
3984
- },
3985
- pageSize: 1000,
3986
- }),
3987
- columns: [
3988
- {
3989
- name: 'id',
3990
- title: 'ID',
3991
- datatype: 'string',
3992
- type: 'text-editor',
3993
- },
3994
- {
3995
- name: 'title',
3996
- title: 'Title',
3997
- datatype: 'string',
3998
- type: 'text-editor',
3999
- },
4000
- ],
4001
- filters: [
4002
- {
4003
- field: 'title',
4004
- title: 'Title',
4005
- operator: { type: 'equal' },
4006
- widget: { type: 'text-editor' },
4007
- filterType: { advance: true, inline: true },
4008
- },
4009
- ],
4010
- textField: { name: 'title', title: 'Title' },
4011
- valueField: { name: 'id', title: 'ID' },
4012
- },
4013
- ];
4014
- }
3891
+ /** Multi token — `inject()` yields the full task array (each provider contributes one task). */
3892
+ const AXP_APP_STARTUP_TASK = new InjectionToken('AXP_APP_STARTUP_TASK');
3893
+ //#endregion
3894
+ //#region ----- Priorities -----
3895
+ /** Suggested priority bands for client startup tasks (lower runs first). */
3896
+ const AXP_APP_STARTUP_PRIORITY = {
3897
+ sessionRestore: 0,
3898
+ moduleManifests: 1,
3899
+ /** Platform-scoped settings (no auth); runs before tenant/user settings load. */
3900
+ platformSettings: 2,
3901
+ settings: 3,
3902
+ idleLockRestore: 3,
3903
+ /** After settings: redirect when platform settings bootstrap failed. */
3904
+ platformSettingsFailureRedirect: 3.5,
3905
+ conversationSessionSync: 4,
3906
+ regionalSettings: 5,
3907
+ terms: 6,
3908
+ /** Topic handlers / bridges that must exist before the socket connects. */
3909
+ realtimeHandlers: 40,
3910
+ /** Long-lived subscriptions that listen to connection/bus streams. */
3911
+ realtimeSubscriptions: 45,
3912
+ realtimeConnect: 50,
3913
+ activityInsight: 80,
3914
+ layoutTheme: 100,
3915
+ };
3916
+ //#endregion
3917
+ //#region ----- Helpers -----
3918
+ /** Register one startup task via the multi token (preferred over APP_INITIALIZER). */
3919
+ function provideAppStartUpTask(factory) {
3920
+ return {
3921
+ provide: AXP_APP_STARTUP_TASK,
3922
+ multi: true,
3923
+ useFactory: factory,
3924
+ };
4015
3925
  }
4016
3926
  //#endregion
4017
3927
 
3928
+ /** Task that must still run after {@link AXPAppStartUpService.abortRemainingStartupTasks}. */
3929
+ const PLATFORM_SETTINGS_FAILURE_REDIRECT_TASK = 'platform-settings-failure-redirect';
4018
3930
  class AXPAppStartUpService {
4019
3931
  constructor() {
4020
3932
  this.translationService = inject(AXTranslationService);
4021
3933
  this.tasks = [];
3934
+ /** When true, only {@link PLATFORM_SETTINGS_FAILURE_REDIRECT_TASK} may still run. */
3935
+ this.bootstrapAborted = false;
4022
3936
  }
4023
- //#endregion
4024
- //#region ---- Public Methods ----
3937
+ //#region ----- Public Methods -----
4025
3938
  registerTask(task) {
4026
3939
  this.tasks.push(task);
4027
3940
  }
3941
+ /**
3942
+ * Abort remaining startup work after a fatal platform-settings failure.
3943
+ * Keeps {@link PLATFORM_SETTINGS_FAILURE_REDIRECT_TASK} so unavailable navigation can run.
3944
+ * Prevents later tasks (settings / regional / theme) from hanging APP_INITIALIZER on API calls.
3945
+ */
3946
+ abortRemainingStartupTasks() {
3947
+ this.bootstrapAborted = true;
3948
+ }
3949
+ /**
3950
+ * @deprecated Prefer {@link abortRemainingStartupTasks}.
3951
+ * Skip tasks with priority greater than {@link priority}.
3952
+ */
3953
+ skipTasksAfter(priority) {
3954
+ void priority;
3955
+ this.abortRemainingStartupTasks();
3956
+ }
4028
3957
  async runAllTasks() {
4029
3958
  for (const task of this.tasks.sort((a, b) => a.priority - b.priority)) {
4030
- await this.updateStatus(task.statusText);
3959
+ if (this.bootstrapAborted && task.name !== PLATFORM_SETTINGS_FAILURE_REDIRECT_TASK) {
3960
+ continue;
3961
+ }
3962
+ if (task.statusText != null) {
3963
+ await this.updateStatus(task.statusText);
3964
+ }
4031
3965
  await task.run();
4032
3966
  }
4033
3967
  }
3968
+ //#endregion
3969
+ //#region ----- Private -----
4034
3970
  async updateStatus(status) {
4035
3971
  const loadingText = document.querySelector('#loadingText');
4036
3972
  if (loadingText) {
@@ -4038,10 +3974,10 @@ class AXPAppStartUpService {
4038
3974
  loadingText.innerHTML = await this.translationService.translateAsync(translatedStatus);
4039
3975
  }
4040
3976
  }
4041
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPAppStartUpService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4042
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPAppStartUpService, providedIn: 'root' }); }
3977
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPAppStartUpService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3978
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPAppStartUpService, providedIn: 'root' }); }
4043
3979
  }
4044
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPAppStartUpService, decorators: [{
3980
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPAppStartUpService, decorators: [{
4045
3981
  type: Injectable,
4046
3982
  args: [{
4047
3983
  providedIn: 'root',
@@ -4050,8 +3986,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
4050
3986
  function initAppFactory(appInitService) {
4051
3987
  return () => appInitService.runAllTasks();
4052
3988
  }
3989
+ /**
3990
+ * Sole Angular APP_INITIALIZER for platform bootstrap.
3991
+ * Collects {@link AXP_APP_STARTUP_TASK} providers, then runs all registered tasks.
3992
+ */
4053
3993
  const AXPAppStartUpProvider = provideAppInitializer(() => {
4054
- const initializerFn = initAppFactory(inject(AXPAppStartUpService));
3994
+ const appInitService = inject(AXPAppStartUpService);
3995
+ const providedTasks = inject(AXP_APP_STARTUP_TASK, { optional: true }) ?? [];
3996
+ for (const task of providedTasks) {
3997
+ appInitService.registerTask(task);
3998
+ }
3999
+ const initializerFn = initAppFactory(appInitService);
4055
4000
  return initializerFn();
4056
4001
  });
4057
4002
 
@@ -4073,17 +4018,17 @@ class AXPModuleManifestModule {
4073
4018
  appInitService.registerTask({
4074
4019
  name: 'ModuleManifests',
4075
4020
  statusText: '@general:app-startup.loading-module-manifests',
4076
- priority: 1, // Load early, before features/permissions
4021
+ priority: AXP_APP_STARTUP_PRIORITY.moduleManifests,
4077
4022
  run: async () => {
4078
4023
  await manifestRegistry.initialize();
4079
4024
  },
4080
4025
  });
4081
4026
  }
4082
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPModuleManifestModule, deps: [{ token: AXPAppStartUpService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule }); }
4083
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXPModuleManifestModule }); }
4084
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPModuleManifestModule }); }
4027
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPModuleManifestModule, deps: [{ token: AXPAppStartUpService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule }); }
4028
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXPModuleManifestModule }); }
4029
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPModuleManifestModule }); }
4085
4030
  }
4086
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPModuleManifestModule, decorators: [{
4031
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPModuleManifestModule, decorators: [{
4087
4032
  type: NgModule,
4088
4033
  args: [{
4089
4034
  providers: [],
@@ -4104,7 +4049,8 @@ const DEFAULT_MIN_IDLE_MS = 16;
4104
4049
  class AXPIdleSchedulerService {
4105
4050
  constructor() {
4106
4051
  //#region ---- State ----
4107
- this.pausedState = signal(false, ...(ngDevMode ? [{ debugName: "pausedState" }] : /* istanbul ignore next */ []));
4052
+ this.pausedState = signal(false, /* @ts-ignore */
4053
+ ...(ngDevMode ? [{ debugName: "pausedState" }] : /* istanbul ignore next */ []));
4108
4054
  this.paused = this.pausedState.asReadonly();
4109
4055
  this.queue = [];
4110
4056
  this.running = false;
@@ -4185,10 +4131,10 @@ class AXPIdleSchedulerService {
4185
4131
  }
4186
4132
  }
4187
4133
  }
4188
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIdleSchedulerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4189
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIdleSchedulerService, providedIn: 'root' }); }
4134
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPIdleSchedulerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4135
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPIdleSchedulerService, providedIn: 'root' }); }
4190
4136
  }
4191
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIdleSchedulerService, decorators: [{
4137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPIdleSchedulerService, decorators: [{
4192
4138
  type: Injectable,
4193
4139
  args: [{ providedIn: 'root' }]
4194
4140
  }] });
@@ -4241,36 +4187,34 @@ class AXPTagProvider {
4241
4187
  const AXP_TAG_PROVIDER = new InjectionToken('AXP_TAG_PROVIDER');
4242
4188
  //#endregion
4243
4189
 
4244
- //#region ---- Tag Service ----
4190
+ //#region ----- Imports -----
4191
+ //#endregion
4192
+ //#region ----- Tag Service -----
4245
4193
  /**
4246
- * Service for managing tags from multiple providers
4247
- * Aggregates tags from all registered providers
4194
+ * Aggregates tags from registered providers with an in-memory catalog cache.
4195
+ * Concurrent {@link getTags} / {@link reload} share one in-flight load (no stampede).
4248
4196
  */
4249
4197
  class AXPTagService {
4250
4198
  constructor() {
4251
- //#region ---- Dependencies ----
4199
+ //#region ----- Services & Dependencies -----
4252
4200
  this.providers = inject(AXP_TAG_PROVIDER, { optional: true }) ?? [];
4253
4201
  //#endregion
4254
- //#region ---- State ----
4202
+ //#region ----- State -----
4255
4203
  this.cache = null;
4204
+ /** Shared promise while providers are loading; cleared when settled. */
4205
+ this.loadPromise = null;
4256
4206
  }
4257
4207
  //#endregion
4258
- //#region ---- Public API ----
4208
+ //#region ----- Public API -----
4259
4209
  /**
4260
- * Get all tags from all providers
4261
- * @param options Filter options
4262
- * @returns Promise of tags
4210
+ * Get all tags from all providers (memory cache after first successful load).
4263
4211
  */
4264
4212
  async getTags(options) {
4265
- if (!this.cache) {
4266
- await this.loadTags();
4267
- }
4268
- let tags = this.cache;
4269
- // Apply scope filter
4213
+ await this.ensureCatalog();
4214
+ let tags = this.cache ?? [];
4270
4215
  if (options?.scope && options.scope.length > 0) {
4271
4216
  tags = tags.filter((tag) => tag.scope && options.scope.includes(tag.scope));
4272
4217
  }
4273
- // Apply search filter
4274
4218
  if (options?.search) {
4275
4219
  const searchLower = options.search.toLowerCase();
4276
4220
  tags = tags.filter((tag) => tag.title.toLowerCase().includes(searchLower) ||
@@ -4278,11 +4222,16 @@ class AXPTagService {
4278
4222
  }
4279
4223
  return tags;
4280
4224
  }
4225
+ /** Sync snapshot of the cached catalog (empty until first successful load). */
4226
+ peekCatalog() {
4227
+ return this.cache ?? [];
4228
+ }
4229
+ /** True when the in-memory catalog has been loaded at least once. */
4230
+ isCatalogReady() {
4231
+ return this.cache != null;
4232
+ }
4281
4233
  /**
4282
- * Create a new tag using the appropriate provider
4283
- * @param tag Tag to create
4284
- * @param providerName Provider to use (defaults to first writable provider)
4285
- * @returns Created tag
4234
+ * Create a new tag using the appropriate provider.
4286
4235
  */
4287
4236
  async createTag(tag, providerName) {
4288
4237
  const provider = providerName
@@ -4292,14 +4241,11 @@ class AXPTagService {
4292
4241
  throw new Error('No writable tag provider available');
4293
4242
  }
4294
4243
  const createdTag = await provider.create(tag);
4295
- // Invalidate cache
4296
- this.cache = null;
4244
+ this.invalidateCatalog();
4297
4245
  return createdTag;
4298
4246
  }
4299
4247
  /**
4300
- * Update an existing tag
4301
- * @param tag Tag to update
4302
- * @returns Updated tag
4248
+ * Update an existing tag.
4303
4249
  */
4304
4250
  async updateTag(tag) {
4305
4251
  const provider = this.providers.find((p) => p.name === tag.scope && p.update);
@@ -4307,14 +4253,11 @@ class AXPTagService {
4307
4253
  throw new Error(`No provider found for updating tag with scope: ${tag.scope}`);
4308
4254
  }
4309
4255
  const updatedTag = await provider.update(tag);
4310
- // Invalidate cache
4311
- this.cache = null;
4256
+ this.invalidateCatalog();
4312
4257
  return updatedTag;
4313
4258
  }
4314
4259
  /**
4315
- * Delete a tag
4316
- * @param tagId Tag id to delete
4317
- * @param scope Tag scope
4260
+ * Delete a tag.
4318
4261
  */
4319
4262
  async deleteTag(tagId, scope) {
4320
4263
  const provider = this.providers.find((p) => p.name === scope && p.delete);
@@ -4322,22 +4265,33 @@ class AXPTagService {
4322
4265
  throw new Error(`No provider found for deleting tag with scope: ${scope}`);
4323
4266
  }
4324
4267
  await provider.delete(tagId);
4325
- // Invalidate cache
4326
- this.cache = null;
4268
+ this.invalidateCatalog();
4327
4269
  }
4328
4270
  /**
4329
- * Reload tags from all providers
4271
+ * Force reload tags from all providers.
4330
4272
  */
4331
4273
  async reload() {
4332
- this.cache = null;
4333
- await this.loadTags();
4274
+ this.invalidateCatalog();
4275
+ await this.ensureCatalog();
4334
4276
  }
4335
4277
  //#endregion
4336
- //#region ---- Private Methods ----
4337
- /**
4338
- * Load tags from all providers
4339
- */
4340
- async loadTags() {
4278
+ //#region ----- Private Methods -----
4279
+ invalidateCatalog() {
4280
+ this.cache = null;
4281
+ this.loadPromise = null;
4282
+ }
4283
+ async ensureCatalog() {
4284
+ if (this.cache) {
4285
+ return;
4286
+ }
4287
+ if (!this.loadPromise) {
4288
+ this.loadPromise = this.loadTagsFromProviders().finally(() => {
4289
+ this.loadPromise = null;
4290
+ });
4291
+ }
4292
+ await this.loadPromise;
4293
+ }
4294
+ async loadTagsFromProviders() {
4341
4295
  const allTags = [];
4342
4296
  for (const provider of this.providers) {
4343
4297
  try {
@@ -4348,14 +4302,13 @@ class AXPTagService {
4348
4302
  console.error(`Error loading tags from provider ${provider.name}:`, error);
4349
4303
  }
4350
4304
  }
4351
- // Remove duplicates based on title (case-insensitive)
4352
4305
  const uniqueTags = allTags.filter((tag, index, self) => index === self.findIndex((t) => t.title.toLowerCase() === tag.title.toLowerCase()));
4353
4306
  this.cache = uniqueTags;
4354
4307
  }
4355
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTagService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4356
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTagService, providedIn: 'root' }); }
4308
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTagService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4309
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTagService, providedIn: 'root' }); }
4357
4310
  }
4358
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTagService, decorators: [{
4311
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTagService, decorators: [{
4359
4312
  type: Injectable,
4360
4313
  args: [{
4361
4314
  providedIn: 'root',
@@ -4395,7 +4348,8 @@ class AXPIconLogoConfig {
4395
4348
  class AXPCountdownPipe {
4396
4349
  constructor() {
4397
4350
  this.calendarService = inject(AXCalendarService);
4398
- this.countdownSignal = signal(this.setupTimer(), ...(ngDevMode ? [{ debugName: "countdownSignal" }] : /* istanbul ignore next */ []));
4351
+ this.countdownSignal = signal(this.setupTimer(), /* @ts-ignore */
4352
+ ...(ngDevMode ? [{ debugName: "countdownSignal" }] : /* istanbul ignore next */ []));
4399
4353
  this.targetDate = 0;
4400
4354
  this.prevValue = 0;
4401
4355
  }
@@ -4424,10 +4378,10 @@ class AXPCountdownPipe {
4424
4378
  updateTargetDate(value) {
4425
4379
  this.targetDate = new Date(value).getTime();
4426
4380
  }
4427
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPCountdownPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
4428
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXPCountdownPipe, isStandalone: true, name: "countdown", pure: false }); }
4381
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPCountdownPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
4382
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXPCountdownPipe, isStandalone: true, name: "countdown", pure: false }); }
4429
4383
  }
4430
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPCountdownPipe, decorators: [{
4384
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPCountdownPipe, decorators: [{
4431
4385
  type: Pipe,
4432
4386
  args: [{
4433
4387
  name: 'countdown',
@@ -4783,45 +4737,55 @@ class AXPDeviceService {
4783
4737
  /**
4784
4738
  * Current screen size (Small, Medium, Large)
4785
4739
  */
4786
- this.screenSize = signal(getScreenSize(), ...(ngDevMode ? [{ debugName: "screenSize" }] : /* istanbul ignore next */ []));
4740
+ this.screenSize = signal(getScreenSize(), /* @ts-ignore */
4741
+ ...(ngDevMode ? [{ debugName: "screenSize" }] : /* istanbul ignore next */ []));
4787
4742
  /**
4788
4743
  * Current device type (Mobile, Tablet, Desktop)
4789
4744
  */
4790
- this.deviceType = signal(getDeviceType(), ...(ngDevMode ? [{ debugName: "deviceType" }] : /* istanbul ignore next */ []));
4745
+ this.deviceType = signal(getDeviceType(), /* @ts-ignore */
4746
+ ...(ngDevMode ? [{ debugName: "deviceType" }] : /* istanbul ignore next */ []));
4791
4747
  /**
4792
4748
  * Whether the device supports touch input
4793
4749
  */
4794
- this.isTouchDevice = signal(isTouchDevice(), ...(ngDevMode ? [{ debugName: "isTouchDevice" }] : /* istanbul ignore next */ []));
4750
+ this.isTouchDevice = signal(isTouchDevice(), /* @ts-ignore */
4751
+ ...(ngDevMode ? [{ debugName: "isTouchDevice" }] : /* istanbul ignore next */ []));
4795
4752
  //#endregion
4796
4753
  //#region ---- Computed Signals ----
4797
4754
  /**
4798
4755
  * Whether the screen size is Small
4799
4756
  */
4800
- this.isSmall = computed(() => this.screenSize() === AXPScreenSize.Small, ...(ngDevMode ? [{ debugName: "isSmall" }] : /* istanbul ignore next */ []));
4757
+ this.isSmall = computed(() => this.screenSize() === AXPScreenSize.Small, /* @ts-ignore */
4758
+ ...(ngDevMode ? [{ debugName: "isSmall" }] : /* istanbul ignore next */ []));
4801
4759
  /**
4802
4760
  * Whether the screen size is Medium
4803
4761
  */
4804
- this.isMedium = computed(() => this.screenSize() === AXPScreenSize.Medium, ...(ngDevMode ? [{ debugName: "isMedium" }] : /* istanbul ignore next */ []));
4762
+ this.isMedium = computed(() => this.screenSize() === AXPScreenSize.Medium, /* @ts-ignore */
4763
+ ...(ngDevMode ? [{ debugName: "isMedium" }] : /* istanbul ignore next */ []));
4805
4764
  /**
4806
4765
  * Whether the screen size is Large
4807
4766
  */
4808
- this.isLarge = computed(() => this.screenSize() === AXPScreenSize.Large, ...(ngDevMode ? [{ debugName: "isLarge" }] : /* istanbul ignore next */ []));
4767
+ this.isLarge = computed(() => this.screenSize() === AXPScreenSize.Large, /* @ts-ignore */
4768
+ ...(ngDevMode ? [{ debugName: "isLarge" }] : /* istanbul ignore next */ []));
4809
4769
  /**
4810
4770
  * Whether the device is Mobile
4811
4771
  */
4812
- this.isMobileDevice = computed(() => this.deviceType() === AXPDeviceType.Mobile, ...(ngDevMode ? [{ debugName: "isMobileDevice" }] : /* istanbul ignore next */ []));
4772
+ this.isMobileDevice = computed(() => this.deviceType() === AXPDeviceType.Mobile, /* @ts-ignore */
4773
+ ...(ngDevMode ? [{ debugName: "isMobileDevice" }] : /* istanbul ignore next */ []));
4813
4774
  /**
4814
4775
  * Whether the device is Tablet
4815
4776
  */
4816
- this.isTabletDevice = computed(() => this.deviceType() === AXPDeviceType.Tablet, ...(ngDevMode ? [{ debugName: "isTabletDevice" }] : /* istanbul ignore next */ []));
4777
+ this.isTabletDevice = computed(() => this.deviceType() === AXPDeviceType.Tablet, /* @ts-ignore */
4778
+ ...(ngDevMode ? [{ debugName: "isTabletDevice" }] : /* istanbul ignore next */ []));
4817
4779
  /**
4818
4780
  * Whether the device is Desktop
4819
4781
  */
4820
- this.isDesktopDevice = computed(() => this.deviceType() === AXPDeviceType.Desktop, ...(ngDevMode ? [{ debugName: "isDesktopDevice" }] : /* istanbul ignore next */ []));
4782
+ this.isDesktopDevice = computed(() => this.deviceType() === AXPDeviceType.Desktop, /* @ts-ignore */
4783
+ ...(ngDevMode ? [{ debugName: "isDesktopDevice" }] : /* istanbul ignore next */ []));
4821
4784
  /**
4822
4785
  * Whether the device supports touch (alias for isTouchDevice)
4823
4786
  */
4824
- this.isTouchScreen = computed(() => this.isTouchDevice(), ...(ngDevMode ? [{ debugName: "isTouchScreen" }] : /* istanbul ignore next */ []));
4787
+ this.isTouchScreen = computed(() => this.isTouchDevice(), /* @ts-ignore */
4788
+ ...(ngDevMode ? [{ debugName: "isTouchScreen" }] : /* istanbul ignore next */ []));
4825
4789
  //#endregion
4826
4790
  //#region ---- Private Properties ----
4827
4791
  this._resizeListener = null;
@@ -4887,10 +4851,10 @@ class AXPDeviceService {
4887
4851
  destroy() {
4888
4852
  this._removeResizeListener();
4889
4853
  }
4890
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDeviceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4891
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDeviceService, providedIn: 'root' }); }
4854
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPDeviceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4855
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPDeviceService, providedIn: 'root' }); }
4892
4856
  }
4893
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDeviceService, decorators: [{
4857
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPDeviceService, decorators: [{
4894
4858
  type: Injectable,
4895
4859
  args: [{
4896
4860
  providedIn: 'root',
@@ -4994,10 +4958,10 @@ class AXHighlightService {
4994
4958
  resultHTML += '</span>';
4995
4959
  return resultHTML;
4996
4960
  }
4997
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXHighlightService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4998
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXHighlightService, providedIn: 'root' }); }
4961
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXHighlightService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4962
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXHighlightService, providedIn: 'root' }); }
4999
4963
  }
5000
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXHighlightService, decorators: [{
4964
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXHighlightService, decorators: [{
5001
4965
  type: Injectable,
5002
4966
  args: [{
5003
4967
  providedIn: 'root',
@@ -5010,15 +4974,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
5010
4974
  *
5011
4975
  * @example
5012
4976
  * ```typescript
5013
- * export class AXMAuthDataSourceProvider implements AXPDataSourceDefinitionProvider {
4977
+ * export class AXMMyFeatureProvider {
5014
4978
  * constructor(private readonly injector: Injector) {}
5015
4979
  *
5016
4980
  * async items() {
5017
- * const userActivity = instantiateWithInjectionContext(
4981
+ * const nested = instantiateWithInjectionContext(
5018
4982
  * this.injector,
5019
- * AXMUserActivityDataSourceDefinition,
4983
+ * AXMNestedProvider,
5020
4984
  * );
5021
- * return [...(await userActivity.items())];
4985
+ * return [...(await nested.items())];
5022
4986
  * }
5023
4987
  * }
5024
4988
  * ```
@@ -5064,8 +5028,8 @@ async function createProviderWithInjectionContext(injector, loader) {
5064
5028
  * ```typescript
5065
5029
  * // Multi-provider (default)
5066
5030
  * provideLazyProvider(
5067
- * AXP_DATASOURCE_DEFINITION_PROVIDER,
5068
- * () => import('./datasource.provider').then(m => m.AXMDataSourceProvider)
5031
+ * AXP_SOME_MULTI_TOKEN,
5032
+ * () => import('./feature.provider').then(m => m.AXMFeatureProvider)
5069
5033
  * )
5070
5034
  *
5071
5035
  * // Single provider
@@ -5091,5 +5055,5 @@ function provideLazyProvider(token, loader, multi = true) {
5091
5055
  * Generated bundle index. Do not edit.
5092
5056
  */
5093
5057
 
5094
- export { AXHighlightService, AXPActivityLogProvider, AXPActivityLogService, AXPAppStartUpProvider, AXPAppStartUpService, AXPBroadcastEventService, AXPCatalogScopeDefinitionProviderService, AXPCatalogScopeDefinitionsDataSourceDefinition, AXPColorPaletteProvider, AXPColorPaletteService, AXPColumnWidthService, AXPComponentLogoConfig, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPContentCheckerDirective, AXPContextDefinitionProviderService, AXPContextEvalFactory, AXPContextStore, AXPCountdownPipe, AXPDataGenerator, AXPDataSourceDefinitionProviderService, AXPDataSourceQueryService, AXPDblClickDirective, AXPDebugService, AXPDefaultColorPalettesProvider, AXPDeviceService, AXPDeviceType, AXPDistributedEventListenerService, AXPElementDataDirective, AXPEntityLogoRegistrationService, AXPExpressionEvaluatorScopeProviderService, AXPExpressionEvaluatorService, AXPFeatureDefinitionProviderContext, AXPGridLayoutDirective, AXPHookService, AXPIconLogoConfig, AXPIdleSchedulerService, AXPImageUrlLogoConfig, AXPKeyboardShortcutRegistry, AXPLogoComponent, AXPLogoRegistryService, AXPModuleManifestModule, AXPModuleManifestRegistry, AXPModuleManifestsDataSourceDefinition, AXPScreenSize, AXPTagProvider, AXPTagService, AXP_ACTIVITY_LOG_PROVIDER, AXP_CATALOG_SCOPE_DEFINITION_PROVIDER, AXP_COLOR_PALETTE_PROVIDER, AXP_COLUMN_WIDTH_PROVIDER, AXP_CONTEXT_DEFINITION_PROVIDER, AXP_DATASOURCE_DEFINITION_PROVIDER, AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, AXP_ENTITY_LOGO_FALLBACK_RESOLVER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER, AXP_LOGO_IMAGE_SRC_RESOLVER, AXP_LOGO_PROVIDER, AXP_LOGO_THEME_RESOLVER, AXP_MODULE_MANIFEST_PROVIDER, AXP_PLATFORM_LOGO_KEY, AXP_SESSION_SERVICE, AXP_SETTINGS_DEFINITION_DIALOG_OPENER, AXP_TAG_PROVIDER, AX_OVERLAY_CONTAINER_SELECTOR, AX_OVERLAY_PANE_SELECTOR, DEFAULT_CANCEL_DIALOG_ACTION_SHORTCUTS, DEFAULT_SUBMIT_DIALOG_ACTION_SHORTCUTS, FORM_DIRTY_TRACE_NS, OVERLAY_DETAILS_VIEW_TRACE_NS, OVERLAY_LAYOUT_TRACE_NS, OVERLAY_ROOT_LAYOUT_TRACE_NS, OVERLAY_WIDGET_SETTLE_TRACE_NS, applyContextEvalPipes, applyFilterArray, applyPagination, applyQueryArray, applySortArray, applySystemActionDefault, axpApplicationLogoKey, axpExtractLogoUrl, axpSsoLogoKey, axpTenantLogoKey, chordToKbdItemKeys, contextEvalWithPipes, createProviderWithInjectionContext, defaultColumnWidthProvider, findOverlayContainerAncestor, formatKeyboardShortcutChord, formatKeyboardShortcutChords, getNestedVisibleOverlayPanes, getPrimaryKeyboardShortcutChord, getTopVisibleOverlayContainer, getVisibleAnchoredOverlayPanes, getVisibleOverlayContainers, hasForegroundOverlayLayer, instantiateWithInjectionContext, isDialogShortcutAllowedInEditableField, isHorizontalDirectionalShortcutKey, isKeyboardTargetInsideEditableField, isMacPlatform, isVisibleOverlayElement, matchesDialogActionShortcut, matchesKeyboardShortcutChord, mirrorHorizontalDirectionalKey, normalizeContextEvalPipes, normalizeDialogActionShortcutChord, normalizeExpressionTemplate, normalizeKeyboardShortcut, normalizeKeyboardShortcuts, objectKeyValueTransforms, parseDialogActionShortcut, parseKeyboardShortcutChord, provideLazyProvider, registerPopupFooterKeyboardShortcuts, resolveConfiguredFooterActionShortcuts, resolveDialogActionShortcuts, resolveDisplayShortcutChord, resolveEffectiveDirectionBehavior, resolveSemanticDirectionalKey, setupPopupFooterKeyboardShortcuts, shouldDeferEscapeToOpenOverlay, shouldTriggerDialogActionShortcut };
5058
+ export { AXHighlightService, AXPActivityLogProvider, AXPActivityLogService, AXPAppStartUpProvider, AXPAppStartUpService, AXPBroadcastEventService, AXPCatalogScopeDefinitionProviderService, AXPColorPaletteProvider, AXPColorPaletteService, AXPColumnWidthService, AXPComponentLogoConfig, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPContentCheckerDirective, AXPContextDefinitionProviderService, AXPContextEvalFactory, AXPContextStore, AXPCountdownPipe, AXPDataGenerator, AXPDblClickDirective, AXPDebugService, AXPDefaultColorPalettesProvider, AXPDeviceService, AXPDeviceType, AXPDistributedEventListenerService, AXPElementDataDirective, AXPEntityBroadcastService, AXPEntityLogoRegistrationService, AXPExpressionEvaluatorScopeProviderService, AXPExpressionEvaluatorService, AXPFeatureDefinitionProviderContext, AXPGridLayoutDirective, AXPHookService, AXPIconLogoConfig, AXPIdleSchedulerService, AXPImageUrlLogoConfig, AXPKeyboardShortcutRegistry, AXPLogoComponent, AXPLogoRegistryService, AXPModuleManifestModule, AXPModuleManifestRegistry, AXPScreenSize, AXPTagProvider, AXPTagService, AXP_ACTIVITY_LOG_PROVIDER, AXP_APP_STARTUP_PRIORITY, AXP_APP_STARTUP_TASK, AXP_CATALOG_SCOPE_DEFINITION_PROVIDER, AXP_COLOR_PALETTE_PROVIDER, AXP_COLUMN_WIDTH_PROVIDER, AXP_CONTEXT_DEFINITION_PROVIDER, AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, AXP_ENTITY_LOGO_FALLBACK_RESOLVER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER, AXP_LOGO_IMAGE_SRC_RESOLVER, AXP_LOGO_PROVIDER, AXP_LOGO_THEME_RESOLVER, AXP_MODULE_DOMAIN, AXP_MODULE_MANIFEST_PROVIDER, AXP_MODULE_TYPE, AXP_PLATFORM_LOGO_KEY, AXP_SESSION_SERVICE, AXP_SETTINGS_DEFINITION_DIALOG_OPENER, AXP_TAG_PROVIDER, AX_OVERLAY_CONTAINER_SELECTOR, AX_OVERLAY_PANE_SELECTOR, DEFAULT_CANCEL_DIALOG_ACTION_SHORTCUTS, DEFAULT_SUBMIT_DIALOG_ACTION_SHORTCUTS, FORM_DIRTY_TRACE_NS, OVERLAY_DETAILS_VIEW_TRACE_NS, OVERLAY_LAYOUT_TRACE_NS, OVERLAY_ROOT_LAYOUT_TRACE_NS, OVERLAY_WIDGET_SETTLE_TRACE_NS, applyContextEvalPipes, applyFilterArray, applyPagination, applyQueryArray, applySortArray, applySystemActionDefault, axpApplicationLogoKey, axpExtractLogoUrl, axpSsoLogoKey, axpTenantLogoKey, chordToKbdItemKeys, contextEvalWithPipes, createProviderWithInjectionContext, defaultColumnWidthProvider, findOverlayContainerAncestor, formatKeyboardShortcutChord, formatKeyboardShortcutChords, getNestedVisibleOverlayPanes, getPrimaryKeyboardShortcutChord, getTopVisibleOverlayContainer, getVisibleAnchoredOverlayPanes, getVisibleOverlayContainers, hasForegroundOverlayLayer, instantiateWithInjectionContext, isDialogShortcutAllowedInEditableField, isHorizontalDirectionalShortcutKey, isKeyboardTargetInsideEditableField, isMacPlatform, isVisibleOverlayElement, matchesDialogActionShortcut, matchesKeyboardShortcutChord, mirrorHorizontalDirectionalKey, normalizeContextEvalPipes, normalizeDialogActionShortcutChord, normalizeExpressionTemplate, normalizeKeyboardShortcut, normalizeKeyboardShortcuts, objectKeyValueTransforms, parseDialogActionShortcut, parseKeyboardShortcutChord, provideAppStartUpTask, provideLazyProvider, registerPopupFooterKeyboardShortcuts, resolveConfiguredFooterActionShortcuts, resolveDialogActionShortcuts, resolveDisplayShortcutChord, resolveEffectiveDirectionBehavior, resolveModuleDomain, resolveModuleType, resolveSemanticDirectionalKey, setupPopupFooterKeyboardShortcuts, shouldDeferEscapeToOpenOverlay, shouldTriggerDialogActionShortcut };
5095
5059
  //# sourceMappingURL=acorex-platform-framework-client-core.mjs.map