@acorex/platform 21.0.0-next.0 → 21.0.0-next.2

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 (69) hide show
  1. package/auth/index.d.ts +238 -92
  2. package/common/index.d.ts +42 -606
  3. package/core/index.d.ts +432 -574
  4. package/fesm2022/acorex-platform-auth.mjs +200 -153
  5. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  6. package/fesm2022/acorex-platform-common.mjs +112 -1009
  7. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  8. package/fesm2022/acorex-platform-core.mjs +416 -694
  9. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  10. package/fesm2022/acorex-platform-domain.mjs +11 -54
  11. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  12. package/fesm2022/acorex-platform-layout-builder.mjs +272 -414
  13. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  14. package/fesm2022/acorex-platform-layout-components.mjs +3105 -2064
  15. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  16. package/fesm2022/acorex-platform-layout-designer.mjs +7 -7
  17. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  18. package/fesm2022/acorex-platform-layout-entity.mjs +648 -756
  19. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  20. package/fesm2022/acorex-platform-layout-views.mjs +4 -4
  21. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  22. package/fesm2022/acorex-platform-layout-widget-core.mjs +174 -248
  23. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  24. package/fesm2022/acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-fhhZOWul.mjs +50 -0
  25. package/fesm2022/acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-fhhZOWul.mjs.map +1 -0
  26. package/fesm2022/acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-C3Qbs0fz.mjs +42 -0
  27. package/fesm2022/acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-C3Qbs0fz.mjs.map +1 -0
  28. package/fesm2022/acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-CngQBUlN.mjs +55 -0
  29. package/fesm2022/acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-CngQBUlN.mjs.map +1 -0
  30. package/fesm2022/acorex-platform-layout-widgets-extra-properties-values-widget-view.component-DSNo9e4W.mjs +50 -0
  31. package/fesm2022/acorex-platform-layout-widgets-extra-properties-values-widget-view.component-DSNo9e4W.mjs.map +1 -0
  32. package/fesm2022/acorex-platform-layout-widgets-extra-properties-widget-edit.component-CL0CwEHX.mjs +48 -0
  33. package/fesm2022/acorex-platform-layout-widgets-extra-properties-widget-edit.component-CL0CwEHX.mjs.map +1 -0
  34. package/fesm2022/acorex-platform-layout-widgets-extra-properties-widget-view.component-B6Fi0xTw.mjs +42 -0
  35. package/fesm2022/acorex-platform-layout-widgets-extra-properties-widget-view.component-B6Fi0xTw.mjs.map +1 -0
  36. package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs → acorex-platform-layout-widgets-file-list-popup.component-D0y-9nE5.mjs} +2 -2
  37. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-D0y-9nE5.mjs.map +1 -0
  38. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-m8rHZP8L.mjs} +2 -2
  39. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-m8rHZP8L.mjs.map +1 -0
  40. package/fesm2022/acorex-platform-layout-widgets.mjs +974 -2994
  41. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  42. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs → acorex-platform-themes-default-entity-master-create-view.component-mARj77Mr.mjs} +5 -26
  43. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-mARj77Mr.mjs.map +1 -0
  44. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs → acorex-platform-themes-default-entity-master-list-view.component-Cym8pq0v.mjs} +5 -4
  45. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-Cym8pq0v.mjs.map +1 -0
  46. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BTA6h7Xd.mjs +101 -0
  47. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BTA6h7Xd.mjs.map +1 -0
  48. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs → acorex-platform-themes-default-entity-master-single-view.component-B_P0a5KW.mjs} +3 -3
  49. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-B_P0a5KW.mjs.map +1 -0
  50. package/fesm2022/acorex-platform-themes-default.mjs +30 -166
  51. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  52. package/fesm2022/acorex-platform-themes-shared.mjs +27 -27
  53. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  54. package/layout/builder/index.d.ts +1 -4
  55. package/layout/components/index.d.ts +327 -405
  56. package/layout/designer/index.d.ts +3 -3
  57. package/layout/entity/index.d.ts +108 -163
  58. package/layout/widget-core/index.d.ts +49 -39
  59. package/layout/widgets/index.d.ts +54 -368
  60. package/package.json +1 -1
  61. package/themes/default/index.d.ts +2 -15
  62. package/themes/shared/index.d.ts +10 -10
  63. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs.map +0 -1
  64. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs.map +0 -1
  65. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs.map +0 -1
  66. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs.map +0 -1
  67. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs +0 -101
  68. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs.map +0 -1
  69. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, Injectable, computed, input, effect, Directive, EventEmitter, HostListener, Output, ViewContainerRef, ElementRef, signal, output, DestroyRef, Renderer2, untracked, Injector, runInInjectionContext, provideAppInitializer, Pipe } from '@angular/core';
2
+ import { InjectionToken, inject, Injectable, computed, input, effect, Directive, EventEmitter, HostListener, Output, ViewContainerRef, ElementRef, Injector, runInInjectionContext, provideAppInitializer, signal, Pipe } from '@angular/core';
3
3
  import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
4
4
  import { get, isPlainObject, set, isArray, merge, isNil, isObjectLike, transform, isEmpty, isEqual, differenceWith, union, cloneDeep, isUndefined, endsWith, startsWith, includes, lte, gte, lt, gt, orderBy } from 'lodash-es';
5
5
  import { Subject, interval, fromEvent } from 'rxjs';
@@ -115,41 +115,6 @@ class AXPColorPaletteService {
115
115
  this.cache = null;
116
116
  await this.loadPalettes();
117
117
  }
118
- /**
119
- * Get the default palette (material-design) or fallback colors
120
- * @returns Promise of default palette, never returns undefined
121
- */
122
- async getDefaultPalette() {
123
- const defaultPalette = await this.getPalette('material-design');
124
- if (defaultPalette) {
125
- return defaultPalette;
126
- }
127
- // Fallback to hardcoded material design colors if provider fails
128
- return {
129
- name: 'material-design',
130
- title: 'Material Design',
131
- category: 'material',
132
- description: 'Google Material Design color palette',
133
- colors: [
134
- '#F44336', // Red
135
- '#E91E63', // Pink
136
- '#9C27B0', // Purple
137
- '#673AB7', // Deep Purple
138
- '#3F51B5', // Indigo
139
- '#2196F3', // Blue
140
- '#03A9F4', // Light Blue
141
- '#00BCD4', // Cyan
142
- '#009688', // Teal
143
- '#4CAF50', // Green
144
- '#8BC34A', // Light Green
145
- '#CDDC39', // Lime
146
- '#FFEB3B', // Yellow
147
- '#FFC107', // Amber
148
- '#FF9800', // Orange
149
- '#FF5722', // Deep Orange
150
- ],
151
- };
152
- }
153
118
  //#endregion
154
119
  //#region ---- Private Methods ----
