@acorex/platform 20.8.18 → 20.8.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/common/index.d.ts +71 -5
  2. package/fesm2022/acorex-platform-common.mjs +248 -59
  3. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  4. package/fesm2022/acorex-platform-layout-components.mjs +28 -18
  5. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  6. package/fesm2022/acorex-platform-layout-entity.mjs +131 -35
  7. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  8. package/fesm2022/acorex-platform-layout-views.mjs +7 -3
  9. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  10. package/fesm2022/acorex-platform-layout-widget-core.mjs +87 -16
  11. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  12. package/fesm2022/acorex-platform-layout-widgets.mjs +1 -1
  13. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  14. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-D2CtNrSn.mjs → acorex-platform-themes-default-entity-master-list-view.component-DnFEQS-L.mjs} +48 -15
  15. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DnFEQS-L.mjs.map +1 -0
  16. package/fesm2022/acorex-platform-themes-default-error-404.component-CgVwJxdC.mjs +42 -0
  17. package/fesm2022/acorex-platform-themes-default-error-404.component-CgVwJxdC.mjs.map +1 -0
  18. package/fesm2022/acorex-platform-themes-default.mjs +17 -7
  19. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  20. package/layout/components/index.d.ts +2 -1
  21. package/layout/entity/index.d.ts +22 -3
  22. package/layout/views/index.d.ts +2 -1
  23. package/layout/widget-core/index.d.ts +12 -3
  24. package/package.json +8 -8
  25. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-D2CtNrSn.mjs.map +0 -1
  26. package/fesm2022/acorex-platform-themes-default-error-404.component-DVF9soT5.mjs +0 -25
  27. package/fesm2022/acorex-platform-themes-default-error-404.component-DVF9soT5.mjs.map +0 -1