155
120
  /**
@@ -805,10 +770,6 @@ class AXPDataGenerator {
805
770
  const country = this.country();
806
771
  return `${streetNumber} ${street}, ${city}, ${state} ${zip}, ${country}`;
807
772
  }
808
- static avatar() {
809
- return `https://avatar.iran.liara.run/public/${this.pick([35, 22, 16, 6, 31])}`;
810
- //return `https://i.pravatar.cc/300?u=${this.uuid()}`;
811
- }
812
773
  }
813
774
 
814
775
  function objectKeyValueTransforms(keyName) {
@@ -822,152 +783,19 @@ function objectKeyValueTransforms(keyName) {
822
783
  };
823
784
  }
824
785
 
825
- //#region ---- Imports ----
826
- //#endregion
827
- //#region ---- Provider Registry Service ----
828
- /**
829
- * Registry service for dynamically loaded module providers.
830
- * Stores provider instances that are loaded conditionally based on access control.
831
- */
832
- class AXPModuleProviderRegistry {
833
- constructor() {
834
- //#region ---- Fields ----
835
- this.permissionProviders = [];
836
- this.menuProviders = [];
837
- this.entityProviders = [];
838
- this.settingProviders = [];
839
- this.searchProviders = [];
840
- this.featureProviders = [];
841
- this.datasourceProviders = [];
842
- }
843
- //#endregion
844
- //#region ---- Public Methods ----
845
- /**
846
- * Register a permission provider.
847
- */
848
- registerPermissionProvider(provider) {
849
- this.permissionProviders.push(provider);
850
- }
851
- /**
852
- * Get all registered permission providers.
853
- */
854
- getPermissionProviders() {
855
- return [...this.permissionProviders];
856
- }
857
- /**
858
- * Register a menu provider.
859
- */
860
- registerMenuProvider(provider) {
861
- this.menuProviders.push(provider);
862
- }
863
- /**
864
- * Get all registered menu providers.
865
- */
866
- getMenuProviders() {
867
- return [...this.menuProviders];
868
- }
869
- /**
870
- * Register an entity provider.
871
- */
872
- registerEntityProvider(provider) {
873
- this.entityProviders.push(provider);
874
- }
875
- /**
876
- * Get all registered entity providers.
877
- */
878
- getEntityProviders() {
879
- return [...this.entityProviders];
880
- }
881
- /**
882
- * Register a settings provider.
883
- */
884
- registerSettingProvider(provider) {
885
- this.settingProviders.push(provider);
886
- }
887
- /**
888
- * Get all registered settings providers.
889
- */
890
- getSettingProviders() {
891
- return [...this.settingProviders];
892
- }
893
- /**
894
- * Register a search provider.
895
- */
896
- registerSearchProvider(provider) {
897
- this.searchProviders.push(provider);
898
- }
899
- /**
900
- * Get all registered search providers.
901
- */
902
- getSearchProviders() {
903
- return [...this.searchProviders];
904
- }
905
- /**
906
- * Register a feature provider.
907
- */
908
- registerFeatureProvider(provider) {
909
- this.featureProviders.push(provider);
910
- }
911
- /**
912
- * Get all registered feature providers.
913
- */
914
- getFeatureProviders() {
915
- return [...this.featureProviders];
916
- }
917
- /**
918
- * Register a datasource provider.
919
- */
920
- registerDatasourceProvider(provider) {
921
- this.datasourceProviders.push(provider);
922
- }
923
- /**
924
- * Get all registered datasource providers.
925
- */
926
- getDatasourceProviders() {
927
- return [...this.datasourceProviders];
928
- }
929
- /**
930
- * Clear all registered providers.
931
- * Useful for testing or re-initialization.
932
- */
933
- clear() {
934
- this.permissionProviders.length = 0;
935
- this.menuProviders.length = 0;
936
- this.entityProviders.length = 0;
937
- this.settingProviders.length = 0;
938
- this.searchProviders.length = 0;
939
- this.featureProviders.length = 0;
940
- this.datasourceProviders.length = 0;
941
- }
942
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPModuleProviderRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
943
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPModuleProviderRegistry, providedIn: 'root' }); }
944
- }
945
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPModuleProviderRegistry, decorators: [{
946
- type: Injectable,
947
- args: [{ providedIn: 'root' }]
948
- }] });
949
-
950
786
  const AXP_DATASOURCE_DEFINITION_PROVIDER = new InjectionToken('AXP_DATASOURCE_TYPE_PROVIDER');
951
787
  class AXPDataSourceDefinitionProviderService {
952
788
  constructor() {
953
789
  this.providers = inject(AXP_DATASOURCE_DEFINITION_PROVIDER, { optional: true });
954
- this.providerRegistry = inject(AXPModuleProviderRegistry);
955
790
  }
956
791
  async items() {
957
792
  const items = [];
958
- // Load from DI tokens (backward compatibility)
959
793
  if (Array.isArray(this.providers)) {
960
794
  for (const provider of this.providers) {
961
795
  set(provider, '__parent__', this);
962
796
  items.push(...(await provider.items()));
963
797
  }
964
798
  }
965
- // Load from registry (manifest-based, conditionally loaded)
966
- const registryProviders = this.providerRegistry.getDatasourceProviders();
967
- for (const provider of registryProviders) {
968
- set(provider, '__parent__', this);
969
- items.push(...(await provider.items()));
970
- }
971
799
  return items;
972
800
  }
973
801
  async get(name) {
@@ -1138,203 +966,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
1138
966
  }]
1139
967
  }] });
1140
968
 