package/common/index.d.ts CHANGED
@@ -8,8 +8,8 @@ import { AXPValueTransformerFunctions, AXPOptionsData, AXPExpression, AXPFilterD
8
8
  import { AXPWidgetTypesMap, AXPMetaDataDefinition, AXPWidgetNode } from '@acorex/platform/layout/widget-core';
9
9
  import * as i3 from '@acorex/core/date-time';
10
10
  import { AXCalendarService } from '@acorex/core/date-time';
11
- import * as i6 from '@angular/router';
12
- import { Route, Routes } from '@angular/router';
11
+ import * as _angular_router from '@angular/router';
12
+ import { Route, Routes, Router, RedirectCommand, ActivatedRouteSnapshot, CanActivateFn } from '@angular/router';
13
13
  import * as i1 from '@acorex/platform/workflow';
14
14
  import { AXPWorkflowAction, AXPWorkflowContext, AXPWorkflow } from '@acorex/platform/workflow';
15
15
  import * as i4 from '@acorex/components/toast';
@@ -559,6 +559,22 @@ declare class AXPGlobalErrorHandler extends ErrorHandler {
559
559
  static ɵprov: i0.ɵɵInjectableDeclaration<AXPGlobalErrorHandler>;
560
560
  }
561
561
 
562
+ /** Thrown when a requested platform resource cannot be resolved. */
563
+ declare class AXPNotFoundError extends Error {
564
+ constructor(message?: string);
565
+ }
566
+
567
+ /** Canonical route path for the platform 404 page. */
568
+ declare const AXP_NOT_FOUND_ROUTE = "/error/404";
569
+ /**
570
+ * Returns true when an entity byKey query did not resolve a record.
571
+ */
572
+ declare function axpIsEntityRecordNotFound(data: unknown): boolean;
573
+ /**
574
+ * Creates an Angular redirect command to the platform 404 page.
575
+ */
576
+ declare function axpRedirectToNotFound(router?: Router): RedirectCommand;
577
+
562
578
  interface AXPCommonModuleConfigs {
563
579
  errorHandlers: (new () => AXPErrorHandler)[];
564
580
  }
@@ -570,7 +586,7 @@ declare class AXPCommonModule {
570
586
  */
571
587
  constructor(instances: any[]);
572
588
  static ɵfac: i0.ɵɵFactoryDeclaration<AXPCommonModule, never>;
573
- static ɵmod: i0.ɵɵNgModuleDeclaration<AXPCommonModule, never, [typeof i1.AXPWorkflowModule, typeof i2.AXPopupModule, typeof i3.AXDateTimeModule, typeof i4.AXToastModule, typeof i5.AXPModuleManifestModule], [typeof i6.RouterModule]>;
589
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AXPCommonModule, never, [typeof i1.AXPWorkflowModule, typeof i2.AXPopupModule, typeof i3.AXDateTimeModule, typeof i4.AXToastModule, typeof i5.AXPModuleManifestModule], [typeof _angular_router.RouterModule]>;
574
590
  static ɵinj: i0.ɵɵInjectorDeclaration<AXPCommonModule>;
575
591
  }
576
592
 
@@ -1573,6 +1589,56 @@ declare class AXPMenuVisibilityService {
1573
1589
  static ɵprov: i0.ɵɵInjectableDeclaration<AXPMenuVisibilityService>;
1574
1590
  }
1575
1591
 
1592
+ interface AXPMenuRouteMatchResult {
1593
+ item: AXPMenuItem;
1594
+ isPartialMatch: boolean;
1595
+ }
1596
+ /**
1597
+ * Compares a menu item path with the current browser path.
1598
+ * Mirrors the matching rules used when selecting the active menu item.
1599
+ */
1600
+ declare function axpMenuPathsMatch(itemPath: string, currentPath: string, trailingSegmentsToIgnore?: string[]): {
1601
+ isMatch: boolean;
1602
+ isPartial: boolean;
1603
+ };
1604
+ /**
1605
+ * Finds the most specific menu item that matches the given route path.
1606
+ */
1607
+ declare function axpFindMenuItemByRoute(items: AXPMenuItem[], currentPath: string, trailingSegmentsToIgnore?: string[]): AXPMenuRouteMatchResult | null;
1608
+
1609
+ /**
1610
+ * Resolves route access using the same permission and feature policies defined on menu items.
1611
+ */
1612
+ declare class AXPMenuRoutePermissionService {
1613
+ private readonly menuProvider;
1614
+ private readonly menuVisibility;
1615
+ private readonly sessionService;
1616
+ private readonly toastService;
1617
+ private readonly translationService;
1618
+ /**
1619
+ * Checks whether navigation to the target URL is allowed for the current user.
1620
+ */
1621
+ canAccess(route: ActivatedRouteSnapshot, url: string): Promise<boolean>;
1622
+ private shouldSkip;
1623
+ private hasRouteFlag;
1624
+ private hasExplicitRouteAccess;
1625
+ private getInheritedRouteData;
1626
+ private normalizeKeys;
1627
+ private normalizeUrl;
1628
+ private showAccessDeniedToast;
1629
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXPMenuRoutePermissionService, never>;
1630
+ static ɵprov: i0.ɵɵInjectableDeclaration<AXPMenuRoutePermissionService>;
1631
+ }
1632
+
1633
+ /**
1634
+ * Blocks navigation when the target route matches a menu item the current user cannot access.
1635
+ * Uses the same permission and feature policies applied to menu visibility.
1636
+ */
1637
+ declare const AXPMenuPermissionGuard: CanActivateFn;
1638
+
1639
+ /** Standard guards for authenticated routes with menu-based permission enforcement. */
1640
+ declare const AXP_PROTECTED_ROUTE_GUARDS: readonly [_angular_router.CanActivateFn, _angular_router.CanActivateFn];
1641
+
1576
1642
  interface AXPSearchDefinitionDisplayFormat {
1577
1643
  title?: string;
1578
1644
  description?: string;
@@ -2734,5 +2800,5 @@ declare class AXMWorkflowErrorHandler implements AXPErrorHandler {
2734
2800
  static ɵprov: i0.ɵɵInjectableDeclaration<AXMWorkflowErrorHandler>;
2735
2801
  }
2736
2802
 
2737
- export { ALL_DEFAULT_OPERATORS, AXMWorkflowErrorHandler, AXPAppVersionService, AXPCleanNestedFilters, AXPClipBoardService, AXPCommonModule, AXPCommonSettings, AXPCustomOperatorService, AXPCustomOperatorServiceImpl, AXPDataProvider, AXPDebugService, AXPDialogConfirmAction, AXPEntityCommandScope, AXPEntityQueryType, AXPErrorHandlerRegistryService, AXPExportService, AXPFileActionsService, AXPFileStorageService, AXPFileStorageStatus, AXPFileTypeProviderService, AXPFilterOperatorMiddlewareService, AXPFilterOperatorMiddlewareServiceImpl, AXPFooterTextSlotComponent, AXPGlobalErrorHandler, AXPHomePageModule, AXPHomePageService, AXPLockService, AXPMenuMiddlewareRegistry, AXPMenuProviderService, AXPMenuSearchDefinitionProvider, AXPMenuSearchProvider, AXPMenuService, AXPMenuVisibilityService, AXPNavBarSlotComponent, AXPNavigateWorkflow, AXPPlatformDefaultConfigs, AXPRedirectEvent, AXPRefreshEvent, AXPRegionalSetting, AXPRelationshipCardinality, AXPRelationshipKind, AXPReloadAction, AXPReloadEvent, AXPSearchCommandProvider, AXPSearchDefinitionActionBuilder, AXPSearchDefinitionBuilder, AXPSearchDefinitionProviderContext, AXPSearchDefinitionProviderService, AXPSearchService, AXPSettingDefaultValuesAggregatorService, AXPSettingDefinitionGroupBuilder, AXPSettingDefinitionProviderContext, AXPSettingDefinitionProviderService, AXPSettingDefinitionSectionBuilder, AXPSettingsService, AXPStatusDefinitionProviderService, AXPStatusProvider, AXPStickyDirective, AXPSystemStatusType, AXPSystemStatuses, AXPToastAction, AXPTokenDefinitionService, AXPTokenEvaluatorScopeProvider, AXPVersioningService, AXPWorkflowNavigateAction, AXPWorkflowRouterNavigateAction, AXP_APP_VERSION_PROVIDER, AXP_FILE_ACTION_PROVIDER, AXP_FILE_TYPE_INFO_PROVIDER, AXP_HOME_PAGES, AXP_HOME_PAGE_DEFAULT_KEY, AXP_MENU_MIDDLEWARE, AXP_MENU_PROVIDER, AXP_PLATFORM_CONFIG_TOKEN, AXP_ROOT_CONFIG_TOKEN, AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER, AXP_SETTING_DEFAULT_VALUES_PROVIDERS, AXP_SETTING_DEFINITION_PROVIDER, AXP_SETTING_VALUE_PROVIDER, AXP_STATUS_PROVIDERS, AXP_TOKEN_DEFINITION_PROVIDER, AXVChangeType, BETWEEN_OPER, BOOLEAN_OPERATORS, CONTAINS_OPER, DATE_OPERATORS, DEFAULT_DATE_FILTER_PRESETS, ENDS_WITH_OPER, ENVIRONMENT, EQ_OPER, GTE_OPER, GT_OPER, IN_OPER, IS_EMPTY_OPER, IS_NOT_EMPTY_OPER, LTE_OPER, LT_OPER, NOT_CONTAINS_OPER, NOT_EQ_OPER, NUMBER_OPERATORS, STARTS_WITH_OPER, STRING_OPERATORS, UploadFromComputerActionProvider, applyDateFilterPreset, configPlatform, createAllQueryView, createMenuContext, createMenuMiddleware, createQueryView, findManualPresetIdByOperation, getEntityInfo, getStatusInfo, getSystemStatus, provideDynamicHomePage, provideMenuMiddleware, resolveDateFilterPresets, resolveStatusLook, systemStatusToDefinition };
2738
- export type { AXCFileUploaderAction, AXCFileUploaderActionsPayload, AXCFileUploaderCapabilities, AXEntityPropertyWidget, AXPAggregate, AXPAppVersion, AXPAppVersionProvider, AXPApplication, AXPCategoryEntity, AXPColumnAlign, AXPColumnContentAlign, AXPCommandActionCallback, AXPCommandActionDisplay, AXPCommandActionLook, AXPCommandActionPriority, AXPCommandActionType, AXPCommonModuleConfigs, AXPCurrency, AXPDateTimeFilterPreset, AXPDateTimeFilterPresetKind, AXPDateTimeFilterValue, AXPDomToImageOptions, AXPEntity, AXPEntityAction, AXPEntityCommand, AXPEntityDetailListView, AXPEntityMasterCreateLayoutView, AXPEntityMasterLayoutView, AXPEntityMasterListView, AXPEntityMasterSingleLayoutView, AXPEntityMasterUpdateLayoutView, AXPEntityProperty, AXPEntityPropertyCreateView, AXPEntityPropertyGroup, AXPEntityPropertyLayoutConfig, AXPEntityPropertyUpdateView, AXPEntityPropertyView, AXPEntityQuery, AXPEntitySectionView, AXPEntityTableColumn, AXPEntityVersionHistory, AXPErrorHandler, AXPFileActionProvider, AXPFileActionProviderToken, AXPFileExtension, AXPFileManyStorageInfo, AXPFileStorageCreateRequest, AXPFileStorageFindRequest, AXPFileStorageInfo, AXPFileStorageUpdateRequest, AXPFileType, AXPFileTypeInfoProvider, AXPFilterOperator, AXPGeoLocation, AXPGroupSearchResult, AXPHomePageDefinition, AXPLanguage, AXPLocaleProfile, AXPLockGetInfoRequest, AXPLockInfo, AXPLockRequest, AXPLockType, AXPMenuFinderResult, AXPMenuInsertion, AXPMenuItem, AXPMenuItemCommand, AXPMenuItemFinder, AXPMenuItemWithParent, AXPMenuMiddleware, AXPMenuMiddlewareContext, AXPMenuMiddlewareProvider, AXPMenuProvider, AXPMenuProviderContext, AXPMenuType, AXPModule, AXPPlatformConfigs, AXPQueryFilter, AXPQuerySort, AXPQueryView, AXPRelatedEntity, AXPRelationship, AXPRootConfigs, AXPSearchAction, AXPSearchDefinition, AXPSearchDefinitionDisplayFormat, AXPSearchDefinitionProvider, AXPSearchDisplayGroupResult, AXPSearchDisplayResult, AXPSearchDisplayResultForSave, AXPSearchParentResult, AXPSearchProvider, AXPSearchResult, AXPSettingChangedEvent, AXPSettingDefaultValuesProvider, AXPSettingDefinition, AXPSettingDefinitionGroup, AXPSettingDefinitionProvider, AXPSettingDefinitionSection, AXPSettingValue, AXPSettingValueProvider, AXPSettingsServiceInterface, AXPStatusDefinition, AXPStatusTransition, AXPTimeZone, AXPTokenDefinition, AXPTokenDefinitionProvider, AXPTokenDefinitionProviderToken, AXPUnLockRequest, AXPVersionChange, AXPVersionEntry, AXPVersionStream, CanonicalChange, CanonicalChangeOp, VersionedFileInfo };
2803
+ export { ALL_DEFAULT_OPERATORS, AXMWorkflowErrorHandler, AXPAppVersionService, AXPCleanNestedFilters, AXPClipBoardService, AXPCommonModule, AXPCommonSettings, AXPCustomOperatorService, AXPCustomOperatorServiceImpl, AXPDataProvider, AXPDebugService, AXPDialogConfirmAction, AXPEntityCommandScope, AXPEntityQueryType, AXPErrorHandlerRegistryService, AXPExportService, AXPFileActionsService, AXPFileStorageService, AXPFileStorageStatus, AXPFileTypeProviderService, AXPFilterOperatorMiddlewareService, AXPFilterOperatorMiddlewareServiceImpl, AXPFooterTextSlotComponent, AXPGlobalErrorHandler, AXPHomePageModule, AXPHomePageService, AXPLockService, AXPMenuMiddlewareRegistry, AXPMenuPermissionGuard, AXPMenuProviderService, AXPMenuRoutePermissionService, AXPMenuSearchDefinitionProvider, AXPMenuSearchProvider, AXPMenuService, AXPMenuVisibilityService, AXPNavBarSlotComponent, AXPNavigateWorkflow, AXPNotFoundError, AXPPlatformDefaultConfigs, AXPRedirectEvent, AXPRefreshEvent, AXPRegionalSetting, AXPRelationshipCardinality, AXPRelationshipKind, AXPReloadAction, AXPReloadEvent, AXPSearchCommandProvider, AXPSearchDefinitionActionBuilder, AXPSearchDefinitionBuilder, AXPSearchDefinitionProviderContext, AXPSearchDefinitionProviderService, AXPSearchService, AXPSettingDefaultValuesAggregatorService, AXPSettingDefinitionGroupBuilder, AXPSettingDefinitionProviderContext, AXPSettingDefinitionProviderService, AXPSettingDefinitionSectionBuilder, AXPSettingsService, AXPStatusDefinitionProviderService, AXPStatusProvider, AXPStickyDirective, AXPSystemStatusType, AXPSystemStatuses, AXPToastAction, AXPTokenDefinitionService, AXPTokenEvaluatorScopeProvider, AXPVersioningService, AXPWorkflowNavigateAction, AXPWorkflowRouterNavigateAction, AXP_APP_VERSION_PROVIDER, AXP_FILE_ACTION_PROVIDER, AXP_FILE_TYPE_INFO_PROVIDER, AXP_HOME_PAGES, AXP_HOME_PAGE_DEFAULT_KEY, AXP_MENU_MIDDLEWARE, AXP_MENU_PROVIDER, AXP_NOT_FOUND_ROUTE, AXP_PLATFORM_CONFIG_TOKEN, AXP_PROTECTED_ROUTE_GUARDS, AXP_ROOT_CONFIG_TOKEN, AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER, AXP_SETTING_DEFAULT_VALUES_PROVIDERS, AXP_SETTING_DEFINITION_PROVIDER, AXP_SETTING_VALUE_PROVIDER, AXP_STATUS_PROVIDERS, AXP_TOKEN_DEFINITION_PROVIDER, AXVChangeType, BETWEEN_OPER, BOOLEAN_OPERATORS, CONTAINS_OPER, DATE_OPERATORS, DEFAULT_DATE_FILTER_PRESETS, ENDS_WITH_OPER, ENVIRONMENT, EQ_OPER, GTE_OPER, GT_OPER, IN_OPER, IS_EMPTY_OPER, IS_NOT_EMPTY_OPER, LTE_OPER, LT_OPER, NOT_CONTAINS_OPER, NOT_EQ_OPER, NUMBER_OPERATORS, STARTS_WITH_OPER, STRING_OPERATORS, UploadFromComputerActionProvider, applyDateFilterPreset, axpFindMenuItemByRoute, axpIsEntityRecordNotFound, axpMenuPathsMatch, axpRedirectToNotFound, configPlatform, createAllQueryView, createMenuContext, createMenuMiddleware, createQueryView, findManualPresetIdByOperation, getEntityInfo, getStatusInfo, getSystemStatus, provideDynamicHomePage, provideMenuMiddleware, resolveDateFilterPresets, resolveStatusLook, systemStatusToDefinition };
2804
+ export type { AXCFileUploaderAction, AXCFileUploaderActionsPayload, AXCFileUploaderCapabilities, AXEntityPropertyWidget, AXPAggregate, AXPAppVersion, AXPAppVersionProvider, AXPApplication, AXPCategoryEntity, AXPColumnAlign, AXPColumnContentAlign, AXPCommandActionCallback, AXPCommandActionDisplay, AXPCommandActionLook, AXPCommandActionPriority, AXPCommandActionType, AXPCommonModuleConfigs, AXPCurrency, AXPDateTimeFilterPreset, AXPDateTimeFilterPresetKind, AXPDateTimeFilterValue, AXPDomToImageOptions, AXPEntity, AXPEntityAction, AXPEntityCommand, AXPEntityDetailListView, AXPEntityMasterCreateLayoutView, AXPEntityMasterLayoutView, AXPEntityMasterListView, AXPEntityMasterSingleLayoutView, AXPEntityMasterUpdateLayoutView, AXPEntityProperty, AXPEntityPropertyCreateView, AXPEntityPropertyGroup, AXPEntityPropertyLayoutConfig, AXPEntityPropertyUpdateView, AXPEntityPropertyView, AXPEntityQuery, AXPEntitySectionView, AXPEntityTableColumn, AXPEntityVersionHistory, AXPErrorHandler, AXPFileActionProvider, AXPFileActionProviderToken, AXPFileExtension, AXPFileManyStorageInfo, AXPFileStorageCreateRequest, AXPFileStorageFindRequest, AXPFileStorageInfo, AXPFileStorageUpdateRequest, AXPFileType, AXPFileTypeInfoProvider, AXPFilterOperator, AXPGeoLocation, AXPGroupSearchResult, AXPHomePageDefinition, AXPLanguage, AXPLocaleProfile, AXPLockGetInfoRequest, AXPLockInfo, AXPLockRequest, AXPLockType, AXPMenuFinderResult, AXPMenuInsertion, AXPMenuItem, AXPMenuItemCommand, AXPMenuItemFinder, AXPMenuItemWithParent, AXPMenuMiddleware, AXPMenuMiddlewareContext, AXPMenuMiddlewareProvider, AXPMenuProvider, AXPMenuProviderContext, AXPMenuRouteMatchResult, AXPMenuType, AXPModule, AXPPlatformConfigs, AXPQueryFilter, AXPQuerySort, AXPQueryView, AXPRelatedEntity, AXPRelationship, AXPRootConfigs, AXPSearchAction, AXPSearchDefinition, AXPSearchDefinitionDisplayFormat, AXPSearchDefinitionProvider, AXPSearchDisplayGroupResult, AXPSearchDisplayResult, AXPSearchDisplayResultForSave, AXPSearchParentResult, AXPSearchProvider, AXPSearchResult, AXPSettingChangedEvent, AXPSettingDefaultValuesProvider, AXPSettingDefinition, AXPSettingDefinitionGroup, AXPSettingDefinitionProvider, AXPSettingDefinitionSection, AXPSettingValue, AXPSettingValueProvider, AXPSettingsServiceInterface, AXPStatusDefinition, AXPStatusTransition, AXPTimeZone, AXPTokenDefinition, AXPTokenDefinitionProvider, AXPTokenDefinitionProviderToken, AXPUnLockRequest, AXPVersionChange, AXPVersionEntry, AXPVersionStream, CanonicalChange, CanonicalChangeOp, VersionedFileInfo };
@@ -1,9 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, inject, Injectable, Injector, makeEnvironmentProviders, NgModule, ErrorHandler, EventEmitter, Input, Output, Directive, Component, ViewEncapsulation, Inject, runInInjectionContext, signal, model, linkedSignal, afterNextRender } from '@angular/core';
3
3
  import { kebabCase, merge, sortBy, cloneDeep, get, omit } from 'lodash-es';
4
- import { Router, ROUTES, RouterModule } from '@angular/router';
5
- import { AXPSessionService, AXPSessionStatus } from '@acorex/platform/auth';
6
- import { Subject, distinctUntilChanged, merge as merge$1 } from 'rxjs';
4
+ import { Router, ROUTES, RedirectCommand, RouterModule } from '@angular/router';
5
+ import { AXPSessionService, AXPSessionStatus, AXPAuthGuard } from '@acorex/platform/auth';
6
+ import { Subject, distinctUntilChanged, merge as merge$1, first, switchMap, from } from 'rxjs';
7
7
  import { AXPPlatformScope, AXPBroadcastEventService, objectKeyValueTransforms, AXPSystemActionType, AXPModuleManifestModule, AXPAppStartUpProvider, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXPHookService, AXPDataGenerator, AXPModuleManifestRegistry } from '@acorex/platform/core';
8
8
  import { AXTranslationService } from '@acorex/core/translation';
9
9
  import { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';
@@ -1270,6 +1270,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
1270
1270
  args: [{ providedIn: 'root' }]
1271
1271
  }], ctorParameters: () => [{ type: i0.Injector }, { type: AXPErrorHandlerRegistryService }] });