1141
- //#region ---- Imports ----
1142
- //#endregion
1143
- //#region ---- Directive ----
1144
- /**
1145
- * Fullscreen directive that provides CSS-based fullscreen functionality
1146
- * Usage: <element axFullscreen #fullscreen="axFullscreen"></element>
1147
- * Then: fullscreen.toggle() or fullscreen.enter() or fullscreen.exit()
1148
- */
1149
- class AXFullscreenDirective {
1150
- constructor(elementRef) {
1151
- this.elementRef = elementRef;
1152
- //#region ---- Properties ----
1153
- /**
1154
- * Current fullscreen state
1155
- */
1156
- this.isFullscreenState = signal(false, ...(ngDevMode ? [{ debugName: "isFullscreenState" }] : []));
1157
- /**
1158
- * Original element styles to restore
1159
- */
1160
- this.originalStyles = {};
1161
- /**
1162
- * Original parent element reference
1163
- */
1164
- this.originalParent = null;
1165
- /**
1166
- * Fullscreen container element
1167
- */
1168
- this.fullscreenContainer = null;
1169
- /**
1170
- * Fullscreen change event
1171
- */
1172
- this.fullscreenChange = output();
1173
- //#endregion
1174
- //#region ---- Constructor ----
1175
- this.destroyRef = inject(DestroyRef);
1176
- this.renderer = inject(Renderer2);
1177
- // Sync state changes to output
1178
- effect(() => {
1179
- const isFullscreen = this.isFullscreenState();
1180
- untracked(() => {
1181
- this.fullscreenChange.emit(isFullscreen);
1182
- });
1183
- });
1184
- }
1185
- //#endregion
1186
- //#region ---- Public API ----
1187
- /**
1188
- * Toggle fullscreen state
1189
- */
1190
- async toggle() {
1191
- if (this.isFullscreenState()) {
1192
- await this.exit();
1193
- }
1194
- else {
1195
- await this.enter();
1196
- }
1197
- }
1198
- /**
1199
- * Enter fullscreen mode using CSS
1200
- */
1201
- async enter() {
1202
- if (this.isFullscreenState()) {
1203
- return;
1204
- }
1205
- const element = this.elementRef.nativeElement;
1206
- try {
1207
- // Store original styles and parent
1208
- this.storeOriginalStyles(element);
1209
- this.originalParent = element.parentElement;
1210
- // Create fullscreen container
1211
- this.fullscreenContainer = this.renderer.createElement('div');
1212
- this.renderer.setStyle(this.fullscreenContainer, 'position', 'fixed');
1213
- this.renderer.setStyle(this.fullscreenContainer, 'top', '0');
1214
- this.renderer.setStyle(this.fullscreenContainer, 'left', '0');
1215
- this.renderer.setStyle(this.fullscreenContainer, 'width', '100vw');
1216
- this.renderer.setStyle(this.fullscreenContainer, 'height', '100vh');
1217
- this.renderer.setStyle(this.fullscreenContainer, 'z-index', '9999');
1218
- this.renderer.setStyle(this.fullscreenContainer, 'background-color', '#ffffff');
1219
- this.renderer.setStyle(this.fullscreenContainer, 'overflow', 'auto');
1220
- // Move element to container
1221
- this.renderer.appendChild(this.fullscreenContainer, element);
1222
- // Apply fullscreen styles to element
1223
- this.renderer.setStyle(element, 'position', 'relative');
1224
- this.renderer.setStyle(element, 'width', '100%');
1225
- this.renderer.setStyle(element, 'height', '100%');
1226
- this.renderer.setStyle(element, 'margin', '0');
1227
- this.renderer.setStyle(element, 'padding', '0');
1228
- // Append container to body
1229
- this.renderer.appendChild(document.body, this.fullscreenContainer);
1230
- // Prevent body scroll
1231
- this.renderer.setStyle(document.body, 'overflow', 'hidden');
1232
- this.isFullscreenState.set(true);
1233
- }
1234
- catch (error) {
1235
- console.error('Error entering fullscreen:', error);
1236
- this.restoreOriginalStyles(element);
1237
- }
1238
- }
1239
- /**
1240
- * Exit fullscreen mode
1241
- */
1242
- async exit() {
1243
- if (!this.isFullscreenState()) {
1244
- return;
1245
- }
1246
- const element = this.elementRef.nativeElement;
1247
- try {
1248
- // Restore body scroll
1249
- this.renderer.removeStyle(document.body, 'overflow');
1250
- // Move element back to original parent
1251
- if (this.fullscreenContainer && this.originalParent) {
1252
- this.renderer.removeChild(this.fullscreenContainer, element);
1253
- this.renderer.appendChild(this.originalParent, element);
1254
- // Remove container
1255
- this.renderer.removeChild(document.body, this.fullscreenContainer);
1256
- this.fullscreenContainer = null;
1257
- }
1258
- // Restore original styles
1259
- this.restoreOriginalStyles(element);
1260
- this.isFullscreenState.set(false);
1261
- }
1262
- catch (error) {
1263
- console.error('Error exiting fullscreen:', error);
1264
- }
1265
- }
1266
- /**
1267
- * Check if currently in fullscreen mode
1268
- */
1269
- isFullscreen() {
1270
- return this.isFullscreenState();
1271
- }
1272
- //#endregion
1273
- //#region ---- Private Methods ----
1274
- /**
1275
- * Store original element styles
1276
- */
1277
- storeOriginalStyles(element) {
1278
- const computedStyle = window.getComputedStyle(element);
1279
- this.originalStyles = {
1280
- position: computedStyle.position,
1281
- top: computedStyle.top,
1282
- left: computedStyle.left,
1283
- width: computedStyle.width,
1284
- height: computedStyle.height,
1285
- zIndex: computedStyle.zIndex,
1286
- backgroundColor: computedStyle.backgroundColor,
1287
- margin: computedStyle.margin,
1288
- padding: computedStyle.padding,
1289
- };
1290
- }
1291
- /**
1292
- * Restore original element styles
1293
- */
1294
- restoreOriginalStyles(element) {
1295
- if (!this.originalStyles) {
1296
- return;
1297
- }
1298
- // Restore each style property
1299
- Object.entries(this.originalStyles).forEach(([key, value]) => {
1300
- const styleKey = this.camelToKebabCase(key);
1301
- if (value) {
1302
- this.renderer.setStyle(element, styleKey, value);
1303
- }
1304
- else {
1305
- this.renderer.removeStyle(element, styleKey);
1306
- }
1307
- });
1308
- this.originalStyles = {};
1309
- }
1310
- /**
1311
- * Convert camelCase to kebab-case for CSS properties
1312
- */
1313
- camelToKebabCase(str) {
1314
- return str.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase();
1315
- }
1316
- //#endregion
1317
- //#region ---- Lifecycle ----
1318
- ngOnDestroy() {
1319
- // Exit fullscreen if still active
1320
- if (this.isFullscreenState()) {
1321
- this.exit().catch(() => {
1322
- // Ignore errors during cleanup
1323
- });
1324
- }
1325
- }
1326
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXFullscreenDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
1327
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.12", type: AXFullscreenDirective, isStandalone: true, selector: "[axFullscreen]", outputs: { fullscreenChange: "fullscreenChange" }, exportAs: ["axFullscreen"], ngImport: i0 }); }
1328
- }
1329
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXFullscreenDirective, decorators: [{
1330
- type: Directive,
1331
- args: [{
1332
- selector: '[axFullscreen]',
1333
- standalone: true,
1334
- exportAs: 'axFullscreen',
1335
- }]
1336
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { fullscreenChange: [{ type: i0.Output, args: ["fullscreenChange"] }] } });
1337
-
1338
969
  const AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER = new InjectionToken('AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER');
1339
970
 
1340
971
  //#region ---- Imports ----
@@ -1814,362 +1445,459 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
1814
1445
  args: [{ providedIn: 'root' }]
1815
1446
  }] });
1816
1447
 
1817
- //#region ---- Imports ----
1818
- //#endregion
1819
-
1820
- //#region ---- Imports ----
1821
- //#endregion
1822
- //#region ---- Injection Token ----
1823
- /**
1824
- * Injection token for module manifest providers.
1825
- * Modules register their manifest providers using this token.
1826
- */
1827
- const AXP_MODULE_MANIFEST_PROVIDER = new InjectionToken('AXP_MODULE_MANIFEST_PROVIDER');
1828
- //#endregion
1829
- //#region ---- Default Provider ----
1830
-
1831
- //#region ---- Imports ----
1832
- //#endregion
1833
- //#region ---- Registry Service ----
1834
- /**
1835
- * Registry service for module manifests.
1836
- * Collects and manages all registered module manifests.
1837
- */
1838
- class AXPModuleManifestRegistry {
1448
+ class AXPAppStartUpService {
1839
1449
  constructor() {
1840
- //#region ---- Fields ----
1841
- this.manifests = new Map();
1842
- this.featureDefinitions = new Map();
1843
- this.injector = inject(Injector);
1844
- this.initializationPromise = null;
1845
- this.isInitialized = false;
1846
- }
1847
- //#endregion
1848
- //#region ---- Initialization ----
1849
- /**
1850
- * Initialize registry by loading all manifest providers.
1851
- * Should be called during app startup.
1852
- * Safe to call multiple times - will only initialize once.
1853
- */
1854
- async initialize() {
1855
- // If already initialized, return immediately
1856
- if (this.isInitialized) {
1857
- return;
1858
- }
1859
- // If initialization is in progress, wait for it
1860
- if (this.initializationPromise) {
1861
- return this.initializationPromise;
1862
- }
1863
- // Start initialization
1864
- this.initializationPromise = this._doInitialize();
1865
- await this.initializationPromise;
1450
+ this.tasks = [];
1866
1451
  }
1867
- /**
1868
- * Internal initialization logic.
1869
- */
1870
- async _doInitialize() {
1871
- // Get manifests from injector (using useValue, they are provided directly)
1872
- let manifests;
1873
- try {
1874
- const injectedManifests = this.injector.get(AXP_MODULE_MANIFEST_PROVIDER, []);
1875
- manifests = Array.isArray(injectedManifests) ? injectedManifests : injectedManifests ? [injectedManifests] : [];
1876
- }
1877
- catch (error) {
1878
- console.error('Failed to get manifest providers from injector:', error);
1879
- manifests = [];
1880
- }
1881
- // Register all manifests directly
1882
- const registerPromises = manifests.map(async (manifest) => {
1883
- try {
1884
- // Validate manifest
1885
- if (!manifest) {
1886
- console.error('Invalid manifest:', manifest);
1887
- return;
1888
- }
1889
- await this.register(manifest);
1890
- }
1891
- catch (error) {
1892
- console.error(`Failed to register manifest:`, error);
1893
- }
1894
- });
1895
- await Promise.all(registerPromises);
1896
- this.isInitialized = true;
1452
+ registerTask(task) {
1453
+ this.tasks.push(task);
1897
1454
  }
1898
- //#endregion
1899
- //#region ---- Manifest Management ----
1900
- /**
1901
- * Register a module manifest.
1902
- */
1903
- async register(manifest) {
1904
- // Validate manifest
1905
- if (!manifest.name) {
1906
- throw new Error('Manifest must have a name');
1907
- }
1908
- if (!manifest.version) {
1909
- throw new Error(`Manifest for module '${manifest.name}' must have a version`);
1455
+ async runAllTasks() {
1456
+ for (const task of this.tasks.sort((a, b) => a.priority - b.priority)) {
1457
+ console.log(`Running "${task.statusText}" with priority "${task.priority}"`);
1458
+ this.updateStatus(task.statusText);
1459
+ await task.run();
1910
1460
  }
1911
- // Register manifest
1912
- this.manifests.set(manifest.name, manifest);
1913
- }
1914
- /**
1915
- * Get manifest for a module.
1916
- */
1917
- get(moduleName) {
1918
- return this.manifests.get(moduleName);
1919
- }
1920
- /**
1921
- * Get all registered manifests.
1922
- */
1923
- getAll() {
1924
- return Array.from(this.manifests.values());
1925
- }
1926
- /**
1927
- * Check if a module manifest is registered.
1928
- */
1929
- has(moduleName) {
1930
- return this.manifests.has(moduleName);
1931
- }
1932
- //#endregion
1933
- //#region ---- Feature Definition Management ----
1934
- /**
1935
- * Get all feature definitions from all manifests.
1936
- */
1937
- getAllFeatureDefinitions() {
1938
- return Array.from(this.featureDefinitions.values());
1939
- }
1940
- /**
1941
- * Get feature definition by full name.
1942
- */
1943
- getFeatureDefinition(featureName) {
1944
- return this.featureDefinitions.get(featureName);
1945
- }
1946
- /**
1947
- * Check if a feature is defined in any manifest.
1948
- */
1949
- isFeatureDefined(featureName) {
1950
- return this.featureDefinitions.has(featureName);
1951
- }
1952
- /**
1953
- * Get default value for a feature.
1954
- * Returns undefined if feature is not defined.
1955
- */
1956
- getFeatureDefault(featureName) {
1957
- const definition = this.getFeatureDefinition(featureName);
1958
- return definition?.defaultValue;
1959
- }
1960
- /**
1961
- * Get all feature definitions for a specific module.
1962
- */
1963
- getModuleFeatures(moduleName) {
1964
- return Array.from(this.featureDefinitions.values()).filter((def) => def.module === moduleName);
1965
- }
1966
- /**
1967
- * Register a feature definition dynamically (e.g., from feature definition provider).
1968
- * Used to add features that are defined at runtime via featuresProvider.
1969
- */
1970
- registerFeatureDefinition(definition) {
1971
- this.featureDefinitions.set(definition.name, definition);
1972
1461
  }
1973
- //#endregion
1974
- //#region ---- Dependency Checking ----
1975
- /**
1976
- * Check if module dependencies are satisfied.
1977
- * Returns array of missing dependencies.
1978
- */
1979
- checkDependencies(moduleName) {
1980
- const manifest = this.get(moduleName);
1981
- if (!manifest?.dependencies) {
1982
- return { missingModules: [], missingFeatures: [] };
1983
- }
1984
- const missingModules = [];
1985
- const missingFeatures = [];
1986
- // Check module dependencies
1987
- if (manifest.dependencies.modules) {
1988
- for (const depModule of manifest.dependencies.modules) {
1989
- if (!this.has(depModule)) {
1990
- missingModules.push(depModule);
1991
- }
1992
- }
1993
- }
1994
- // Check feature dependencies
1995
- if (manifest.dependencies.features) {
1996
- for (const featureName of manifest.dependencies.features) {
1997
- if (!this.isFeatureDefined(featureName)) {
1998
- missingFeatures.push(featureName);
1999
- }
2000
- }
1462
+ updateStatus(status) {
1463
+ const loadingText = document.querySelector('#loadingText');
1464
+ if (loadingText) {
1465
+ loadingText.innerHTML = status;
2001
1466
  }
2002
- return { missingModules, missingFeatures };
2003
1467
  }
2004
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPModuleManifestRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2005
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPModuleManifestRegistry, providedIn: 'root' }); }
1468
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPAppStartUpService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1469
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPAppStartUpService, providedIn: 'root' }); }
2006
1470
  }
2007
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPModuleManifestRegistry, decorators: [{
1471
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPAppStartUpService, decorators: [{
2008
1472
  type: Injectable,
2009
- args: [{ providedIn: 'root' }]
1473
+ args: [{
1474
+ providedIn: 'root',
1475
+ }]
2010
1476
  }] });