1272
1272
 
1273
+ /** Thrown when a requested platform resource cannot be resolved. */
1274
+ class AXPNotFoundError extends Error {
1275
+ constructor(message = 'Resource not found') {
1276
+ super(message);
1277
+ this.name = 'AXPNotFoundError';
1278
+ }
1279
+ }
1280
+
1281
+ /** Canonical route path for the platform 404 page. */
1282
+ const AXP_NOT_FOUND_ROUTE = '/error/404';
1283
+ /**
1284
+ * Returns true when an entity byKey query did not resolve a record.
1285
+ */
1286
+ function axpIsEntityRecordNotFound(data) {
1287
+ return data == null;
1288
+ }
1289
+ /**
1290
+ * Creates an Angular redirect command to the platform 404 page.
1291
+ */
1292
+ function axpRedirectToNotFound(router = inject(Router)) {
1293
+ return new RedirectCommand(router.parseUrl(AXP_NOT_FOUND_ROUTE));
1294
+ }
1295
+
1273
1296
  const AXP_TOKEN_DEFINITION_PROVIDER = new InjectionToken('AXP_TOKEN_DEFINITION_PROVIDER', {
1274
1297
  factory: () => [],
1275
1298
  });
@@ -2291,6 +2314,95 @@ function createMenuMiddleware(config) {
2291
2314
  }