1477
+ function initAppFactory(appInitService) {
1478
+ return () => appInitService.runAllTasks();
1479
+ }
1480
+ const AXPAppStartUpProvider = provideAppInitializer(() => {
1481
+ const initializerFn = initAppFactory(inject(AXPAppStartUpService));
1482
+ return initializerFn();
1483
+ });
2011
1484
 
2012
- //#region ---- Imports ----
2013
- //#endregion
2014
- //#region ---- Initializer ----
2015
1485
  /**
2016
- * Startup task to initialize module manifest registry.
2017
- * Registers this task with app startup service.
1486
+ * Status Definition Types
1487
+ * Defines the structure for status definitions and their transitions
2018
1488
  */
2019
- class AXPModuleManifestInitializer {
2020
- constructor() {
2021
- //#region ---- Fields ----
2022
- this.manifestRegistry = inject(AXPModuleManifestRegistry);
2023
- }
2024
- //#endregion
2025
- //#region ---- Public Methods ----
2026
- /**
2027
- * Create startup task for manifest initialization.
2028
- */
2029
- createStartupTask() {
2030
- return {
2031
- name: 'ModuleManifests',
2032
- statusText: 'Loading module manifests...',
2033
- priority: 1, // Load early, before features/permissions
2034
- run: async () => {
2035
- await this.manifestRegistry.initialize();
2036
- },
2037
- };
2038
- }
2039
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPModuleManifestInitializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2040
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPModuleManifestInitializer, providedIn: 'root' }); }
1489
+ /**
1490
+ * Abstract class for status providers
1491
+ * Similar to AXPTaskBadgeProvider pattern
1492
+ */
1493
+ class AXPStatusProvider {
2041
1494
  }
2042
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPModuleManifestInitializer, decorators: [{
2043
- type: Injectable,
2044
- args: [{ providedIn: 'root' }]
2045
- }] });
1495
+ //#endregion
2046
1496
 
2047
- //#region ---- Imports ----
1497
+ //#region ---- Injection Token ----
1498
+ /**
1499
+ * Injection token for status providers
1500
+ * Use with multi: true to register multiple providers
1501
+ */
1502
+ const AXP_STATUS_PROVIDERS = new InjectionToken('AXP_STATUS_PROVIDERS');
2048
1503
  //#endregion
2049
- //#region ---- Feature Definition Provider Interface ----
1504
+ //#region ---- Provider Service ----
2050
1505
  /**
2051
- * Context for feature definition providers.
2052
- * Allows providers to add additional feature definitions dynamically.
1506
+ * Service for managing status definitions from multiple providers
1507
+ * Similar to AXPTaskBadgeService pattern - no cache, direct access
1508
+ *
1509
+ * @example
1510
+ * ```typescript
1511
+ * // In a module providers array:
1512
+ * {
1513
+ * provide: AXP_STATUS_PROVIDERS,
1514
+ * useClass: TaskStatusProvider,
1515
+ * multi: true,
1516
+ * }
1517
+ *
1518
+ * // Example provider implementation:
1519
+ * export class TaskStatusProvider extends AXPStatusProvider {
1520
+ * readonly key = 'task-management.status';
1521
+ * readonly statuses = [
1522
+ * { name: 'todo', title: 'To Do', color: '#6b7280', icon: 'fa-light fa-circle', isInitial: true },
1523
+ * { name: 'in-progress', title: 'In Progress', color: '#3b82f6', icon: 'fa-light fa-play' },
1524
+ * { name: 'done', title: 'Done', color: '#10b981', icon: 'fa-light fa-check-circle', isFinal: true },
1525
+ * ];
1526
+ * readonly transitions = [
1527
+ * { from: 'todo', to: 'in-progress', title: 'Start', condition: '{{user.canEdit}}' },
1528
+ * { from: 'in-progress', to: 'done', title: 'Complete' },
1529
+ * ];
1530
+ * readonly defaultStatus = 'todo';
1531
+ * }
1532
+ *
1533
+ * // Later, get the status:
1534
+ * const status = statusService.getStatus('task-management.status');
1535
+ * if (status) {
1536
+ * console.log('Statuses:', status.statuses);
1537
+ * console.log('Transitions:', status.transitions);
1538
+ * }
1539
+ * ```
2053
1540
  */
2054
- class AXPFeatureDefinitionProviderContext {
1541
+ class AXPStatusDefinitionProviderService {
1542
+ //#endregion
1543
+ //#region ---- Constructor ----
2055
1544
  constructor() {
2056
- this.features = new Map();
2057
- }
2058
- /**
2059
- * Add a feature definition.
2060
- * @param key Full feature key (ModuleName:FeatureKey format with colon separator)
2061
- * @param definition Feature definition
2062
- */
2063
- addFeature(key, definition) {
2064
- this.features.set(key, definition);
1545
+ //#region ---- Dependencies ----
1546
+ this.providers = inject(AXP_STATUS_PROVIDERS, { optional: true }) ?? [];
1547
+ //#endregion
1548
+ //#region ---- State ----
1549
+ this.statusMap = new Map();
1550
+ // Register all providers in constructor (like badge service)
1551
+ for (const provider of this.providers) {
1552
+ if (this.statusMap.has(provider.key)) {
1553
+ console.warn(`Status with key "${provider.key}" already exists. Overwriting with new status.`);
1554
+ }
1555
+ this.statusMap.set(provider.key, provider);
1556
+ }
2065
1557
  }
1558
+ //#endregion
1559
+ //#region ---- Public API ----
2066
1560
  /**
2067
- * Get all feature definitions.
2068
- */
2069
- getFeatures() {
2070
- return this.features;
2071
- }
1561
+ * Get a status provider by key
1562
+ * Direct access from Map (no lazy load, no cache)
1563
+ *
1564
+ * @param key - Status key (e.g., 'task-management.status')
1565
+ * @returns Status provider with all statuses and transitions, or undefined if not found
1566
+ *
1567
+ * @example
1568
+ * ```typescript
1569
+ * const status = statusService.getStatus('task-management.status');
1570
+ * if (status) {
1571
+ * console.log('Statuses:', status.statuses);
1572
+ * console.log('Transitions:', status.transitions);
1573
+ * }
1574
+ * ```
1575
+ */
1576
+ getStatus(key) {
1577
+ return this.statusMap.get(key);
1578
+ }
1579
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPStatusDefinitionProviderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1580
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPStatusDefinitionProviderService, providedIn: 'root' }); }
2072
1581
  }
1582
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPStatusDefinitionProviderService, decorators: [{
1583
+ type: Injectable,
1584
+ args: [{ providedIn: 'root' }]
1585
+ }], ctorParameters: () => [] });
1586
+
2073
1587
  /**
2074
- * Injection token for feature definition providers.
1588
+ * Standard system status types
1589
+ * These are the predefined status values used across the platform
2075
1590
  */
2076
- const AXP_FEATURE_DEFINITION_PROVIDER = new InjectionToken('AXP_FEATURE_DEFINITION_PROVIDER', {
2077
- providedIn: 'root',
2078
- factory: () => [],
2079
- });
2080
- //#endregion
2081
-
2082
- //#region ---- Provider Interfaces ----
1591
+ var AXPSystemStatusType;
1592
+ (function (AXPSystemStatusType) {
1593
+ AXPSystemStatusType["Todo"] = "todo";
1594
+ AXPSystemStatusType["InProgress"] = "in-progress";
1595
+ AXPSystemStatusType["InReview"] = "in-review";
1596
+ AXPSystemStatusType["Blocked"] = "blocked";
1597
+ AXPSystemStatusType["Done"] = "done";
1598
+ AXPSystemStatusType["Cancelled"] = "cancelled";
1599
+ AXPSystemStatusType["Draft"] = "draft";
1600
+ AXPSystemStatusType["PendingReview"] = "pending-review";
1601
+ AXPSystemStatusType["Approved"] = "approved";
1602
+ AXPSystemStatusType["Published"] = "published";
1603
+ AXPSystemStatusType["Archived"] = "archived";
1604
+ AXPSystemStatusType["Rejected"] = "rejected";
1605
+ AXPSystemStatusType["Active"] = "active";
1606
+ AXPSystemStatusType["Inactive"] = "inactive";
1607
+ AXPSystemStatusType["Pending"] = "pending";
1608
+ AXPSystemStatusType["Completed"] = "completed";
1609
+ AXPSystemStatusType["Suspended"] = "suspended";
1610
+ AXPSystemStatusType["Failed"] = "failed";
1611
+ AXPSystemStatusType["Review"] = "review";
1612
+ })(AXPSystemStatusType || (AXPSystemStatusType = {}));
1613
+ const i18n$1 = (key) => `@general:statuses.${key}`;
2083
1614
  /**
2084
- * Injection token for edition service.
2085
- * Modules should provide their implementation using this token.
1615
+ * Standard system status definitions
1616
+ * Provides consistent status definitions across the platform
1617
+ * Uses AXPStatusDefinition interface from status-definition.types.ts
2086
1618
  */