2292
2315
  //#endregion
2293
2316
 
2317
+ const DEFAULT_TRAILING_SEGMENTS = ['list', 'view', 'edit', 'create'];
2318
+ /**
2319
+ * Compares a menu item path with the current browser path.
2320
+ * Mirrors the matching rules used when selecting the active menu item.
2321
+ */
2322
+ function axpMenuPathsMatch(itemPath, currentPath, trailingSegmentsToIgnore = DEFAULT_TRAILING_SEGMENTS) {
2323
+ const itemNoHash = itemPath.split('#')[0];
2324
+ const currentNoHash = currentPath.split('#')[0];
2325
+ const [itemBase, itemQueryString = ''] = itemNoHash.split('?');
2326
+ const [currentBase, currentQueryString = ''] = currentNoHash.split('?');
2327
+ const itemSegments = itemBase.split('/').filter((segment) => segment.length > 0);
2328
+ const pathSegments = currentBase.split('/').filter((segment) => segment.length > 0);
2329
+ const menuLength = itemSegments.length;
2330
+ const pathLength = pathSegments.length;
2331
+ let effectiveMenuLength = menuLength;
2332
+ if (menuLength > 0 && trailingSegmentsToIgnore.includes(itemSegments[menuLength - 1])) {
2333
+ effectiveMenuLength--;
2334
+ }
2335
+ if (pathLength < effectiveMenuLength) {
2336
+ return { isMatch: false, isPartial: false };
2337
+ }
2338
+ let isPrefix = true;
2339
+ for (let i = 0; i < effectiveMenuLength; i++) {
2340
+ if (itemSegments[i] !== pathSegments[i]) {
2341
+ isPrefix = false;
2342
+ break;
2343
+ }
2344
+ }
2345
+ if (!isPrefix) {
2346
+ return { isMatch: false, isPartial: false };
2347
+ }
2348
+ const isPartialMatch = effectiveMenuLength < pathLength;
2349
+ const isExactMatch = effectiveMenuLength === pathLength;
2350
+ const itemParams = new URLSearchParams(itemQueryString);
2351
+ const currentParams = new URLSearchParams(currentQueryString);
2352
+ let queryMatches = true;
2353
+ const itemParamPairs = [];
2354
+ itemParams.forEach((value, key) => {
2355
+ itemParamPairs.push([key, value]);
2356
+ });
2357
+ if (itemParamPairs.length > 0) {
2358
+ for (const [key, value] of itemParamPairs) {
2359
+ if (currentParams.get(key) !== value) {
2360
+ queryMatches = false;
2361
+ break;
2362
+ }
2363
+ }
2364
+ }
2365
+ return {
2366
+ isMatch: (isExactMatch || isPartialMatch) && queryMatches,
2367
+ isPartial: isPartialMatch && !isExactMatch,
2368
+ };
2369
+ }
2370
+ /**
2371
+ * Finds the most specific menu item that matches the given route path.
2372
+ */
2373
+ function axpFindMenuItemByRoute(items, currentPath, trailingSegmentsToIgnore = DEFAULT_TRAILING_SEGMENTS) {
2374
+ let bestMatch = null;
2375
+ let bestEffectiveLength = -1;
2376
+ const visit = (menuItems) => {
2377
+ for (const item of menuItems) {
2378
+ if (item.children?.length) {
2379
+ visit(item.children);
2380
+ }
2381
+ if (!item.path) {
2382
+ continue;
2383
+ }
2384
+ const matchResult = axpMenuPathsMatch(item.path, currentPath, trailingSegmentsToIgnore);
2385
+ if (!matchResult.isMatch) {
2386
+ continue;
2387
+ }
2388
+ const itemNoHash = item.path.split('#')[0];
2389
+ const [itemBase] = itemNoHash.split('?');
2390
+ const itemSegments = itemBase.split('/').filter((segment) => segment.length > 0);
2391
+ let effectiveMenuLength = itemSegments.length;
2392
+ if (itemSegments.length > 0 &&
2393
+ trailingSegmentsToIgnore.includes(itemSegments[itemSegments.length - 1])) {
2394
+ effectiveMenuLength--;
2395
+ }
2396
+ if (effectiveMenuLength > bestEffectiveLength) {
2397
+ bestEffectiveLength = effectiveMenuLength;
2398
+ bestMatch = { item, isPartialMatch: matchResult.isPartial };
2399
+ }
2400
+ }
2401
+ };
2402
+ visit(items);
2403
+ return bestMatch;
2404
+ }
2405
+
2294
2406
  const AXPMenuService = signalStore({ providedIn: 'root' },
2295
2407
  // Initial State
2296
2408
  withState((router = inject(Router)) => {
@@ -2321,7 +2433,7 @@ withMethods((store, router = inject(Router), workflow = inject(AXPWorkflowServic
2321
2433
  }
2322
2434
  if (item.path) {
2323
2435
  // Check if the item path matches the current path (including query param subset if provided on item)
2324
- const matchResult = pathsMatch(item.path, currentRawPath, ['list', 'view', 'edit', 'create']);
2436
+ const matchResult = axpMenuPathsMatch(item.path, currentRawPath, ['list', 'view', 'edit', 'create']);
2325
2437
  if (matchResult.isMatch) {
2326
2438
  return { item, isPartialMatch: matchResult.isPartial };
2327
2439
  }
@@ -2329,60 +2441,6 @@ withMethods((store, router = inject(Router), workflow = inject(AXPWorkflowServic
2329
2441
  }
2330
2442
  return { item: null, isPartialMatch: false };
2331
2443
  };
2332
- const pathsMatch = (itemPath, currentPath, trailingSegmentsToIgnore = []) => {
2333
- // Split base and query/hash
2334
- const itemNoHash = itemPath.split('#')[0];
2335
- const currentNoHash = currentPath.split('#')[0];
2336
- const [itemBase, itemQueryString = ''] = itemNoHash.split('?');
2337
- const [currentBase, currentQueryString = ''] = currentNoHash.split('?');
2338
- const itemSegments = itemBase.split('/').filter((segment) => segment.length > 0);
2339
- const pathSegments = currentBase.split('/').filter((segment) => segment.length > 0);
2340
- const menuLength = itemSegments.length;
2341
- const pathLength = pathSegments.length;
2342
- // Identify the effective base length for the menuPath
2343
- let effectiveMenuLength = menuLength;
2344
- if (menuLength > 0 && trailingSegmentsToIgnore.includes(itemSegments[menuLength - 1])) {
2345
- effectiveMenuLength--; // Exclude trailing non-hierarchical segments
2346
- }
2347
- // Check if the menuPath (base segments) is a prefix of browserPath
2348
- let isPrefix = true;
2349
- if (pathLength < effectiveMenuLength) {
2350
- return { isMatch: false, isPartial: false };
2351
- }
2352
- for (let i = 0; i < effectiveMenuLength; i++) {
2353
- if (itemSegments[i] !== pathSegments[i]) {
2354
- isPrefix = false;
2355
- break;
2356
- }
2357
- }
2358
- if (!isPrefix) {
2359
- return { isMatch: false, isPartial: false };
2360
- }
2361
- // Partial match: menuPath base is a strict prefix of browserPath
2362
- const isPartialMatch = effectiveMenuLength < pathLength;
2363
- // Exact match: all segments match completely
2364
- const isExactMatch = effectiveMenuLength === pathLength;
2365
- // Query params subset match: if item defines any query params, require them to match
2366
- const itemParams = new URLSearchParams(itemQueryString);
2367
- const currentParams = new URLSearchParams(currentQueryString);
2368
- let queryMatches = true;
2369
- const itemParamPairs = [];
2370
- itemParams.forEach((value, key) => {
2371
- itemParamPairs.push([key, value]);
2372
- });
2373
- if (itemParamPairs.length > 0) {
2374
- for (const [k, v] of itemParamPairs) {
2375
- if (currentParams.get(k) !== v) {
2376
- queryMatches = false;
2377
- break;
2378
- }
2379
- }
2380
- }
2381
- return {
2382
- isMatch: (isExactMatch || isPartialMatch) && queryMatches,
2383
- isPartial: isPartialMatch && !isExactMatch,
2384
- };
2385
- };
2386
2444
  const items = store.items();
2387
2445
  const { item, isPartialMatch } = findItem(items);
2388
2446
  patchState(store, { selectedMenuItem: { item, isFullMatch: !isPartialMatch } });
@@ -2542,6 +2600,137 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
2542
2600
  args: [{ providedIn: 'root' }]
2543
2601
  }] });
2544
2602
 
2603
+ const SKIP_ROUTE_PREFIXES = ['/auth', '/error'];
2604
+ const SKIP_ROUTE_PATHS = new Set(['/404', '/401']);
2605
+ //#region ---- Menu Route Permission Service ----
2606
+ /**
2607
+ * Resolves route access using the same permission and feature policies defined on menu items.
2608
+ */
2609
+ class AXPMenuRoutePermissionService {
2610
+ constructor() {
2611
+ //#region ---- Services & Dependencies ----
2612
+ this.menuProvider = inject(AXPMenuProviderService);
2613
+ this.menuVisibility = inject(AXPMenuVisibilityService);
2614
+ this.sessionService = inject(AXPSessionService);
2615
+ this.toastService = inject(AXToastService);
2616
+ this.translationService = inject(AXTranslationService);
2617
+ }
2618
+ //#endregion
2619
+ //#region ---- Public Methods ----
2620
+ /**
2621
+ * Checks whether navigation to the target URL is allowed for the current user.
2622
+ */
2623
+ async canAccess(route, url) {
2624
+ if (this.shouldSkip(route, url)) {
2625
+ return true;
2626
+ }
2627
+ if (!this.hasExplicitRouteAccess(route)) {
2628
+ await this.showAccessDeniedToast();
2629
+ return false;
2630
+ }
2631
+ const menuItems = await this.menuProvider.items();
2632
+ const menuMatch = axpFindMenuItemByRoute(menuItems, url);
2633
+ if (!menuMatch) {
2634
+ return true;
2635
+ }
2636
+ if (this.menuVisibility.isItemVisible(menuMatch.item)) {
2637
+ return true;
2638
+ }
2639
+ await this.showAccessDeniedToast();
2640
+ return false;
2641
+ }
2642
+ //#endregion
2643
+ //#region ---- Utility Methods ----
2644
+ shouldSkip(route, url) {
2645
+ if (this.hasRouteFlag(route, 'skipMenuPermissionGuard')) {
2646
+ return true;
2647
+ }
2648
+ const normalizedUrl = this.normalizeUrl(url);
2649
+ if (SKIP_ROUTE_PATHS.has(normalizedUrl)) {
2650
+ return true;
2651
+ }
2652
+ return SKIP_ROUTE_PREFIXES.some((prefix) => normalizedUrl.startsWith(prefix));
2653
+ }
2654
+ hasRouteFlag(route, key) {
2655
+ let current = route;
2656
+ while (current) {
2657
+ if (current.data?.[key] === true) {
2658
+ return true;
2659
+ }
2660
+ current = current.parent;
2661
+ }
2662
+ return false;
2663
+ }
2664
+ hasExplicitRouteAccess(route) {
2665
+ const requiredPermission = this.getInheritedRouteData(route, 'requiredPermission');
2666
+ const requiredFeature = this.getInheritedRouteData(route, 'requiredFeature');
2667
+ const permissionKeys = this.normalizeKeys(requiredPermission);
2668
+ if (permissionKeys.length > 0 && !this.sessionService.authorize(...permissionKeys)) {
2669
+ return false;
2670
+ }
2671
+ const featureKeys = this.normalizeKeys(requiredFeature);
2672
+ if (featureKeys.length > 0 && !this.sessionService.isFeatureEnabled(...featureKeys)) {
2673
+ return false;
2674
+ }
2675
+ return true;
2676
+ }
2677
+ getInheritedRouteData(route, key) {
2678
+ let current = route;
2679
+ while (current) {
2680
+ const value = current.data?.[key];
2681
+ if (value != null) {
2682
+ return value;
2683
+ }
2684
+ current = current.parent;
2685
+ }
2686
+ return null;
2687
+ }
2688
+ normalizeKeys(keys) {
2689
+ if (!keys) {
2690
+ return [];
2691
+ }
2692
+ return Array.isArray(keys) ? keys : [keys];
2693
+ }
2694
+ normalizeUrl(url) {
2695
+ const path = url.split('?')[0]?.split('#')[0] ?? url;
2696
+ return path.startsWith('/') ? path : `/${path}`;
2697
+ }
2698
+ async showAccessDeniedToast() {
2699
+ const title = await this.translationService.translateAsync('@general:messages.network.forbidden.title');
2700
+ const description = await this.translationService.translateAsync('@general:messages.network.forbidden.description');
2701
+ this.toastService.show({
2702
+ color: 'danger',
2703
+ title,
2704
+ content: description,
2705
+ timeOut: 5000,
2706
+ });
2707
+ }
2708
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPMenuRoutePermissionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2709
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPMenuRoutePermissionService, providedIn: 'root' }); }
2710
+ }
2711
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPMenuRoutePermissionService, decorators: [{
2712
+ type: Injectable,
2713
+ args: [{ providedIn: 'root' }]
2714
+ }] });
2715
+
2716
+ /**
2717
+ * Blocks navigation when the target route matches a menu item the current user cannot access.
2718
+ * Uses the same permission and feature policies applied to menu visibility.
2719
+ */
2720
+ const AXPMenuPermissionGuard = (route, state) => {
2721
+ const sessionService = inject(AXPSessionService);
2722
+ const menuRoutePermissionService = inject(AXPMenuRoutePermissionService);
2723
+ return sessionService.isAuthorized$.pipe(first(), switchMap((isAuthorized) => {
2724
+ if (!isAuthorized) {
2725
+ return from(Promise.resolve(true));
2726
+ }
2727
+ return from(menuRoutePermissionService.canAccess(route, state.url));
2728
+ }));
2729
+ };
2730
+
2731
+ /** Standard guards for authenticated routes with menu-based permission enforcement. */
2732
+ const AXP_PROTECTED_ROUTE_GUARDS = [AXPAuthGuard, AXPMenuPermissionGuard];
2733
+
2545
2734
  class AXPMenuSearchDefinitionProvider {
2546
2735
  async provide(context) {
2547
2736
  context.addDefinition('menu', 'Menu', 'menu', 'fa-thin fa-bars', 2, {
@@ -4388,5 +4577,5 @@ class AXPVersioningService {
4388
4577
  * Generated bundle index. Do not edit.
4389
4578
  */
4390
4579
 
4391
- export { ALL_DEFAULT_OPERATORS, AXMWorkflowErrorHandler, AXPAppVersionService, AXPCleanNestedFilters, AXPClipBoardService, AXPCommonModule, AXPCommonSettings, AXPCustomOperatorService, AXPCustomOperatorServiceImpl, AXPDataProvider, AXPDebugService, AXPDialogConfirmAction, AXPEntityCommandScope, AXPEntityQueryType, AXPErrorHandlerRegistryService, AXPExportService, AXPFileActionsService, AXPFileStorageService, AXPFileStorageStatus, AXPFileTypeProviderService, AXPFilterOperatorMiddlewareService, AXPFilterOperatorMiddlewareServiceImpl, AXPFooterTextSlotComponent, AXPGlobalErrorHandler, AXPHomePageModule, AXPHomePageService, AXPLockService, AXPMenuMiddlewareRegistry, AXPMenuProviderService, AXPMenuSearchDefinitionProvider, AXPMenuSearchProvider, AXPMenuService, AXPMenuVisibilityService, AXPNavBarSlotComponent, AXPNavigateWorkflow, AXPPlatformDefaultConfigs, AXPRedirectEvent, AXPRefreshEvent, AXPRegionalSetting, AXPRelationshipCardinality, AXPRelationshipKind, AXPReloadAction, AXPReloadEvent, AXPSearchCommandProvider, AXPSearchDefinitionActionBuilder, AXPSearchDefinitionBuilder, AXPSearchDefinitionProviderContext, AXPSearchDefinitionProviderService, AXPSearchService, AXPSettingDefaultValuesAggregatorService, AXPSettingDefinitionGroupBuilder, AXPSettingDefinitionProviderContext, AXPSettingDefinitionProviderService, AXPSettingDefinitionSectionBuilder, AXPSettingsService, AXPStatusDefinitionProviderService, AXPStatusProvider, AXPStickyDirective, AXPSystemStatusType, AXPSystemStatuses, AXPToastAction, AXPTokenDefinitionService, AXPTokenEvaluatorScopeProvider, AXPVersioningService, AXPWorkflowNavigateAction, AXPWorkflowRouterNavigateAction, AXP_APP_VERSION_PROVIDER, AXP_FILE_ACTION_PROVIDER, AXP_FILE_TYPE_INFO_PROVIDER, AXP_HOME_PAGES, AXP_HOME_PAGE_DEFAULT_KEY, AXP_MENU_MIDDLEWARE, AXP_MENU_PROVIDER, AXP_PLATFORM_CONFIG_TOKEN, AXP_ROOT_CONFIG_TOKEN, AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER, AXP_SETTING_DEFAULT_VALUES_PROVIDERS, AXP_SETTING_DEFINITION_PROVIDER, AXP_SETTING_VALUE_PROVIDER, AXP_STATUS_PROVIDERS, AXP_TOKEN_DEFINITION_PROVIDER, AXVChangeType, BETWEEN_OPER, BOOLEAN_OPERATORS, CONTAINS_OPER, DATE_OPERATORS, DEFAULT_DATE_FILTER_PRESETS, ENDS_WITH_OPER, ENVIRONMENT, EQ_OPER, GTE_OPER, GT_OPER, IN_OPER, IS_EMPTY_OPER, IS_NOT_EMPTY_OPER, LTE_OPER, LT_OPER, NOT_CONTAINS_OPER, NOT_EQ_OPER, NUMBER_OPERATORS, STARTS_WITH_OPER, STRING_OPERATORS, UploadFromComputerActionProvider, applyDateFilterPreset, configPlatform, createAllQueryView, createMenuContext, createMenuMiddleware, createQueryView, findManualPresetIdByOperation, getEntityInfo, getStatusInfo, getSystemStatus, provideDynamicHomePage, provideMenuMiddleware, resolveDateFilterPresets, resolveStatusLook, systemStatusToDefinition };
4580
+ export { ALL_DEFAULT_OPERATORS, AXMWorkflowErrorHandler, AXPAppVersionService, AXPCleanNestedFilters, AXPClipBoardService, AXPCommonModule, AXPCommonSettings, AXPCustomOperatorService, AXPCustomOperatorServiceImpl, AXPDataProvider, AXPDebugService, AXPDialogConfirmAction, AXPEntityCommandScope, AXPEntityQueryType, AXPErrorHandlerRegistryService, AXPExportService, AXPFileActionsService, AXPFileStorageService, AXPFileStorageStatus, AXPFileTypeProviderService, AXPFilterOperatorMiddlewareService, AXPFilterOperatorMiddlewareServiceImpl, AXPFooterTextSlotComponent, AXPGlobalErrorHandler, AXPHomePageModule, AXPHomePageService, AXPLockService, AXPMenuMiddlewareRegistry, AXPMenuPermissionGuard, AXPMenuProviderService, AXPMenuRoutePermissionService, AXPMenuSearchDefinitionProvider, AXPMenuSearchProvider, AXPMenuService, AXPMenuVisibilityService, AXPNavBarSlotComponent, AXPNavigateWorkflow, AXPNotFoundError, AXPPlatformDefaultConfigs, AXPRedirectEvent, AXPRefreshEvent, AXPRegionalSetting, AXPRelationshipCardinality, AXPRelationshipKind, AXPReloadAction, AXPReloadEvent, AXPSearchCommandProvider, AXPSearchDefinitionActionBuilder, AXPSearchDefinitionBuilder, AXPSearchDefinitionProviderContext, AXPSearchDefinitionProviderService, AXPSearchService, AXPSettingDefaultValuesAggregatorService, AXPSettingDefinitionGroupBuilder, AXPSettingDefinitionProviderContext, AXPSettingDefinitionProviderService, AXPSettingDefinitionSectionBuilder, AXPSettingsService, AXPStatusDefinitionProviderService, AXPStatusProvider, AXPStickyDirective, AXPSystemStatusType, AXPSystemStatuses, AXPToastAction, AXPTokenDefinitionService, AXPTokenEvaluatorScopeProvider, AXPVersioningService, AXPWorkflowNavigateAction, AXPWorkflowRouterNavigateAction, AXP_APP_VERSION_PROVIDER, AXP_FILE_ACTION_PROVIDER, AXP_FILE_TYPE_INFO_PROVIDER, AXP_HOME_PAGES, AXP_HOME_PAGE_DEFAULT_KEY, AXP_MENU_MIDDLEWARE, AXP_MENU_PROVIDER, AXP_NOT_FOUND_ROUTE, AXP_PLATFORM_CONFIG_TOKEN, AXP_PROTECTED_ROUTE_GUARDS, AXP_ROOT_CONFIG_TOKEN, AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER, AXP_SETTING_DEFAULT_VALUES_PROVIDERS, AXP_SETTING_DEFINITION_PROVIDER, AXP_SETTING_VALUE_PROVIDER, AXP_STATUS_PROVIDERS, AXP_TOKEN_DEFINITION_PROVIDER, AXVChangeType, BETWEEN_OPER, BOOLEAN_OPERATORS, CONTAINS_OPER, DATE_OPERATORS, DEFAULT_DATE_FILTER_PRESETS, ENDS_WITH_OPER, ENVIRONMENT, EQ_OPER, GTE_OPER, GT_OPER, IN_OPER, IS_EMPTY_OPER, IS_NOT_EMPTY_OPER, LTE_OPER, LT_OPER, NOT_CONTAINS_OPER, NOT_EQ_OPER, NUMBER_OPERATORS, STARTS_WITH_OPER, STRING_OPERATORS, UploadFromComputerActionProvider, applyDateFilterPreset, axpFindMenuItemByRoute, axpIsEntityRecordNotFound, axpMenuPathsMatch, axpRedirectToNotFound, configPlatform, createAllQueryView, createMenuContext, createMenuMiddleware, createQueryView, findManualPresetIdByOperation, getEntityInfo, getStatusInfo, getSystemStatus, provideDynamicHomePage, provideMenuMiddleware, resolveDateFilterPresets, resolveStatusLook, systemStatusToDefinition };
4392
4581
  //# sourceMappingURL=acorex-platform-common.mjs.map