2087
- const AXP_EDITION_SERVICE = new InjectionToken('AXP_EDITION_SERVICE', {
2088
- providedIn: 'root',
2089
- factory: () => {
2090
- return null;
1619
+ const AXPSystemStatuses = Object.freeze({
1620
+ Todo: {
1621
+ name: AXPSystemStatusType.Todo,
1622
+ title: i18n$1('todo.title'),
1623
+ icon: 'fa-light fa-circle',
1624
+ color: 'secondary',
1625
+ description: i18n$1('todo.description'),
1626
+ order: 1,
1627
+ isActive: true,
1628
+ isInitial: true,
1629
+ isFinal: false,
1630
+ },
1631
+ InProgress: {
1632
+ name: AXPSystemStatusType.InProgress,
1633
+ title: i18n$1('in-progress.title'),
1634
+ icon: 'fa-light fa-play',
1635
+ color: 'info',
1636
+ description: i18n$1('in-progress.description'),
1637
+ order: 2,
1638
+ isActive: true,
1639
+ isInitial: false,
1640
+ isFinal: false,
1641
+ },
1642
+ InReview: {
1643
+ name: AXPSystemStatusType.InReview,
1644
+ title: i18n$1('in-review.title'),
1645
+ icon: 'fa-light fa-eye',
1646
+ color: 'info',
1647
+ description: i18n$1('in-review.description'),
1648
+ order: 3,
1649
+ isActive: true,
1650
+ isInitial: false,
1651
+ isFinal: false,
1652
+ },
1653
+ Blocked: {
1654
+ name: AXPSystemStatusType.Blocked,
1655
+ title: i18n$1('blocked.title'),
1656
+ icon: 'fa-light fa-ban',
1657
+ color: 'danger',
1658
+ description: i18n$1('blocked.description'),
1659
+ order: 4,
1660
+ isActive: true,
1661
+ isInitial: false,
1662
+ isFinal: false,
1663
+ },
1664
+ Done: {
1665
+ name: AXPSystemStatusType.Done,
1666
+ title: i18n$1('done.title'),
1667
+ icon: 'fa-light fa-check-circle',
1668
+ color: 'success',
1669
+ description: i18n$1('done.description'),
1670
+ order: 5,
1671
+ isActive: true,
1672
+ isInitial: false,
1673
+ isFinal: true,
1674
+ },
1675
+ Cancelled: {
1676
+ name: AXPSystemStatusType.Cancelled,
1677
+ title: i18n$1('cancelled.title'),
1678
+ icon: 'fa-light fa-times-circle',
1679
+ color: 'neutral',
1680
+ description: i18n$1('cancelled.description'),
1681
+ order: 6,
1682
+ isActive: true,
1683
+ isInitial: false,
1684
+ isFinal: true,
1685
+ },
1686
+ Draft: {
1687
+ name: AXPSystemStatusType.Draft,
1688
+ title: i18n$1('draft.title'),
1689
+ icon: 'fa-light fa-file-pen',
1690
+ color: 'neutral',
1691
+ description: i18n$1('draft.description'),
1692
+ order: 1,
1693
+ isActive: true,
1694
+ isInitial: true,
1695
+ isFinal: false,
1696
+ },
1697
+ PendingReview: {
1698
+ name: AXPSystemStatusType.PendingReview,
1699
+ title: i18n$1('pending-review.title'),
1700
+ icon: 'fa-light fa-clock',
1701
+ color: 'warning',
1702
+ description: i18n$1('pending-review.description'),
1703
+ order: 2,
1704
+ isActive: true,
1705
+ isInitial: false,
1706
+ isFinal: false,
1707
+ },
1708
+ Approved: {
1709
+ name: AXPSystemStatusType.Approved,
1710
+ title: i18n$1('approved.title'),
1711
+ icon: 'fa-light fa-check-circle',
1712
+ color: 'success',
1713
+ description: i18n$1('approved.description'),
1714
+ order: 3,
1715
+ isActive: true,
1716
+ isInitial: false,
1717
+ isFinal: false,
1718
+ },
1719
+ Published: {
1720
+ name: AXPSystemStatusType.Published,
1721
+ title: i18n$1('published.title'),
1722
+ icon: 'fa-light fa-globe',
1723
+ color: 'primary',
1724
+ description: i18n$1('published.description'),
1725
+ order: 4,
1726
+ isActive: true,
1727
+ isInitial: false,
1728
+ isFinal: false,
1729
+ },
1730
+ Archived: {
1731
+ name: AXPSystemStatusType.Archived,
1732
+ title: i18n$1('archived.title'),
1733
+ icon: 'fa-light fa-archive',
1734
+ color: 'neutral',
1735
+ description: i18n$1('archived.description'),
1736
+ order: 5,
1737
+ isActive: true,
1738
+ isInitial: false,
1739
+ isFinal: true,
1740
+ },
1741
+ Rejected: {
1742
+ name: AXPSystemStatusType.Rejected,
1743
+ title: i18n$1('rejected.title'),
1744
+ icon: 'fa-light fa-times-circle',
1745
+ color: 'danger',
1746
+ description: i18n$1('rejected.description'),
1747
+ order: 6,
1748
+ isActive: true,
1749
+ isInitial: false,
1750
+ isFinal: true,
1751
+ },
1752
+ Active: {
1753
+ name: AXPSystemStatusType.Active,
1754
+ title: i18n$1('active.title'),
1755
+ icon: 'fa-light fa-check-circle',
1756
+ color: 'success',
1757
+ description: i18n$1('active.description'),
1758
+ order: 1,
1759
+ isActive: true,
1760
+ isInitial: false,
1761
+ isFinal: false,
1762
+ },
1763
+ Inactive: {
1764
+ name: AXPSystemStatusType.Inactive,
1765
+ title: i18n$1('inactive.title'),
1766
+ icon: 'fa-light fa-circle',
1767
+ color: 'secondary',
1768
+ description: i18n$1('inactive.description'),
1769
+ order: 2,
1770
+ isActive: true,
1771
+ isInitial: false,
1772
+ isFinal: false,
1773
+ },
1774
+ Pending: {
1775
+ name: AXPSystemStatusType.Pending,
1776
+ title: i18n$1('pending.title'),
1777
+ icon: 'fa-light fa-clock',
1778
+ color: 'warning',
1779
+ description: i18n$1('pending.description'),
1780
+ order: 1,
1781
+ isActive: true,
1782
+ isInitial: true,
1783
+ isFinal: false,
1784
+ },
1785
+ Completed: {
1786
+ name: AXPSystemStatusType.Completed,
1787
+ title: i18n$1('completed.title'),
1788
+ icon: 'fa-light fa-check-circle',
1789
+ color: 'success',
1790
+ description: i18n$1('completed.description'),
1791
+ order: 10,
1792
+ isActive: true,
1793
+ isInitial: false,
1794
+ isFinal: true,
1795
+ },
1796
+ Suspended: {
1797
+ name: AXPSystemStatusType.Suspended,
1798
+ title: i18n$1('suspended.title'),
1799
+ icon: 'fa-light fa-pause-circle',
1800
+ color: 'neutral',
1801
+ description: i18n$1('suspended.description'),
1802
+ order: 5,
1803
+ isActive: true,
1804
+ isInitial: false,
1805
+ isFinal: false,
1806
+ },
1807
+ Failed: {
1808
+ name: AXPSystemStatusType.Failed,
1809
+ title: i18n$1('failed.title'),
1810
+ icon: 'fa-light fa-xmark-circle',
1811
+ color: 'danger',
1812
+ description: i18n$1('failed.description'),
1813
+ order: 10,
1814
+ isActive: true,
1815
+ isInitial: false,
1816
+ isFinal: true,
1817
+ },
1818
+ Review: {
1819
+ name: AXPSystemStatusType.Review,
1820
+ title: i18n$1('review.title'),
1821
+ icon: 'fa-light fa-eye',
1822
+ color: 'info',
1823
+ description: i18n$1('review.description'),
1824
+ order: 3,
1825
+ isActive: true,
2091
1826
  },
2092
1827
  });
2093
1828
  /**
2094
- * Injection token for module provider loader.
2095
- * Implementation: @acorex/platform/auth
2096
- */
2097
- const AXP_MODULE_PROVIDER_LOADER = new InjectionToken('AXP_MODULE_PROVIDER_LOADER');
2098
- /**
2099
- * Injection token for module provider initializer.
2100
- * Implementation: @acorex/platform/auth
1829
+ * Get system status definition by type
1830
+ * @param type - Status type
1831
+ * @returns System status definition or undefined
2101
1832
  */
2102
- const AXP_MODULE_PROVIDER_INITIALIZER = new InjectionToken('AXP_MODULE_PROVIDER_INITIALIZER');
2103
- /**
2104
- * Injection token for session service.
2105
- * Implementation: @acorex/platform/auth
2106
- */
2107
- const AXP_SESSION_SERVICE = new InjectionToken('AXP_SESSION_SERVICE');
2108
- //#endregion
2109
-
2110
- //#region ---- Imports ----
2111
- //#endregion
2112
- //#region ---- Default Implementation ----
2113
- /**
2114
- * Default implementation of module access control service.
2115
- * Checks if module is enabled in edition.modulesAndFeatures.modules.
2116
- */
2117
- class DefaultModuleAccessControlService {
2118
- checkAccess(moduleName, context) {
2119
- // Check if module is enabled in edition
2120
- const enabledModules = context.edition.modulesAndFeatures?.modules || [];
2121
- return enabledModules.includes(moduleName);
2122
- }
2123
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: DefaultModuleAccessControlService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2124
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: DefaultModuleAccessControlService, providedIn: 'root' }); }
1833
+ function getSystemStatus(type) {
1834
+ return Object.values(AXPSystemStatuses).find(status => status.name === type);
2125
1835
  }
2126
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: DefaultModuleAccessControlService, decorators: [{
2127
- type: Injectable,
2128
- args: [{ providedIn: 'root' }]
2129
- }] });
2130
- //#endregion
2131
- //#region ---- Injection Token ----
2132
1836
  /**
2133
- * Injection token for module access control service.
2134
- * If not provided, DefaultModuleAccessControlService will be used as fallback.
1837
+ * Resolves the visual appearance (color and icon) for status
1838
+ * using the system statuses from the core module.
1839
+ * @param statusType - Status type string
1840
+ * @returns Color and icon for the status
2135
1841
  */
2136
- const AXP_MODULE_ACCESS_CONTROL_SERVICE = new InjectionToken('AXP_MODULE_ACCESS_CONTROL_SERVICE');
2137
-
2138
- class AXPAppStartUpService {
2139
- constructor() {
2140
- this.tasks = [];
2141
- }
2142
- registerTask(task) {
2143
- this.tasks.push(task);
2144
- }
2145
- async runAllTasks() {
2146
- for (const task of this.tasks.sort((a, b) => a.priority - b.priority)) {
2147
- this.updateStatus(task.statusText);
2148
- await task.run();
1842
+ function resolveStatusLook(statusType) {
1843
+ // Try to get system status first
1844
+ const systemStatusType = statusType;
1845
+ if (systemStatusType) {
1846
+ const systemStatus = getSystemStatus(systemStatusType);
1847
+ if (systemStatus) {
1848
+ // Convert hex color to semantic color type if needed
1849
+ // For now, return as-is and let the UI handle it
1850
+ return {
1851
+ color: systemStatus.color,
1852
+ icon: systemStatus.icon || ''
1853
+ };
2149
1854
  }
2150
1855
  }
2151
- updateStatus(status) {
2152
- const loadingText = document.querySelector('#loadingText');
2153
- if (loadingText) {
2154
- loadingText.innerHTML = status;
1856
+ // Fallback for unknown statuses
1857
+ return {
1858
+ color: 'secondary',
1859
+ icon: ''
1860
+ };
1861
+ }
1862
+ /**
1863
+ * Resolves the complete status information (title, description, icon, color) for a status
1864
+ * using the system statuses from the core module.
1865
+ * @param statusType - Status type string
1866
+ * @returns Complete status information as AXPStatusDefinition
1867
+ */
1868
+ function getStatusInfo(statusType) {
1869
+ const systemStatusType = statusType;
1870
+ if (systemStatusType) {
1871
+ const systemStatus = getSystemStatus(systemStatusType);
1872
+ if (systemStatus) {
1873
+ return systemStatus;
2155
1874
  }
2156
1875
  }
2157
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPAppStartUpService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2158
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPAppStartUpService, providedIn: 'root' }); }
1876
+ // Fallback for unknown statuses
1877
+ return {
1878
+ name: statusType,
1879
+ title: statusType,
1880
+ description: `Status: ${statusType}`,
1881
+ icon: '',
1882
+ color: 'secondary'
1883
+ };
2159
1884
  }
2160
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPAppStartUpService, decorators: [{
2161
- type: Injectable,
2162
- args: [{
2163
- providedIn: 'root',
2164
- }]
2165
- }] });
2166
- function initAppFactory(appInitService) {
2167
- return () => appInitService.runAllTasks();
1885
+ /**
1886
+ * Get system status definition directly (no conversion needed since it's already AXPStatusDefinition)
1887
+ * @param statusType - Status type
1888
+ * @param overrides - Optional overrides for the status definition
1889
+ * @returns AXPStatusDefinition
1890
+ */
1891
+ function systemStatusToDefinition(statusType, overrides) {
1892
+ const systemStatus = getSystemStatus(statusType);
1893
+ if (!systemStatus) {
1894
+ throw new Error(`System status ${statusType} not found`);
1895
+ }
1896
+ return {
1897
+ ...systemStatus,
1898
+ ...overrides,
1899
+ };
2168
1900
  }
2169
- const AXPAppStartUpProvider = provideAppInitializer(() => {
2170
- const initializerFn = initAppFactory(inject(AXPAppStartUpService));
2171
- return initializerFn();
2172
- });
2173
1901
 
2174
1902
  //#region ---- Tag Types ----
2175
1903
  //#endregion
@@ -3279,12 +3007,6 @@ class AXPComponentLogoConfig {
3279
3007
  this.component = component;
3280
3008
  }
3281
3009
  }
3282
- class AXPIconLogoConfig {
3283
- constructor(icon, color) {
3284
- this.icon = icon;
3285
- this.color = color;
3286
- }
3287
- }
3288
3010
 
3289
3011
  var AXPPlatformScope;
3290
3012
  (function (AXPPlatformScope) {
@@ -3886,5 +3608,5 @@ function generateKebabCase(title) {
3886
3608
  * Generated bundle index. Do not edit.
3887
3609
  */
3888
3610
 
3889
- export { AXFullscreenDirective, AXHighlightService, AXPActivityLogProvider, AXPActivityLogService, AXPAppStartUpProvider, AXPAppStartUpService, AXPBroadcastEventService, AXPColorPaletteProvider, AXPColorPaletteService, AXPComponentLogoConfig, AXPContentCheckerDirective, AXPContextChangeEvent, AXPContextStore, AXPCountdownPipe, AXPDataGenerator, AXPDataSourceDefinitionProviderService, AXPDblClickDirective, AXPDefaultColorPalettesProvider, AXPDeviceService, AXPDeviceType, AXPDistributedEventListenerService, AXPElementDataDirective, AXPExportTemplateToken, AXPExpressionEvaluatorScopeProviderContext, AXPExpressionEvaluatorScopeProviderService, AXPExpressionEvaluatorService, AXPFeatureDefinitionProviderContext, AXPGridLayoutDirective, AXPHookService, AXPIconLogoConfig, AXPImageUrlLogoConfig, AXPModuleManifestInitializer, AXPModuleManifestRegistry, AXPModuleProviderRegistry, AXPPlatformScope, AXPScreenSize, AXPSystemActionType, AXPSystemActions, AXPTagProvider, AXPTagService, AXP_ACTIVITY_LOG_PROVIDER, AXP_COLOR_PALETTE_PROVIDER, AXP_DATASOURCE_DEFINITION_PROVIDER, AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, AXP_EDITION_SERVICE, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER, AXP_MODULE_ACCESS_CONTROL_SERVICE, AXP_MODULE_MANIFEST_PROVIDER, AXP_MODULE_PROVIDER_INITIALIZER, AXP_MODULE_PROVIDER_LOADER, AXP_SESSION_SERVICE, AXP_TAG_PROVIDER, DefaultModuleAccessControlService, applyFilterArray, applyPagination, applyQueryArray, applySortArray, applySystemActionDefault, cleanDeep, extractNestedFieldsWildcard, extractTextFromHtml, extractValue, generateKebabCase, getActionButton, getChangedPaths, getDetailedChanges, getEnumValues, getNestedKeys, getSmart, getSystemActions, objectKeyValueTransforms, resolveActionLook, resolvePlatformScopeKey, resolvePlatformScopeName, setSmart };
3611
+ export { AXHighlightService, AXPActivityLogProvider, AXPActivityLogService, AXPAppStartUpProvider, AXPAppStartUpService, AXPBroadcastEventService, AXPColorPaletteProvider, AXPColorPaletteService, AXPComponentLogoConfig, AXPContentCheckerDirective, AXPContextChangeEvent, AXPContextStore, AXPCountdownPipe, AXPDataGenerator, AXPDataSourceDefinitionProviderService, AXPDblClickDirective, AXPDefaultColorPalettesProvider, AXPDeviceService, AXPDeviceType, AXPDistributedEventListenerService, AXPElementDataDirective, AXPExportTemplateToken, AXPExpressionEvaluatorScopeProviderContext, AXPExpressionEvaluatorScopeProviderService, AXPExpressionEvaluatorService, AXPGridLayoutDirective, AXPHookService, AXPImageUrlLogoConfig, AXPPlatformScope, AXPScreenSize, AXPStatusDefinitionProviderService, AXPStatusProvider, AXPSystemActionType, AXPSystemActions, AXPSystemStatusType, AXPSystemStatuses, AXPTagProvider, AXPTagService, AXP_ACTIVITY_LOG_PROVIDER, AXP_COLOR_PALETTE_PROVIDER, AXP_DATASOURCE_DEFINITION_PROVIDER, AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXP_STATUS_PROVIDERS, AXP_TAG_PROVIDER, applyFilterArray, applyPagination, applyQueryArray, applySortArray, applySystemActionDefault, cleanDeep, extractNestedFieldsWildcard, extractTextFromHtml, extractValue, generateKebabCase, getActionButton, getChangedPaths, getDetailedChanges, getEnumValues, getNestedKeys, getSmart, getStatusInfo, getSystemActions, getSystemStatus, objectKeyValueTransforms, resolveActionLook, resolvePlatformScopeKey, resolvePlatformScopeName, resolveStatusLook, setSmart, systemStatusToDefinition };
3890
3612
  //# sourceMappingURL=acorex-platform-core.mjs.map