@acorex/platform 21.0.0-next.37 → 21.0.0-next.39
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.
- package/fesm2022/acorex-platform-common.mjs +19 -1
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +11 -172
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +7 -8
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +39 -29
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +8 -9
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +468 -255
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +171 -86
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +36 -13
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-9uCkMxcc.mjs → acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs} +5 -60
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets.mjs +101 -128
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default.mjs +16 -4
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +25 -5
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/package.json +1 -1
- package/types/acorex-platform-common.d.ts +11 -6
- package/types/acorex-platform-core.d.ts +56 -101
- package/types/acorex-platform-layout-builder.d.ts +0 -1
- package/types/acorex-platform-layout-components.d.ts +4 -3
- package/types/acorex-platform-layout-designer.d.ts +1 -1
- package/types/acorex-platform-layout-entity.d.ts +36 -30
- package/types/acorex-platform-layout-views.d.ts +31 -29
- package/types/acorex-platform-layout-widget-core.d.ts +30 -14
- package/types/acorex-platform-layout-widgets.d.ts +17 -11
- package/types/acorex-platform-themes-default.d.ts +1 -0
- package/types/acorex-platform-workflow.d.ts +28 -51
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-9uCkMxcc.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-common.mjs","sources":["../../../../libs/platform/common/src/lib/app/app-version.provider.ts","../../../../libs/platform/common/src/lib/app/application.types.ts","../../../../libs/platform/common/src/lib/app/operators.ts","../../../../libs/platform/common/src/lib/home-page/home-page.types.ts","../../../../libs/platform/common/src/lib/settings/regional-settings.keys.ts","../../../../libs/platform/common/src/lib/settings/settings.provider.ts","../../../../libs/platform/common/src/lib/settings/setting.builder.ts","../../../../libs/platform/common/src/lib/settings/setting-definition.service.ts","../../../../libs/platform/common/src/lib/settings/settings.service.ts","../../../../libs/platform/common/src/lib/settings/default-multi-language-config.service.ts","../../../../libs/platform/common/src/lib/settings/default-multi-language.helpers.ts","../../../../libs/platform/common/src/lib/settings/settings-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/home-page/home-page-settings.key.ts","../../../../libs/platform/common/src/lib/home-page/home-page.service.ts","../../../../libs/platform/common/src/lib/home-page/home-page.routes.ts","../../../../libs/platform/common/src/lib/home-page/home-page-settings.provider.ts","../../../../libs/platform/common/src/lib/home-page/home-page.module.ts","../../../../libs/platform/common/src/lib/data/data-provider.types.ts","../../../../libs/platform/common/src/lib/data/operators.service.ts","../../../../libs/platform/common/src/lib/data/filter-middleware.service.ts","../../../../libs/platform/common/src/lib/errors/error-handler-registry.service.ts","../../../../libs/platform/common/src/lib/errors/global-error-handler.ts","../../../../libs/platform/common/src/lib/tokens/token-definition.provider.ts","../../../../libs/platform/common/src/lib/tokens/token-definition.service.ts","../../../../libs/platform/common/src/lib/tokens/token-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/layout/sticky.directive.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.context.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.middleware.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-middleware.registry.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.provider.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-items.datasource.ts","../../../../libs/platform/common/src/lib/layout/menu/provide-menu-middleware.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.service.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-visibility.service.ts","../../../../libs/platform/common/src/lib/layout/menu/search-definition.provider.ts","../../../../libs/platform/common/src/lib/layout/menu/search.provider.ts","../../../../libs/platform/common/src/lib/layout/theme/components/slots/footer-text-slot.component.ts","../../../../libs/platform/common/src/lib/layout/theme/components/slots/navbar-slot.component.ts","../../../../libs/platform/common/src/lib/search/search-definition.builder.ts","../../../../libs/platform/common/src/lib/search/search-definition.provider.ts","../../../../libs/platform/common/src/lib/search/search.provider.ts","../../../../libs/platform/common/src/lib/search/search.service.ts","../../../../libs/platform/common/src/lib/search/search-entity-command.util.ts","../../../../libs/platform/common/src/lib/configs/common-settings.key.ts","../../../../libs/platform/common/src/lib/workflows/common.workflow.ts","../../../../libs/platform/common/src/lib/workflows/navigate.workflow.ts","../../../../libs/platform/common/src/lib/workflows/error-handler.ts","../../../../libs/platform/common/src/lib/common.module.ts","../../../../libs/platform/common/src/lib/configs/app.config.ts","../../../../libs/platform/common/src/lib/configs/config.types.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage.service.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage.types.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.provider.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.service.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.types.ts","../../../../libs/platform/common/src/lib/file-actions/upload-from-computer.action-provider.ts","../../../../libs/platform/common/src/lib/file-type/file-type.provider.ts","../../../../libs/platform/common/src/lib/lock-system/lock.service.ts","../../../../libs/platform/common/src/lib/status-definition/status-definition.types.ts","../../../../libs/platform/common/src/lib/status-definition/status-definition-provider.service.ts","../../../../libs/platform/common/src/lib/status-definition/statuses.types.ts","../../../../libs/platform/common/src/lib/utils/clipboard-service.ts","../../../../libs/platform/common/src/lib/utils/debug.service.ts","../../../../libs/platform/common/src/lib/utils/export-popup.ts","../../../../libs/platform/common/src/lib/utils/export.service.ts","../../../../libs/platform/common/src/lib/utils/filter-cleaner.ts","../../../../libs/platform/common/src/lib/utils/locale-management-port.ts","../../../../libs/platform/common/src/lib/versioning/types.ts","../../../../libs/platform/common/src/acorex-platform-common.ts"],"sourcesContent":["import { inject, Injectable, InjectionToken } from '@angular/core';\n\nexport interface AXPAppVersion {\n version: string;\n build: number;\n date: Date;\n}\n\nexport interface AXPAppVersionProvider {\n provider(): Promise<AXPAppVersion>;\n}\n\nexport const AXP_APP_VERSION_PROVIDER = new InjectionToken<AXPAppVersionProvider>('AXP_APP_VERSION_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n return new AXPAppVersionDefaultProvider();\n },\n});\n\nclass AXPAppVersionDefaultProvider implements AXPAppVersionProvider {\n async provider(): Promise<AXPAppVersion> {\n return {\n version: '1.0.0',\n build: 1,\n date: new Date(),\n };\n }\n}\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPAppVersionService {\n private provider = inject(AXP_APP_VERSION_PROVIDER);\n\n async getAppVersion(): Promise<AXPAppVersion> {\n return this.provider.provider();\n }\n}\n","import { AXDataSourceOperator, AXStyleColorType } from '@acorex/cdk/common';\nimport { AXPopupSizeType } from '@acorex/components/popup';\nimport {\n AXPExpression,\n AXPFilterDefinition,\n AXPGridLayoutOptions,\n AXPMetaData,\n AXPOptionsData,\n AXPValidationRules,\n AXPValueTransformerFunctions,\n} from '@acorex/platform/core';\nimport { AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core';\nimport { kebabCase } from 'lodash-es';\n\nexport interface AXEntityPropertyWidget {\n type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | string;\n path?: string;\n id?: string;\n children?: AXEntityPropertyWidget[];\n mode: 'view' | 'edit';\n options?: Record<string, any>;\n triggers?: { event: string; action: string; disabled?: boolean }[];\n valueTransforms?: AXPValueTransformerFunctions;\n}\n\nexport enum AXPRelationshipKind {\n Association,\n Composition,\n Aggregation,\n}\n\nexport enum AXPRelationshipCardinality {\n OneToOne,\n OneToMany,\n ManyToMany,\n}\n\nexport interface AXPRelationship {\n id: string;\n from: string;\n to: string;\n kind: AXPRelationshipKind;\n cardinality: AXPRelationshipCardinality;\n}\n\nexport enum AXPEntityCommandScope {\n TypeLevel = 'typeLevel',\n Selected = 'selected',\n Individual = 'individual',\n Section = 'section',\n}\n\nexport enum AXPEntityQueryType {\n Single = 'single',\n List = 'list',\n}\n\nexport interface AXPEntityPropertyLayoutConfig extends AXPGridLayoutOptions {\n label?: {\n visible?: boolean;\n };\n order?: number;\n}\n\nexport interface AXPEntityPropertyGroup {\n id: string;\n title: string;\n description?: string;\n permissions?: string[];\n icon?: string;\n}\n\nexport interface AXPEntityPropertyView {\n name: string;\n dataPath?: string;\n permissions?: string[];\n layout?: AXPEntityPropertyLayoutConfig;\n}\n\nexport interface AXPEntityPropertyUpdateView extends AXPEntityPropertyView {}\n\nexport interface AXPEntityPropertyCreateView extends AXPEntityPropertyView {\n defaultValue?: any;\n}\n\nexport interface AXPEntitySectionView {\n id: string;\n order?: number;\n collapsed?: boolean;\n layout?: AXPEntityPropertyLayoutConfig;\n}\n\nexport interface AXPEntityProperty {\n name: string;\n title: string;\n description?: string;\n groupId?: string;\n schema: {\n dataType: string;\n nullable?: boolean;\n readonly?: boolean | string;\n visible?: boolean | string;\n defaultValue?: any | string | ((context: any | null) => any);\n unique?: {\n enabled: boolean;\n };\n interface?: Partial<AXEntityPropertyWidget>;\n };\n options?: {\n filter?: {\n advance?: {\n enabled?: boolean;\n widgetType?: AXPWidgetTypesMap[keyof AXPWidgetTypesMap];\n };\n inline?: {\n enabled?: boolean;\n };\n preload?: {\n enabled?: boolean;\n required?: boolean;\n };\n };\n sort?: {\n enabled?: boolean;\n };\n };\n validations?: AXPValidationRules;\n}\n\nexport interface AXPEntityTableColumn {\n name: string;\n title?: string;\n hidden?: boolean;\n showAs?: {\n type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | string;\n options?: Record<string, any>;\n };\n sort?: {\n enabled?: boolean;\n dir?: 'asc' | 'desc';\n };\n options?: {\n /** When string, evaluate against parent detail context (e.g. related list). */\n visible?: boolean | string;\n width?: string;\n dataPath?: string;\n [name: string]: any;\n };\n}\n\nexport interface AXPEntityCommand {\n execute: string | Function; // As runnable expression\n permissions?: string[];\n}\n\nexport interface AXPEntityQuery {\n execute: string | Function; // As runnable expression\n type: AXPEntityQueryType;\n}\n\nimport { AXPSystemActionType } from '@acorex/platform/core';\n\nexport type AXPCommandActionType = AXPSystemActionType;\n\nexport interface AXPCommandActionLook {\n color: AXStyleColorType;\n icon: string;\n}\n\nexport type AXPCommandActionPriority = 'primary' | 'secondary';\n\n//TODO: remove extra props\nexport type AXPCommandActionCallback =\n | string\n | {\n name: string;\n options?: {\n decoration?: {\n header?: {\n title?: string;\n };\n };\n process?: {\n data?: any;\n [name: string]: any;\n };\n layout?: {\n size?: AXPopupSizeType;\n };\n [name: string]: any;\n };\n metadata?: AXPMetaData;\n };\n\nexport interface AXPCommandActionDisplay extends Partial<AXPCommandActionLook> {\n name?: string;\n command: AXPCommandActionCallback;\n title: string;\n type: AXPSystemActionType | string;\n priority: 'primary' | 'secondary';\n separated?: boolean;\n permissions?: string[];\n hidden?: boolean | string;\n disabled?: boolean | string;\n default?: boolean;\n order?: number;\n}\n\nexport interface AXPEntityAction extends AXPCommandActionDisplay {\n scope: AXPEntityCommandScope;\n /** Child actions for dropdown submenu */\n items?: AXPEntityAction[];\n}\n\nexport interface AXPEntity {\n plugins?: { name: string; options?: AXPOptionsData }[];\n /**\n * High-level rules: when expression evaluates true, apply actions to the given targets\n * (property/section/action). Reduces repetition of the same condition across many properties.\n * Evaluation context: form data, user, entity; precedence vs property-level visible/readonly\n * must be defined where rules are applied.\n */\n rules?: Array<{\n name: string;\n expression: AXPExpression;\n actions: Array<{\n target: {\n type: 'property' | 'section' | 'action';\n name: string;\n };\n values: AXPOptionsData;\n }>;\n }>;\n module: string;\n name: string;\n icon?: string;\n parentKey?: string;\n category?: AXPCategoryEntity;\n title: string;\n formats: {\n individual: string;\n plural: string;\n lookup?: string;\n displayName?: string;\n searchResult?: {\n title: string;\n description?: string;\n };\n };\n relatedEntities?: AXPRelatedEntity[];\n pages?: AXPEntityPage[];\n groups?: AXPEntityPropertyGroup[];\n properties: AXPEntityProperty[];\n columns?: AXPEntityTableColumn[];\n commands?: {\n create?: AXPEntityCommand | undefined;\n update?: AXPEntityCommand | undefined;\n delete?: AXPEntityCommand | undefined;\n [name: string]: AXPEntityCommand | undefined;\n };\n queries?: {\n byKey?: AXPEntityQuery;\n list?: AXPEntityQuery;\n lookup?: AXPEntityQuery;\n history?: AXPEntityQuery;\n comments?: AXPEntityQuery;\n [name: string]: AXPEntityQuery | undefined;\n };\n validations?: AXPValidationRules;\n interfaces?: {\n master?: {\n single?: AXPEntityMasterSingleLayoutView;\n list?: AXPEntityMasterListView;\n create?: AXPEntityMasterCreateLayoutView;\n update?: AXPEntityMasterUpdateLayoutView;\n };\n detail?: {\n list?: AXPEntityDetailListView;\n };\n };\n}\n\nexport function getEntityInfo(entity: AXPEntity) {\n return {\n source: `${entity.module}.${entity.name}`,\n module: {\n route: kebabCase(entity.module),\n },\n entity: {\n route: kebabCase(entity.name),\n },\n };\n}\n\nexport function createQueryView(\n name: string,\n title: string,\n fixed: boolean,\n params: { columns?: string[]; conditions?: any[]; sorts?: AXPQuerySort[] } = {\n columns: [],\n conditions: [],\n sorts: [],\n },\n): AXPQueryView {\n params = Object.assign({ columns: [], sorts: [], conditions: [] }, params);\n return {\n name,\n title,\n fixed,\n columns: params.columns ?? [],\n conditions: params.conditions ?? [],\n sorts: params.sorts ?? [],\n };\n}\n\nexport function createAllQueryView(\n params: { columns?: string[]; conditions?: AXPQueryFilter[]; sorts?: AXPQuerySort[] } | undefined = {\n columns: [],\n sorts: [],\n conditions: [],\n },\n): AXPQueryView {\n params = Object.assign({ columns: [], sorts: [], conditions: [] }, params);\n return createQueryView('all', '@general:terms.interface.selection.all-items', true, {\n columns: params.columns ?? [],\n conditions: params.conditions ?? [],\n sorts: params.sorts ?? [],\n });\n}\n\nexport interface AXPRelatedEntity {\n entity: string;\n title?: string;\n icon?: string;\n /**\n * Either a list of property names, or full table column metadata (`AXPEntityTableColumn`).\n * For table columns, use `options.visible` as boolean or expression string (evaluated on parent detail).\n */\n columns?: string[] | AXPEntityTableColumn[];\n properties?: string[];\n /** Exclude these properties from the related entity (for merge-detail) */\n excludeProperties?: string[];\n layout?: {\n type: 'tab-detail' | 'tab-list' | 'page-detail' | 'page-list' | 'merge-detail';\n order?: number;\n position?: 'before' | 'after' | 'middle';\n };\n conditions?: AXPQueryFilter[];\n /**\n * Optional toolbar filter definitions merged when the related list is built.\n * Entries matching an existing property `field` override/extend that filter definition.\n */\n customFilterDefinitions?: Partial<AXPFilterDefinition>[];\n hidden?: boolean | string;\n actions?: AXPEntityAction[];\n /**\n * Relationship-level persistence strategy for merge-detail data.\n * Defaults:\n * - strategy: 'embedded'\n * - idField: last segment of dataPath + 'Id' (or 'relatedId' when dataPath is missing)\n * - map: undefined (pass-through)\n * - hydrate: 'eager' (applies to getOne only in mock)\n * - cascade.delete: 'none'\n */\n persistence?: {\n strategy?: 'embedded' | 'referenced';\n idField?: string;\n dataPath?: string;\n map?: Record<string, string>;\n hydrate?: 'eager' | 'lazy';\n cascade?: { delete?: 'none' | 'orphans' | 'all' };\n };\n}\n\nexport interface AXPEntityPage {\n /**\n * Key to identify the component in the page component registry\n */\n componentKey: string;\n /**\n * Property name to render when the page component displays an entity field (e.g. 'questions', 'attachments').\n * Passed to the page component as pageConfig.field.\n */\n field?: string;\n /**\n * Title of the page (displayed in navigation)\n */\n title?: string;\n /**\n * Icon for the page (displayed in navigation)\n */\n icon?: string;\n /**\n * Description of the page\n */\n description?: string;\n /**\n * Layout configuration for page positioning\n */\n layout?: {\n /**\n * Order of the page (lower numbers appear first)\n */\n order?: number;\n /**\n * Position relative to the main page\n */\n position?: 'before' | 'after' | 'middle';\n };\n /**\n * Visibility condition (boolean or expression string)\n */\n hidden?: boolean | string;\n /**\n * Permissions required to view this page\n */\n permissions?: string[];\n\n options?: Record<string, any>;\n}\n\nexport interface AXPCategoryEntity {\n entity: string;\n title?: string;\n textField?: string;\n valueField?: string;\n conditions?: AXPQueryFilter[];\n applyConditions?: AXPQueryFilter[];\n}\n\nexport interface AXPEntityVersionHistory {\n enabled?: boolean;\n showInList?: boolean;\n showInDetail?: boolean;\n}\n\nexport interface AXPAggregate {\n id: string;\n name: string;\n title: string;\n entities: AXPEntity[];\n}\n\nexport interface AXPModule {\n name: string;\n title: string;\n aggregates: AXPAggregate[];\n relationships?: AXPRelationship[];\n}\n\nexport interface AXPApplication {\n name: string;\n title: string;\n modules: AXPModule[];\n}\n\nexport interface AXPEntityMasterLayoutView {\n title?: string;\n sections: AXPEntitySectionView[];\n properties?: AXPEntityPropertyView[];\n}\n\n/** Quick create config for lookup widgets (+ button) - uses subset of create form */\nexport interface AXPEntityQuickCreate {\n enabled?: boolean;\n properties?: string[];\n layout?: {\n size?: AXPopupSizeType;\n };\n excludeProperties?: string[];\n}\n\nexport interface AXPEntityMasterCreateLayoutView extends AXPEntityMasterLayoutView {\n steps?: {\n id: string;\n title: string;\n description?: string;\n };\n /** Quick create config for lookup widgets - uses subset of create form */\n quickCreate?: AXPEntityQuickCreate;\n}\n\nexport interface AXPEntityMasterUpdateLayoutView extends AXPEntityMasterLayoutView {}\n\nexport interface AXPEntityMasterSingleLayoutView extends AXPEntityMasterLayoutView {\n title: string;\n description?: string;\n actions?: AXPEntityAction[];\n}\n\nexport interface AXPEntityMasterListView {\n title?: string;\n description?: string;\n actions?: AXPEntityAction[];\n views: AXPQueryView[];\n layouts?: {\n table?: {\n columns: AXPEntityTableColumn[];\n };\n card?: {};\n };\n}\n\nexport interface AXPEntityDetailListView {\n title?: string;\n description?: string;\n columns: AXPEntityTableColumn[];\n actions?: AXPEntityAction[];\n}\n\nexport interface AXPQueryView {\n name: string;\n fixed: boolean;\n title: string;\n columns: string[];\n conditions: AXPQueryFilter[];\n sorts: AXPQuerySort[];\n indexCol?: boolean;\n pageSize?: number;\n visible?: boolean;\n}\n\nexport interface AXPQueryFilter {\n name: string; // entity property name\n operator: AXDataSourceOperator;\n value: any;\n}\n\nexport interface AXPQuerySort {\n name: string; // entity property name\n dir: 'asc' | 'desc';\n}\n\n// new version\nexport enum AXPEntityType {\n Entity,\n AggregateRoot,\n ValueObject,\n}\n\nexport interface AXPEntityV2 {\n version: 2;\n\n module: string;\n aggregate: string;\n name: string;\n\n type: AXPEntityType;\n\n icon?: string;\n title: string;\n description?: string;\n\n plugins?: { name: string; options?: AXPOptionsData }[];\n pages?: AXPEntityPage[];\n groups?: AXPEntityPropertyGroup[];\n //TODO : change to fields\n properties: AXPEntityProperty[];\n\n formats: {\n individual: string;\n plural: string;\n lookup?: string;\n displayName?: string;\n searchResult?: {\n title: string;\n description?: string;\n };\n };\n columns?: AXPEntityTableColumn[];\n validations?: AXPValidationRules;\n interfaces?: {\n master?: {\n single?: AXPEntityMasterSingleLayoutView;\n list?: AXPEntityMasterListView;\n create?: AXPEntityMasterCreateLayoutView;\n update?: AXPEntityMasterUpdateLayoutView;\n };\n detail?: {\n list?: AXPEntityDetailListView;\n };\n };\n}\n","export interface AXPFilterOperator {\n name: string;\n title: string;\n hasValue: boolean;\n}\n\nexport const EQ_OPER: AXPFilterOperator = { name: 'equal', title: '@general:terms.operators.equal', hasValue: true };\nexport const NOT_EQ_OPER: AXPFilterOperator = { name: 'notEqual', title: '@general:terms.operators.not-equal', hasValue: true };\nexport const GT_OPER: AXPFilterOperator = { name: 'greaterThan', title: '@general:terms.operators.greater-than', hasValue: true };\nexport const LT_OPER: AXPFilterOperator = { name: 'lessThan', title: '@general:terms.operators.less-than', hasValue: true };\nexport const GTE_OPER: AXPFilterOperator = {\n name: 'greaterThanOrEqual',\n title: '@general:terms.operators.greater-than-or-equal',\n hasValue: true,\n};\nexport const LTE_OPER: AXPFilterOperator = { name: 'lessThanOrEqual', title: '@general:terms.operators.less-than-or-equal', hasValue: true };\nexport const CONTAINS_OPER: AXPFilterOperator = { name: 'contains', title: '@general:terms.operators.contains', hasValue: true };\nexport const NOT_CONTAINS_OPER: AXPFilterOperator = { name: 'notContains', title: '@general:terms.operators.not-contains', hasValue: true };\nexport const IN_OPER: AXPFilterOperator = { name: 'in', title: '@general:terms.operators.in', hasValue: true };\nexport const STARTS_WITH_OPER: AXPFilterOperator = { name: 'startsWith', title: '@general:terms.operators.starts-with', hasValue: true };\nexport const ENDS_WITH_OPER: AXPFilterOperator = { name: 'endsWith', title: '@general:terms.operators.ends-with', hasValue: true };\nexport const IS_EMPTY_OPER: AXPFilterOperator = { name: 'isEmpty', title: '@general:terms.operators.is-empty', hasValue: false };\nexport const IS_NOT_EMPTY_OPER: AXPFilterOperator = { name: 'isNotEmpty', title: '@general:terms.operators.is-not-empty', hasValue: false };\nexport const BETWEEN_OPER: AXPFilterOperator = { name: 'between', title: '@general:terms.operators.between', hasValue: true };\n\nexport const STRING_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n CONTAINS_OPER,\n NOT_CONTAINS_OPER,\n STARTS_WITH_OPER,\n ENDS_WITH_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n IN_OPER\n];\n\nexport const NUMBER_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n BETWEEN_OPER,\n GT_OPER,\n GTE_OPER,\n LT_OPER,\n LTE_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n];\n\nexport const BOOLEAN_OPERATORS = [EQ_OPER];\n\nexport const DATE_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n GT_OPER,\n GTE_OPER,\n LT_OPER,\n LTE_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n];\n\nexport const ALL_DEFAULT_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n GT_OPER,\n LT_OPER,\n GTE_OPER,\n LTE_OPER,\n CONTAINS_OPER,\n IN_OPER,\n NOT_CONTAINS_OPER,\n STARTS_WITH_OPER,\n ENDS_WITH_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n BETWEEN_OPER,\n];\n","import { InjectionToken } from '@angular/core';\nimport { Route } from '@angular/router';\n\nexport interface AXPHomePageDefinition {\n key: string,\n title: string,\n route: Route\n}\n\n\nexport const AXP_HOME_PAGES = new InjectionToken<AXPHomePageDefinition[]>('AXP_HOME_PAGES');\nexport const AXP_HOME_PAGE_DEFAULT_KEY = new InjectionToken<string>('AXP_HOME_PAGE_DEFAULT_KEY', {\n factory: () => 'home'\n});\n\n","/**\n * Regional and locale-related setting keys used by platform widgets and components.\n * Most values use the `LocaleManagement:Setting:Regional.*` prefix; definitions live in the locale-management module where applicable.\n */\nexport enum AXPRegionalSetting {\n LocaleProfile = 'LocaleManagement:Setting:Regional.LocaleProfile',\n TimeZone = 'LocaleManagement:Setting:Regional.TimeZone',\n Language = 'LocaleManagement:Setting:Regional.Language',\n Country = 'LocaleManagement:Setting:Regional.Country',\n Calendar = 'LocaleManagement:Setting:Regional.Calendar',\n FirstDayOfWeek = 'LocaleManagement:Setting:Regional.FirstDayOfWeek',\n WeekendDays = 'LocaleManagement:Setting:Regional.WeekendDays',\n ShortDate = 'LocaleManagement:Setting:Regional.ShortDate',\n MediumDate = 'LocaleManagement:Setting:Regional.MediumDate',\n LongDate = 'LocaleManagement:Setting:Regional.LongDate',\n ShortTime = 'LocaleManagement:Setting:Regional.ShortTime',\n MediumTime = 'LocaleManagement:Setting:Regional.MediumTime',\n LongTime = 'LocaleManagement:Setting:Regional.LongTime',\n MeasurementUnits = 'LocaleManagement:Setting:Regional.MeasurementUnits',\n TemperatureUnits = 'LocaleManagement:Setting:Regional.TemperatureUnits',\n DistanceUnits = 'LocaleManagement:Setting:Regional.DistanceUnits',\n WeightUnits = 'LocaleManagement:Setting:Regional.WeightUnits',\n VolumeUnits = 'LocaleManagement:Setting:Regional.VolumeUnits',\n SpeedUnits = 'LocaleManagement:Setting:Regional.SpeedUnits',\n AreaUnits = 'LocaleManagement:Setting:Regional.AreaUnits',\n /** Default multi-language behavior for standard text field names; defined in locale-management `AXMRegionalSettingProvider`. */\n MultiLanguageSupport = 'LocaleManagement:Setting:Regional.MultiLanguageSupport',\n}\n","import { AXPSettingValue, AXPSettingValueProvider } from \"./settings.types\";\nimport { inject, InjectionToken, Injector } from \"@angular/core\";\nimport { AXPPlatformScope } from \"@acorex/platform/core\";\nimport { AXPSessionService, AXPSessionStatus } from \"@acorex/platform/auth\";\n\n\n\nexport const AXP_SETTING_VALUE_PROVIDER = new InjectionToken<AXPSettingValueProvider[]>('AXP_SETTING_VALUE_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n const injector = inject(Injector);\n return [\n new AXPSettingValueProviderDefault(AXPPlatformScope.Platform, injector),\n new AXPSettingValueProviderDefault(AXPPlatformScope.Tenant, injector),\n new AXPSettingValueProviderDefault(AXPPlatformScope.User, injector)\n ];\n }\n});\n\n\nclass AXPSettingValueProviderDefault implements AXPSettingValueProvider {\n private readonly cache: Map<string, any> = new Map();\n private localStorageKey: string | null = null;\n private sessionService = this.injector.get(AXPSessionService)\n\n constructor(private _scope: AXPPlatformScope, private injector: Injector) {\n // Platform scope doesn't depend on session, initialize immediately\n if (this.scope === AXPPlatformScope.Platform) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(P)`;\n } else {\n this.sessionService.status$.subscribe((status) => {\n if (status === AXPSessionStatus.Authorized || status === AXPSessionStatus.Authenticated) {\n if (this.scope === AXPPlatformScope.User) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(${this.sessionService.user?.id ?? 'U'})`;\n } else if (this.scope === AXPPlatformScope.Tenant) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(${this.sessionService.tenant?.id ?? 'T'})`;\n }\n }\n });\n }\n }\n\n public get scope(): AXPPlatformScope {\n return this._scope;\n }\n\n async load(): Promise<AXPSettingValue[]> {\n if (!this.localStorageKey) {\n return Promise.resolve([]);\n }\n // Load settings from localStorage as a single key\n const storedSettings = localStorage.getItem(this.localStorageKey);\n if (storedSettings) {\n const parsedSettings: Record<string, any> = JSON.parse(storedSettings);\n Object.entries(parsedSettings).forEach(([key, value]) => {\n this.cache.set(key, value);\n });\n return Promise.resolve(Array.from(this.cache.entries()).map(c => ({ key: c[0], value: c[1] })));\n }\n return Promise.resolve([]);\n }\n\n async set(key: string, value: any): Promise<void>;\n async set(values: Record<string, any>): Promise<void>;\n async set(keyOrValues: string | Record<string, any>, value?: any): Promise<void> {\n if (typeof keyOrValues === 'string') {\n // Single value update\n this.cache.set(keyOrValues, value);\n } else {\n // Bulk update\n for (const [key, val] of Object.entries(keyOrValues)) {\n this.cache.set(key, val);\n }\n }\n await this.saveToLocalStorage();\n }\n\n private async saveToLocalStorage(): Promise<void> {\n if (!this.localStorageKey) {\n return;\n }\n const settingsObject: Record<string, any> = {};\n this.cache.forEach((value, key) => {\n settingsObject[key] = value;\n });\n localStorage.setItem(this.localStorageKey, JSON.stringify(settingsObject));\n }\n\n\n private async clear() {\n if (!this.localStorageKey) {\n return;\n }\n localStorage.removeItem(this.localStorageKey);\n }\n}","import { AXPOptionsData, AXPValidationRules, AXPValueTransformerFunctions, AXPWidgetTriggers } from '@acorex/platform/core';\nimport { AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core';\nimport { merge } from 'lodash-es';\nimport { AXPSettingDefinition, AXPSettingDefinitionGroup, AXPSettingDefinitionSection } from './index';\nimport { AXPPlatformScopeKey, AXPGridLayoutOptions } from '@acorex/platform/core';\n\nexport class AXPSettingDefinitionProviderContext {\n private rootGroups: AXPSettingDefinitionGroup[] = [];\n private groupMap: Map<string, AXPSettingDefinitionGroup> = new Map();\n\n addGroup(name: string, title: string, description?: string, icon?: string): AXPSettingDefinitionGroupBuilder {\n const newGroup: AXPSettingDefinitionGroup = {\n name,\n title,\n description,\n icon,\n groups: [],\n sections: [],\n };\n\n this.rootGroups.push(newGroup);\n this.groupMap.set(name, newGroup); // Index by name\n return new AXPSettingDefinitionGroupBuilder(this, newGroup);\n }\n\n group(name: string): AXPSettingDefinitionGroupBuilder | null {\n const foundGroup = this.groupMap.get(name);\n if (!foundGroup) {\n console.error(`Group with name \"${name}\" not found.`);\n return null;\n }\n return new AXPSettingDefinitionGroupBuilder(this, foundGroup);\n }\n\n getGroups(): AXPSettingDefinitionGroup[] {\n return this.rootGroups;\n }\n\n // Expose groupMap for controlled access\n hasGroup(name: string): boolean {\n return this.groupMap.has(name);\n }\n\n getGroup(name: string): AXPSettingDefinitionGroup | undefined {\n return this.groupMap.get(name);\n }\n}\n\nexport class AXPSettingDefinitionGroupBuilder {\n private context: AXPSettingDefinitionProviderContext;\n private group: AXPSettingDefinitionGroup;\n\n constructor(context: AXPSettingDefinitionProviderContext, group: AXPSettingDefinitionGroup) {\n this.context = context;\n this.group = group;\n }\n\n addSection(name: string, title: string, description?: string): AXPSettingDefinitionSectionBuilder {\n const newSection: AXPSettingDefinitionSection = {\n name,\n title,\n description: description,\n settings: [],\n };\n this.group.sections.push(newSection);\n return new AXPSettingDefinitionSectionBuilder(this, newSection);\n }\n\n section(name: string): AXPSettingDefinitionSectionBuilder | null {\n const foundSection = this.group.sections.find((section) => section.name === name);\n if (!foundSection) {\n throw new Error(`Section with name \"${name}\" not found in group \"${this.group.name}\".`);\n }\n return new AXPSettingDefinitionSectionBuilder(this, foundSection);\n }\n\n addGroup(name: string, title: string, description?: string, icon?: string): AXPSettingDefinitionGroupBuilder {\n const newGroup: AXPSettingDefinitionGroup = {\n name,\n title,\n description: description,\n icon,\n groups: [],\n sections: [],\n };\n this.group.groups.push(newGroup);\n if (this.context.hasGroup(name)) {\n throw new Error(`Group with name \"${name}\" already exists.`);\n }\n this.context['groupMap'].set(name, newGroup);\n return new AXPSettingDefinitionGroupBuilder(this.context, newGroup);\n }\n\n endGroup(): AXPSettingDefinitionProviderContext {\n return this.context;\n }\n}\n\nexport class AXPSettingDefinitionSectionBuilder {\n private groupBuilder: AXPSettingDefinitionGroupBuilder;\n private section: AXPSettingDefinitionSection;\n\n constructor(groupBuilder: AXPSettingDefinitionGroupBuilder, section: AXPSettingDefinitionSection) {\n this.groupBuilder = groupBuilder;\n this.section = section;\n }\n\n addSetting(setting: {\n key: string;\n title: string;\n scope: AXPPlatformScopeKey;\n widget: {\n type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | string;\n options?: AXPOptionsData;\n triggers?: AXPWidgetTriggers;\n layout?: AXPGridLayoutOptions;\n };\n description?: string;\n isRequired?: boolean;\n isInherited?: boolean;\n isEncrypted?: boolean;\n defaultValue?: unknown;\n valueTransforms?: AXPValueTransformerFunctions;\n validationRules?: AXPValidationRules;\n }): this {\n const newSetting: AXPSettingDefinition = {\n name: setting.key,\n title: setting.title,\n description: setting.description,\n isRequired: setting.isRequired ?? false,\n isInherited: setting.isInherited ?? false,\n isEncrypted: setting.isEncrypted ?? false,\n defaultValue: setting.defaultValue,\n scope: setting.scope ?? 'P',\n layout: setting.widget.layout,\n widget: {\n type: setting.widget.type,\n name: setting.key,\n path: setting.key,\n defaultValue: setting.defaultValue,\n options: merge(setting.widget.options ?? {},\n {\n label: Object.keys(setting.widget.options ?? {}).includes('label') ? setting.widget.options?.['label'] : setting.title,\n validationRules: setting.validationRules ?? [],\n }),\n valueTransforms: setting.valueTransforms,\n triggers: setting.widget.triggers,\n },\n } as AXPSettingDefinition;\n this.section.settings.push(newSetting);\n return this;\n }\n\n endSection(): AXPSettingDefinitionGroupBuilder {\n return this.groupBuilder;\n }\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport {\n AXPGroupSearchResult,\n AXPSettingDefinitionGroup,\n AXPSettingDefaultValuesProvider,\n} from './settings.types';\nimport { AXPSettingDefinitionProviderContext } from './setting.builder';\nimport { AXPPlatformScope, AXPPlatformScopeKey } from '@acorex/platform/core';\nimport { sortBy } from 'lodash-es';\n// Interface for setting providers\nexport interface AXPSettingDefinitionProvider {\n provide(context: AXPSettingDefinitionProviderContext): Promise<void>;\n}\n\n// Injection token for setting providers\nexport const AXP_SETTING_DEFINITION_PROVIDER = new InjectionToken<AXPSettingDefinitionProvider[]>('AXP_SETTING_DEFINITION_PROVIDER');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSettingDefinitionProviderService {\n private providers = inject(AXP_SETTING_DEFINITION_PROVIDER, { optional: true });\n private cache: AXPSettingDefinitionGroup[] | null = null;\n\n private async load(): Promise<void> {\n if (this.cache) {\n return\n }\n const context = new AXPSettingDefinitionProviderContext();\n \n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n }\n }\n\n this.cache = context.getGroups();\n }\n\n public async reload(): Promise<void> {\n this.cache = null;\n await this.load();\n }\n\n public async getListAsync(scope: AXPPlatformScopeKey): Promise<AXPSettingDefinitionGroup[]> {\n await this.load();\n return this.getList(scope);\n }\n\n public getList(scope: AXPPlatformScopeKey): AXPSettingDefinitionGroup[] {\n if (!this.cache) {\n return [];\n }\n\n const scopeOrder = ['P', 'T', 'U']; // Scopes hierarchy in ascending order\n\n const filterByScope = (\n groups: AXPSettingDefinitionGroup[],\n currentScope: AXPPlatformScopeKey\n ): AXPSettingDefinitionGroup[] => {\n const currentScopeIndex = scopeOrder.indexOf(currentScope);\n\n return groups\n .map((group) => ({\n ...group,\n sections: group.sections.map((section) => ({\n ...section,\n settings: section.settings.filter((setting) => {\n const settingScopeIndex = scopeOrder.indexOf(setting.scope);\n\n // Include settings where:\n // 1. The scope matches the requested scope.\n if (setting.scope === currentScope) return true;\n\n // 2. The setting scope is higher (closer to 'U') and is inherited.\n if (\n setting.isInherited &&\n settingScopeIndex > currentScopeIndex // Higher scope\n ) {\n return true;\n }\n\n // 3. Exclude settings with a lower or irrelevant scope.\n return false;\n }),\n })).filter((section) => section.settings.length > 0), // Keep only sections with settings\n groups: filterByScope(group.groups, currentScope), // Recursively filter nested groups\n }))\n .filter((group) => group.sections.length > 0 || group.groups.length > 0); // Keep groups with valid sections or nested groups\n };\n\n return sortBy(filterByScope(this.cache, scope), 'title');\n }\n\n\n\n\n async defaultValues(): Promise<Record<string, unknown>> {\n const defaults: Record<string, unknown> = {};\n\n const collectDefaults = (groups: AXPSettingDefinitionGroup[]) => {\n groups.forEach((group) => {\n group.sections.forEach((section) => {\n section.settings.forEach((setting) => {\n if (setting.defaultValue !== undefined) {\n defaults[setting.name] = setting.defaultValue;\n }\n });\n });\n collectDefaults(group.groups);\n });\n };\n\n if (!this.cache) {\n await this.load();\n }\n collectDefaults(this.cache!);\n\n return defaults;\n }\n\n public findGroup(scope: AXPPlatformScopeKey, groupName: string): AXPGroupSearchResult {\n return this.searchRecursive(this.getList(scope), groupName, []); // Initialize with an empty breadcrumb\n }\n\n private searchRecursive(\n groups: AXPSettingDefinitionGroup[],\n groupName: string,\n breadcrumb: { name: string; title: string }[]\n ): AXPGroupSearchResult {\n for (const group of groups) {\n const currentBreadcrumb = [...breadcrumb, { name: group.name, title: group.title, description: group.description }];\n\n // If the group name matches, return its details\n if (group.name === groupName) {\n return {\n breadcrumb: currentBreadcrumb,\n sections: group.sections.length > 0 ? group.sections : null,\n groups: group.groups.length > 0 ? group.groups : null,\n };\n }\n\n // Recursively search in nested groups\n const nestedResult = this.searchRecursive(group.groups, groupName, currentBreadcrumb);\n if (nestedResult.breadcrumb.length > 0) {\n return nestedResult;\n }\n }\n\n // If no matching group is found\n return {\n breadcrumb: [],\n groups: [],\n sections: []\n };\n }\n}\n\n// Multi-provider token for higher-layer default values\nexport const AXP_SETTING_DEFAULT_VALUES_PROVIDERS = new InjectionToken<AXPSettingDefaultValuesProvider[]>\n ('AXP_SETTING_DEFAULT_VALUES_PROVIDERS', {\n providedIn: 'root',\n factory: () => [],\n });\n\n// Aggregator service that merges definition defaults with higher-layer providers (by priority)\n@Injectable({ providedIn: 'root' })\nexport class AXPSettingDefaultValuesAggregatorService {\n private readonly definitionService = inject(AXPSettingDefinitionProviderService);\n private readonly providers = inject(AXP_SETTING_DEFAULT_VALUES_PROVIDERS, { optional: true }) ?? [];\n\n async getDefaults(): Promise<Record<string, unknown>> {\n const baseDefaults = await this.definitionService.defaultValues();\n const ordered = [...this.providers].sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n const merged: Record<string, unknown> = { ...baseDefaults };\n for (const provider of ordered) {\n try {\n const overrideMap = await provider.provide();\n Object.assign(merged, overrideMap);\n } catch (err) {\n console.error('AXPSettingDefaultValuesProvider failed:', err);\n }\n }\n return merged;\n }\n}","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPBroadcastEventService, AXPPlatformScope } from '@acorex/platform/core';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { cloneDeep, get } from 'lodash-es';\nimport { distinctUntilChanged, Subject } from 'rxjs';\nimport { AXP_SETTING_VALUE_PROVIDER } from './settings.provider';\nimport { AXPSettingChangedEvent, AXPSettingValue, AXPSettingValueProvider } from './settings.types';\nimport { AXPSettingDefaultValuesAggregatorService } from './setting-definition.service';\n\nexport interface AXPSettingsServiceInterface {\n load(): Promise<AXPSettingValue[]>;\n get<T = any>(key: string): Promise<T>;\n defaultValues(scope: AXPPlatformScope): Promise<Record<string, unknown>>;\n scope(scope: AXPPlatformScope): ScopedSettingService;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPSettingsService implements AXPSettingsServiceInterface {\n private readonly providers: AXPSettingValueProvider[] = inject<AXPSettingValueProvider[]>(AXP_SETTING_VALUE_PROVIDER);\n private readonly injector = inject(Injector);\n private readonly eventService = inject(AXPBroadcastEventService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly scopedSettingsCache: Map<string, Map<string, any>> = new Map();\n public readonly onChanged = new Subject<AXPSettingChangedEvent>();\n public readonly onLoaded = new Subject<void>();\n\n constructor() {\n // Initialize scoped caches for dynamic scopes\n const staticScopes = [\n AXPPlatformScope.Platform,\n AXPPlatformScope.Tenant,\n AXPPlatformScope.User,\n ];\n staticScopes.forEach((scope) => {\n if (!this.scopedSettingsCache.has(scope)) {\n this.scopedSettingsCache.set(scope, new Map());\n }\n });\n\n // Listen for setting changes from other tabs\n this.eventService.listen<AXPSettingChangedEvent>('AXPSettingChangedEvent').subscribe((event) => {\n const data = event.data;\n data.keys.forEach((key) => {\n this.scopedSettingsCache.get(data.scope)?.set(key, data.values[key]);\n });\n this.onChanged.next(data); // Notify subscribers in the current tab\n });\n // reload settings when user is authenticated\n this.sessionService.isAuthenticated$.pipe(distinctUntilChanged()).subscribe(async (isAuthenticated) => {\n if (isAuthenticated) {\n await this.reload();\n }\n });\n }\n\n async reload(): Promise<void> {\n await this.load();\n }\n\n async load(): Promise<AXPSettingValue[]> {\n try {\n const settingsList: AXPSettingValue[] = [];\n for (const provider of this.providers) {\n const scopeCache = this.scopedSettingsCache.get(provider.scope) ?? new Map();\n const providerSettings = await provider.load();\n providerSettings.forEach((setting) => {\n scopeCache.set(setting.key, setting.value);\n });\n settingsList.push(...providerSettings);\n }\n this.onLoaded.next();\n return settingsList;\n } catch (error) {\n console.error('Error loading settings', error);\n throw error;\n }\n }\n\n async get<T = any>(key: string): Promise<T> {\n if (this.scopedSettingsCache.size === 0) {\n await this.load();\n }\n const scopeOrder = [\n AXPPlatformScope.User,\n AXPPlatformScope.Tenant,\n AXPPlatformScope.Platform,\n ];\n for (const scope of scopeOrder) {\n const scopeCache = this.scopedSettingsCache.get(scope);\n if (scopeCache && scopeCache.has(key)) {\n const value = scopeCache.get(key);\n if (value !== undefined && value !== null) {\n return cloneDeep(value) as T;\n }\n }\n }\n const defaults = await this.injector.get(AXPSettingDefaultValuesAggregatorService).getDefaults();\n return get(defaults, key) as T; // Fallback if no value is found\n }\n\n async defaultValues(scope: AXPPlatformScope): Promise<Record<string, unknown>> {\n let scopeOrder = [\n AXPPlatformScope.Platform,\n AXPPlatformScope.Tenant,\n AXPPlatformScope.User,\n ].reverse();\n const scopeIndex = scopeOrder.indexOf(scope);\n\n if (scopeIndex === -1) {\n throw new Error(`Invalid scope: ${scope}`);\n }\n scopeOrder = scopeOrder.slice(scopeIndex + 1);\n // Accumulate defaults from the current scope and higher scopes\n const accumulatedDefaults: Record<string, unknown> = {};\n for (let i = scopeIndex; i < scopeOrder.length; i++) {\n const currentScope = scopeOrder[i];\n const scopeCache = this.scopedSettingsCache.get(currentScope);\n\n if (scopeCache) {\n scopeCache.forEach((value, key) => {\n if (!(key in accumulatedDefaults)) {\n accumulatedDefaults[key] = value;\n }\n });\n }\n }\n\n // Merge with aggregated default values (definition + higher-layer providers)\n const globalDefaults = await this.injector.get(AXPSettingDefaultValuesAggregatorService).getDefaults();\n return { ...globalDefaults, ...accumulatedDefaults };\n }\n\n scope(scope: AXPPlatformScope): ScopedSettingService {\n const provider = this.providers.find((p) => p.scope === scope);\n if (!provider) {\n throw new Error(`No provider found for scope: ${scope}`);\n }\n return new ScopedSettingService(this, provider, this.scopedSettingsCache.get(scope)!);\n }\n\n invokeChangeEvent(event: AXPSettingChangedEvent) {\n this.onChanged.next(event);\n this.eventService.publish<AXPSettingChangedEvent>('AXPSettingChangedEvent', event);\n }\n}\n\nclass ScopedSettingService {\n constructor(\n private parent: AXPSettingsService,\n private provider: AXPSettingValueProvider,\n private scopeCache: Map<string, any>,\n ) { }\n\n async get<T = any>(key: string): Promise<T> {\n const settings = await this.provider.load();\n const setting = settings.find((s) => s.key === key);\n return setting ? cloneDeep(setting.value) : undefined!;\n }\n\n async all(): Promise<any> {\n const settings = await this.provider.load();\n return Object.fromEntries(settings.map((s) => [s.key, cloneDeep(s.value)]));\n }\n\n async defaultValues(): Promise<Record<string, unknown>> {\n return this.parent.defaultValues(this.provider.scope);\n }\n\n async set<T = any>(key: string, value: T): Promise<void>;\n async set<T = any>(values: Record<string, T>): Promise<void>;\n async set<T = any>(keyOrValues: string | Record<string, T>, value?: T): Promise<void> {\n if (typeof keyOrValues === 'string') {\n // Single key-value pair\n await this.provider.set(keyOrValues, value);\n this.scopeCache.set(keyOrValues, value); // Sync the cache\n this.parent.invokeChangeEvent({\n scope: this.provider.scope,\n keys: [keyOrValues],\n values: { [keyOrValues]: value },\n entries: [{ key: keyOrValues, value }],\n });\n } else {\n // Multiple key-value pairs\n await this.provider.set(keyOrValues);\n Object.entries(keyOrValues).forEach(([key, val]) => this.scopeCache.set(key, val)); // Sync the cache\n const entries = Object.entries(keyOrValues).map(([key, val]) => ({ key, value: val }));\n this.parent.invokeChangeEvent({\n scope: this.provider.scope,\n keys: Object.keys(keyOrValues),\n values: keyOrValues,\n entries,\n });\n }\n }\n\n async update<T = any>(key: string, updateFn: (currentValue: T) => T): Promise<void> {\n const currentValue = await this.get<T>(key);\n const newValue = updateFn(currentValue);\n await this.set(key, newValue);\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\n\nimport { AXPRegionalSetting } from './regional-settings.keys';\nimport { AXPSettingsService } from './settings.service';\n\nconst DEFAULT_APPLY_DEFAULT_MULTILANGUAGE = true;\n\n/**\n * Synchronous access to default multi-language behavior for named entity fields and widget\n * property bindings. Mirrors {@link AXPLayoutOrderingConfigService}: avoids async in entity\n * modifiers and startup deadlocks.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPDefaultMultiLanguageConfigService {\n private readonly settingsService = inject(AXPSettingsService);\n\n private readonly _applyDefault = signal<boolean>(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n private syncScheduled = false;\n\n constructor() {\n this.settingsService.onLoaded.subscribe(() => this.syncFromSettings());\n this.settingsService.onChanged.subscribe(() => this.syncFromSettings());\n }\n\n getApplyDefaultMultiLanguage(): boolean {\n if (!this.syncScheduled) {\n this.syncScheduled = true;\n this.settingsService\n .get<boolean>(AXPRegionalSetting.MultiLanguageSupport)\n .then((value) => this._applyDefault.set(value ?? DEFAULT_APPLY_DEFAULT_MULTILANGUAGE))\n .catch(() => this._applyDefault.set(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE));\n }\n return this._applyDefault();\n }\n\n private async syncFromSettings(): Promise<void> {\n try {\n const value = await this.settingsService.get<boolean>(AXPRegionalSetting.MultiLanguageSupport);\n this._applyDefault.set(value ?? DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n } catch {\n this._applyDefault.set(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n }\n }\n}\n","/**\n * Shared multi-language defaults for entity properties and widget property bindings.\n *\n * **Circular dependencies:** use only `import type` for `AXPWidgetProperty` and\n * `AXPEntityProperty` so this module has no runtime imports from widget-core or application\n * types — `@acorex/platform/layout/widget-core` does not import `@acorex/platform/common`.\n */\nimport type { AXPWidgetNode, AXPWidgetProperty } from '@acorex/platform/layout/widget-core';\n\nimport type { AXPEntityProperty } from '../app/application.types';\n\n//#region ---- Constants ----\n\n/**\n * Widget types that support the multiLanguage option (text / rich text editors).\n */\nexport const MULTILANGUAGE_CAPABLE_WIDGET_TYPES = new Set<string>([\n 'text-editor',\n 'large-text-editor',\n 'rich-text-editor',\n 'template-content-editor',\n]);\n\n/**\n * Common property names / binding path segments that are usually translatable when the feature is\n * enabled in settings. Explicit `multiLanguage` on the property still wins.\n */\nexport const DEFAULT_MULTILANGUAGE_FIELD_NAMES = new Set<string>([\n 'title',\n 'description',\n 'note',\n 'content',\n /** e.g. `post.summaryContent` — last path segment */\n 'summaryContent',\n 'question',\n 'summary',\n 'body',\n 'caption',\n 'remarks',\n 'subtitle',\n 'label',\n 'placeholder',\n 'message',\n 'subject',\n]);\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction interfacePathLastSegment(path: string | undefined): string | null {\n if (path == null || typeof path !== 'string' || !path.length) {\n return null;\n }\n const seg = path.includes('.') ? path.split('.').pop() : path;\n return seg && seg.length ? seg : null;\n}\n\nexport function shouldApplyDefaultMultiLanguageToEntityProperty(prop: AXPEntityProperty): boolean {\n if (prop.schema.dataType !== 'string') {\n return false;\n }\n if (!DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(prop.name)) {\n return false;\n }\n const widgetType = prop.schema.interface?.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const opts = prop.schema.interface?.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\nexport function shouldApplyDefaultMultiLanguageToWidgetProperty(prop: AXPWidgetProperty): boolean {\n if (prop.schema.dataType !== 'string') {\n return false;\n }\n const key = interfacePathLastSegment(prop.schema.interface.path);\n if (!key || !DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(key)) {\n return false;\n }\n const widgetType = prop.schema.interface.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const opts = prop.schema.interface.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\n/**\n * Leaf widget nodes in entity `schema.interface` trees (e.g. GridLayout → RichText under `pre` /\n * `post`) — same path/type rules as {@link shouldApplyDefaultMultiLanguageToWidgetProperty}, without\n * `schema.dataType` (nodes do not carry entity schema).\n */\nexport function shouldApplyDefaultMultiLanguageToWidgetNode(node: AXPWidgetNode): boolean {\n const widgetType = node.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const key = interfacePathLastSegment(node.path);\n if (!key || !DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(key)) {\n return false;\n }\n const opts = node.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\n/**\n * When {@link AXPDefaultMultiLanguageConfigService#getApplyDefaultMultiLanguage} is true, sets\n * `options.multiLanguage` on eligible editor leaves inside an entity property's widget tree\n * (including nested layouts). Used by entity middleware so object fields (e.g. `pre`, `post`) are\n * covered, not only top-level string properties.\n */\nexport function withDefaultMultiLanguageOnWidgetNodeTree(\n root: AXPWidgetNode | undefined | null,\n applyDefault: boolean,\n): AXPWidgetNode | undefined | null {\n if (root == null || !applyDefault) {\n return root ?? undefined;\n }\n return visitWidgetNodeForDefaultMultiLanguage(root);\n}\n\nfunction visitWidgetNodeForDefaultMultiLanguage(node: AXPWidgetNode): AXPWidgetNode {\n let next = node;\n if (node.children?.length) {\n const newChildren = node.children.map((child) => visitWidgetNodeForDefaultMultiLanguage(child));\n if (newChildren.some((c, i) => c !== node.children![i])) {\n next = { ...node, children: newChildren };\n }\n }\n if (shouldApplyDefaultMultiLanguageToWidgetNode(next)) {\n return {\n ...next,\n options: {\n ...((next.options ?? {}) as Record<string, unknown>),\n multiLanguage: true,\n },\n };\n }\n return next;\n}\n\n/**\n * When {@link AXPDefaultMultiLanguageConfigService#getApplyDefaultMultiLanguage} is true, sets\n * `schema.interface.options.multiLanguage` for eligible string widget properties (same rules as\n * entity middleware), unless the property already specifies `multiLanguage`.\n */\nexport function withDefaultMultiLanguageOnWidgetProperty(\n prop: AXPWidgetProperty,\n applyDefault: boolean,\n): AXPWidgetProperty {\n if (!applyDefault || !shouldApplyDefaultMultiLanguageToWidgetProperty(prop)) {\n return prop;\n }\n const iface = prop.schema.interface;\n const existingOpts = (iface.options ?? {}) as Record<string, unknown>;\n return {\n ...prop,\n schema: {\n ...prop.schema,\n interface: {\n ...iface,\n options: {\n ...existingOpts,\n multiLanguage: true,\n },\n },\n },\n };\n}\n\n//#endregion\n","import { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from '@acorex/platform/core';\nimport { inject } from '@angular/core';\n\nimport { AXPSettingsService } from './settings.service';\n\n//#region ---- Settings expression scope ----\n\n/**\n * Exposes platform settings in expression strings, e.g.\n * `{{ settings.get('Common:Setting:Entity.ShowPageBadge') }}`.\n */\nexport class AXPSettingsEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n private readonly settingsService = inject(AXPSettingsService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('settings', {\n get: async (key: string) => {\n return await this.settingsService.get(key);\n },\n });\n }\n}\n\n//#endregion\n","export enum AXPHomePageSettings {\n UserHomePath = 'Common:Setting:Startup.HomePage',\n}","import { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { Route, Router, Routes } from '@angular/router';\nimport { merge } from 'rxjs';\nimport { AXPSettingsService } from '../settings';\nimport { AXPHomePageSettings } from './home-page-settings.key';\nimport { AXP_HOME_PAGE_DEFAULT_KEY, AXP_HOME_PAGES, AXPHomePageDefinition } from './home-page.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPHomePageService {\n private defaultHomePageKey = inject<string>(AXP_HOME_PAGE_DEFAULT_KEY, { optional: true }) ?? 'home';\n private userHomePageKey: string | null = null;\n private candidates = inject<AXPHomePageDefinition[]>(AXP_HOME_PAGES, { optional: true }) ?? [];\n private settingsService = inject(AXPSettingsService);\n private sessionService = inject(AXPSessionService);\n private injector = inject(Injector);\n private originalConfig: Routes | null = null;\n private loginPath = 'auth/login';\n\n private get flatCandidates() {\n return this.candidates.flatMap((c) => c);\n }\n\n constructor() {\n // remove circular dependency\n setTimeout(async () => {\n await this.init();\n });\n }\n\n private async init() {\n await this.load();\n //\n const keys = [AXPHomePageSettings.UserHomePath];\n this.settingsService.onChanged.subscribe(async (c) => {\n if (keys.some((k) => c.keys.includes(k))) {\n await this.load();\n this.refreshRoutes();\n }\n });\n //\n merge(this.sessionService.status$, this.sessionService.application$, this.sessionService.tenant$).subscribe(\n async (data) => {\n await this.load();\n this.refreshRoutes();\n },\n );\n }\n\n async load() {\n this.userHomePageKey = await this.settingsService.get(AXPHomePageSettings.UserHomePath);\n }\n\n getRegisteredList(): AXPHomePageDefinition[] {\n return this.flatCandidates.filter((c) => c.route);\n }\n\n getRegisteredRoutes(): Routes {\n const defaultHomePage = this.flatCandidates.find((c) => c.key === this.defaultHomePageKey);\n\n const home =\n this.flatCandidates.find((c) => this.userHomePageKey && c.key === this.userHomePageKey) ?? defaultHomePage;\n if (home && home.route && this.sessionService.application?.name) {\n const fullPath = this.findPath(home.route);\n return [\n { path: '', redirectTo: fullPath, pathMatch: 'full' },\n { path: ':app', redirectTo: fullPath, pathMatch: 'full' },\n { ...home?.route, ...{ data: { key: home?.key, title: home?.title, path: fullPath } } },\n ];\n }\n return [{ path: '', redirectTo: this.loginPath, pathMatch: 'full' }];\n }\n\n getCurrent(): { path: string; title: string } {\n const key = this.userHomePageKey ?? this.defaultHomePageKey;\n const homePage = this.getRegisteredRoutes().find((c) => c.data?.['key'] === key)!;\n if (homePage) {\n return {\n path: homePage.data?.['path'],\n title: homePage.data?.['title'],\n };\n }\n return {\n path: this.loginPath,\n title: '',\n };\n }\n\n private findPath(target: Route): string {\n const rawPath = this.buildFullPaths(target).join('/');\n const appName = this.sessionService.application?.name;\n if (appName) {\n return rawPath.replace(':app', appName);\n }\n return rawPath;\n }\n\n private buildFullPaths(route: Route, parentPath: string[] = []): string[] {\n const segments = [...parentPath];\n if (route.path) {\n segments.push(route.path);\n }\n\n // Recursively search the first matched child (deepest first match)\n if (route.children?.length) {\n return this.buildFullPaths(route.children[0], segments);\n }\n\n return segments;\n }\n\n private refreshRoutes() {\n const router = this.injector.get(Router);\n\n // 👇 On first call, remember what was there before:\n if (!this.originalConfig) {\n this.originalConfig = router.config;\n }\n\n this.applyMergedConfig(router);\n }\n\n private applyMergedConfig(router: Router) {\n const newHomeRoutes = this.getRegisteredRoutes(); // your 3 home entries\n\n // Filter the original routes to drop the old home placeholders.\n // We know your dynamic routes always have path === '' or ':app'\n // or carry a `data.key` matching one of your home-page keys.\n const otherRoutes = (this.originalConfig ?? []).filter(\n (r) => r.path !== '' && r.path !== ':app' && !(r.data && typeof r.data['key'] === 'string'),\n );\n\n // Build the new merged tree\n const merged: Routes = [...newHomeRoutes, ...otherRoutes];\n // TODO: check this for custom menu like :app/terms\n router.resetConfig(merged);\n }\n\n async navigateTo() {\n // wait for the router to be initialized\n setTimeout(() => {\n const router = this.injector.get(Router);\n const current = this.getCurrent();\n router.navigate([current.path], { onSameUrlNavigation: 'reload' });\n }, 100);\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from \"@angular/core\";\nimport { Routes, ROUTES } from \"@angular/router\";\nimport { AXPHomePageService } from \"./home-page.service\";\n\nfunction dynamicRoutesFactory(): Routes {\n const service = inject(AXPHomePageService);\n return service.getRegisteredRoutes();\n}\n\nexport function provideDynamicHomePage(): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: ROUTES,\n useFactory: dynamicRoutesFactory,\n multi: true\n }\n ]);\n}","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPPlatformScope, objectKeyValueTransforms } from '@acorex/platform/core';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '../settings';\nimport { AXPHomePageSettings } from './home-page-settings.key';\nimport { AXPHomePageService } from './home-page.service';\nimport { AXP_HOME_PAGE_DEFAULT_KEY } from './home-page.types';\n\n@Injectable()\nexport class AXPHomePageSettingProvider implements AXPSettingDefinitionProvider {\n private readonly translateService = this.injector.get(AXTranslationService);\n private readonly homePageService = this.injector.get(AXPHomePageService);\n private defaultHomePageKey = inject<string>(AXP_HOME_PAGE_DEFAULT_KEY, { optional: true }) ?? 'home';\n\n constructor(private injector: Injector) { }\n\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n const trans = async (key: string) =>\n await this.translateService.translateAsync(`@general:settings.${key}`);\n\n const list = await this.homePageService.getRegisteredList().map((c) => ({ id: c.key, title: c.title }));\n if (list.length === 0) {\n return;\n }\n\n // Define the 'General Settings' group\n context\n .addGroup('general', await trans('general.title'), await trans('general.description'), 'fa-light fa-palette')\n\n // Add the 'Startup' section\n .addSection('startup', await trans('general.startup.title'), await trans('general.startup.description'))\n // Add the 'Home Page' setting\n .addSetting({\n key: AXPHomePageSettings.UserHomePath,\n title: await trans('general.startup.home-page.title'),\n scope: AXPPlatformScope.User,\n isInherited: true,\n defaultValue: this.defaultHomePageKey || list[0].id,\n valueTransforms: objectKeyValueTransforms('id'),\n widget: {\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'id',\n textField: 'title',\n dataSource: list,\n },\n },\n description: await trans('general.startup.home-page.description'),\n })\n\n // End the 'Startup' section\n .endSection()\n\n // End the 'General Settings' group\n .endGroup();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AXP_SETTING_DEFINITION_PROVIDER } from '../settings';\nimport { AXPHomePageSettingProvider } from './home-page-settings.provider';\n\n@NgModule({\n imports: [],\n providers: [\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXPHomePageSettingProvider,\n multi: true,\n },\n ],\n})\nexport class AXPHomePageModule {}\n","export abstract class AXPDataProvider {\n abstract insertOne(entity: any, entityItem: any): Promise<any>;\n abstract insertMany(entity: any, entityList: any): Promise<any>;\n abstract getOne(entity: any, id: string): Promise<any>;\n abstract getMany(entity: any, params?: any): Promise<any>;\n abstract updateOne(entity: any, id?: string, data?: { [key: string]: any }): Promise<any>;\n abstract deleteOne(entity: any, id: string): Promise<any>;\n abstract getFirst(entity: any): Promise<any>;\n abstract uploadFile(file: File, title: string, customUrl?: string): Promise<string>;\n abstract updateFile(id:string,file: File, title: string, customUrl?: string): Promise<string>;\n abstract uploadMultipleFiles(files: File[], title: string): Promise<string[]>;\n abstract viewFile(id: string, name: string): Promise<Blob>;\n abstract downloadFile(id: string, name: string): Promise<Blob>;\n}\n","import { AXDataSourceOperator } from '@acorex/cdk/common';\nimport { Injectable } from '@angular/core';\n\nexport abstract class AXPCustomOperatorService {\n abstract getCustomOperators(): { [key: string]: AXDataSourceOperator };\n}\n\n@Injectable()\nexport class AXPCustomOperatorServiceImpl extends AXPCustomOperatorService {\n getCustomOperators(): { [key: string]: AXDataSourceOperator } {\n return {};\n }\n}\n","import { AXDataSourceFilterOption, AXDataSourceOperator } from '@acorex/cdk/common';\nimport { inject, Injectable } from '@angular/core';\nimport { ALL_DEFAULT_OPERATORS } from '../app';\nimport { AXPCustomOperatorService } from './operators.service';\n\nexport abstract class AXPFilterOperatorMiddlewareService {\n /**\n * Middleware to transform selected filters into corresponding operators.\n * @param filters Array of selected filters (e.g., user input).\n * @param customOperators Optional custom operators map to override default operators.\n * @returns Transformed filters based on custom or default operators.\n */\n abstract transformFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[];\n\n /**\n * Helper method to transform a single filter. This handles recursion for nested filters.\n * @param filter A single filter object.\n * @returns Transformed filter.\n */\n abstract transformFilter(filters: AXDataSourceFilterOption): AXDataSourceFilterOption;\n\n abstract getOperator(key: string): AXDataSourceOperator;\n}\n\n@Injectable()\nexport class AXPFilterOperatorMiddlewareServiceImpl extends AXPFilterOperatorMiddlewareService {\n private customOperatorService = inject(AXPCustomOperatorService);\n\n private operators: { [key: string]: AXDataSourceOperator } = {\n ...this.getDefaultOperators(),\n ...this.customOperatorService.getCustomOperators(),\n };\n\n transformFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[] {\n return filters.map((filter) => this.transformFilter(filter));\n }\n\n transformFilter(filter: AXDataSourceFilterOption): AXDataSourceFilterOption {\n const { operator, value, filters, field } = filter;\n // Find the operator (either default or custom)\n const filterOperator = this.operators[operator?.type ?? ''] || null;\n\n // Start by transforming the filter itself\n const transformedFilter: AXDataSourceFilterOption = {\n ...filter, // Keep the original filter structure\n operator: filterOperator ? filterOperator : operator, // Add operator name\n };\n\n // If the filter contains nested filters, recursively transform them\n if (filters && filters.length > 0) {\n transformedFilter.filters = this.transformFilters(filters); // Recursively transform nested filters\n }\n\n return transformedFilter;\n }\n\n getOperator(key: string) {\n return this.operators[key];\n }\n\n // Helper function to return the default operators\n private getDefaultOperators(): { [key: string]: AXDataSourceOperator } {\n return ALL_DEFAULT_OPERATORS.reduce(\n (acc, operator) => {\n acc[operator.name] = {\n type: operator.name as any,\n };\n return acc;\n },\n {} as { [key: string]: AXDataSourceOperator },\n );\n }\n}\n","import { Injectable, Injector } from \"@angular/core\";\nimport { AXPErrorHandler } from \"./error-handler.types\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXPErrorHandlerRegistryService {\n private errorHandlers: AXPErrorHandler[] = [];\n\n constructor(private injector: Injector) {\n }\n\n register(...plugins: (new () => AXPErrorHandler)[]) {\n plugins.forEach(t => {\n const childInjector = Injector.create({ providers: [{ provide: t, useClass: t, deps: [] }], parent: this.injector });\n const handler = childInjector.get(t);\n if (handler) {\n this.errorHandlers.push(handler);\n }\n })\n }\n\n\n public get handlers(): AXPErrorHandler[] {\n return this.errorHandlers;\n }\n}","import { ErrorHandler, Injectable, Injector } from \"@angular/core\";\nimport { AXPErrorHandlerRegistryService } from \"./error-handler-registry.service\";\n\n@Injectable({ providedIn: 'root' })\nexport class AXPGlobalErrorHandler extends ErrorHandler {\n\n\n\n constructor(private injector: Injector, private registry: AXPErrorHandlerRegistryService) {\n super()\n }\n\n override handleError(error: Error) {\n const handleErrorRecursively = (index: number, error: any) => {\n const errorHandlers = this.registry.handlers;\n if (index < errorHandlers.length) {\n errorHandlers[index].handleError(error, (err) => {\n handleErrorRecursively(index + 1, err);\n });\n } else {\n super.handleError(error); // Fallback to default handler\n }\n };\n if (error.message?.startsWith('NG0100')) {\n //ignore it\n return\n }\n handleErrorRecursively(0, error);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type AXPTokenDefinitionProviderToken =\n | AXPTokenDefinitionProvider\n | Promise<AXPTokenDefinitionProvider>;\n\nexport const AXP_TOKEN_DEFINITION_PROVIDER = new InjectionToken<AXPTokenDefinitionProviderToken[]>(\n 'AXP_TOKEN_DEFINITION_PROVIDER',\n {\n factory: () => [],\n },\n);\n\nexport interface AXPTokenDefinitionProvider<T = any> {\n name: string;\n title: string;\n description?: string;\n\n execute(): Promise<T> | T;\n}\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_TOKEN_DEFINITION_PROVIDER } from './token-definition.provider';\nimport { AXPTokenDefinition } from './token.types';\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPTokenDefinitionService {\n //#region ---- Providers & Caches ----\n\n private readonly definitionProviders = inject(AXP_TOKEN_DEFINITION_PROVIDER, { optional: true }) || [];\n\n /** Cache for definitions by name. */\n private definitionsByName: Map<string, AXPTokenDefinition> = new Map();\n\n\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Returns a token definition by its name.\n * First checks the cache, then queries all providers if not found.\n * @param name The token name.\n * @returns The token definition if found, undefined otherwise.\n */\n async getDefinition(name: string): Promise<AXPTokenDefinition | undefined> {\n // Check cache first\n if (this.definitionsByName.has(name)) {\n return this.definitionsByName.get(name);\n }\n // Not in cache, query providers\n // Resolve all providers (some may be promises, some may be arrays)\n const resolvedProviders = await Promise.all(this.definitionProviders);\n\n // Flatten the array - some providers may be arrays of providers (e.g., dynamic token providers)\n const flattenedProviders: AXPTokenDefinition[] = [];\n for (const provider of resolvedProviders) {\n if (Array.isArray(provider)) {\n // If provider is an array, add all items\n flattenedProviders.push(...provider);\n } else if (provider) {\n // If provider is a single provider, add it\n flattenedProviders.push(provider);\n }\n }\n\n const match = flattenedProviders.find(def => def?.name === name);\n if (match) {\n this.definitionsByName.set(name, match);\n return match;\n }\n return undefined;\n }\n\n /**\n * Gets the resolved value of a token by its name.\n * @param name The token name.\n * @returns The resolved token value, or undefined if the token is not found.\n */\n async getValue(name: string): Promise<any> {\n const definition = await this.getDefinition(name);\n if (definition) {\n return await definition.execute();\n }\n return undefined;\n }\n\n //#endregion\n\n //#region ---- Cache Management ----\n\n /** Clears the definitions by name cache. */\n clearDefinitionsCache(): void {\n this.definitionsByName.clear();\n }\n\n //#endregion\n}\n","\nimport { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from \"@acorex/platform/core\";\nimport { inject } from \"@angular/core\";\nimport { AXPTokenDefinitionService } from \"./token-definition.service\";\n\nexport class AXPTokenEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n\n protected tokenService = inject(AXPTokenDefinitionService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('tokens', {\n get: async (name: string) => {\n return await this.tokenService.getValue(name);\n }\n })\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n Output,\n Renderer2,\n} from '@angular/core';\n\n@Directive({\n selector: '[axpSticky]',\n exportAs: 'axpSticky',\n standalone: true,\n})\nexport class AXPStickyDirective {\n @Input('axpSticky') stickyClass!: string;\n @Input('stickyOffset') stickyOffset: number = 100;\n\n @Output() isStickyChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n private _isSticky: boolean = false;\n public get isSticky(): boolean {\n return this._isSticky;\n }\n public set isSticky(value: boolean) {\n if (this._isSticky !== value) {\n this._isSticky = value;\n this.isStickyChange.emit(value);\n }\n }\n\n private parentElement!: HTMLElement | Window;\n private targetElement!: HTMLElement;\n private mutationObserver!: MutationObserver;\n\n private readonly onWindowResize = (): void => {\n this.applyStickyStateFromScrollPosition();\n };\n\n @Input() stickyParent!: string | HTMLElement;\n @Input() stickyTarget!: string;\n\n constructor(\n private element: ElementRef<HTMLDivElement>,\n private renderer: Renderer2,\n private zone: NgZone,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngAfterViewInit() {\n this.initSticky();\n\n // Add mutation observer for dynamic content\n this.mutationObserver = new MutationObserver(() => {\n this.applyStickyStateFromScrollPosition();\n });\n\n this.mutationObserver.observe(this.element.nativeElement, {\n childList: true,\n subtree: true,\n });\n\n window.addEventListener('resize', this.onWindowResize);\n }\n\n private initSticky() {\n if (this.stickyParent instanceof HTMLElement) {\n this.parentElement = this.stickyParent;\n } else {\n this.parentElement = (document.querySelector(this.stickyParent) as HTMLElement) || window;\n }\n\n this.targetElement = (document.querySelector(this.stickyTarget) as HTMLElement) || this.element.nativeElement;\n\n this.parentElement.addEventListener('scroll', this.onParentScroll);\n this.applyStickyStateFromScrollPosition();\n }\n\n private getScrollTop(): number {\n return this.parentElement === window ? window.scrollY : (this.parentElement as HTMLElement).scrollTop;\n }\n\n /**\n * Toggle stuck styling only while this element is visually pinned (matches `position: sticky; top: 0`).\n * Scroll-offset thresholds would stay true for every section already passed, so multiple stacked stickies\n * would all keep `--stuck`; geometry fixes that.\n */\n private computeShouldStick(): boolean {\n if (this.getScrollTop() <= 0) {\n return false;\n }\n const tRect = this.targetElement.getBoundingClientRect();\n const epsilon = 3;\n let limitY: number;\n if (this.parentElement === window) {\n limitY = this.stickyOffset;\n } else {\n limitY = (this.parentElement as HTMLElement).getBoundingClientRect().top;\n }\n return tRect.top <= limitY + epsilon && tRect.top >= limitY - epsilon;\n }\n\n private applyStickyStateFromScrollPosition(): void {\n this.zone.runOutsideAngular(() => {\n const shouldStick = this.computeShouldStick();\n\n if (shouldStick !== this.isSticky) {\n this.zone.run(() => {\n this.isSticky = shouldStick;\n this.toggleStickyClasses(shouldStick);\n this.cdr.markForCheck();\n });\n }\n });\n }\n\n private onParentScroll = (): void => {\n this.applyStickyStateFromScrollPosition();\n };\n\n private toggleStickyClasses(isSticky: boolean): void {\n const classes = this.stickyClass.split(' ').filter(Boolean);\n classes.forEach((className) => {\n if (isSticky) {\n this.renderer.addClass(this.targetElement, className);\n } else {\n this.renderer.removeClass(this.targetElement, className);\n }\n });\n }\n\n ngOnDestroy() {\n this.parentElement.removeEventListener('scroll', this.onParentScroll);\n window.removeEventListener('resize', this.onWindowResize);\n\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n }\n }\n}\n","import { AXPMenuItem } from './menu.types';\nimport { AXPMenuItemFinder, AXPMenuMiddlewareContext } from './menu.middleware';\n\n//#region ---- Menu Context Builder ----\n\n/**\n * Creates a rich context for menu manipulation\n * Similar to entity modifier context pattern\n */\nexport function createMenuContext(items: AXPMenuItem[]): AXPMenuMiddlewareContext {\n const context: AXPMenuMiddlewareContext = {\n get items() {\n return items;\n },\n\n find(nameOrPattern: string | RegExp): AXPMenuItemFinder {\n if (typeof nameOrPattern === 'string') {\n return context.findByName(nameOrPattern);\n }\n const found = context.findByPattern(nameOrPattern);\n return found.length > 0 ? found[0] : createEmptyFinder();\n },\n\n findByName(name: string): AXPMenuItemFinder {\n return createMenuItemFinder(items, name);\n },\n\n findByPattern(pattern: string | RegExp): AXPMenuItemFinder[] {\n const regex = typeof pattern === 'string' ? wildcardToRegex(pattern) : pattern;\n const results: AXPMenuItemFinder[] = [];\n\n const searchRecursive = (itemList: AXPMenuItem[]) => {\n for (const item of itemList) {\n if (item.name && regex.test(item.name)) {\n results.push(createMenuItemFinder(items, item.name));\n }\n if (item.children) {\n searchRecursive(item.children);\n }\n }\n };\n\n searchRecursive(items);\n return results;\n },\n\n add(...newItems: AXPMenuItem[]): AXPMenuMiddlewareContext {\n items.push(...newItems);\n return context;\n },\n\n remove(predicate: (item: AXPMenuItem) => boolean): AXPMenuMiddlewareContext {\n removeRecursive(items, predicate);\n return context;\n },\n\n sort(): AXPMenuMiddlewareContext {\n sortItemsRecursively(items);\n return context;\n },\n\n toArray(): AXPMenuItem[] {\n return items;\n },\n };\n\n return context;\n}\n\n//#endregion\n\n//#region ---- Menu Item Finder Implementation ----\n\n/**\n * Creates a finder for a specific menu item\n */\nfunction createMenuItemFinder(rootItems: AXPMenuItem[], targetName: string): AXPMenuItemFinder {\n const findItemWithParent = (\n items: AXPMenuItem[],\n name: string,\n parent: { items: AXPMenuItem[] } = { items: rootItems }\n ): { item: AXPMenuItem | undefined; parent: { items: AXPMenuItem[] } } => {\n for (const item of items) {\n if (item.name === name) {\n return { item, parent };\n }\n if (item.children) {\n const result = findItemWithParent(item.children, name, { items: item.children });\n if (result.item) {\n return result;\n }\n }\n }\n return { item: undefined, parent };\n };\n\n const finder: AXPMenuItemFinder = {\n get(): AXPMenuItem | undefined {\n return findItemWithParent(rootItems, targetName).item;\n },\n\n exists(): boolean {\n return finder.get() !== undefined;\n },\n\n update(updater: Partial<AXPMenuItem> | ((item: AXPMenuItem) => Partial<AXPMenuItem>)): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item) {\n const updates = typeof updater === 'function' ? updater(item) : updater;\n Object.assign(item, updates);\n }\n return finder;\n },\n\n remove(): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index, 1);\n }\n }\n return finder;\n },\n\n hide(): AXPMenuItemFinder {\n // Hide by removing the item from menu\n return finder.remove();\n },\n\n show(): AXPMenuItemFinder {\n // Show is a no-op since items are visible by default\n // To truly implement show, we'd need to track removed items and re-add them\n console.warn('show() is not fully implemented - items are visible by default');\n return finder;\n },\n\n setPriority(priority: number): AXPMenuItemFinder {\n return finder.update({ priority });\n },\n\n addChildren(...children: AXPMenuItem[]): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item) {\n item.children = item.children || [];\n item.children.push(...children);\n }\n return finder;\n },\n\n removeChildren(predicate: (child: AXPMenuItem) => boolean): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item && item.children) {\n item.children = item.children.filter((c) => !predicate(c));\n }\n return finder;\n },\n\n moveTo(parentName: string | null | undefined): AXPMenuItemFinder {\n const { item, parent: oldParent } = findItemWithParent(rootItems, targetName);\n if (!item) {\n return finder;\n }\n\n // Remove from old parent\n const oldIndex = oldParent.items.indexOf(item);\n if (oldIndex !== -1) {\n oldParent.items.splice(oldIndex, 1);\n }\n\n // Add to new parent\n if (!parentName || parentName === '') {\n // Move to root (handles null, undefined, and empty string)\n rootItems.push(item);\n } else {\n const { item: newParentItem } = findItemWithParent(rootItems, parentName);\n if (newParentItem) {\n newParentItem.children = newParentItem.children || [];\n newParentItem.children.push(item);\n }\n }\n\n return finder;\n },\n\n insertBefore(...items: AXPMenuItem[]): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index, 0, ...items);\n }\n }\n return finder;\n },\n\n insertAfter(...items: AXPMenuItem[]): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index + 1, 0, ...items);\n }\n }\n return finder;\n },\n };\n\n return finder;\n}\n\n/**\n * Creates an empty finder for items not found\n */\nfunction createEmptyFinder(): AXPMenuItemFinder {\n return {\n get: () => undefined,\n exists: () => false,\n update: () => createEmptyFinder(),\n remove: () => createEmptyFinder(),\n hide: () => createEmptyFinder(),\n show: () => createEmptyFinder(),\n setPriority: () => createEmptyFinder(),\n addChildren: () => createEmptyFinder(),\n removeChildren: () => createEmptyFinder(),\n moveTo: () => createEmptyFinder(),\n insertBefore: () => createEmptyFinder(),\n insertAfter: () => createEmptyFinder(),\n };\n}\n\n//#endregion\n\n//#region ---- Helper Functions ----\n\n/**\n * Converts wildcard pattern to regex\n */\nfunction wildcardToRegex(pattern: string): RegExp {\n const escaped = pattern.replace(/[.+?^${}()|\\[\\]\\\\]/g, '\\\\$&');\n const regexStr = `^${escaped.replace(/\\*/g, '.*')}$`;\n return new RegExp(regexStr);\n}\n\n/**\n * Recursively removes items matching predicate\n */\nfunction removeRecursive(items: AXPMenuItem[], predicate: (item: AXPMenuItem) => boolean): void {\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i];\n if (predicate(item)) {\n items.splice(i, 1);\n } else if (item.children) {\n removeRecursive(item.children, predicate);\n }\n }\n}\n\n/**\n * Recursively sorts items by priority\n */\nfunction sortItemsRecursively(items: AXPMenuItem[]): void {\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n items.forEach((item) => {\n if (item.children && item.children.length > 0) {\n sortItemsRecursively(item.children);\n }\n });\n}\n\n//#endregion\n\n","import { InjectionToken } from '@angular/core';\nimport { AXPMenuItem } from './menu.types';\n\n//#region ---- Menu Middleware Context ----\n\n/**\n * Rich context API for manipulating menu items within middleware\n * Provides helper methods to find, update, remove, and add menu items easily\n */\nexport interface AXPMenuMiddlewareContext {\n /**\n * Get all menu items\n */\n readonly items: AXPMenuItem[];\n\n /**\n * Find menu item(s) by name or pattern\n */\n find(nameOrPattern: string | RegExp): AXPMenuItemFinder;\n\n /**\n * Find menu item by name (exact match)\n */\n findByName(name: string): AXPMenuItemFinder;\n\n /**\n * Find menu items by pattern (regex or wildcard)\n */\n findByPattern(pattern: string | RegExp): AXPMenuItemFinder[];\n\n /**\n * Add new menu items to root level\n */\n add(...items: AXPMenuItem[]): AXPMenuMiddlewareContext;\n\n /**\n * Remove menu items by predicate\n */\n remove(predicate: (item: AXPMenuItem) => boolean): AXPMenuMiddlewareContext;\n\n /**\n * Sort all menu items recursively by priority\n */\n sort(): AXPMenuMiddlewareContext;\n\n /**\n * Get the final menu items array\n */\n toArray(): AXPMenuItem[];\n}\n\n/**\n * Helper for finding and manipulating a specific menu item\n */\nexport interface AXPMenuItemFinder {\n /**\n * Get the found menu item (or undefined)\n */\n get(): AXPMenuItem | undefined;\n\n /**\n * Check if menu item exists\n */\n exists(): boolean;\n\n /**\n * Update menu item properties\n */\n update(updater: Partial<AXPMenuItem> | ((item: AXPMenuItem) => Partial<AXPMenuItem>)): AXPMenuItemFinder;\n\n /**\n * Remove the menu item\n */\n remove(): AXPMenuItemFinder;\n\n /**\n * Hide the menu item (removes it from the menu)\n */\n hide(): AXPMenuItemFinder;\n\n /**\n * Show the menu item (currently a no-op as items are visible by default)\n * Note: To truly implement show, we'd need to track removed items\n */\n show(): AXPMenuItemFinder;\n\n /**\n * Set priority\n */\n setPriority(priority: number): AXPMenuItemFinder;\n\n /**\n * Add children to this menu item\n */\n addChildren(...children: AXPMenuItem[]): AXPMenuItemFinder;\n\n /**\n * Remove children by predicate\n */\n removeChildren(predicate: (child: AXPMenuItem) => boolean): AXPMenuItemFinder;\n\n /**\n * Move menu item to a different parent\n */\n moveTo(parentName: string | null | undefined): AXPMenuItemFinder;\n\n /**\n * Insert menu items before this item\n */\n insertBefore(...items: AXPMenuItem[]): AXPMenuItemFinder;\n\n /**\n * Insert menu items after this item\n */\n insertAfter(...items: AXPMenuItem[]): AXPMenuItemFinder;\n}\n\n//#endregion\n\n//#region ---- Menu Middleware ----\n\n/**\n * Middleware that processes menu items after all providers have executed\n * Middlewares are executed in order based on their priority (higher priority = earlier execution)\n */\nexport interface AXPMenuMiddleware {\n /**\n * Optional priority for execution order (higher = earlier)\n * Default: 0\n */\n readonly priority?: number;\n\n /**\n * Optional name for debugging and identification\n */\n readonly name?: string;\n\n /**\n * Process menu items using the rich context API\n * @param context - The menu middleware context with helper methods\n * @returns Processed context or void (context is mutable)\n */\n process(context: AXPMenuMiddlewareContext): Promise<void | AXPMenuMiddlewareContext>;\n}\n\n/**\n * Provider definition for registering middleware via multi-provider\n */\nexport interface AXPMenuMiddlewareProvider {\n /**\n * The middleware instance\n */\n middleware: AXPMenuMiddleware;\n\n /**\n * Optional priority override\n */\n priority?: number;\n}\n\n/**\n * Injection token for menu middlewares (multi-provider)\n */\nexport const AXP_MENU_MIDDLEWARE = new InjectionToken<AXPMenuMiddleware[]>('AXP_MENU_MIDDLEWARE');\n\n//#endregion\n\n","import { inject, Injectable } from '@angular/core';\nimport { AXP_MENU_MIDDLEWARE, AXPMenuMiddleware } from './menu.middleware';\n\n//#region ---- Menu Middleware Registry ----\n\n/**\n * Central service for managing menu middlewares with priority-based ordering\n * Similar to token registry pattern used in identifier-management\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuMiddlewareRegistry {\n\n //#region ---- Fields ----\n\n /**\n * Manually registered middlewares\n */\n private readonly manualMiddlewares = new Map<string, AXPMenuMiddleware>();\n\n /**\n * Provider-based middlewares (multi-provider injection)\n */\n private readonly providerMiddlewares = inject(AXP_MENU_MIDDLEWARE, { optional: true }) ?? [];\n\n //#endregion\n\n //#region ---- Registration Methods ----\n\n /**\n * Manually register a middleware\n * @param middleware - The middleware to register\n */\n register(middleware: AXPMenuMiddleware): void {\n const name = middleware.name || `middleware_${Date.now()}_${Math.random()}`;\n\n const existing = this.manualMiddlewares.get(name);\n if (!existing || (middleware.priority ?? 0) > (existing.priority ?? 0)) {\n this.manualMiddlewares.set(name, middleware);\n }\n }\n\n /**\n * Unregister a middleware by name\n * @param name - The name of the middleware to remove\n */\n unregister(name: string): void {\n this.manualMiddlewares.delete(name);\n }\n\n /**\n * Get a specific middleware by name\n * @param name - The middleware name\n */\n get(name: string): AXPMenuMiddleware | undefined {\n // Provider-provided middlewares take precedence\n const fromProvider = this.providerMiddlewares\n .filter((m) => m.name === name)\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))[0];\n\n if (fromProvider) {\n return fromProvider;\n }\n\n return this.manualMiddlewares.get(name);\n }\n\n /**\n * Get all middlewares sorted by priority (highest first)\n * Combines provider-based and manually registered middlewares\n */\n list(): AXPMenuMiddleware[] {\n const map = new Map<string, AXPMenuMiddleware>();\n\n // Helper to add middleware, respecting priority\n const addMiddleware = (m: AXPMenuMiddleware) => {\n const name = m.name || `anonymous_${Date.now()}`;\n const existing = map.get(name);\n if (!existing || (m.priority ?? 0) > (existing.priority ?? 0)) {\n map.set(name, m);\n }\n };\n\n // Add provider middlewares first (higher precedence)\n this.providerMiddlewares.forEach(addMiddleware);\n\n // Add manual middlewares\n Array.from(this.manualMiddlewares.values()).forEach(addMiddleware);\n\n // Return sorted by priority (highest first)\n return Array.from(map.values()).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n }\n\n /**\n * Check if a middleware exists\n * @param name - The middleware name\n */\n exists(name: string): boolean {\n return this.get(name) !== undefined;\n }\n\n /**\n * Clear all manually registered middlewares\n * Provider-based middlewares are not affected\n */\n clear(): void {\n this.manualMiddlewares.clear();\n }\n\n //#endregion\n}\n\n//#endregion\n\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { AXPMenuFinderResult, AXPMenuInsertion, AXPMenuItem, AXPMenuProviderContext } from './menu.types';\nimport { createMenuContext } from './menu.context';\nimport { AXPMenuMiddlewareRegistry } from './menu-middleware.registry';\n\nexport interface AXPMenuProvider {\n provide(context: AXPMenuProviderContext): Promise<void>;\n}\n\nexport const AXP_MENU_PROVIDER = new InjectionToken<AXPMenuProvider[]>('AXP_MENU_PROVIDER');\n\n//TODO: check performance of this service\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuProviderService {\n\n //#region ---- Dependencies ----\n\n private providers = inject(AXP_MENU_PROVIDER, { optional: true });\n private middlewareRegistry = inject(AXPMenuMiddlewareRegistry);\n\n //#endregion\n\n //#region ---- State ----\n\n private cache: AXPMenuItem[] | null = null;\n private pendingInserts: Array<{ target: string; newItems: AXPMenuItem[]; position: AXPMenuInsertion }> = [];\n private pendingRemovals: string[] = [];\n private pendingUpdates: Array<{ target: string; updatedItem: Partial<AXPMenuItem> }> = [];\n private pendingAdditions: Array<{ target: string; newItems: AXPMenuItem[] }> = [];\n private pendingMoves: Array<{ source: string; destination: string; position: AXPMenuInsertion }> = [];\n\n /**\n * Observable for menu reload events\n * Emits when menu cache is cleared and consumers should reload\n */\n private menuReloadSubject = new Subject<void>();\n public readonly menuReload$ = this.menuReloadSubject.asObservable();\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get menu items with middlewares applied (for end-user display)\n */\n async items(): Promise<AXPMenuItem[]> {\n // Return cached items if available\n if (this.cache) {\n return this.cache;\n }\n\n const items: AXPMenuItem[] = [];\n const context = this.createMenuProviderContext(items);\n\n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n // Apply pending operations after each provider so subsequent providers\n // can find items added by earlier providers (e.g. Tokens under Data Definitions)\n this.applyPendingOperations(items);\n }\n }\n\n // Sort items by priority\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // Apply middlewares using registry (sorted by priority)\n await this.applyMiddlewares(items);\n\n // ADD level property to items\n setMenuItemMeta(items);\n\n // Cache the computed items\n this.cache = items;\n return items;\n }\n\n /**\n * Get raw menu items WITHOUT middleware applied (for management/editing)\n * Used by menu management pages to show original items before customization\n */\n async rawItems(): Promise<AXPMenuItem[]> {\n const items: AXPMenuItem[] = [];\n const context = this.createMenuProviderContext(items);\n\n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n // Apply pending operations after each provider\n this.applyPendingOperations(items);\n }\n }\n\n // Sort items by priority\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // ADD level property to items (but NO middleware)\n setMenuItemMeta(items);\n\n return items;\n }\n\n /**\n * Clear the cache to force reload of menu items\n * Notifies all subscribers to reload their menu data\n */\n clearCache(): void {\n this.cache = null;\n this.pendingInserts = [];\n this.pendingRemovals = [];\n this.pendingUpdates = [];\n this.pendingAdditions = [];\n this.pendingMoves = [];\n\n // Notify subscribers that menu should be reloaded\n this.menuReloadSubject.next();\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Apply middlewares in priority order using the enhanced context API\n */\n private async applyMiddlewares(items: AXPMenuItem[]): Promise<void> {\n const middlewares = this.middlewareRegistry.list();\n\n for (const middleware of middlewares) {\n try {\n const context = createMenuContext(items);\n await middleware.process(context);\n\n // The context mutates the items array, so no need to reassign\n } catch (error) {\n console.error(\n `Error in menu middleware ${middleware.name || 'anonymous'}:`,\n error\n );\n }\n }\n }\n\n /**\n * Create provider context for menu providers\n */\n private createMenuProviderContext(items: AXPMenuItem[]): AXPMenuProviderContext {\n return {\n addItems: (newItems: AXPMenuItem[]) => {\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingItem = this.findItemByName(items, newItem.name);\n if (existingItem) {\n // Update existing item, merging properties\n this.mergeMenuItem(existingItem, newItem);\n } else {\n // Add new item if it doesn't exist\n items.push(newItem);\n }\n } else {\n // Add item without name (no way to check for duplicates)\n items.push(newItem);\n }\n }\n },\n find: (target: string): AXPMenuFinderResult => {\n const foundItemInfo = this.findItemWithParent(items, target);\n const exists = foundItemInfo.foundItem !== null;\n\n return {\n exists,\n insert: (newItems: AXPMenuItem[], position: AXPMenuInsertion) => {\n this.pendingInserts.push({ target, newItems, position });\n },\n remove: () => {\n this.pendingRemovals.push(target);\n },\n update: (updatedItem: Partial<AXPMenuItem>) => {\n this.pendingUpdates.push({ target, updatedItem });\n },\n addItems: (newItems: AXPMenuItem[]) => {\n this.pendingAdditions.push({ target, newItems });\n },\n moveTo: (destination: string, position: AXPMenuInsertion = 'inside') => {\n this.pendingMoves.push({\n source: target,\n destination,\n position: position ?? 'inside',\n });\n },\n };\n }\n };\n }\n\n private applyPendingOperations(items: AXPMenuItem[]): void {\n for (const { target, newItems, position } of this.pendingInserts) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem, parentItems } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, appending items.`);\n items.push(...newItems);\n } else {\n if (position === 'inside') {\n if (!foundItem.children) {\n foundItem.children = [];\n }\n\n // Check for duplicates by name and merge or add\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingChild = this.findItemByName(foundItem.children, newItem.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newItem);\n } else {\n foundItem.children.push(newItem);\n }\n } else {\n foundItem.children.push(newItem);\n }\n }\n } else {\n // For 'before' and 'after', check for duplicates in parent items\n const itemsToInsert: AXPMenuItem[] = [];\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingItem = this.findItemByName(parentItems, newItem.name);\n if (existingItem) {\n this.mergeMenuItem(existingItem, newItem);\n } else {\n itemsToInsert.push(newItem);\n }\n } else {\n itemsToInsert.push(newItem);\n }\n }\n\n if (itemsToInsert.length > 0) {\n const index = parentItems.indexOf(foundItem);\n const insertPosition = position === 'before' ? index : index + 1;\n parentItems.splice(insertPosition, 0, ...itemsToInsert);\n }\n }\n }\n }\n\n for (const target of this.pendingRemovals) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem, parentItems } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to remove.`);\n } else {\n const index = parentItems.indexOf(foundItem);\n parentItems.splice(index, 1);\n }\n }\n\n for (const { target, updatedItem } of this.pendingUpdates) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to update.`);\n } else {\n Object.assign(foundItem, updatedItem);\n }\n }\n\n for (const { target, newItems } of this.pendingAdditions) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to add items to.`);\n } else {\n if (!foundItem.children) {\n foundItem.children = [];\n }\n\n // Check for duplicates by name and merge or add\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingChild = this.findItemByName(foundItem.children, newItem.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newItem);\n } else {\n foundItem.children.push(newItem);\n }\n } else {\n foundItem.children.push(newItem);\n }\n }\n }\n }\n\n for (const move of this.pendingMoves) {\n this.applyPendingMove(items, move.source, move.destination, move.position);\n }\n\n // Clear pending operations after applying them\n this.pendingInserts = [];\n this.pendingRemovals = [];\n this.pendingUpdates = [];\n this.pendingAdditions = [];\n this.pendingMoves = [];\n }\n\n private findItemWithParent(items: AXPMenuItem[], target: string, parentItems: AXPMenuItem[] = items): { foundItem: AXPMenuItem | null, parentItems: AXPMenuItem[] } {\n for (const item of items) {\n if (item.name === target) {\n return { foundItem: item, parentItems };\n }\n\n if (item.children) {\n const result = this.findItemWithParent(item.children, target, item.children);\n if (result.foundItem) {\n return result;\n }\n }\n }\n return { foundItem: null, parentItems: items };\n }\n\n /**\n * Find menu item by name in the items tree (recursive search)\n */\n private findItemByName(items: AXPMenuItem[], name: string): AXPMenuItem | null {\n for (const item of items) {\n if (item.name === name) {\n return item;\n }\n\n if (item.children) {\n const found = this.findItemByName(item.children, name);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private applyPendingMove(\n items: AXPMenuItem[],\n sourceName: string,\n destName: string,\n position: AXPMenuInsertion\n ): void {\n if (sourceName === destName) {\n console.warn(`moveTo: source and destination are the same (\"${sourceName}\"), ignored.`);\n return;\n }\n\n const sourceInfo = this.findItemWithParent(items, sourceName);\n const { foundItem: sourceItem, parentItems: sourceParent } = sourceInfo;\n if (!sourceItem) {\n console.warn(`moveTo: source \"${sourceName}\" not found.`);\n return;\n }\n\n const destInfo = this.findItemWithParent(items, destName);\n const { foundItem: destItem, parentItems: destParent } = destInfo;\n if (!destItem) {\n console.warn(`moveTo: destination \"${destName}\" not found.`);\n return;\n }\n\n if (this.itemIsInSubtreeOf(sourceItem, destItem)) {\n console.warn(\n `moveTo: cannot move \"${sourceName}\" because \"${destName}\" is inside the source subtree.`\n );\n return;\n }\n\n const sourceIndex = sourceParent.indexOf(sourceItem);\n if (sourceIndex === -1) {\n console.warn(`moveTo: source \"${sourceName}\" not in parent list (inconsistent).`);\n return;\n }\n sourceParent.splice(sourceIndex, 1);\n\n if (position === 'inside') {\n if (!destItem.children) {\n destItem.children = [];\n }\n destItem.children.push(sourceItem);\n return;\n }\n\n const destIndexInParent = destParent.indexOf(destItem);\n if (destIndexInParent === -1) {\n console.warn(\n `moveTo: destination \"${destName}\" not in parent list, reverting source removal.`\n );\n sourceParent.splice(sourceIndex, 0, sourceItem);\n return;\n }\n const insertIndex = position === 'before' ? destIndexInParent : destIndexInParent + 1;\n destParent.splice(insertIndex, 0, sourceItem);\n }\n\n private itemIsInSubtreeOf(root: AXPMenuItem, candidate: AXPMenuItem): boolean {\n if (root === candidate) {\n return true;\n }\n if (!root.children?.length) {\n return false;\n }\n for (const child of root.children) {\n if (child === candidate) {\n return true;\n }\n if (this.itemIsInSubtreeOf(child, candidate)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Merge new item properties into existing item, handling children merge\n */\n private mergeMenuItem(existingItem: AXPMenuItem, newItem: AXPMenuItem): void {\n // Merge top-level properties (newItem properties override existing only if defined)\n if (newItem.text !== undefined) existingItem.text = newItem.text;\n if (newItem.description !== undefined) existingItem.description = newItem.description;\n if (newItem.icon !== undefined) existingItem.icon = newItem.icon;\n if (newItem.path !== undefined) existingItem.path = newItem.path;\n if (newItem.priority !== undefined) existingItem.priority = newItem.priority;\n if (newItem.type !== undefined) existingItem.type = newItem.type;\n if (newItem.command !== undefined) existingItem.command = newItem.command;\n if (newItem.badgeKey !== undefined) existingItem.badgeKey = newItem.badgeKey;\n if (newItem.data !== undefined) existingItem.data = newItem.data;\n if (newItem.policy !== undefined) existingItem.policy = newItem.policy;\n\n // Merge children if both have children\n if (newItem.children && newItem.children.length > 0) {\n if (!existingItem.children) {\n existingItem.children = [];\n }\n\n // For each child in newItem, check if it exists by name and merge or add\n for (const newChild of newItem.children) {\n if (newChild.name) {\n const existingChild = this.findItemByName(existingItem.children, newChild.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newChild);\n } else {\n existingItem.children.push(newChild);\n }\n } else {\n existingItem.children.push(newChild);\n }\n }\n }\n }\n\n //#endregion\n}\n\nfunction setMenuItemMeta(items: any[], parentIndex: string = '', depth: number = 0) {\n items.forEach((item, index) => {\n const currentIndex = parentIndex ? `${parentIndex}-${index}` : `${index}`;\n const hasChildren = !!(item.children && Array.isArray(item.children) && item.children.length > 0);\n\n item.meta = {\n index: currentIndex,\n isRoot: depth === 0,\n hasChildren,\n depth\n }\n\n if (hasChildren) {\n setMenuItemMeta(item.children, currentIndex, depth + 1);\n }\n });\n}\n","//#region ---- Imports ----\n\nimport { AXDataSource } from '@acorex/cdk/common';\nimport {\n AXPDataSourceDefinition,\n AXPDataSourceDefinitionProvider,\n AXPFilterDefinition,\n} from '@acorex/platform/core';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { inject } from '@angular/core';\nimport { AXPMenuItem } from './menu.types';\nimport { AXPMenuProviderService } from './menu.provider';\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction flattenMenuItems(items: AXPMenuItem[], depth: number): Array<{ id: string; title: string }> {\n const rows: Array<{ id: string; title: string }> = [];\n let index = 0;\n for (const it of items) {\n const fallback = `menu-${depth}-${index}`;\n index += 1;\n const id = it.name ?? it.path ?? fallback;\n rows.push({ id, title: it.text });\n if (it.children?.length) {\n rows.push(...flattenMenuItems(it.children, depth + 1));\n }\n }\n return rows;\n}\n\n//#endregion\n\n//#region ---- Menu items data source ----\n\n/**\n * Registered menu items (raw tree flattened) for select widgets via dataSource name {@link MENU_ITEMS_DATASOURCE_NAME}.\n */\nexport const MENU_ITEMS_DATASOURCE_NAME = 'platform-menu-items';\n\n/**\n * Data source definition for menu items from {@link AXPMenuProviderService#rawItems}.\n */\nexport class AXPMenuItemsDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly menuProviderService = inject(AXPMenuProviderService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n async items(): Promise<AXPDataSourceDefinition[]> {\n return [\n {\n name: MENU_ITEMS_DATASOURCE_NAME,\n title: 'Menu items',\n source: () =>\n new AXDataSource({\n key: 'id',\n load: async () => {\n const raw = await this.menuProviderService.rawItems();\n const list = flattenMenuItems(raw, 0);\n return { items: list, total: list.length };\n },\n byKey: async (key: unknown) => {\n const raw = await this.menuProviderService.rawItems();\n const list = flattenMenuItems(raw, 0);\n return list.find((item) => item.id === key);\n },\n pageSize: 1000,\n }),\n columns: [\n {\n name: 'id',\n title: 'ID',\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n {\n name: 'title',\n title: 'Title',\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n ],\n filters: [\n {\n field: 'title',\n title: 'Title',\n operator: { type: 'equal' },\n widget: { type: AXPWidgetsCatalog.text },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ],\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ];\n }\n\n //#endregion\n}\n\n//#endregion\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { AXP_MENU_MIDDLEWARE, AXPMenuMiddleware } from './menu.middleware';\n\n//#region ---- Menu Middleware Provider Helper ----\n\n/**\n * Helper function to provide menu middlewares with proper DI setup\n * Similar to provideCommandMiddleware pattern\n * \n * @example\n * ```typescript\n * // In app.config.ts or module providers\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideMenuMiddleware([\n * customizationMiddleware,\n * securityMiddleware,\n * loggingMiddleware\n * ])\n * ]\n * };\n * ```\n */\nexport function provideMenuMiddleware(\n middlewares: AXPMenuMiddleware[]\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n ...middlewares.map((middleware) => ({\n provide: AXP_MENU_MIDDLEWARE,\n useValue: middleware,\n multi: true,\n })),\n ]);\n}\n\n/**\n * Helper to create a class-based middleware with priority\n * \n * @example\n * ```typescript\n * const myMiddleware = createMenuMiddleware({\n * name: 'my-middleware',\n * priority: 100,\n * process: async (context) => {\n * context.find('dashboard').setPriority(1);\n * }\n * });\n * ```\n */\nexport function createMenuMiddleware(config: {\n name: string;\n priority?: number;\n process: (context: import('./menu.middleware').AXPMenuMiddlewareContext) => Promise<void>;\n}): AXPMenuMiddleware {\n return {\n name: config.name,\n priority: config.priority ?? 0,\n process: config.process,\n };\n}\n\n//#endregion\n\n","import { AXPExecuteCommand, AXPNavigateActionCommand } from '@acorex/platform/core';\nimport { AXPCommandExecutor } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { patchState, signalStore, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuItem } from './menu.types';\n\nexport const AXPMenuService = signalStore(\n { providedIn: 'root' },\n\n // Initial State\n withState((router = inject(Router)) => {\n return {\n items: [] as AXPMenuItem[],\n selectedMenuItem: {\n item: null as AXPMenuItem | null,\n isFullMatch: false,\n },\n };\n }),\n\n // Methods for State Management\n withMethods(\n (\n store,\n router = inject(Router),\n workflow = inject(AXPWorkflowService),\n commandExecutor = inject(AXPCommandExecutor),\n ) => {\n return {\n setMenuItems(items: AXPMenuItem[]): void {\n patchState(store, { items: items });\n },\n\n selectMenuItemByRoute(path: string): void {\n const currentRawPath = path;\n\n const findItem = (items: AXPMenuItem[]): { item: AXPMenuItem | null; isPartialMatch: boolean } => {\n for (const item of items) {\n // Recursively search children first\n if (item.children) {\n const foundChild = findItem(item.children);\n if (foundChild.item) {\n return foundChild;\n }\n }\n if (item.path) {\n // Check if the item path matches the current path (including query param subset if provided on item)\n const matchResult = pathsMatch(item.path, currentRawPath, ['list', 'view', 'edit', 'create']);\n if (matchResult.isMatch) {\n return { item, isPartialMatch: matchResult.isPartial };\n }\n }\n }\n return { item: null, isPartialMatch: false };\n };\n\n const pathsMatch = (\n itemPath: string,\n currentPath: string,\n trailingSegmentsToIgnore: string[] = [],\n ): { isMatch: boolean; isPartial: boolean } => {\n // Split base and query/hash\n const itemNoHash = itemPath.split('#')[0];\n const currentNoHash = currentPath.split('#')[0];\n\n const [itemBase, itemQueryString = ''] = itemNoHash.split('?');\n const [currentBase, currentQueryString = ''] = currentNoHash.split('?');\n\n const itemSegments = itemBase.split('/').filter((segment) => segment.length > 0);\n const pathSegments = currentBase.split('/').filter((segment) => segment.length > 0);\n\n const menuLength = itemSegments.length;\n const pathLength = pathSegments.length;\n\n // Identify the effective base length for the menuPath\n let effectiveMenuLength = menuLength;\n if (menuLength > 0 && trailingSegmentsToIgnore.includes(itemSegments[menuLength - 1])) {\n effectiveMenuLength--; // Exclude trailing non-hierarchical segments\n }\n\n // Check if the menuPath (base segments) is a prefix of browserPath\n let isPrefix = true;\n if (pathLength < effectiveMenuLength) {\n return { isMatch: false, isPartial: false };\n }\n\n for (let i = 0; i < effectiveMenuLength; i++) {\n if (itemSegments[i] !== pathSegments[i]) {\n isPrefix = false;\n break;\n }\n }\n\n if (!isPrefix) {\n return { isMatch: false, isPartial: false };\n }\n\n // Partial match: menuPath base is a strict prefix of browserPath\n const isPartialMatch = effectiveMenuLength < pathLength;\n\n // Exact match: all segments match completely\n const isExactMatch = effectiveMenuLength === pathLength;\n\n // Query params subset match: if item defines any query params, require them to match\n const itemParams = new URLSearchParams(itemQueryString);\n const currentParams = new URLSearchParams(currentQueryString);\n let queryMatches = true;\n const itemParamPairs: Array<[string, string]> = [];\n itemParams.forEach((value, key) => {\n itemParamPairs.push([key, value]);\n });\n if (itemParamPairs.length > 0) {\n for (const [k, v] of itemParamPairs) {\n if (currentParams.get(k) !== v) {\n queryMatches = false;\n break;\n }\n }\n }\n\n return {\n isMatch: (isExactMatch || isPartialMatch) && queryMatches,\n isPartial: isPartialMatch && !isExactMatch,\n };\n };\n\n const items = store.items();\n const { item, isPartialMatch } = findItem(items);\n patchState(store, { selectedMenuItem: { item, isFullMatch: !isPartialMatch } });\n },\n\n executeCommand(item: AXPMenuItem): void {\n if (item.path) {\n workflow.execute('navigate', {\n type: 'router',\n options: { path: item.path },\n } as AXPNavigateActionCommand<'router'>);\n patchState(store, { selectedMenuItem: { item, isFullMatch: true } });\n }\n if (item.command) {\n const command = item.command as AXPExecuteCommand;\n if (workflow.exists(command?.name)) {\n workflow.execute(command.name, command.options);\n } else {\n commandExecutor.execute(command.name, command.options);\n }\n }\n },\n\n isItemOpen(item: AXPMenuItem): boolean {\n const selectedItem = store.selectedMenuItem();\n if (!selectedItem.item) {\n return false;\n }\n\n const findParent = (currentItem: AXPMenuItem, targetItem: AXPMenuItem): boolean => {\n if (currentItem.children?.includes(targetItem)) {\n return true;\n }\n return currentItem.children?.some((child) => findParent(child, targetItem)) ?? false;\n };\n\n return item === selectedItem.item || findParent(item, selectedItem.item);\n },\n };\n },\n ),\n withHooks((store, menuProviderService = inject(AXPMenuProviderService)) => {\n let reloadSubscription: any;\n\n return {\n onInit() {\n // Load initial menu items\n (async () => {\n const items = await menuProviderService.items();\n patchState(store, { items: items });\n })();\n\n // Subscribe to menu reload events\n reloadSubscription = menuProviderService.menuReload$.subscribe(async () => {\n const items = await menuProviderService.items();\n patchState(store, { items: items });\n });\n },\n onDestroy() {\n // Clean up subscription\n if (reloadSubscription) {\n reloadSubscription.unsubscribe();\n }\n },\n };\n }),\n);\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMenuItem } from './menu.types';\nimport { inject, Injectable } from '@angular/core';\n\n/**\n * Service for checking menu item visibility based on permissions, features, and children.\n * This service helps filter out empty menu items that have no visible children.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuVisibilityService {\n private sessionService = inject(AXPSessionService);\n\n /**\n * Checks if a menu item should be visible based on permissions and features.\n */\n isItemVisible(item: AXPMenuItem): boolean {\n const policy = item.policy;\n if (!policy) {\n return true; // No policy means visible\n }\n\n // Check features\n if (policy.features && policy.features.length > 0) {\n const featureKeys = Array.isArray(policy.features) ? policy.features : [policy.features];\n if (!this.sessionService.isFeatureEnabled(...featureKeys)) {\n return false;\n }\n }\n\n // Check permissions\n if (policy.permissions && policy.permissions.length > 0) {\n const permissionKeys = Array.isArray(policy.permissions) ? policy.permissions : [policy.permissions];\n if (!this.sessionService.authorize(...permissionKeys)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Recursively checks if a menu item has any visible children.\n * @param item The menu item to check\n * @param getRouterLink Optional function to check if an item has a router link\n */\n hasVisibleChildren(item: AXPMenuItem, getRouterLink?: (item: AXPMenuItem) => unknown): boolean {\n if (!item.children || item.children.length === 0) {\n return false;\n }\n\n return item.children.some((child) => {\n // Check if child itself is visible\n if (!this.isItemVisible(child)) {\n return false;\n }\n\n // If child has a routerLink, it's visible\n if (getRouterLink && getRouterLink(child)) {\n return true;\n }\n\n // If child has visible children, it's visible\n if (this.hasVisibleChildren(child, getRouterLink)) {\n return true;\n }\n\n // For items without routerLink, check if they have a command (non-empty menu items)\n if (child.command) {\n return true;\n }\n\n return false;\n });\n }\n\n /**\n * Determines if a menu item should be rendered.\n * A menu item should be rendered if:\n * 1. It has a routerLink, OR\n * 2. It has visible children, OR\n * 3. It has a command (for non-router navigation)\n *\n * @param item The menu item to check\n * @param getRouterLink Optional function to check if an item has a router link\n */\n shouldRenderMenuItem(item: AXPMenuItem, getRouterLink?: (item: AXPMenuItem) => unknown): boolean {\n // Check if item itself is visible (permissions/features)\n if (!this.isItemVisible(item)) {\n return false;\n }\n\n // If it has a routerLink, render it\n if (getRouterLink && getRouterLink(item)) {\n return true;\n }\n\n // If it has visible children, render it\n if (this.hasVisibleChildren(item, getRouterLink)) {\n return true;\n }\n\n // If it has a command (for non-router navigation), render it\n if (item.command) {\n return true;\n }\n\n // Otherwise, don't render empty menu items\n return false;\n }\n}\n\n","import { AXPSearchDefinitionProvider, AXPSearchDefinitionProviderContext } from '../../search';\nimport { AXPSystemActionType } from '@acorex/platform/core';\n\nexport class AXPMenuSearchDefinitionProvider implements AXPSearchDefinitionProvider {\n async provide(context: AXPSearchDefinitionProviderContext): Promise<void> {\n context.addDefinition('menu', 'Menu', 'menu', 'fa-thin fa-bars', 2, {\n format: {\n id: '{{data.name}}',\n },\n actions: [\n {\n name: 'navigate',\n type: AXPSystemActionType.View,\n priority: 'primary',\n },\n ],\n });\n }\n}\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { inject } from '@angular/core';\nimport { omit, sortBy } from 'lodash-es';\nimport { AXPSearchProvider, AXPSearchResult } from '../../search';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuItem } from './menu.types';\nimport { AXPExecuteCommand } from '@acorex/platform/core';\n\nexport interface AXPMenuItemWithParent extends AXPMenuItem {\n parent?: AXPMenuItem;\n}\n\nexport class AXPMenuSearchProvider implements AXPSearchProvider {\n menuService = inject(AXPMenuProviderService);\n translateService = inject(AXTranslationService);\n\n async search(text: string): Promise<AXPSearchResult[]> {\n const menuItems = await this.searchMenuItems(await this.menuService.items(), text);\n return sortBy<AXPSearchResult>(\n menuItems.map<AXPSearchResult>((item) => ({\n group: 'menu', // Use `name` or empty string if undefined\n title: item.text, // Use `text` for the `title`\n icon: item.icon, // Include the `icon` if present\n data: omit(item, ['parent', 'children']), // Include all data except `parent` and `children`\n command: item.path ? {\n name: 'navigate',\n options: {\n type: 'router',\n options: {\n path: item.path,\n },\n }\n } as AXPExecuteCommand : item.command as AXPExecuteCommand,\n parent: item.parent\n ? {\n title: item.parent.text,\n }\n : undefined,\n })),\n [(o) => this.translateService.translateSync(o.title!)]\n );\n }\n\n /**\n * Recursively searches AXPMenuItem and its children for a matching text.\n *\n * @param menuItems - The array of AXPMenuItem to search in.\n * @param searchText - The text to search for (case-insensitive).\n * @returns An array of AXPMenuItem that match the search text.\n */\n private async searchMenuItems(menuItems: AXPMenuItem[], searchText: string): Promise<AXPMenuItemWithParent[]> {\n const result: AXPMenuItemWithParent[] = [];\n\n for (const item of menuItems) {\n // Check if the current item's text matches the search text\n if (\n item.type != 'group' &&\n (item.children?.length ?? 0) == 0 &&\n (await this.translateService.translateAsync(item.text)).toLowerCase().includes(searchText.toLowerCase())\n ) {\n result.push(item as AXPMenuItemWithParent);\n }\n\n // Recursively search in children if they exist\n if (item.children && item.children.length > 0) {\n const childResults = await this.searchMenuItems(item.children, searchText);\n result.push(...childResults.map((x) => ({ ...x, parent: item } as AXPMenuItemWithParent)));\n }\n }\n\n return result;\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n template: `\n <small class=\"ax-text-sm\" [innerHTML]=\"text\"></small>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPFooterTextSlotComponent {\n @Input()\n public text!: string;\n}","\nimport { Component, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { AXPMenuItem, AXPMenuItemCommand } from '../../../menu';\n\n@Component({\n template: `\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-5\">\n @for (link of items; track link) {\n <a (click)=\"handleCommand(link.command)\" >{{ link.text }}</a>\n }\n </div>\n `,\n imports: [],\n encapsulation: ViewEncapsulation.None\n})\nexport class AXPNavBarSlotComponent {\n @Input()\n public items!: AXPMenuItem[];\n\n\n protected handleCommand(action?: AXPMenuItemCommand) {\n // if (action)\n // this.store.dispatch(action)\n }\n}","import { AXPSearchAction, AXPSearchDefinition, AXPSearchDefinitionDisplayFormat } from './search.types';\nimport { AXPSystemActionType } from '@acorex/platform/core';\n\nexport class AXPSearchDefinitionProviderContext {\n private definitions: AXPSearchDefinition[] = [];\n private definitionMap: Map<string, AXPSearchDefinition> = new Map();\n\n addDefinition(\n name: string,\n title: string,\n group: string,\n icon: string,\n order: number,\n options?: {\n format?: AXPSearchDefinitionDisplayFormat;\n actions?: AXPSearchAction[];\n }\n ): AXPSearchDefinitionBuilder {\n const definitionSearch: AXPSearchDefinition = {\n name,\n title,\n group,\n icon,\n order,\n format: {\n title: options?.format?.title ?? '{{ title }}',\n description: options?.format?.description ?? undefined,\n icon: options?.format?.icon ?? undefined,\n id: options?.format?.id ?? '{{ id }}',\n },\n actions: options?.actions ?? [],\n };\n\n this.definitions.push(definitionSearch);\n this.definitionMap.set(name, definitionSearch); // Index by name\n return new AXPSearchDefinitionBuilder(this, definitionSearch);\n }\n\n\n getDefinitions(): AXPSearchDefinition[] {\n return this.definitions;\n }\n\n // Expose groupMap for controlled access\n hasEntity(name: string): boolean {\n return this.definitionMap.has(name);\n }\n\n getDefinition(name: string): AXPSearchDefinition | undefined {\n return this.definitionMap.get(name);\n }\n}\n\nexport class AXPSearchDefinitionBuilder {\n private context: AXPSearchDefinitionProviderContext;\n private definition: AXPSearchDefinition;\n\n constructor(context: AXPSearchDefinitionProviderContext, definition: AXPSearchDefinition) {\n this.context = context;\n this.definition = definition;\n }\n\n addAction(name: string): AXPSearchDefinitionActionBuilder {\n const newAction: AXPSearchAction = {\n name,\n type: AXPSystemActionType.View,\n priority: 'primary',\n };\n this.definition.actions.push(newAction);\n return new AXPSearchDefinitionActionBuilder(this);\n }\n\n action(name: string): AXPSearchDefinitionActionBuilder | null {\n const foundAction = this.definition.actions.find((action) => action.name === name);\n if (!foundAction) {\n throw new Error(`action with name \"${name}\" not found in entity \"${this.definition.name}\".`);\n }\n return new AXPSearchDefinitionActionBuilder(this);\n }\n\n endEntity(): AXPSearchDefinitionProviderContext {\n return this.context;\n }\n}\n\nexport class AXPSearchDefinitionActionBuilder {\n private entityBuilder: AXPSearchDefinitionBuilder;\n\n constructor(entityBuilder: AXPSearchDefinitionBuilder) {\n this.entityBuilder = entityBuilder;\n }\n\n endAction(): AXPSearchDefinitionBuilder {\n return this.entityBuilder;\n }\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { AXPSearchDefinitionProviderContext } from './search-definition.builder';\nimport { AXPSearchDefinition } from './search.types';\n\n// Interface for setting providers\nexport interface AXPSearchDefinitionProvider {\n provide(context: AXPSearchDefinitionProviderContext): Promise<void>;\n}\n\n// Injection token for setting providers\nexport const AXP_SEARCH_DEFINITION_PROVIDER = new InjectionToken<AXPSearchDefinitionProvider[]>(\n 'AXP_SEARCH_DEFINITION_PROVIDER'\n);\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSearchDefinitionProviderService {\n private providers = inject(AXP_SEARCH_DEFINITION_PROVIDER, { optional: true });\n private cache: AXPSearchDefinition[] | null = null;\n\n private async load(): Promise<void> {\n if (this.cache) {\n return;\n }\n const context = new AXPSearchDefinitionProviderContext();\n \n // Load providers from DI tokens (backward compatibility)\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n await provider.provide(context);\n }\n }\n\n // Note: Search definition providers are different from search command providers\n // Search command providers are handled separately in search.service.ts\n \n this.cache = context.getDefinitions();\n }\n\n public async getListAsync(): Promise<AXPSearchDefinition[]> {\n await this.load();\n return this.getList();\n }\n\n public getList(): AXPSearchDefinition[] {\n if (!this.cache) {\n return [];\n } else {\n return this.cache;\n }\n }\n\n public findDefinition(definitionName: string): AXPSearchDefinition {\n const definition = this.getList().find((definition) => definition.name === definitionName);\n if (!definition) {\n throw new Error(`Definition with name ${definitionName} not found`);\n }\n return definition;\n }\n\n public findDefinitionByGroup(definitionGroup: string): AXPSearchDefinition {\n const definition = this.getList().find((definition) => definition.group === definitionGroup);\n if (!definition) {\n throw new Error(`Definition with group ${definitionGroup} not found`);\n }\n return definition;\n }\n}\n","import { AXPSearchResult } from './search.types';\n\n// Interface for setting providers\nexport interface AXPSearchProvider {\n search(text: string): Promise<AXPSearchResult[]>;\n}\n\nexport abstract class AXPSearchCommandProvider {\n abstract commands: AXPSearchResult[];\n\n async search(text: string): Promise<AXPSearchResult[]> {\n return this.commands.filter((command) => command.title!.toLowerCase().includes(text.toLowerCase()));\n }\n}\n","import { AXFormatService } from '@acorex/core/format';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\nimport { omit } from 'lodash-es';\nimport { AXPSearchDefinitionProviderService } from './search-definition.provider';\nimport { AXPSearchProvider, AXPSearchCommandProvider } from './search.provider';\nimport { AXPSearchDisplayGroupResult, AXPSearchDisplayResult } from './search.types';\nimport { AXTranslationService } from '@acorex/core/translation';\n\n// Injection token for setting providers\nexport const AXP_SEARCH_PROVIDER = new InjectionToken<AXPSearchProvider[]>('AXP_SEARCH_PROVIDER');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSearchService {\n private providers = inject(AXP_SEARCH_PROVIDER, { optional: true });\n private definitionService = inject(AXPSearchDefinitionProviderService);\n private formatService = inject(AXFormatService);\n private translationService = inject(AXTranslationService);\n\n async search(text: string): Promise<AXPSearchDisplayGroupResult[]> {\n //TODO better handle this\n if (this.definitionService.getList().length == 0) {\n await this.definitionService.getListAsync();\n }\n\n // Collect providers from DI tokens\n const allProviders: AXPSearchProvider[] = [];\n\n // Load from DI tokens\n if (Array.isArray(this.providers)) {\n allProviders.push(...this.providers);\n } else if (this.providers) {\n allProviders.push(this.providers);\n }\n\n if (allProviders.length === 0) {\n throw new Error('No search providers available');\n }\n\n const providersWithSearch = allProviders.filter(\n (provider): provider is AXPSearchProvider =>\n provider != null && typeof provider.search === 'function'\n );\n\n if (providersWithSearch.length === 0) {\n throw new Error('No search providers with a valid search method available');\n }\n\n const mergeData: AXPSearchDisplayResult[] = [];\n const promises = providersWithSearch.map((provider) => provider.search(text));\n const results = await Promise.all(promises);\n for (const resultArray of results) {\n for (const result of resultArray) {\n try {\n const definition = this.definitionService.findDefinition(result.group);\n\n mergeData.push({\n definitionName: definition.group,\n definitionTitle: definition.title,\n name: result.group,\n id: `${definition.name}:${this.formatService.format(definition.format.id, 'string', result)}`,\n title:\n result.title ??\n (definition.format.title\n ? this.formatService.format(definition.format.title, 'string', result.data)\n : 'Unknown'),\n description:\n result.description ??\n (definition.format.description\n ? this.formatService.format(definition.format.description, 'string', result.data)\n : undefined),\n icon: result.icon ?? definition.icon,\n data: result.data,\n command: result.command,\n actions: definition.actions,\n parent: result.parent,\n order: definition.order,\n });\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n // Group data\n const groupedData: AXPSearchDisplayGroupResult[] = [];\n const groupMap: { [key: string]: AXPSearchDisplayGroupResult } = {};\n\n // Create groups\n for (const item of mergeData) {\n const groupName = item.definitionName!; // Change this to the property you want to group by\n if (!groupMap[groupName]) {\n groupMap[groupName] = {\n name: groupName,\n title: item.definitionTitle!, // You can adjust the title logic if needed\n order: item.order, // Add order to the group\n children: [],\n };\n groupedData.push(groupMap[groupName]);\n }\n groupMap[groupName].children.push(omit(item, ['definitionName', 'definitionTitle', 'order']));\n }\n\n // Sort groups by order\n groupedData.sort((a, b) => a.order - b.order);\n\n return groupedData;\n }\n}\n","import type { AXPSearchResult } from './search.types';\n\n/**\n * Shared utility for creating Entity:Create command options used in search command providers.\n * Use with command: { name: 'Entity:Create', options: createEntityCommandOptions(...) }\n */\nexport function createEntityCommandOptions(\n entityKey: string,\n entityInfo: { name: string; module: string; title: string }\n): Record<string, unknown> {\n return {\n __context__: {\n entity: entityKey,\n entityInfo: {\n name: entityInfo.name,\n module: entityInfo.module,\n title: entityInfo.title,\n parentKey: undefined,\n source: entityKey,\n },\n data: {},\n options: {},\n },\n };\n}\n\n/**\n * Creates a search command for \"Create {Entity}\" with consistent i18n pattern.\n * Use titleKey/descriptionKey from module (e.g. @module:entity.permissions.create.title).\n * Standard: \"Create {Entity}\" for title, \"Create new {entities}\" for description.\n */\nexport function createEntitySearchCommand(config: {\n id: string;\n entityKey: string;\n entityInfo: { name: string; module: string; title: string };\n titleKey: string;\n descriptionKey?: string;\n icon: string;\n}): AXPSearchResult {\n return {\n id: config.id,\n group: 'command',\n title: config.titleKey,\n description: config.descriptionKey ?? config.titleKey,\n icon: config.icon,\n command: {\n name: 'Entity:Create',\n options: createEntityCommandOptions(config.entityKey, config.entityInfo),\n },\n };\n}\n","export enum AXPCommonSettings {\n EnableOperationToasts = 'Common:Setting:Notifications.EnableOperationToasts',\n EntityFilterApplyMode = 'Common:Setting:Entity.FilterApplyMode',\n ShowCategoryColumnsByDefault = 'Common:Setting:Entity.ShowCategoryColumnsByDefault',\n ApplyLayoutOrdering = 'Common:Setting:Entity.ApplyLayoutOrdering',\n RedirectToDetailsAfterCreate = 'Common:Setting:Entity.RedirectToDetailsAfterCreate',\n ShowPageBadge = 'Common:Setting:Entity.ShowPageBadge',\n DebugMode = 'PlatformDevTools:Setting:Developer.DebugMode',\n}\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWorkflowAction, AXPWorkflowContext, createWorkFlowEvent } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AXPCommonSettings } from '../configs/common-settings.key';\nimport { AXPSettingsService } from '../settings';\n\n//TODO Loading, Redirect, Drawer, Show toast\n\nexport const AXPRedirectEvent = createWorkFlowEvent<{ url: string }>('Redirect Event Fired');\nexport const AXPRefreshEvent = createWorkFlowEvent<{ entity: string; meta?: any }>('Refresh Event Fired');\nexport const AXPReloadEvent = createWorkFlowEvent<{ entity: string; meta?: any }>('Reload Event Fired');\n\n@Injectable()\nexport class AXPWorkflowNavigateAction extends AXPWorkflowAction {\n private router = inject(Router);\n async execute(context: AXPWorkflowContext): Promise<void> {\n const payload = context.getVariable('payload');\n if (Array.isArray(payload.commands)) {\n this.router.navigate(payload.commands, payload.extras);\n } else {\n if (payload.commands.toLowerCase().startsWith('http') || payload.target == 'blank') {\n window.open(payload.commands, '_blank');\n } else this.router.navigate([payload.commands], payload.extras);\n }\n }\n}\n\n@Injectable()\nexport class AXPDialogConfirmAction extends AXPWorkflowAction {\n private dialogService = inject(AXDialogService);\n private translationService = inject(AXTranslationService);\n\n title!: string;\n message!: string;\n type!: AXStyleColorType;\n\n defaultAction = 'cancel';\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n console.log('AXPDialogConfirmAction', this.title, this.message, this.type);\n context.setOutput('result', false);\n const dialogResult = await this.dialogService.confirm(\n await this.translationService.translateAsync(this.title),\n await this.translationService.translateAsync(this.message),\n (await this.translationService.translateAsync(this.type)) as AXStyleColorType,\n 'horizontal',\n false,\n 'cancel',\n );\n context.setOutput('result', dialogResult.result);\n }\n}\n\n@Injectable()\nexport class AXPToastAction extends AXPWorkflowAction {\n private toastService = inject(AXToastService);\n private translationService = inject(AXTranslationService);\n private settingsService = inject(AXPSettingsService);\n\n color!: AXStyleColorType;\n title!: string;\n content!: string;\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const showResult = await this.settingsService.get(AXPCommonSettings.EnableOperationToasts);\n\n if (showResult) {\n this.toastService.show({\n color: this.color,\n title: await this.translationService.translateAsync(this.title),\n content: await this.translationService.translateAsync(this.content),\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n }\n}\n\n@Injectable()\nexport class AXPReloadAction extends AXPWorkflowAction {\n async execute(context: AXPWorkflowContext): Promise<void> {\n this.dispatch(AXPReloadEvent({ entity: context.getVariable('entity'), meta: context.getVariable<any>('meta') }));\n }\n}\n","import { AXPNavigateActionCommand } from '@acorex/platform/core';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Injectable()\nexport class AXPWorkflowRouterNavigateAction extends AXPWorkflowAction {\n private router = inject(Router);\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const command = context.getVariable<AXPNavigateActionCommand<'router'>>();\n const path = command.options.path;\n\n if (path?.toLowerCase()?.startsWith('http') || command.options?.extras?.target === 'blank') {\n window.open(path, '_blank');\n } else {\n const [basePathAndFragment, queryString] = path.split('?');\n const [basePath, fragment] = basePathAndFragment.split('#'); // Extract fragment if present\n const queryParams = this.parseQueryParams(queryString);\n\n this.router.navigate([basePath], {\n ...command.options.extras,\n queryParams, // Pass query parameters separately\n fragment, // Pass fragment explicitly\n });\n }\n }\n\n /**\n * Parses query parameters from a query string into an object.\n */\n private parseQueryParams(queryString: string | undefined): Record<string, string> | undefined {\n if (!queryString) return undefined;\n\n return queryString\n .split('&')\n .map((pair) => pair.split('='))\n .reduce((params, [key, value]) => {\n params[decodeURIComponent(key)] = decodeURIComponent(value);\n return params;\n }, {} as Record<string, string>);\n }\n}\n\nexport const AXPNavigateWorkflow: AXPWorkflow = {\n startStepId: 'start',\n steps: {\n start: {\n action: 'navigate-router',\n },\n },\n};\n","import { Injectable, NgZone, inject, isDevMode } from \"@angular/core\";\nimport { AXDialogService } from \"@acorex/components/dialog\";\nimport { AXPWorkflowError } from \"@acorex/platform/workflow\";\nimport { AXPErrorHandler } from \"../errors\";\n\n@Injectable()\nexport class AXMWorkflowErrorHandler implements AXPErrorHandler {\n private dialog = inject(AXDialogService);\n\n\n handleError(error: any, next: (error: any) => void): void {\n if (error instanceof AXPWorkflowError) {\n this.dialog.alert(\"Somthing is wrong!\", error.inner ? error.inner.message : error.message, 'danger');\n next(error);\n } else {\n next(error);\n }\n }\n}","import { AXPopupModule } from '@acorex/components/popup';\nimport { AXToastModule } from '@acorex/components/toast';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport {\n AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n AXPAppStartUpProvider,\n AXPModuleManifestModule,\n} from '@acorex/platform/core';\n\nimport { AXPWorkflowModule } from '@acorex/platform/workflow';\nimport { ErrorHandler, inject, Inject, Injector, ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport {\n AXPCustomOperatorService,\n AXPCustomOperatorServiceImpl,\n AXPFilterOperatorMiddlewareService,\n AXPFilterOperatorMiddlewareServiceImpl,\n} from './data';\nimport { AXPErrorHandler, AXPErrorHandlerRegistryService, AXPGlobalErrorHandler } from './errors';\nimport { AXPTokenEvaluatorScopeProvider } from './tokens';\nimport { AXPMenuSearchDefinitionProvider } from './layout';\nimport { AXPMenuSearchProvider } from './layout/menu/search.provider';\nimport { AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from './search';\nimport { AXP_SETTING_DEFINITION_PROVIDER, AXPSettingsEvaluatorScopeProvider } from './settings';\nimport {\n AXPDialogConfirmAction,\n AXPNavigateWorkflow,\n AXPReloadAction,\n AXPToastAction,\n AXPWorkflowRouterNavigateAction,\n} from './workflows';\n\nexport interface AXPCommonModuleConfigs {\n errorHandlers: (new () => AXPErrorHandler)[];\n}\n\n@NgModule({\n imports: [\n AXPWorkflowModule.forChild({\n actions: {\n 'navigate-router': AXPWorkflowRouterNavigateAction,\n 'show-prompt-dialog': AXPDialogConfirmAction,\n 'show-toast': AXPToastAction,\n reload: AXPReloadAction,\n },\n workflows: {\n navigate: AXPNavigateWorkflow,\n },\n }),\n AXPopupModule,\n AXDateTimeModule,\n AXToastModule,\n AXPModuleManifestModule,\n ],\n exports: [RouterModule],\n providers: [\n AXPAppStartUpProvider,\n {\n provide: ErrorHandler,\n useClass: AXPGlobalErrorHandler,\n },\n {\n provide: AXPCustomOperatorService,\n useClass: AXPCustomOperatorServiceImpl,\n },\n {\n provide: AXPFilterOperatorMiddlewareService,\n useClass: AXPFilterOperatorMiddlewareServiceImpl,\n },\n\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXPMenuSearchProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_DEFINITION_PROVIDER,\n useClass: AXPMenuSearchDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXPTokenEvaluatorScopeProvider,\n multi: true,\n },\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXPSettingsEvaluatorScopeProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useFactory: async () => {\n const injector = inject(Injector);\n const provider = (await import('./configs/common-settings.provider')).AXPCommonSettingProvider;\n return new provider(injector);\n },\n multi: true,\n },\n ],\n})\nexport class AXPCommonModule {\n static forRoot(configs?: AXPCommonModuleConfigs): ModuleWithProviders<AXPCommonModule> {\n return {\n ngModule: AXPCommonModule,\n providers: [\n ...(configs?.errorHandlers || []),\n {\n provide: 'AXPCommonModuleFactory',\n useFactory: (registry: AXPErrorHandlerRegistryService) => () => {\n registry.register(...(configs?.errorHandlers || []));\n },\n deps: [AXPErrorHandlerRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n static forChild(configs?: AXPCommonModuleConfigs): ModuleWithProviders<AXPCommonModule> {\n return {\n ngModule: AXPCommonModule,\n providers: [\n ...(configs?.errorHandlers || []),\n {\n provide: 'AXPCommonModuleFactory',\n useFactory: (registry: AXPErrorHandlerRegistryService) => () => {\n registry.register(...(configs?.errorHandlers || []));\n },\n deps: [AXPErrorHandlerRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n /**\n * @ignore\n */\n constructor(\n @Inject('AXPCommonModuleFactory') instances: any[],\n ) {\n instances.forEach((f) => {\n f();\n });\n }\n}\n","import { AXPLogoConfig } from '@acorex/platform/core';\nimport { InjectionToken } from '@angular/core';\nimport { merge } from 'lodash-es';\n\nexport const ENVIRONMENT = new InjectionToken<any>('ENVIRONMENT');\n\nexport const AXP_PLATFORM_CONFIG_TOKEN = new InjectionToken<AXPPlatformConfigs>('AXP_PLATFORM_CONFIG_TOKEN', {\n providedIn: 'root',\n factory: () => {\n return AXPPlatformDefaultConfigs;\n },\n});\n\nexport interface AXPPlatformConfigs {\n title?: string;\n copyright?: string;\n logo?: {\n icon: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n text: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n full: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n };\n network?: {\n timeOut?: number;\n };\n}\n\nexport const AXPPlatformDefaultConfigs: AXPPlatformConfigs = {\n copyright: 'ACoreX @ 2024',\n title: 'ACoreX Platform',\n\n network: {\n timeOut: 5000,\n },\n};\n\nexport function configPlatform(config: Partial<AXPPlatformConfigs> = AXPPlatformDefaultConfigs): AXPPlatformConfigs {\n return merge(AXPPlatformDefaultConfigs, config);\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const AXP_ROOT_CONFIG_TOKEN = new InjectionToken<AXPRootConfigs>('AXP_ROOT_CONFIG_TOKEN');\n\nexport interface AXPRootConfigs {\n baseUrl: string;\n}","import { Injectable } from \"@angular/core\";\nimport { AXPFileStorageCreateRequest, AXPFileStorageInfo, AXPFileStorageUpdateRequest, AXPFileStorageFindRequest, AXPFileManyStorageInfo } from \"./file-storage.types\";\n\n\n@Injectable()\nexport abstract class AXPFileStorageService {\n\n abstract save(request: AXPFileStorageCreateRequest): Promise<AXPFileStorageInfo>;\n\n abstract update(request: AXPFileStorageUpdateRequest): Promise<AXPFileStorageInfo>;\n\n abstract find(request: AXPFileStorageFindRequest): Promise<AXPFileStorageInfo[]>;\n\n abstract findMany(ids : string[]): Promise<AXPFileManyStorageInfo[]>;\n\n abstract getInfo(fileId: string): Promise<AXPFileStorageInfo>;\n\n abstract remove(fileId: string): Promise<void>;\n\n abstract commit(fileId: string): Promise<void>;\n\n abstract markForDeletion(fileId: string): Promise<void>;\n}\n","import { AXPMetaData } from '@acorex/platform/core';\n\nexport enum AXPFileStorageStatus {\n Temporary = 'temporary', // File is not yet associated with a parent entity\n Committed = 'committed', // File is fully associated and in use\n PendingDeletion = 'pendingDeletion', // File is marked for deletion but not yet removed\n Archived = 'archived', // File is archived and no longer actively used\n Error = 'error', // File encountered an error during processing\n}\n\n/**\n * Interface representing a file storage request in the Acorex platform.\n */\nexport interface AXPFileStorageCreateRequest {\n /**\n * The file to be stored.\n */\n file: File;\n\n /**\n * The name of the file.\n */\n name?: string;\n\n /**\n * The unique identifier of referenced entity.\n */\n refId: string;\n /**\n * The type of the referenced entity.\n */\n refType: string;\n /**\n * The category of the file. profile-picture, company-logo, policy, document, etc.\n */\n category: string;\n /**\n * The folder path where the file should be stored.\n * If null, the service will resolve the path based on metadata, user, tenant, or default rules.\n */\n path?: string;\n /**\n * Metadata associated with the file.\n */\n metadata?: AXPMetaData;\n\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n\n /**\n * Indicates the status of the file.\n */\n status?: AXPFileStorageStatus;\n}\n\nexport interface AXPFileStorageUpdateRequest {\n /**\n * The unique identifier for the stored file.\n */\n fileId: string;\n /**\n * The folder path where the file should be stored.\n * If null, the service will resolve the path based on metadata, user, tenant, or default rules.\n */\n path?: string;\n /**\n * The name of the file.\n */\n name?: string;\n /**\n * Metadata associated with the file.\n */\n metadata: AXPMetaData;\n\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n}\n\n/**\n * Represents information about a file stored in the AXP file storage system.\n */\nexport interface AXPFileStorageInfo {\n /**\n * The unique identifier for the stored file.\n */\n id?: string;\n /**\n * The unique identifier for the stored file.\n */\n fileId: string;\n\n /**\n * The unique identifier of referenced entity.\n */\n refId: string;\n /**\n * The type of the referenced entity.\n */\n refType: string;\n /**\n * The category of the file. profile-picture, company-logo, policy, document, etc.\n */\n category: string;\n\n /**\n * The URL where the file can be accessed.\n */\n url?: string;\n\n /**\n * The size of the file in bytes.\n */\n size: number;\n\n /**\n * The name of the file.\n */\n name?: string;\n\n /**\n * The MIME type of the file.\n */\n mimeType: string;\n\n /**\n * The date and time when the file was uploaded.\n */\n uploadedAt: Date;\n\n /**\n * Indicates whether the file is public or private.\n */\n isPublic: boolean;\n\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n\n status: AXPFileStorageStatus; // Updated to use enum\n\n binary: File;\n}\n\nexport interface AXPFileManyStorageInfo {\n /**\n * The unique identifier for the stored file.\n */\n id?: string;\n /**\n * The unique identifier for the stored file.\n */\n fileId: string;\n /**\n * The unique identifier of referenced entity.\n */\n refId: string;\n /**\n * The type of the referenced entity.\n */\n refType: string;\n /**\n * The size of the file in bytes.\n */\n size: number;\n\n /**\n * The name of the file.\n */\n name?: string;\n\n /**\n * The URL where the file can be accessed.\n */\n url?: string;\n\n /**\n * Optional title (e.g. for display in file list).\n */\n title?: string;\n\n /**\n * Optional description (e.g. for display in file list).\n */\n description?: string;\n}\n\nexport interface AXPFileStorageInfo {\n /**\n * The unique identifier for the stored file.\n */\n id?: string;\n /**\n * The unique identifier for the stored file.\n */\n fileId: string;\n\n /**\n * The unique identifier of referenced entity.\n */\n refId: string;\n /**\n * The type of the referenced entity.\n */\n refType: string;\n /**\n * The category of the file. profile-picture, company-logo, policy, document, etc.\n */\n category: string;\n\n /**\n * The URL where the file can be accessed.\n */\n url?: string;\n\n /**\n * The size of the file in bytes.\n */\n size: number;\n\n /**\n * The name of the file.\n */\n name?: string;\n\n /**\n * The MIME type of the file.\n */\n mimeType: string;\n\n /**\n * The date and time when the file was uploaded.\n */\n uploadedAt: Date;\n\n /**\n * Indicates whether the file is public or private.\n */\n isPublic: boolean;\n\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n\n status: AXPFileStorageStatus; // Updated to use enum\n\n binary: File;\n}\n\n/**\n * Represents information about a file stored in the AXP file storage system.\n */\nexport interface AXPFileStorageFindRequest {\n /**\n * The unique identifier of referenced entity.\n */\n refId?: string;\n /**\n * The type of the referenced entity.\n */\n refType?: string;\n /**\n * The category of the file. profile-picture, company-logo, policy, document, etc.\n */\n category?: string;\n /**\n * The MIME type of the file.\n */\n mimeType?: string;\n /**\n * Indicates whether the file is public or private.\n */\n isPublic?: boolean;\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n /**\n * The date and time range when the file was uploaded.\n */\n uploadedAtRange?: { from: Date; to: Date };\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXCFileUploaderActionsPayload } from './file-actions.types';\n\n//#region ---- Provider Interface ----\n\n/**\n * Type for file action provider token (supports both direct and async providers).\n */\nexport type AXPFileActionProviderToken =\n | AXPFileActionProvider\n | Promise<AXPFileActionProvider>;\n\n/**\n * File action provider interface.\n * Providers can add actions to the file uploader widget.\n */\nexport interface AXPFileActionProvider {\n /**\n * Unique key identifying this provider.\n * Should match the webhook key for backward compatibility: 'file-uploader.actions'\n */\n key: string;\n\n /**\n * Execute the provider to add actions.\n * @param payload The payload containing capabilities and current actions.\n * @returns The modified payload with new actions added.\n */\n execute(payload: AXCFileUploaderActionsPayload): Promise<AXCFileUploaderActionsPayload> | AXCFileUploaderActionsPayload;\n\n /**\n * Priority for execution order (lower numbers execute first).\n * Defaults to 0 if not specified.\n */\n priority?: number;\n}\n\n//#endregion\n\n//#region ---- Injection Token ----\n\n/**\n * Multi-provider injection token for file action providers.\n * Modules can provide multiple implementations using this token.\n */\nexport const AXP_FILE_ACTION_PROVIDER = new InjectionToken<AXPFileActionProviderToken[]>(\n 'AXP_FILE_ACTION_PROVIDER',\n);\n\n//#endregion\n","import { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\nimport { AXPHookService } from '@acorex/platform/core';\nimport { AXP_FILE_ACTION_PROVIDER, AXPFileActionProvider } from './file-actions.provider';\nimport { AXCFileUploaderAction, AXCFileUploaderActionsPayload } from './file-actions.types';\n\n//#region ---- Service ----\n\n/**\n * Service for managing file uploader actions.\n * Aggregates actions from multiple providers and filters them based on plugin configuration.\n * Wraps the hook system for backward compatibility.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPFileActionsService {\n //#region ---- Dependencies ----\n\n private readonly actionProviders = inject(AXP_FILE_ACTION_PROVIDER, { optional: true }) || [];\n private readonly hookService = inject(AXPHookService);\n private readonly injector = inject(Injector);\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get all actions from providers, filtered based on plugin configuration.\n * Wraps the hook system for backward compatibility.\n * @param payload Initial payload with capabilities and plugin configuration.\n * @returns Filtered list of actions.\n */\n async getActions(payload: AXCFileUploaderActionsPayload): Promise<AXCFileUploaderAction[]> {\n // First, run hook system for backward compatibility\n // Note: Hook system may still use old format with 'host', but we pass capabilities\n // Hook providers that need host will need to be migrated to use capabilities\n let hookPayload: any;\n try {\n hookPayload = await this.hookService.runAsync('file-uploader.actions', {\n ...payload,\n // For backward compatibility, hooks might expect 'host' but we're using capabilities\n // Old hook providers will need to be migrated\n });\n } catch (err) {\n // If hook fails, continue with new system\n console.warn('[AXPFileActionsService] Hook system failed, continuing with providers only', err);\n }\n\n // Merge hook actions into payload (if any)\n const mergedPayload: AXCFileUploaderActionsPayload = {\n ...payload,\n actions: hookPayload?.actions ?? payload.actions ?? [],\n };\n\n // Resolve all providers (handle both direct and Promise<provider>)\n const providers = await this.resolveProviders();\n\n // Filter providers by key\n const matchingProviders = providers\n .filter((p) => p.key === 'file-uploader.actions')\n .sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // Execute providers sequentially (waterfall pattern)\n let currentPayload = { ...mergedPayload, actions: [...mergedPayload.actions] };\n for (const provider of matchingProviders) {\n try {\n currentPayload = await Promise.resolve(\n runInInjectionContext(this.injector, () => provider.execute(currentPayload)),\n );\n } catch (err) {\n console.error(`[AXPFileActionsService] Provider '${provider.key}' failed`, err);\n }\n }\n\n // Filter actions based on plugin configuration\n return this.filterActions(currentPayload.actions, payload.plugins, payload.excludePlugins);\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Resolve all providers (handle both direct providers and Promise<provider>).\n */\n private async resolveProviders(): Promise<AXPFileActionProvider[]> {\n return Promise.all(\n this.actionProviders.map((p) => (p instanceof Promise ? p : Promise.resolve(p))),\n );\n }\n\n /**\n * Filter actions based on enabled plugins and exclude list.\n */\n private filterActions(\n actions: AXCFileUploaderAction[],\n enabledPlugins: { name: string; options?: unknown }[],\n excludePlugins: string[],\n ): AXCFileUploaderAction[] {\n const enabledPluginNames = enabledPlugins?.map((p) => p.name) ?? [];\n const excludedPluginNames = excludePlugins ?? [];\n\n return actions.filter((action) => {\n // Exclude if in exclude list\n if (excludedPluginNames.includes(action.plugin)) {\n return false;\n }\n\n // Include if global\n if (action.global === true) {\n return true;\n }\n\n // Include if plugin is explicitly enabled\n if (enabledPluginNames.length > 0 && enabledPluginNames.includes(action.plugin)) {\n return true;\n }\n\n // If no plugins are enabled, only show global actions\n if (enabledPluginNames.length === 0) {\n return !!action.global;\n }\n\n return false;\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPFileListItem } from '@acorex/platform/core';\n\n//#region ---- File Uploader Capabilities ----\n\n/**\n * Capabilities API provided to file action providers.\n * These methods allow actions to interact with the file uploader widget.\n */\nexport interface AXCFileUploaderCapabilities {\n /**\n * Get all current files in the uploader.\n */\n getFiles: () => AXPFileListItem[];\n\n /**\n * Replace all files in the uploader.\n */\n setFiles: (files: AXPFileListItem[]) => void;\n\n /**\n * Add new files to the uploader.\n */\n addFiles: (files: AXPFileListItem[]) => void;\n\n /**\n * Update files matching a predicate.\n */\n updateFile: (\n predicate: (f: AXPFileListItem) => boolean,\n updater: (f: AXPFileListItem) => AXPFileListItem,\n ) => void;\n\n /**\n * Remove a file from the uploader.\n */\n removeFile: (file: AXPFileListItem) => void;\n\n /**\n * Clear all files from the uploader.\n */\n clear: () => void;\n\n /**\n * Get a file by its ID.\n */\n getFileById: (id: string) => AXPFileListItem | undefined;\n\n /**\n * Update a file by its ID.\n */\n updateFileById: (id: string, next: Partial<AXPFileListItem>) => void;\n}\n\n//#endregion\n\n//#region ---- File Uploader Action ----\n\n/**\n * A file uploader action that can be added by providers.\n */\nexport interface AXCFileUploaderAction {\n /**\n * Unique identifier for the action/plugin.\n */\n plugin: string;\n\n /**\n * Whether this action is global (available even if plugin is not explicitly enabled).\n */\n global?: boolean;\n\n /**\n * Display text for the action (optional if textKey is provided).\n */\n text?: string;\n\n /**\n * Translation key for the action text (optional if text is provided).\n */\n textKey?: string;\n\n /**\n * Icon class for the action (e.g., 'fa-light fa-file-arrow-up').\n */\n icon?: string;\n\n /**\n * Action execution handler.\n * Receives capabilities to interact with the file uploader.\n * @param capabilities The capabilities API for file operations.\n */\n run: (capabilities: AXCFileUploaderCapabilities) => void | Promise<void>;\n}\n\n//#endregion\n\n//#region ---- File Uploader Actions Payload ----\n\n/**\n * Payload passed to file action providers.\n */\nexport interface AXCFileUploaderActionsPayload {\n /**\n * Enabled plugins configuration.\n */\n plugins: { name: string; options?: unknown }[];\n\n /**\n * List of plugin names to exclude.\n */\n excludePlugins: string[];\n\n /**\n * Capabilities API for interacting with the file uploader.\n */\n capabilities: AXCFileUploaderCapabilities;\n\n /**\n * Current list of actions (providers can add to this array).\n */\n actions: AXCFileUploaderAction[];\n\n /**\n * Widget options (optional, for accessing widget-specific settings).\n */\n options?: {\n /**\n * Whether multiple files are allowed.\n */\n multiple?: boolean;\n\n /**\n * Accepted file types (e.g., '.jpg,.png' or 'image/*').\n */\n accept?: string;\n };\n}\n\n//#endregion\n","import { inject } from '@angular/core';\nimport { AXPDataGenerator, AXPFileListItem } from '@acorex/platform/core';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXPFileActionProvider } from './file-actions.provider';\nimport { AXCFileUploaderActionsPayload, AXCFileUploaderCapabilities } from './file-actions.types';\n\nexport const UploadFromComputerActionProvider: AXPFileActionProvider = {\n key: 'file-uploader.actions',\n priority: 1, // Higher priority than upload-from-drive to show first\n execute: (payload: AXCFileUploaderActionsPayload): AXCFileUploaderActionsPayload => {\n const fileService = inject(AXFileService);\n\n // Capture widget options for use in the action\n const widgetOptions = payload.options;\n\n payload.actions = [\n ...payload.actions,\n {\n plugin: 'upload-from-computer',\n global: true,\n textKey: '@document-management:actions.upload-from-device',\n icon: 'fa-light fa-file-arrow-up',\n run: async (capabilities: AXCFileUploaderCapabilities) => {\n // Open file picker with widget options\n const files = await fileService.choose({\n multiple: widgetOptions?.multiple ?? true,\n accept: widgetOptions?.accept,\n });\n\n // If no files are selected, return\n if (files.length === 0) {\n return;\n }\n\n // Create file list items from selected files\n const fileItems = files.map(\n (file) =>\n ({\n id: AXPDataGenerator.uuid(),\n name: file.name,\n size: file.size,\n status: 'attached',\n source: {\n kind: 'blob',\n value: file,\n },\n }) as AXPFileListItem,\n );\n\n // Add files using capabilities\n capabilities.addFiles(fileItems);\n },\n },\n ];\n\n return payload;\n },\n};\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { AXPFileType } from './file-type.types';\n\nexport interface AXPFileTypeInfoProvider {\n items(): Promise<AXPFileType[]>;\n}\n\nexport const AXP_FILE_TYPE_INFO_PROVIDER = new InjectionToken<AXPFileTypeInfoProvider[]>('AXP_FILE_TYPE_INFO_PROVIDER');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPFileTypeProviderService implements AXPFileTypeInfoProvider {\n private providers = inject(AXP_FILE_TYPE_INFO_PROVIDER, { optional: true });\n\n async items(): Promise<AXPFileType[]> {\n const items: AXPFileType[] = [];\n\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n items.push(...(await provider.items()));\n }\n }\n return items;\n }\n\n async get(name: string): Promise<AXPFileType | undefined> {\n return (await this.items()).find((c) => c.name == name);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport {AXPLockGetInfoRequest, AXPLockInfo, AXPLockRequest, AXPUnLockRequest } from \"./lock.types\";\n\n@Injectable()\nexport abstract class AXPLockService {\n\n abstract lock(request: AXPLockRequest): Promise<AXPLockInfo>;\n\n abstract unlock(request: AXPUnLockRequest): Promise<void>;\n\n abstract check(request: AXPLockGetInfoRequest): Promise<boolean>;\n\n abstract getInfo(request: AXPLockGetInfoRequest): Promise<AXPLockInfo>;\n}\n","/**\n * Status Definition Types\n * Defines the structure for status definitions and their transitions\n */\n\n//#region ---- Status Definition Contracts ----\n\n/**\n * Status definition with metadata\n */\nexport interface AXPStatusDefinition {\n /**\n * Unique identifier for the status\n */\n name: string;\n\n /**\n * Display title for the status\n */\n title: string;\n\n /**\n * Color code or semantic color name for the status\n */\n color: string;\n\n /**\n * Optional icon class (e.g., 'fa-light fa-check')\n */\n icon?: string;\n\n /**\n * Optional description\n */\n description?: string;\n\n /**\n * Optional order for sorting\n */\n order?: number;\n\n /**\n * Whether this is a final status (end state)\n */\n isFinal?: boolean;\n\n /**\n * Whether this is an initial status (starting state)\n */\n isInitial?: boolean;\n\n /**\n * Whether list views should be automatically generated for this status\n */\n generateView?: boolean;\n}\n\n/**\n * Status transition definition\n */\nexport interface AXPStatusTransition {\n /**\n * Source status name\n */\n from: string;\n\n /**\n * Target status name\n */\n to: string;\n\n /**\n * Optional condition expression to evaluate before allowing transition\n * Uses expression evaluator syntax (e.g., \"{{user.isAdmin}}\", \"{{item.priority > 5}}\")\n */\n condition?: string;\n\n /**\n * Optional display title for the transition\n */\n title?: string;\n\n /**\n * Optional description\n */\n description?: string;\n\n /**\n * Optional command descriptor to execute for this transition\n * If not provided, defaults to Entity:UpdateStatus with entity, id, and status\n */\n command?: {\n name: string;\n options?: Record<string, unknown>;\n };\n\n /**\n * Whether this transition is automatic (no user action required)\n */\n isAutomatic?: boolean;\n\n /**\n * Whether this transition requires approval\n */\n requiresApproval?: boolean;\n}\n\n/**\n * Abstract class for status providers\n * Similar to AXPTaskBadgeProvider pattern\n */\nexport abstract class AXPStatusProvider {\n /**\n * Unique key for the status (e.g., 'task-management.status')\n */\n abstract readonly key: string;\n\n /**\n * List of available status definitions\n */\n abstract readonly statuses: AXPStatusDefinition[];\n\n /**\n * List of allowed transitions between statuses\n */\n abstract readonly transitions: AXPStatusTransition[];\n\n /**\n * Optional default status name\n */\n abstract readonly defaultStatus?: string;\n}\n\n//#endregion\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { AXPStatusProvider, AXPStatusTransition } from './status-definition.types';\nimport { AXPCommandService } from '@acorex/platform/runtime';\n\n//#region ---- Injection Token ----\n\n/**\n * Injection token for status providers\n * Use with multi: true to register multiple providers\n */\nexport const AXP_STATUS_PROVIDERS = new InjectionToken<AXPStatusProvider[]>('AXP_STATUS_PROVIDERS');\n\n//#endregion\n\n//#region ---- Provider Service ----\n\n/**\n * Service for managing status definitions from multiple providers\n * Similar to AXPTaskBadgeService pattern - no cache, direct access\n * \n * @example\n * ```typescript\n * // In a module providers array:\n * {\n * provide: AXP_STATUS_PROVIDERS,\n * useClass: TaskStatusProvider,\n * multi: true,\n * }\n * \n * // Example provider implementation:\n * export class TaskStatusProvider extends AXPStatusProvider {\n * readonly key = 'task-management.status';\n * readonly statuses = [\n * { name: 'todo', title: 'To Do', color: '#6b7280', icon: 'fa-light fa-circle', isInitial: true },\n * { name: 'in-progress', title: 'In Progress', color: '#3b82f6', icon: 'fa-light fa-play' },\n * { name: 'done', title: 'Done', color: '#10b981', icon: 'fa-light fa-check-circle', isFinal: true },\n * ];\n * readonly transitions = [\n * { from: 'todo', to: 'in-progress', title: 'Start', condition: '{{user.canEdit}}' },\n * { from: 'in-progress', to: 'done', title: 'Complete' },\n * ];\n * readonly defaultStatus = 'todo';\n * }\n * \n * // Later, get the status:\n * const status = await statusService.getStatus('task-management.status');\n * if (status) {\n * console.log('Statuses:', status.statuses);\n * console.log('Transitions:', status.transitions);\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPStatusDefinitionProviderService {\n //#region ---- Dependencies ----\n\n private providers: AXPStatusProvider[] = inject(AXP_STATUS_PROVIDERS, { optional: true }) ?? [];\n private commandService = inject(AXPCommandService);\n\n //#endregion\n\n //#region ---- State ----\n\n private statusMap = new Map<string, AXPStatusProvider>();\n private initializationPromise: Promise<void> | null = null;\n private isInitialized = false;\n\n //#endregion\n\n //#region ---- Initialization ----\n\n /**\n * Initialize providers (resolve promises if needed)\n * Called lazily on first access\n */\n private async initialize(): Promise<void> {\n if (this.isInitialized) {\n return;\n }\n\n if (this.initializationPromise) {\n return this.initializationPromise;\n }\n\n this.initializationPromise = this._doInitialize();\n await this.initializationPromise;\n }\n\n private async _doInitialize(): Promise<void> {\n // Register all providers, resolving promises if needed\n for (const provider of this.providers) {\n let resolvedProvider: AXPStatusProvider;\n\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n resolvedProvider = await provider;\n } else {\n // If provider is a direct instance, use it directly\n resolvedProvider = provider;\n }\n\n if (this.statusMap.has(resolvedProvider.key)) {\n console.warn(`Status with key \"${resolvedProvider.key}\" already exists. Overwriting with new status.`);\n }\n\n this.statusMap.set(resolvedProvider.key, resolvedProvider);\n }\n\n this.isInitialized = true;\n }\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get a status provider by key\n * Ensures initialization is complete before accessing the status map.\n * \n * @param key - Status key (e.g., 'task-management.status')\n * @returns Promise that resolves to status provider with all statuses and transitions, or undefined if not found\n * \n * @example\n * ```typescript\n * const status = await statusService.getStatus('task-management.status');\n * if (status) {\n * console.log('Statuses:', status.statuses);\n * console.log('Transitions:', status.transitions);\n * }\n * ```\n */\n public async getStatus(key: string): Promise<AXPStatusProvider | undefined> {\n await this.initialize();\n return this.statusMap.get(key);\n }\n\n /**\n * Execute a status transition workflow action\n * Uses transition.command if provided, otherwise defaults to Entity:UpdateStatus\n * Validates the transition is allowed before executing\n * \n * @param definitionKey - Status definition key\n * @param transition - The transition to execute\n * @param context - Context data for the command (must include entity name and id/ids)\n * @returns Promise that resolves when the command execution completes\n * \n * @example\n * ```typescript\n * await statusService.executeTransition(\n * 'task-management.status',\n * { from: 'todo', to: 'in-progress' },\n * { entity: 'TaskManagement.Task', id: '123', ...entityData }\n * );\n * ```\n */\n public async executeTransition(\n definitionKey: string,\n transition: AXPStatusTransition,\n context: Record<string, any>\n ): Promise<void> {\n await this.initialize();\n const provider = this.statusMap.get(definitionKey);\n if (!provider) {\n throw new Error(`Status provider with key \"${definitionKey}\" not found.`);\n }\n\n // Validate transition is allowed\n if (!this.isValidTransition(provider, transition.from, transition.to)) {\n throw new Error(`Invalid transition from \"${transition.from}\" to \"${transition.to}\"`);\n }\n\n // Determine which command to use\n let commandName: string;\n let commandOptions: Record<string, unknown>;\n\n if (transition.command) {\n // Use transition's explicit command\n commandName = transition.command.name;\n commandOptions = {\n ...(transition.command.options ?? {}),\n ...context,\n };\n } else {\n // Use default Entity:UpdateStatus command\n const entity = context['entityName'] ?? context['__meta__']?.config?.name;\n if (!entity) {\n throw new Error('Entity name is required in context when using default status update command');\n }\n\n const id = context['id'];\n const ids = context['ids'];\n\n if (!id && !ids) {\n throw new Error('Either id or ids must be provided in context');\n }\n\n commandName = 'Entity:UpdateStatus';\n commandOptions = {\n entity,\n status: transition.to,\n statusField: context['statusField'] ?? 'statusId',\n ...(id ? { id } : {}),\n ...(ids ? { ids } : {}),\n };\n }\n\n // Execute the command\n const result = await this.commandService.execute(commandName, commandOptions);\n\n if (!result?.success) {\n throw new Error(result?.message?.text || 'Failed to execute status transition command');\n }\n }\n\n /**\n * Validate if a transition is allowed\n * Checks if the transition exists in the provider's transitions list\n */\n private isValidTransition(\n provider: AXPStatusProvider,\n from: string,\n to: string\n ): boolean {\n return provider.transitions.some(\n (transition) => transition.from === from && transition.to === to\n );\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXPStatusDefinition } from './status-definition.types';\n\n/**\n * Standard system status types\n * These are the predefined status values used across the platform\n */\nexport enum AXPSystemStatusType {\n Todo = 'todo',\n InProgress = 'in-progress',\n InReview = 'in-review',\n Open = 'open',\n Closed = 'closed',\n Blocked = 'blocked',\n Done = 'done',\n Cancelled = 'cancelled',\n Draft = 'draft',\n PendingReview = 'pending-review',\n Approved = 'approved',\n Published = 'published',\n Archived = 'archived',\n Rejected = 'rejected',\n Active = 'active',\n Inactive = 'inactive',\n Pending = 'pending',\n Completed = 'completed',\n Suspended = 'suspended',\n Failed = 'failed',\n Review = 'review',\n Expired = 'expired',\n}\n\nconst i18n = (key: string) => `@general:statuses.${key}`;\n\n/**\n * Standard system status definitions\n * Provides consistent status definitions across the platform\n * Uses AXPStatusDefinition interface from status-definition.types.ts\n */\nexport const AXPSystemStatuses = Object.freeze({\n Open: {\n name: AXPSystemStatusType.Open,\n title: i18n('open.title'),\n icon: 'fa-light fa-circle',\n color: 'secondary',\n description: i18n('open.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n Closed: {\n name: AXPSystemStatusType.Closed,\n title: i18n('closed.title'),\n icon: 'fa-light fa-circle',\n color: 'danger',\n description: i18n('closed.description'),\n order: 2,\n isInitial: false,\n isFinal: true,\n },\n Todo: {\n name: AXPSystemStatusType.Todo,\n title: i18n('todo.title'),\n icon: 'fa-light fa-circle',\n color: 'secondary',\n description: i18n('todo.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n InProgress: {\n name: AXPSystemStatusType.InProgress,\n title: i18n('in-progress.title'),\n icon: 'fa-light fa-play',\n color: 'info',\n description: i18n('in-progress.description'),\n order: 2,\n isInitial: false,\n isFinal: false,\n },\n InReview: {\n name: AXPSystemStatusType.InReview,\n title: i18n('in-review.title'),\n icon: 'fa-light fa-eye',\n color: 'info',\n description: i18n('in-review.description'),\n order: 3,\n isInitial: false,\n isFinal: false,\n },\n Blocked: {\n name: AXPSystemStatusType.Blocked,\n title: i18n('blocked.title'),\n icon: 'fa-light fa-ban',\n color: 'danger',\n description: i18n('blocked.description'),\n order: 4,\n isInitial: false,\n isFinal: false,\n },\n Done: {\n name: AXPSystemStatusType.Done,\n title: i18n('done.title'),\n icon: 'fa-light fa-check-circle',\n color: 'success',\n description: i18n('done.description'),\n order: 5,\n isInitial: false,\n isFinal: true,\n },\n Cancelled: {\n name: AXPSystemStatusType.Cancelled,\n title: i18n('cancelled.title'),\n icon: 'fa-light fa-times-circle',\n color: 'neutral',\n description: i18n('cancelled.description'),\n order: 6,\n isInitial: false,\n isFinal: true,\n },\n Draft: {\n name: AXPSystemStatusType.Draft,\n title: i18n('draft.title'),\n icon: 'fa-light fa-file-pen',\n color: 'neutral',\n description: i18n('draft.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n PendingReview: {\n name: AXPSystemStatusType.PendingReview,\n title: i18n('pending-review.title'),\n icon: 'fa-light fa-clock',\n color: 'warning',\n description: i18n('pending-review.description'),\n order: 2,\n isInitial: false,\n isFinal: false,\n },\n Approved: {\n name: AXPSystemStatusType.Approved,\n title: i18n('approved.title'),\n icon: 'fa-light fa-check-circle',\n color: 'success',\n description: i18n('approved.description'),\n order: 3,\n isInitial: false,\n isFinal: false,\n },\n Published: {\n name: AXPSystemStatusType.Published,\n title: i18n('published.title'),\n icon: 'fa-light fa-globe',\n color: 'primary',\n description: i18n('published.description'),\n order: 4,\n isInitial: false,\n isFinal: false,\n },\n Archived: {\n name: AXPSystemStatusType.Archived,\n title: i18n('archived.title'),\n icon: 'fa-light fa-archive',\n color: 'danger',\n description: i18n('archived.description'),\n order: 5,\n isInitial: false,\n isFinal: true,\n },\n Rejected: {\n name: AXPSystemStatusType.Rejected,\n title: i18n('rejected.title'),\n icon: 'fa-light fa-times-circle',\n color: 'danger',\n description: i18n('rejected.description'),\n order: 6,\n isInitial: false,\n isFinal: true,\n },\n Active: {\n name: AXPSystemStatusType.Active,\n title: i18n('active.title'),\n icon: 'fa-light fa-check-circle',\n color: 'success',\n description: i18n('active.description'),\n order: 1,\n isInitial: false,\n isFinal: false,\n },\n Inactive: {\n name: AXPSystemStatusType.Inactive,\n title: i18n('inactive.title'),\n icon: 'fa-light fa-circle',\n color: 'secondary',\n description: i18n('inactive.description'),\n order: 2,\n isInitial: false,\n isFinal: false,\n },\n Pending: {\n name: AXPSystemStatusType.Pending,\n title: i18n('pending.title'),\n icon: 'fa-light fa-clock',\n color: 'warning',\n description: i18n('pending.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n Completed: {\n name: AXPSystemStatusType.Completed,\n title: i18n('completed.title'),\n icon: 'fa-light fa-check-circle',\n color: 'success',\n description: i18n('completed.description'),\n order: 10,\n isInitial: false,\n isFinal: true,\n },\n Suspended: {\n name: AXPSystemStatusType.Suspended,\n title: i18n('suspended.title'),\n icon: 'fa-light fa-pause-circle',\n color: 'neutral',\n description: i18n('suspended.description'),\n order: 5,\n isInitial: false,\n isFinal: false,\n },\n Failed: {\n name: AXPSystemStatusType.Failed,\n title: i18n('failed.title'),\n icon: 'fa-light fa-xmark-circle',\n color: 'danger',\n description: i18n('failed.description'),\n order: 10,\n isInitial: false,\n isFinal: true,\n },\n\n Review: {\n name: AXPSystemStatusType.Review,\n title: i18n('review.title'),\n icon: 'fa-light fa-eye',\n color: 'info',\n description: i18n('review.description'),\n order: 3,\n },\n Expired: {\n name: AXPSystemStatusType.Expired,\n title: i18n('expired.title'),\n icon: 'fa-light fa-clock',\n color: 'danger',\n description: i18n('expired.description'),\n order: 10,\n isInitial: false,\n isFinal: true,\n },\n} as const satisfies Record<string, AXPStatusDefinition>);\n\n/**\n * Get system status definition by type\n * @param type - Status type\n * @returns System status definition or undefined\n */\nexport function getSystemStatus(type: AXPSystemStatusType): AXPStatusDefinition {\n return Object.values(AXPSystemStatuses).find(status => status.name === type) as AXPStatusDefinition;\n}\n\n/**\n * Resolves the visual appearance (color and icon) for status\n * using the system statuses from the core module.\n * @param statusType - Status type string\n * @returns Color and icon for the status\n */\nexport function resolveStatusLook(statusType: string): { color: AXStyleColorType; icon: string } {\n // Try to get system status first\n const systemStatusType = statusType as AXPSystemStatusType;\n if (systemStatusType) {\n const systemStatus = getSystemStatus(systemStatusType);\n if (systemStatus) {\n // Convert hex color to semantic color type if needed\n // For now, return as-is and let the UI handle it\n return {\n color: systemStatus.color as AXStyleColorType,\n icon: systemStatus.icon || ''\n };\n }\n }\n\n // Fallback for unknown statuses\n return {\n color: 'secondary' as AXStyleColorType,\n icon: ''\n };\n}\n\n/**\n * Resolves the complete status information (title, description, icon, color) for a status\n * using the system statuses from the core module.\n * @param statusType - Status type string\n * @returns Complete status information as AXPStatusDefinition\n */\nexport function getStatusInfo(statusType: string): AXPStatusDefinition {\n const systemStatusType = statusType as AXPSystemStatusType;\n if (systemStatusType) {\n const systemStatus = getSystemStatus(systemStatusType);\n if (systemStatus) {\n return systemStatus;\n }\n }\n\n // Fallback for unknown statuses\n return {\n name: statusType,\n title: statusType,\n description: `Status: ${statusType}`,\n icon: '',\n color: 'secondary'\n };\n}\n\n/**\n * Get system status definition directly (no conversion needed since it's already AXPStatusDefinition)\n * @param statusType - Status type\n * @param overrides - Optional overrides for the status definition\n * @returns AXPStatusDefinition\n */\nexport function systemStatusToDefinition(\n statusType: AXPSystemStatusType,\n overrides?: Partial<AXPStatusDefinition>\n): AXPStatusDefinition {\n const systemStatus = getSystemStatus(statusType);\n if (!systemStatus) {\n throw new Error(`System status ${statusType} not found`);\n }\n\n return {\n ...systemStatus,\n ...overrides,\n };\n}\n","import { AXToastService } from '@acorex/components/toast';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPClipBoardService {\n private toast = inject(AXToastService);\n\n public copy(title: string, value: string) {\n const copyText = document.createElement('input');\n copyText.type = 'text';\n copyText.select();\n copyText.setSelectionRange(0, 99999); // For mobile devices\n copyText.remove();\n navigator.clipboard.writeText(value);\n this.toast.success(`${title} copied!`);\n }\n\n}","//#region ---- Imports ----\n\nimport { Injectable, inject } from '@angular/core';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPModuleManifestRegistry } from '@acorex/platform/core';\n\n//#endregion\n\n//#region ---- Debug Service ----\n\n/**\n * Service for debugging user access information.\n * Displays loaded modules, features, and permissions for the current user.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPDebugService {\n //#region ---- Services & Dependencies ----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly manifestRegistry = inject(AXPModuleManifestRegistry);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Display all loaded modules, features, and permissions for the current user.\n */\n async displayUserAccessInfo(): Promise<void> {\n try {\n // Ensure registry is initialized\n await this.manifestRegistry.initialize();\n\n // Get all registered modules\n const allManifests = this.manifestRegistry.getAll();\n\n // Get all feature definitions\n const allFeatures = this.manifestRegistry.getAllFeatureDefinitions();\n\n // Get current user permissions\n const userPermissions = this.sessionService.permissions;\n const user = this.sessionService.user;\n\n console.group('🔐 User Access Information');\n console.log(`User: ${user?.name || user?.title || 'Unknown'} (${user?.id || 'N/A'})`);\n console.log('');\n\n if (allManifests.length === 0) {\n console.log('No modules loaded');\n console.groupEnd();\n return;\n }\n\n // Group features by module\n const featuresByModule = new Map<string, typeof allFeatures>();\n allFeatures.forEach((feature) => {\n const moduleName = feature.module;\n if (!featuresByModule.has(moduleName)) {\n featuresByModule.set(moduleName, []);\n }\n featuresByModule.get(moduleName)!.push(feature);\n });\n\n // Group permissions by module (if they follow ModuleName:PermissionKey pattern)\n const permissionsByModule = new Map<string, typeof userPermissions>();\n const ungroupedPermissions: typeof userPermissions = [];\n\n userPermissions.forEach((permission) => {\n const parts = permission.split(':');\n if (parts.length >= 2) {\n const moduleName = parts[0];\n if (!permissionsByModule.has(moduleName)) {\n permissionsByModule.set(moduleName, []);\n }\n permissionsByModule.get(moduleName)!.push(permission);\n } else {\n ungroupedPermissions.push(permission);\n }\n });\n\n // Display modules in tree format\n allManifests.forEach((manifest) => {\n const moduleName = manifest.name;\n const moduleFeatures = featuresByModule.get(moduleName) || [];\n const modulePermissions = permissionsByModule.get(moduleName) || [];\n\n console.group(`📦 ${moduleName}`);\n\n // Display Features\n if (moduleFeatures.length > 0) {\n console.log(' --- Features:');\n moduleFeatures.forEach((feature) => {\n console.log(` • ${feature.name}`);\n });\n } else {\n console.log(' --- Features: (none)');\n }\n\n // Display Permissions\n if (modulePermissions.length > 0) {\n console.log(' --- Permissions:');\n modulePermissions.forEach((permission) => {\n console.log(` • ${permission}`);\n });\n } else {\n console.log(' --- Permissions: (none)');\n }\n\n console.groupEnd();\n });\n\n // Display ungrouped permissions if any\n if (ungroupedPermissions.length > 0) {\n console.group('📁 Other Permissions');\n ungroupedPermissions.forEach((permission) => {\n console.log(` • ${permission}`);\n });\n console.groupEnd();\n }\n\n // Summary\n console.log('');\n console.log(\n `Summary: ${allManifests.length} modules, ${allFeatures.length} features, ${userPermissions.length} permissions`\n );\n\n console.groupEnd();\n } catch (error) {\n console.error('[AXPDebugService] Failed to display user access info:', error);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXColorBoxModule } from '@acorex/components/color-box';\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXNumberBoxModule } from '@acorex/components/number-box';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { afterNextRender, Component, linkedSignal, model, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPDomToImageOptions } from './export.service';\n\n@Component({\n template: ` <div class=\"ax-grid ax-grid-cols-[auto_18rem] ax-gap-4 ax-justify-center ax-p-4 ax-items-center\">\n <ax-label>Resolution (px)</ax-label>\n <div class=\"ax-flex ax-gap-2 ax-items-center\">\n <ax-number-box\n [changeOnScroll]=\"true\"\n [decimals]=\"4\"\n [value]=\"width()\"\n (onValueChanged)=\"calculateRatio($event, 'width')\"\n name=\"Width\"\n >\n </ax-number-box>\n <ax-button [toggleable]=\"true\" [(selected)]=\"ratio\"\n ><ax-icon><i class=\"fa-solid fa-vector-square\"></i></ax-icon\n ></ax-button>\n <ax-number-box\n [changeOnScroll]=\"true\"\n [decimals]=\"4\"\n [value]=\"height()\"\n (onValueChanged)=\"calculateRatio($event, 'height')\"\n name=\"Height\"\n >\n </ax-number-box>\n </div>\n\n <ax-label>Background color</ax-label>\n <ax-color-box [(ngModel)]=\"bgcolor\"></ax-color-box>\n\n <ax-label>Quality of image (50-100%)</ax-label>\n <ax-number-box\n [changeOnScroll]=\"true\"\n [minValue]=\"50\"\n [maxValue]=\"100\"\n [(ngModel)]=\"qualityComputed\"\n name=\"Quality\"\n >\n </ax-number-box>\n\n <ax-label>Scale</ax-label>\n <ax-number-box [changeOnScroll]=\"true\" [minValue]=\"1\" [(ngModel)]=\"scale\" name=\"scale\"> </ax-number-box>\n </div>\n\n <ax-footer>\n <ax-prefix> </ax-prefix>\n <ax-suffix>\n <ax-button text=\"Cancel\" look=\"solid\" (onClick)=\"handleClose(true)\"> </ax-button>\n <ax-button text=\"Print\" look=\"solid\" color=\"primary\" (onClick)=\"handleClose()\">\n <ax-icon class=\"fa-solid fa-print\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-footer>`,\n imports: [\n FormsModule,\n AXCheckBoxModule,\n AXNumberBoxModule,\n AXTextBoxModule,\n AXLabelModule,\n AXDecoratorModule,\n AXButtonModule,\n AXColorBoxModule,\n ],\n})\nexport class AXMOrgChartPrintPage extends AXBasePageComponent {\n private data: AXPDomToImageOptions;\n\n protected ratio = signal(false);\n protected baseWidth = signal<number | undefined>(undefined);\n protected baseHeight = signal<number | undefined>(undefined);\n\n protected bgcolor = model<string>();\n protected width = model<number>();\n protected height = model<number>();\n protected quality = model<number>();\n protected qualityComputed = linkedSignal(() => (this.data.quality ?? 1) * 100);\n protected scale = model<number>();\n\n #init = afterNextRender(() => {\n this.bgcolor.set(this.data.bgcolor);\n\n this.width.set(this.data.width);\n this.baseWidth.set(this.data.width);\n\n this.height.set(this.data.height);\n this.baseHeight.set(this.data.height);\n\n this.quality.set(this.data.quality);\n this.scale.set(this.data.scale);\n });\n\n protected calculateRatio(event: AXValueChangedEvent, type: 'width' | 'height'): void {\n if (!this.ratio() || !event.isUserInteraction) return;\n const value = event.value;\n if (type === 'width') {\n const newHeight = Math.round((value / this.baseWidth()!) * this.baseHeight()! * 100) / 100;\n this.height.set(newHeight);\n this.width.set(value);\n } else {\n const newWidth = Math.round((value / this.baseHeight()!) * this.baseWidth()! * 100) / 100;\n this.width.set(newWidth);\n this.height.set(value);\n }\n }\n\n protected async handleClose(isCanceled = false) {\n this.close({\n bgcolor: this.bgcolor(),\n width: this.width(),\n height: this.height(),\n quality: this.qualityComputed() / 100,\n scale: this.scale(),\n isCanceled,\n });\n }\n}\n","// AXPPdfService\nimport { AXPopupService } from '@acorex/components/popup';\nimport { Injectable, inject } from '@angular/core';\nimport { AXMOrgChartPrintPage } from './export-popup';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPExportService {\n popupService = inject(AXPopupService);\n async generateBlobFromElement(element: HTMLElement, blobOptions?: AXPDomToImageOptions): Promise<Blob> {\n const domtoimage = (await import('dom-to-image')).default;\n\n const originalWidth = element.scrollWidth;\n const originalHeight = element.scrollHeight;\n\n let popup: boolean | undefined,\n options: AXPDomToImageOptions = {},\n newOptions: AXPDomToImageOptions = {};\n\n if (blobOptions) {\n ({ popup, ...options } = blobOptions);\n }\n\n if (popup) {\n const result = await this.popupService.open(AXMOrgChartPrintPage, {\n header: true,\n size: 'fit',\n draggable: true,\n hasBackdrop: true,\n title: 'Export Options',\n data: { data: options },\n });\n if (result.data.isCanceled) {\n throw new Error('Process is Canceled by User!');\n } else {\n newOptions = { ...options, ...result.data };\n }\n }\n\n return domtoimage.toBlob(element, {\n ...newOptions,\n width: (newOptions.width ?? originalWidth) * (newOptions?.scale ?? 1),\n height: (newOptions.height ?? originalHeight) * (newOptions?.scale ?? 1),\n style: {\n transform: `scale(${newOptions?.scale ?? 1})`,\n transformOrigin: 'top left',\n },\n });\n }\n\n download(blob: Blob, filename: string): void {\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(link.href);\n }\n}\n\nexport interface AXPDomToImageOptions {\n popup?: true;\n filter?: (node: Node) => boolean;\n bgcolor?: string;\n width?: number;\n height?: number;\n style?: {};\n quality?: number;\n imagePlaceholder?: string;\n cacheBust?: boolean;\n scale?: number;\n}\n","import { AXDataSourceFilterOption } from '@acorex/cdk/common';\n\nexport function AXPCleanNestedFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[] {\n return filters\n .map((filter) => {\n if (!filter) return undefined;\n if (filter.filters?.length) {\n const cleanedNestedFilters = AXPCleanNestedFilters(filter.filters);\n if (!filter.field && !filter.operator && cleanedNestedFilters.length === 0) {\n return undefined;\n }\n return {\n ...filter,\n filters: cleanedNestedFilters.filter(Boolean),\n };\n }\n if ((!filter.value && filter.value != false) || filter.value === 'unknown') {\n return undefined;\n }\n return filter;\n })\n .filter(Boolean) as AXDataSourceFilterOption[];\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXPLanguage, AXPLocaleProfile } from './regional.types';\n\n/**\n * Narrow API for reading app locale profiles and active languages.\n * Implemented by locale-management; consumed by platform layout without importing the module (avoids circular deps).\n */\nexport interface AXPLocaleManagementPort {\n getLocaleProfiles(): Promise<AXPLocaleProfile[]>;\n getLanguages(): Promise<AXPLanguage[]>;\n}\n\nexport const AXP_LOCALE_MANAGEMENT_PORT = new InjectionToken<AXPLocaleManagementPort>('AXP_LOCALE_MANAGEMENT_PORT');\n","//#region ---- Versioning Types ----\n\nexport interface AXPVersionStream {\n id: string;\n entityType: string;\n entityId: string;\n createdAt: string;\n}\n\nexport enum AXVChangeType {\n Create = 'Create',\n Update = 'Update',\n Delete = 'Delete',\n}\n\nexport type CanonicalChangeOp = 'add' | 'remove' | 'replace' | 'rename' | 'metadata';\n\nexport interface CanonicalChange {\n path: string;\n op: CanonicalChangeOp;\n oldValue?: unknown;\n newValue?: unknown;\n meta?: Record<string, unknown>;\n}\n\nexport interface AXPVersionEntry {\n id: string;\n streamId: string;\n versionNumber: number;\n changeType: AXVChangeType;\n changedBy: string;\n changedAt: string;\n snapshotJson: unknown;\n patchFromPrevJson: CanonicalChange[];\n summary?: string;\n metadataJson?: unknown;\n}\n\nexport interface AXPVersionChange {\n id?: number;\n versionEntryId: string;\n path: string;\n op: CanonicalChangeOp;\n oldValue?: unknown;\n newValue?: unknown;\n}\n\nexport interface VersionedFileInfo {\n id: string;\n name: string;\n size: number;\n mime: string;\n hash: string;\n url?: string;\n thumbUrl?: string;\n}\n\n//#endregion\n\n//#region ---- Service Contract ----\n\nexport abstract class AXPVersioningService {\n abstract getStreamIdIfExists(entityType: string, entityId: string): Promise<string | null>;\n abstract listEntries(streamId: string, options?: { limit?: number; offset?: number }): Promise<AXPVersionEntry[]>;\n abstract getUiFriendlyDiff(streamId: string, v1: number, v2: number): Promise<Array<{ badge: string; path: string; summary: string; oldValue?: unknown; newValue?: unknown }>>;\n}\n\n//#endregion\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["merge","i1.AXPErrorHandlerRegistryService","i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-common.mjs","sources":["../../../../libs/platform/common/src/lib/app/app-version.provider.ts","../../../../libs/platform/common/src/lib/app/application.types.ts","../../../../libs/platform/common/src/lib/app/operators.ts","../../../../libs/platform/common/src/lib/home-page/home-page.types.ts","../../../../libs/platform/common/src/lib/settings/regional-settings.keys.ts","../../../../libs/platform/common/src/lib/settings/settings.provider.ts","../../../../libs/platform/common/src/lib/settings/setting.builder.ts","../../../../libs/platform/common/src/lib/settings/setting-definition.service.ts","../../../../libs/platform/common/src/lib/settings/settings.service.ts","../../../../libs/platform/common/src/lib/settings/default-multi-language-config.service.ts","../../../../libs/platform/common/src/lib/settings/default-multi-language.helpers.ts","../../../../libs/platform/common/src/lib/settings/settings-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/home-page/home-page-settings.key.ts","../../../../libs/platform/common/src/lib/home-page/home-page.service.ts","../../../../libs/platform/common/src/lib/home-page/home-page.routes.ts","../../../../libs/platform/common/src/lib/home-page/home-page-settings.provider.ts","../../../../libs/platform/common/src/lib/home-page/home-page.module.ts","../../../../libs/platform/common/src/lib/data/data-provider.types.ts","../../../../libs/platform/common/src/lib/data/operators.service.ts","../../../../libs/platform/common/src/lib/data/filter-middleware.service.ts","../../../../libs/platform/common/src/lib/errors/error-handler-registry.service.ts","../../../../libs/platform/common/src/lib/errors/global-error-handler.ts","../../../../libs/platform/common/src/lib/tokens/token-definition.provider.ts","../../../../libs/platform/common/src/lib/tokens/token-definition.service.ts","../../../../libs/platform/common/src/lib/tokens/token-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/layout/sticky.directive.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.context.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.middleware.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-middleware.registry.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.provider.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-items.datasource.ts","../../../../libs/platform/common/src/lib/layout/menu/provide-menu-middleware.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.service.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-visibility.service.ts","../../../../libs/platform/common/src/lib/layout/menu/search-definition.provider.ts","../../../../libs/platform/common/src/lib/layout/menu/search.provider.ts","../../../../libs/platform/common/src/lib/layout/theme/components/slots/footer-text-slot.component.ts","../../../../libs/platform/common/src/lib/layout/theme/components/slots/navbar-slot.component.ts","../../../../libs/platform/common/src/lib/search/search-definition.builder.ts","../../../../libs/platform/common/src/lib/search/search-definition.provider.ts","../../../../libs/platform/common/src/lib/search/search.provider.ts","../../../../libs/platform/common/src/lib/search/search.service.ts","../../../../libs/platform/common/src/lib/search/search-entity-command.util.ts","../../../../libs/platform/common/src/lib/configs/common-settings.key.ts","../../../../libs/platform/common/src/lib/workflows/common.workflow.ts","../../../../libs/platform/common/src/lib/workflows/navigate.workflow.ts","../../../../libs/platform/common/src/lib/workflows/error-handler.ts","../../../../libs/platform/common/src/lib/common.module.ts","../../../../libs/platform/common/src/lib/configs/app.config.ts","../../../../libs/platform/common/src/lib/configs/config.types.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage.service.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage.types.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.provider.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.service.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.types.ts","../../../../libs/platform/common/src/lib/file-actions/upload-from-computer.action-provider.ts","../../../../libs/platform/common/src/lib/file-type/file-type.provider.ts","../../../../libs/platform/common/src/lib/lock-system/lock.service.ts","../../../../libs/platform/common/src/lib/status-definition/status-definition.types.ts","../../../../libs/platform/common/src/lib/status-definition/status-definition-provider.service.ts","../../../../libs/platform/common/src/lib/status-definition/statuses.types.ts","../../../../libs/platform/common/src/lib/utils/clipboard-service.ts","../../../../libs/platform/common/src/lib/utils/debug.service.ts","../../../../libs/platform/common/src/lib/utils/export-popup.ts","../../../../libs/platform/common/src/lib/utils/export.service.ts","../../../../libs/platform/common/src/lib/utils/filter-cleaner.ts","../../../../libs/platform/common/src/lib/utils/locale-management-port.ts","../../../../libs/platform/common/src/lib/versioning/types.ts","../../../../libs/platform/common/src/acorex-platform-common.ts"],"sourcesContent":["import { inject, Injectable, InjectionToken } from '@angular/core';\n\nexport interface AXPAppVersion {\n version: string;\n build: number;\n date: Date;\n}\n\nexport interface AXPAppVersionProvider {\n provider(): Promise<AXPAppVersion>;\n}\n\nexport const AXP_APP_VERSION_PROVIDER = new InjectionToken<AXPAppVersionProvider>('AXP_APP_VERSION_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n return new AXPAppVersionDefaultProvider();\n },\n});\n\nclass AXPAppVersionDefaultProvider implements AXPAppVersionProvider {\n async provider(): Promise<AXPAppVersion> {\n return {\n version: '1.0.0',\n build: 1,\n date: new Date(),\n };\n }\n}\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPAppVersionService {\n private provider = inject(AXP_APP_VERSION_PROVIDER);\n\n async getAppVersion(): Promise<AXPAppVersion> {\n return this.provider.provider();\n }\n}\n","import { AXDataSourceOperator, AXStyleColorType } from '@acorex/cdk/common';\nimport { AXPopupSizeType } from '@acorex/components/popup';\nimport {\n AXPExpression,\n AXPFilterDefinition,\n AXPGridLayoutOptions,\n AXPMetaData,\n AXPOptionsData,\n AXPValidationRules,\n AXPValueTransformerFunctions,\n type AXPMultiLanguageString,\n} from '@acorex/platform/core';\nimport { AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core';\nimport { kebabCase } from 'lodash-es';\n\nexport interface AXEntityPropertyWidget {\n type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | string;\n path?: string;\n id?: string;\n children?: AXEntityPropertyWidget[];\n mode: 'view' | 'edit';\n options?: Record<string, any>;\n triggers?: { event: string; action: string; disabled?: boolean }[];\n valueTransforms?: AXPValueTransformerFunctions;\n}\n\nexport enum AXPRelationshipKind {\n Association,\n Composition,\n Aggregation,\n}\n\nexport enum AXPRelationshipCardinality {\n OneToOne,\n OneToMany,\n ManyToMany,\n}\n\nexport interface AXPRelationship {\n id: string;\n from: string;\n to: string;\n kind: AXPRelationshipKind;\n cardinality: AXPRelationshipCardinality;\n}\n\nexport enum AXPEntityCommandScope {\n TypeLevel = 'typeLevel',\n Selected = 'selected',\n Individual = 'individual',\n Section = 'section',\n}\n\nexport enum AXPEntityQueryType {\n Single = 'single',\n List = 'list',\n}\n\nexport interface AXPEntityPropertyLayoutConfig extends AXPGridLayoutOptions {\n label?: {\n visible?: boolean;\n };\n order?: number;\n visible?: boolean | AXPExpression;\n}\n\nexport interface AXPEntityPropertyGroup {\n id: string;\n title: string;\n description?: string;\n permissions?: string[];\n icon?: string;\n}\n\nexport interface AXPEntityPropertyView {\n name: string;\n dataPath?: string;\n permissions?: string[];\n layout?: AXPEntityPropertyLayoutConfig;\n}\n\nexport interface AXPEntityPropertyUpdateView extends AXPEntityPropertyView { }\n\nexport interface AXPEntityPropertyCreateView extends AXPEntityPropertyView {\n defaultValue?: any;\n}\n\nexport interface AXPEntitySectionView {\n id: string;\n order?: number;\n collapsed?: boolean;\n layout?: AXPEntityPropertyLayoutConfig;\n}\n\nexport interface AXPEntityProperty {\n name: string;\n title: string;\n description?: string;\n groupId?: string;\n schema: {\n dataType: string;\n nullable?: boolean;\n readonly?: boolean | string;\n visible?: boolean | string;\n defaultValue?: any | string | ((context: any | null) => any);\n unique?: {\n enabled: boolean;\n };\n interface?: Partial<AXEntityPropertyWidget>;\n };\n options?: {\n filter?: {\n advance?: {\n enabled?: boolean;\n widgetType?: AXPWidgetTypesMap[keyof AXPWidgetTypesMap];\n };\n inline?: {\n enabled?: boolean;\n };\n preload?: {\n enabled?: boolean;\n required?: boolean;\n };\n };\n sort?: {\n enabled?: boolean;\n };\n };\n validations?: AXPValidationRules;\n}\n\nexport interface AXPEntityTableColumn {\n name: string;\n title?: string;\n hidden?: boolean;\n showAs?: {\n type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | string;\n options?: Record<string, any>;\n };\n sort?: {\n enabled?: boolean;\n dir?: 'asc' | 'desc';\n };\n options?: {\n /** When string, evaluate against parent detail context (e.g. related list). */\n visible?: boolean | string;\n width?: string;\n dataPath?: string;\n [name: string]: any;\n };\n}\n\nexport interface AXPEntityCommand {\n execute: string | Function; // As runnable expression\n permissions?: string[];\n}\n\nexport interface AXPEntityQuery {\n execute: string | Function; // As runnable expression\n type: AXPEntityQueryType;\n}\n\nimport { AXPSystemActionType } from '@acorex/platform/core';\n\nexport type AXPCommandActionType = AXPSystemActionType;\n\nexport interface AXPCommandActionLook {\n color: AXStyleColorType;\n icon: string;\n}\n\nexport type AXPCommandActionPriority = 'primary' | 'secondary';\n\n//TODO: remove extra props\nexport type AXPCommandActionCallback =\n | string\n | {\n name: string;\n options?: {\n decoration?: {\n header?: {\n title?: string;\n };\n };\n process?: {\n data?: any;\n [name: string]: any;\n };\n layout?: {\n size?: AXPopupSizeType;\n };\n [name: string]: any;\n };\n metadata?: AXPMetaData;\n };\n\nexport interface AXPCommandActionDisplay extends Partial<AXPCommandActionLook> {\n name?: string;\n command: AXPCommandActionCallback;\n title: string;\n type: AXPSystemActionType | string;\n priority: 'primary' | 'secondary';\n separated?: boolean;\n permissions?: string[];\n hidden?: boolean | string;\n disabled?: boolean | string;\n default?: boolean;\n order?: number;\n}\n\nexport interface AXPEntityAction extends AXPCommandActionDisplay {\n scope: AXPEntityCommandScope;\n /** Child actions for dropdown submenu */\n items?: AXPEntityAction[];\n}\n\nexport interface AXPEntity {\n plugins?: { name: string; options?: AXPOptionsData }[];\n /**\n * High-level rules: when expression evaluates true, apply actions to the given targets\n * (property/section/action). Reduces repetition of the same condition across many properties.\n * Evaluation context: form data, user, entity; precedence vs property-level visible/readonly\n * must be defined where rules are applied.\n */\n rules?: Array<{\n name: string;\n expression: AXPExpression;\n actions: Array<{\n target: {\n type: 'property' | 'section' | 'action';\n name: string;\n };\n values: AXPOptionsData;\n }>;\n }>;\n module: string;\n name: string;\n icon?: string;\n parentKey?: string;\n category?: AXPCategoryEntity;\n title: string;\n formats: {\n individual: string;\n plural: string;\n lookup?: string;\n displayName?: string;\n searchResult?: {\n title: string;\n description?: string;\n };\n };\n relatedEntities?: AXPRelatedEntity[];\n pages?: AXPEntityPage[];\n groups?: AXPEntityPropertyGroup[];\n properties: AXPEntityProperty[];\n columns?: AXPEntityTableColumn[];\n commands?: {\n create?: AXPEntityCommand | undefined;\n update?: AXPEntityCommand | undefined;\n delete?: AXPEntityCommand | undefined;\n [name: string]: AXPEntityCommand | undefined;\n };\n queries?: {\n byKey?: AXPEntityQuery;\n list?: AXPEntityQuery;\n lookup?: AXPEntityQuery;\n history?: AXPEntityQuery;\n comments?: AXPEntityQuery;\n [name: string]: AXPEntityQuery | undefined;\n };\n validations?: AXPValidationRules;\n interfaces?: {\n master?: {\n single?: AXPEntityMasterSingleLayoutView;\n list?: AXPEntityMasterListView;\n create?: AXPEntityMasterCreateLayoutView;\n update?: AXPEntityMasterUpdateLayoutView;\n };\n detail?: {\n list?: AXPEntityDetailListView;\n };\n };\n}\n\nexport function getEntityInfo(entity: AXPEntity) {\n return {\n source: `${entity.module}.${entity.name}`,\n module: {\n route: kebabCase(entity.module),\n },\n entity: {\n route: kebabCase(entity.name),\n },\n };\n}\n\nexport function createQueryView(\n name: string,\n title: string,\n fixed: boolean,\n params: { columns?: string[]; conditions?: any[]; sorts?: AXPQuerySort[] } = {\n columns: [],\n conditions: [],\n sorts: [],\n },\n): AXPQueryView {\n params = Object.assign({ columns: [], sorts: [], conditions: [] }, params);\n return {\n name,\n title,\n fixed,\n columns: params.columns ?? [],\n conditions: params.conditions ?? [],\n sorts: params.sorts ?? [],\n };\n}\n\nexport function createAllQueryView(\n params: { columns?: string[]; conditions?: AXPQueryFilter[]; sorts?: AXPQuerySort[] } | undefined = {\n columns: [],\n sorts: [],\n conditions: [],\n },\n): AXPQueryView {\n params = Object.assign({ columns: [], sorts: [], conditions: [] }, params);\n return createQueryView('all', '@general:terms.interface.selection.all-items', true, {\n columns: params.columns ?? [],\n conditions: params.conditions ?? [],\n sorts: params.sorts ?? [],\n });\n}\n\nexport interface AXPRelatedEntity {\n entity: string;\n title?: string;\n icon?: string;\n /**\n * Either a list of property names, or full table column metadata (`AXPEntityTableColumn`).\n * For table columns, use `options.visible` as boolean or expression string (evaluated on parent detail).\n */\n columns?: string[] | AXPEntityTableColumn[];\n properties?: string[];\n /** Exclude these properties from the related entity (for merge-detail) */\n excludeProperties?: string[];\n layout?: {\n type: 'tab-detail' | 'tab-list' | 'page-detail' | 'page-list' | 'merge-detail';\n order?: number;\n position?: 'before' | 'after' | 'middle';\n };\n conditions?: AXPQueryFilter[];\n /**\n * Optional toolbar filter definitions merged when the related list is built.\n * Entries matching an existing property `field` override/extend that filter definition.\n */\n customFilterDefinitions?: Partial<AXPFilterDefinition>[];\n hidden?: boolean | string;\n actions?: AXPEntityAction[];\n /**\n * Relationship-level persistence strategy for merge-detail data.\n * Defaults:\n * - strategy: 'embedded'\n * - idField: last segment of dataPath + 'Id' (or 'relatedId' when dataPath is missing)\n * - map: undefined (pass-through)\n * - hydrate: 'eager' (applies to getOne only in mock)\n * - cascade.delete: 'none'\n */\n persistence?: {\n strategy?: 'embedded' | 'referenced';\n idField?: string;\n dataPath?: string;\n map?: Record<string, string>;\n hydrate?: 'eager' | 'lazy';\n cascade?: { delete?: 'none' | 'orphans' | 'all' };\n };\n}\n\nexport interface AXPEntityPage {\n /**\n * Key to identify the component in the page component registry\n */\n componentKey: string;\n /**\n * Property name to render when the page component displays an entity field (e.g. 'questions', 'attachments').\n * Passed to the page component as pageConfig.field.\n */\n field?: string;\n /**\n * Title of the page (displayed in navigation)\n */\n title?: AXPMultiLanguageString;\n /**\n * Icon for the page (displayed in navigation)\n */\n icon?: string;\n /**\n * Description of the page\n */\n description?: AXPMultiLanguageString;\n /**\n * Layout configuration for page positioning\n */\n layout?: {\n /**\n * Order of the page (lower numbers appear first)\n */\n order?: number;\n /**\n * Position relative to the main page\n */\n position?: 'before' | 'after' | 'middle';\n };\n /**\n * Visibility condition (boolean or expression string)\n */\n hidden?: boolean | string;\n /**\n * Permissions required to view this page\n */\n permissions?: string[];\n\n options?: Record<string, any>;\n}\n\nexport interface AXPCategoryEntity {\n entity: string;\n title?: string;\n textField?: string;\n valueField?: string;\n conditions?: AXPQueryFilter[];\n applyConditions?: AXPQueryFilter[];\n}\n\nexport interface AXPEntityVersionHistory {\n enabled?: boolean;\n showInList?: boolean;\n showInDetail?: boolean;\n}\n\nexport interface AXPAggregate {\n id: string;\n name: string;\n title: AXPMultiLanguageString;\n entities: AXPEntity[];\n}\n\nexport interface AXPModule {\n name: string;\n title: AXPMultiLanguageString;\n aggregates: AXPAggregate[];\n relationships?: AXPRelationship[];\n}\n\nexport interface AXPApplication {\n name: string;\n title: AXPMultiLanguageString;\n modules: AXPModule[];\n}\n\nexport interface AXPEntityMasterLayoutView {\n title?: string;\n sections: AXPEntitySectionView[];\n properties?: AXPEntityPropertyView[];\n}\n\n/** Quick create config for lookup widgets (+ button) - uses subset of create form */\nexport interface AXPEntityQuickCreate {\n enabled?: boolean;\n properties?: string[];\n layout?: {\n size?: AXPopupSizeType;\n };\n excludeProperties?: string[];\n}\n\nexport interface AXPEntityMasterCreateLayoutView extends AXPEntityMasterLayoutView {\n steps?: {\n id: string;\n title: string;\n description?: string;\n };\n /** Quick create config for lookup widgets - uses subset of create form */\n quickCreate?: AXPEntityQuickCreate;\n}\n\nexport interface AXPEntityMasterUpdateLayoutView extends AXPEntityMasterLayoutView { }\n\nexport interface AXPEntityMasterSingleLayoutView extends AXPEntityMasterLayoutView {\n title: string;\n description?: string;\n actions?: AXPEntityAction[];\n}\n\nexport interface AXPEntityMasterListView {\n title?: string;\n description?: string;\n actions?: AXPEntityAction[];\n views: AXPQueryView[];\n layouts?: {\n table?: {\n columns: AXPEntityTableColumn[];\n };\n card?: {};\n };\n}\n\nexport interface AXPEntityDetailListView {\n title?: string;\n description?: string;\n columns: AXPEntityTableColumn[];\n actions?: AXPEntityAction[];\n}\n\nexport interface AXPQueryView {\n name: string;\n fixed: boolean;\n title: string;\n columns: string[];\n conditions: AXPQueryFilter[];\n sorts: AXPQuerySort[];\n indexCol?: boolean;\n pageSize?: number;\n visible?: boolean;\n}\n\nexport interface AXPQueryFilter {\n name: string; // entity property name\n operator: AXDataSourceOperator;\n value: any;\n}\n\nexport interface AXPQuerySort {\n name: string; // entity property name\n dir: 'asc' | 'desc';\n}\n\n// new version\nexport enum AXPEntityType {\n Entity,\n AggregateRoot,\n ValueObject,\n}\n\nexport interface AXPEntityV2 {\n version: 2;\n\n module: string;\n aggregate: string;\n name: string;\n\n type: AXPEntityType;\n\n icon?: string;\n title: string;\n description?: string;\n\n plugins?: { name: string; options?: AXPOptionsData }[];\n pages?: AXPEntityPage[];\n groups?: AXPEntityPropertyGroup[];\n //TODO : change to fields\n properties: AXPEntityProperty[];\n\n formats: {\n individual: string;\n plural: string;\n lookup?: string;\n displayName?: string;\n searchResult?: {\n title: string;\n description?: string;\n };\n };\n columns?: AXPEntityTableColumn[];\n validations?: AXPValidationRules;\n interfaces?: {\n master?: {\n single?: AXPEntityMasterSingleLayoutView;\n list?: AXPEntityMasterListView;\n create?: AXPEntityMasterCreateLayoutView;\n update?: AXPEntityMasterUpdateLayoutView;\n };\n detail?: {\n list?: AXPEntityDetailListView;\n };\n };\n}\n","export interface AXPFilterOperator {\n name: string;\n title: string;\n hasValue: boolean;\n}\n\nexport const EQ_OPER: AXPFilterOperator = { name: 'equal', title: '@general:terms.operators.equal', hasValue: true };\nexport const NOT_EQ_OPER: AXPFilterOperator = { name: 'notEqual', title: '@general:terms.operators.not-equal', hasValue: true };\nexport const GT_OPER: AXPFilterOperator = { name: 'greaterThan', title: '@general:terms.operators.greater-than', hasValue: true };\nexport const LT_OPER: AXPFilterOperator = { name: 'lessThan', title: '@general:terms.operators.less-than', hasValue: true };\nexport const GTE_OPER: AXPFilterOperator = {\n name: 'greaterThanOrEqual',\n title: '@general:terms.operators.greater-than-or-equal',\n hasValue: true,\n};\nexport const LTE_OPER: AXPFilterOperator = { name: 'lessThanOrEqual', title: '@general:terms.operators.less-than-or-equal', hasValue: true };\nexport const CONTAINS_OPER: AXPFilterOperator = { name: 'contains', title: '@general:terms.operators.contains', hasValue: true };\nexport const NOT_CONTAINS_OPER: AXPFilterOperator = { name: 'notContains', title: '@general:terms.operators.not-contains', hasValue: true };\nexport const IN_OPER: AXPFilterOperator = { name: 'in', title: '@general:terms.operators.in', hasValue: true };\nexport const STARTS_WITH_OPER: AXPFilterOperator = { name: 'startsWith', title: '@general:terms.operators.starts-with', hasValue: true };\nexport const ENDS_WITH_OPER: AXPFilterOperator = { name: 'endsWith', title: '@general:terms.operators.ends-with', hasValue: true };\nexport const IS_EMPTY_OPER: AXPFilterOperator = { name: 'isEmpty', title: '@general:terms.operators.is-empty', hasValue: false };\nexport const IS_NOT_EMPTY_OPER: AXPFilterOperator = { name: 'isNotEmpty', title: '@general:terms.operators.is-not-empty', hasValue: false };\nexport const BETWEEN_OPER: AXPFilterOperator = { name: 'between', title: '@general:terms.operators.between', hasValue: true };\n\nexport const STRING_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n CONTAINS_OPER,\n NOT_CONTAINS_OPER,\n STARTS_WITH_OPER,\n ENDS_WITH_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n IN_OPER\n];\n\nexport const NUMBER_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n BETWEEN_OPER,\n GT_OPER,\n GTE_OPER,\n LT_OPER,\n LTE_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n];\n\nexport const BOOLEAN_OPERATORS = [EQ_OPER];\n\nexport const DATE_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n GT_OPER,\n GTE_OPER,\n LT_OPER,\n LTE_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n];\n\nexport const ALL_DEFAULT_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n GT_OPER,\n LT_OPER,\n GTE_OPER,\n LTE_OPER,\n CONTAINS_OPER,\n IN_OPER,\n NOT_CONTAINS_OPER,\n STARTS_WITH_OPER,\n ENDS_WITH_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n BETWEEN_OPER,\n];\n","import { InjectionToken } from '@angular/core';\nimport { Route } from '@angular/router';\n\nexport interface AXPHomePageDefinition {\n key: string,\n title: string,\n route: Route\n}\n\n\nexport const AXP_HOME_PAGES = new InjectionToken<AXPHomePageDefinition[]>('AXP_HOME_PAGES');\nexport const AXP_HOME_PAGE_DEFAULT_KEY = new InjectionToken<string>('AXP_HOME_PAGE_DEFAULT_KEY', {\n factory: () => 'home'\n});\n\n","/**\n * Regional and locale-related setting keys used by platform widgets and components.\n * Most values use the `LocaleManagement:Setting:Regional.*` prefix; definitions live in the locale-management module where applicable.\n */\nexport enum AXPRegionalSetting {\n LocaleProfile = 'LocaleManagement:Setting:Regional.LocaleProfile',\n TimeZone = 'LocaleManagement:Setting:Regional.TimeZone',\n Language = 'LocaleManagement:Setting:Regional.Language',\n Country = 'LocaleManagement:Setting:Regional.Country',\n Calendar = 'LocaleManagement:Setting:Regional.Calendar',\n FirstDayOfWeek = 'LocaleManagement:Setting:Regional.FirstDayOfWeek',\n WeekendDays = 'LocaleManagement:Setting:Regional.WeekendDays',\n ShortDate = 'LocaleManagement:Setting:Regional.ShortDate',\n MediumDate = 'LocaleManagement:Setting:Regional.MediumDate',\n LongDate = 'LocaleManagement:Setting:Regional.LongDate',\n ShortTime = 'LocaleManagement:Setting:Regional.ShortTime',\n MediumTime = 'LocaleManagement:Setting:Regional.MediumTime',\n LongTime = 'LocaleManagement:Setting:Regional.LongTime',\n MeasurementUnits = 'LocaleManagement:Setting:Regional.MeasurementUnits',\n TemperatureUnits = 'LocaleManagement:Setting:Regional.TemperatureUnits',\n DistanceUnits = 'LocaleManagement:Setting:Regional.DistanceUnits',\n WeightUnits = 'LocaleManagement:Setting:Regional.WeightUnits',\n VolumeUnits = 'LocaleManagement:Setting:Regional.VolumeUnits',\n SpeedUnits = 'LocaleManagement:Setting:Regional.SpeedUnits',\n AreaUnits = 'LocaleManagement:Setting:Regional.AreaUnits',\n /** Default multi-language behavior for standard text field names; defined in locale-management `AXMRegionalSettingProvider`. */\n MultiLanguageSupport = 'LocaleManagement:Setting:Regional.MultiLanguageSupport',\n}\n","import { AXPSettingValue, AXPSettingValueProvider } from \"./settings.types\";\nimport { inject, InjectionToken, Injector } from \"@angular/core\";\nimport { AXPPlatformScope } from \"@acorex/platform/core\";\nimport { AXPSessionService, AXPSessionStatus } from \"@acorex/platform/auth\";\n\n\n\nexport const AXP_SETTING_VALUE_PROVIDER = new InjectionToken<AXPSettingValueProvider[]>('AXP_SETTING_VALUE_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n const injector = inject(Injector);\n return [\n new AXPSettingValueProviderDefault(AXPPlatformScope.Platform, injector),\n new AXPSettingValueProviderDefault(AXPPlatformScope.Tenant, injector),\n new AXPSettingValueProviderDefault(AXPPlatformScope.User, injector)\n ];\n }\n});\n\n\nclass AXPSettingValueProviderDefault implements AXPSettingValueProvider {\n private readonly cache: Map<string, any> = new Map();\n private localStorageKey: string | null = null;\n private sessionService = this.injector.get(AXPSessionService)\n\n constructor(private _scope: AXPPlatformScope, private injector: Injector) {\n // Platform scope doesn't depend on session, initialize immediately\n if (this.scope === AXPPlatformScope.Platform) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(P)`;\n } else {\n this.sessionService.status$.subscribe((status) => {\n if (status === AXPSessionStatus.Authorized || status === AXPSessionStatus.Authenticated) {\n if (this.scope === AXPPlatformScope.User) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(${this.sessionService.user?.id ?? 'U'})`;\n } else if (this.scope === AXPPlatformScope.Tenant) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(${this.sessionService.tenant?.id ?? 'T'})`;\n }\n }\n });\n }\n }\n\n public get scope(): AXPPlatformScope {\n return this._scope;\n }\n\n async load(): Promise<AXPSettingValue[]> {\n if (!this.localStorageKey) {\n return Promise.resolve([]);\n }\n // Load settings from localStorage as a single key\n const storedSettings = localStorage.getItem(this.localStorageKey);\n if (storedSettings) {\n const parsedSettings: Record<string, any> = JSON.parse(storedSettings);\n Object.entries(parsedSettings).forEach(([key, value]) => {\n this.cache.set(key, value);\n });\n return Promise.resolve(Array.from(this.cache.entries()).map(c => ({ key: c[0], value: c[1] })));\n }\n return Promise.resolve([]);\n }\n\n async set(key: string, value: any): Promise<void>;\n async set(values: Record<string, any>): Promise<void>;\n async set(keyOrValues: string | Record<string, any>, value?: any): Promise<void> {\n if (typeof keyOrValues === 'string') {\n // Single value update\n this.cache.set(keyOrValues, value);\n } else {\n // Bulk update\n for (const [key, val] of Object.entries(keyOrValues)) {\n this.cache.set(key, val);\n }\n }\n await this.saveToLocalStorage();\n }\n\n private async saveToLocalStorage(): Promise<void> {\n if (!this.localStorageKey) {\n return;\n }\n const settingsObject: Record<string, any> = {};\n this.cache.forEach((value, key) => {\n settingsObject[key] = value;\n });\n localStorage.setItem(this.localStorageKey, JSON.stringify(settingsObject));\n }\n\n\n private async clear() {\n if (!this.localStorageKey) {\n return;\n }\n localStorage.removeItem(this.localStorageKey);\n }\n}","import { AXPOptionsData, AXPValidationRules, AXPValueTransformerFunctions, AXPWidgetTriggers } from '@acorex/platform/core';\nimport { AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core';\nimport { merge } from 'lodash-es';\nimport { AXPSettingDefinition, AXPSettingDefinitionGroup, AXPSettingDefinitionSection } from './index';\nimport { AXPPlatformScopeKey, AXPGridLayoutOptions } from '@acorex/platform/core';\n\nexport class AXPSettingDefinitionProviderContext {\n private rootGroups: AXPSettingDefinitionGroup[] = [];\n private groupMap: Map<string, AXPSettingDefinitionGroup> = new Map();\n\n addGroup(name: string, title: string, description?: string, icon?: string): AXPSettingDefinitionGroupBuilder {\n const newGroup: AXPSettingDefinitionGroup = {\n name,\n title,\n description,\n icon,\n groups: [],\n sections: [],\n };\n\n this.rootGroups.push(newGroup);\n this.groupMap.set(name, newGroup); // Index by name\n return new AXPSettingDefinitionGroupBuilder(this, newGroup);\n }\n\n group(name: string): AXPSettingDefinitionGroupBuilder | null {\n const foundGroup = this.groupMap.get(name);\n if (!foundGroup) {\n console.error(`Group with name \"${name}\" not found.`);\n return null;\n }\n return new AXPSettingDefinitionGroupBuilder(this, foundGroup);\n }\n\n getGroups(): AXPSettingDefinitionGroup[] {\n return this.rootGroups;\n }\n\n // Expose groupMap for controlled access\n hasGroup(name: string): boolean {\n return this.groupMap.has(name);\n }\n\n getGroup(name: string): AXPSettingDefinitionGroup | undefined {\n return this.groupMap.get(name);\n }\n}\n\nexport class AXPSettingDefinitionGroupBuilder {\n private context: AXPSettingDefinitionProviderContext;\n private group: AXPSettingDefinitionGroup;\n\n constructor(context: AXPSettingDefinitionProviderContext, group: AXPSettingDefinitionGroup) {\n this.context = context;\n this.group = group;\n }\n\n addSection(name: string, title: string, description?: string): AXPSettingDefinitionSectionBuilder {\n const newSection: AXPSettingDefinitionSection = {\n name,\n title,\n description: description,\n settings: [],\n };\n this.group.sections.push(newSection);\n return new AXPSettingDefinitionSectionBuilder(this, newSection);\n }\n\n section(name: string): AXPSettingDefinitionSectionBuilder | null {\n const foundSection = this.group.sections.find((section) => section.name === name);\n if (!foundSection) {\n throw new Error(`Section with name \"${name}\" not found in group \"${this.group.name}\".`);\n }\n return new AXPSettingDefinitionSectionBuilder(this, foundSection);\n }\n\n addGroup(name: string, title: string, description?: string, icon?: string): AXPSettingDefinitionGroupBuilder {\n const newGroup: AXPSettingDefinitionGroup = {\n name,\n title,\n description: description,\n icon,\n groups: [],\n sections: [],\n };\n this.group.groups.push(newGroup);\n if (this.context.hasGroup(name)) {\n throw new Error(`Group with name \"${name}\" already exists.`);\n }\n this.context['groupMap'].set(name, newGroup);\n return new AXPSettingDefinitionGroupBuilder(this.context, newGroup);\n }\n\n endGroup(): AXPSettingDefinitionProviderContext {\n return this.context;\n }\n}\n\nexport class AXPSettingDefinitionSectionBuilder {\n private groupBuilder: AXPSettingDefinitionGroupBuilder;\n private section: AXPSettingDefinitionSection;\n\n constructor(groupBuilder: AXPSettingDefinitionGroupBuilder, section: AXPSettingDefinitionSection) {\n this.groupBuilder = groupBuilder;\n this.section = section;\n }\n\n addSetting(setting: {\n key: string;\n title: string;\n scope: AXPPlatformScopeKey;\n widget: {\n type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | string;\n options?: AXPOptionsData;\n triggers?: AXPWidgetTriggers;\n layout?: AXPGridLayoutOptions;\n };\n description?: string;\n isRequired?: boolean;\n isInherited?: boolean;\n isEncrypted?: boolean;\n defaultValue?: unknown;\n valueTransforms?: AXPValueTransformerFunctions;\n validationRules?: AXPValidationRules;\n }): this {\n const newSetting: AXPSettingDefinition = {\n name: setting.key,\n title: setting.title,\n description: setting.description,\n isRequired: setting.isRequired ?? false,\n isInherited: setting.isInherited ?? false,\n isEncrypted: setting.isEncrypted ?? false,\n defaultValue: setting.defaultValue,\n scope: setting.scope ?? 'P',\n layout: setting.widget.layout,\n widget: {\n type: setting.widget.type,\n name: setting.key,\n path: setting.key,\n defaultValue: setting.defaultValue,\n options: merge(setting.widget.options ?? {},\n {\n label: Object.keys(setting.widget.options ?? {}).includes('label') ? setting.widget.options?.['label'] : setting.title,\n validationRules: setting.validationRules ?? [],\n }),\n valueTransforms: setting.valueTransforms,\n triggers: setting.widget.triggers,\n },\n } as AXPSettingDefinition;\n this.section.settings.push(newSetting);\n return this;\n }\n\n endSection(): AXPSettingDefinitionGroupBuilder {\n return this.groupBuilder;\n }\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport {\n AXPGroupSearchResult,\n AXPSettingDefinitionGroup,\n AXPSettingDefaultValuesProvider,\n} from './settings.types';\nimport { AXPSettingDefinitionProviderContext } from './setting.builder';\nimport { AXPPlatformScope, AXPPlatformScopeKey } from '@acorex/platform/core';\nimport { sortBy } from 'lodash-es';\n// Interface for setting providers\nexport interface AXPSettingDefinitionProvider {\n provide(context: AXPSettingDefinitionProviderContext): Promise<void>;\n}\n\n// Injection token for setting providers\nexport const AXP_SETTING_DEFINITION_PROVIDER = new InjectionToken<AXPSettingDefinitionProvider[]>('AXP_SETTING_DEFINITION_PROVIDER');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSettingDefinitionProviderService {\n private providers = inject(AXP_SETTING_DEFINITION_PROVIDER, { optional: true });\n private cache: AXPSettingDefinitionGroup[] | null = null;\n\n private async load(): Promise<void> {\n if (this.cache) {\n return\n }\n const context = new AXPSettingDefinitionProviderContext();\n \n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n }\n }\n\n this.cache = context.getGroups();\n }\n\n public async reload(): Promise<void> {\n this.cache = null;\n await this.load();\n }\n\n public async getListAsync(scope: AXPPlatformScopeKey): Promise<AXPSettingDefinitionGroup[]> {\n await this.load();\n return this.getList(scope);\n }\n\n public getList(scope: AXPPlatformScopeKey): AXPSettingDefinitionGroup[] {\n if (!this.cache) {\n return [];\n }\n\n const scopeOrder = ['P', 'T', 'U']; // Scopes hierarchy in ascending order\n\n const filterByScope = (\n groups: AXPSettingDefinitionGroup[],\n currentScope: AXPPlatformScopeKey\n ): AXPSettingDefinitionGroup[] => {\n const currentScopeIndex = scopeOrder.indexOf(currentScope);\n\n return groups\n .map((group) => ({\n ...group,\n sections: group.sections.map((section) => ({\n ...section,\n settings: section.settings.filter((setting) => {\n const settingScopeIndex = scopeOrder.indexOf(setting.scope);\n\n // Include settings where:\n // 1. The scope matches the requested scope.\n if (setting.scope === currentScope) return true;\n\n // 2. The setting scope is higher (closer to 'U') and is inherited.\n if (\n setting.isInherited &&\n settingScopeIndex > currentScopeIndex // Higher scope\n ) {\n return true;\n }\n\n // 3. Exclude settings with a lower or irrelevant scope.\n return false;\n }),\n })).filter((section) => section.settings.length > 0), // Keep only sections with settings\n groups: filterByScope(group.groups, currentScope), // Recursively filter nested groups\n }))\n .filter((group) => group.sections.length > 0 || group.groups.length > 0); // Keep groups with valid sections or nested groups\n };\n\n return sortBy(filterByScope(this.cache, scope), 'title');\n }\n\n\n\n\n async defaultValues(): Promise<Record<string, unknown>> {\n const defaults: Record<string, unknown> = {};\n\n const collectDefaults = (groups: AXPSettingDefinitionGroup[]) => {\n groups.forEach((group) => {\n group.sections.forEach((section) => {\n section.settings.forEach((setting) => {\n if (setting.defaultValue !== undefined) {\n defaults[setting.name] = setting.defaultValue;\n }\n });\n });\n collectDefaults(group.groups);\n });\n };\n\n if (!this.cache) {\n await this.load();\n }\n collectDefaults(this.cache!);\n\n return defaults;\n }\n\n public findGroup(scope: AXPPlatformScopeKey, groupName: string): AXPGroupSearchResult {\n return this.searchRecursive(this.getList(scope), groupName, []); // Initialize with an empty breadcrumb\n }\n\n private searchRecursive(\n groups: AXPSettingDefinitionGroup[],\n groupName: string,\n breadcrumb: { name: string; title: string }[]\n ): AXPGroupSearchResult {\n for (const group of groups) {\n const currentBreadcrumb = [...breadcrumb, { name: group.name, title: group.title, description: group.description }];\n\n // If the group name matches, return its details\n if (group.name === groupName) {\n return {\n breadcrumb: currentBreadcrumb,\n sections: group.sections.length > 0 ? group.sections : null,\n groups: group.groups.length > 0 ? group.groups : null,\n };\n }\n\n // Recursively search in nested groups\n const nestedResult = this.searchRecursive(group.groups, groupName, currentBreadcrumb);\n if (nestedResult.breadcrumb.length > 0) {\n return nestedResult;\n }\n }\n\n // If no matching group is found\n return {\n breadcrumb: [],\n groups: [],\n sections: []\n };\n }\n}\n\n// Multi-provider token for higher-layer default values\nexport const AXP_SETTING_DEFAULT_VALUES_PROVIDERS = new InjectionToken<AXPSettingDefaultValuesProvider[]>\n ('AXP_SETTING_DEFAULT_VALUES_PROVIDERS', {\n providedIn: 'root',\n factory: () => [],\n });\n\n// Aggregator service that merges definition defaults with higher-layer providers (by priority)\n@Injectable({ providedIn: 'root' })\nexport class AXPSettingDefaultValuesAggregatorService {\n private readonly definitionService = inject(AXPSettingDefinitionProviderService);\n private readonly providers = inject(AXP_SETTING_DEFAULT_VALUES_PROVIDERS, { optional: true }) ?? [];\n\n async getDefaults(): Promise<Record<string, unknown>> {\n const baseDefaults = await this.definitionService.defaultValues();\n const ordered = [...this.providers].sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n const merged: Record<string, unknown> = { ...baseDefaults };\n for (const provider of ordered) {\n try {\n const overrideMap = await provider.provide();\n Object.assign(merged, overrideMap);\n } catch (err) {\n console.error('AXPSettingDefaultValuesProvider failed:', err);\n }\n }\n return merged;\n }\n}","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPBroadcastEventService, AXPPlatformScope } from '@acorex/platform/core';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { cloneDeep, get } from 'lodash-es';\nimport { distinctUntilChanged, Subject } from 'rxjs';\nimport { AXP_SETTING_VALUE_PROVIDER } from './settings.provider';\nimport { AXPSettingChangedEvent, AXPSettingValue, AXPSettingValueProvider } from './settings.types';\nimport { AXPSettingDefaultValuesAggregatorService } from './setting-definition.service';\n\nexport interface AXPSettingsServiceInterface {\n load(): Promise<AXPSettingValue[]>;\n get<T = any>(key: string): Promise<T>;\n defaultValues(scope: AXPPlatformScope): Promise<Record<string, unknown>>;\n scope(scope: AXPPlatformScope): ScopedSettingService;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPSettingsService implements AXPSettingsServiceInterface {\n private readonly providers: AXPSettingValueProvider[] = inject<AXPSettingValueProvider[]>(AXP_SETTING_VALUE_PROVIDER);\n private readonly injector = inject(Injector);\n private readonly eventService = inject(AXPBroadcastEventService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly scopedSettingsCache: Map<string, Map<string, any>> = new Map();\n public readonly onChanged = new Subject<AXPSettingChangedEvent>();\n public readonly onLoaded = new Subject<void>();\n\n constructor() {\n // Initialize scoped caches for dynamic scopes\n const staticScopes = [\n AXPPlatformScope.Platform,\n AXPPlatformScope.Tenant,\n AXPPlatformScope.User,\n ];\n staticScopes.forEach((scope) => {\n if (!this.scopedSettingsCache.has(scope)) {\n this.scopedSettingsCache.set(scope, new Map());\n }\n });\n\n // Listen for setting changes from other tabs\n this.eventService.listen<AXPSettingChangedEvent>('AXPSettingChangedEvent').subscribe((event) => {\n const data = event.data;\n data.keys.forEach((key) => {\n this.scopedSettingsCache.get(data.scope)?.set(key, data.values[key]);\n });\n this.onChanged.next(data); // Notify subscribers in the current tab\n });\n // reload settings when user is authenticated\n this.sessionService.isAuthenticated$.pipe(distinctUntilChanged()).subscribe(async (isAuthenticated) => {\n if (isAuthenticated) {\n await this.reload();\n }\n });\n }\n\n async reload(): Promise<void> {\n await this.load();\n }\n\n async load(): Promise<AXPSettingValue[]> {\n try {\n const settingsList: AXPSettingValue[] = [];\n for (const provider of this.providers) {\n const scopeCache = this.scopedSettingsCache.get(provider.scope) ?? new Map();\n const providerSettings = await provider.load();\n providerSettings.forEach((setting) => {\n scopeCache.set(setting.key, setting.value);\n });\n settingsList.push(...providerSettings);\n }\n this.onLoaded.next();\n return settingsList;\n } catch (error) {\n console.error('Error loading settings', error);\n throw error;\n }\n }\n\n async get<T = any>(key: string): Promise<T> {\n if (this.scopedSettingsCache.size === 0) {\n await this.load();\n }\n const scopeOrder = [\n AXPPlatformScope.User,\n AXPPlatformScope.Tenant,\n AXPPlatformScope.Platform,\n ];\n for (const scope of scopeOrder) {\n const scopeCache = this.scopedSettingsCache.get(scope);\n if (scopeCache && scopeCache.has(key)) {\n const value = scopeCache.get(key);\n if (value !== undefined && value !== null) {\n return cloneDeep(value) as T;\n }\n }\n }\n const defaults = await this.injector.get(AXPSettingDefaultValuesAggregatorService).getDefaults();\n return get(defaults, key) as T; // Fallback if no value is found\n }\n\n async defaultValues(scope: AXPPlatformScope): Promise<Record<string, unknown>> {\n let scopeOrder = [\n AXPPlatformScope.Platform,\n AXPPlatformScope.Tenant,\n AXPPlatformScope.User,\n ].reverse();\n const scopeIndex = scopeOrder.indexOf(scope);\n\n if (scopeIndex === -1) {\n throw new Error(`Invalid scope: ${scope}`);\n }\n scopeOrder = scopeOrder.slice(scopeIndex + 1);\n // Accumulate defaults from the current scope and higher scopes\n const accumulatedDefaults: Record<string, unknown> = {};\n for (let i = scopeIndex; i < scopeOrder.length; i++) {\n const currentScope = scopeOrder[i];\n const scopeCache = this.scopedSettingsCache.get(currentScope);\n\n if (scopeCache) {\n scopeCache.forEach((value, key) => {\n if (!(key in accumulatedDefaults)) {\n accumulatedDefaults[key] = value;\n }\n });\n }\n }\n\n // Merge with aggregated default values (definition + higher-layer providers)\n const globalDefaults = await this.injector.get(AXPSettingDefaultValuesAggregatorService).getDefaults();\n return { ...globalDefaults, ...accumulatedDefaults };\n }\n\n scope(scope: AXPPlatformScope): ScopedSettingService {\n const provider = this.providers.find((p) => p.scope === scope);\n if (!provider) {\n throw new Error(`No provider found for scope: ${scope}`);\n }\n return new ScopedSettingService(this, provider, this.scopedSettingsCache.get(scope)!);\n }\n\n invokeChangeEvent(event: AXPSettingChangedEvent) {\n this.onChanged.next(event);\n this.eventService.publish<AXPSettingChangedEvent>('AXPSettingChangedEvent', event);\n }\n}\n\nclass ScopedSettingService {\n constructor(\n private parent: AXPSettingsService,\n private provider: AXPSettingValueProvider,\n private scopeCache: Map<string, any>,\n ) { }\n\n async get<T = any>(key: string): Promise<T> {\n const settings = await this.provider.load();\n const setting = settings.find((s) => s.key === key);\n return setting ? cloneDeep(setting.value) : undefined!;\n }\n\n async all(): Promise<any> {\n const settings = await this.provider.load();\n return Object.fromEntries(settings.map((s) => [s.key, cloneDeep(s.value)]));\n }\n\n async defaultValues(): Promise<Record<string, unknown>> {\n return this.parent.defaultValues(this.provider.scope);\n }\n\n async set<T = any>(key: string, value: T): Promise<void>;\n async set<T = any>(values: Record<string, T>): Promise<void>;\n async set<T = any>(keyOrValues: string | Record<string, T>, value?: T): Promise<void> {\n if (typeof keyOrValues === 'string') {\n // Single key-value pair\n await this.provider.set(keyOrValues, value);\n this.scopeCache.set(keyOrValues, value); // Sync the cache\n this.parent.invokeChangeEvent({\n scope: this.provider.scope,\n keys: [keyOrValues],\n values: { [keyOrValues]: value },\n entries: [{ key: keyOrValues, value }],\n });\n } else {\n // Multiple key-value pairs\n await this.provider.set(keyOrValues);\n Object.entries(keyOrValues).forEach(([key, val]) => this.scopeCache.set(key, val)); // Sync the cache\n const entries = Object.entries(keyOrValues).map(([key, val]) => ({ key, value: val }));\n this.parent.invokeChangeEvent({\n scope: this.provider.scope,\n keys: Object.keys(keyOrValues),\n values: keyOrValues,\n entries,\n });\n }\n }\n\n async update<T = any>(key: string, updateFn: (currentValue: T) => T): Promise<void> {\n const currentValue = await this.get<T>(key);\n const newValue = updateFn(currentValue);\n await this.set(key, newValue);\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\n\nimport { AXPRegionalSetting } from './regional-settings.keys';\nimport { AXPSettingsService } from './settings.service';\n\nconst DEFAULT_APPLY_DEFAULT_MULTILANGUAGE = true;\n\n/**\n * Synchronous access to default multi-language behavior for named entity fields and widget\n * property bindings. Mirrors {@link AXPLayoutOrderingConfigService}: avoids async in entity\n * modifiers and startup deadlocks.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPDefaultMultiLanguageConfigService {\n private readonly settingsService = inject(AXPSettingsService);\n\n private readonly _applyDefault = signal<boolean>(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n private syncScheduled = false;\n\n constructor() {\n this.settingsService.onLoaded.subscribe(() => this.syncFromSettings());\n this.settingsService.onChanged.subscribe(() => this.syncFromSettings());\n }\n\n getApplyDefaultMultiLanguage(): boolean {\n if (!this.syncScheduled) {\n this.syncScheduled = true;\n this.settingsService\n .get<boolean>(AXPRegionalSetting.MultiLanguageSupport)\n .then((value) => this._applyDefault.set(value ?? DEFAULT_APPLY_DEFAULT_MULTILANGUAGE))\n .catch(() => this._applyDefault.set(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE));\n }\n return this._applyDefault();\n }\n\n private async syncFromSettings(): Promise<void> {\n try {\n const value = await this.settingsService.get<boolean>(AXPRegionalSetting.MultiLanguageSupport);\n this._applyDefault.set(value ?? DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n } catch {\n this._applyDefault.set(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n }\n }\n}\n","/**\n * Shared multi-language defaults for entity properties and widget property bindings.\n *\n * **Circular dependencies:** use only `import type` for `AXPWidgetProperty` and\n * `AXPEntityProperty` so this module has no runtime imports from widget-core or application\n * types — `@acorex/platform/layout/widget-core` does not import `@acorex/platform/common`.\n */\nimport type { AXPWidgetNode, AXPWidgetProperty } from '@acorex/platform/layout/widget-core';\n\nimport type { AXPEntityProperty } from '../app/application.types';\n\n//#region ---- Constants ----\n\n/**\n * Widget types that support the multiLanguage option (text / rich text editors).\n */\nexport const MULTILANGUAGE_CAPABLE_WIDGET_TYPES = new Set<string>([\n 'text-editor',\n 'large-text-editor',\n 'rich-text-editor',\n 'template-content-editor',\n]);\n\n/**\n * Common property names / binding path segments that are usually translatable when the feature is\n * enabled in settings. Explicit `multiLanguage` on the property still wins.\n */\nexport const DEFAULT_MULTILANGUAGE_FIELD_NAMES = new Set<string>([\n 'title',\n 'description',\n 'note',\n 'content',\n /** e.g. `post.summaryContent` — last path segment */\n 'summaryContent',\n 'question',\n 'summary',\n 'body',\n 'caption',\n 'remarks',\n 'subtitle',\n 'label',\n 'placeholder',\n 'message',\n 'subject',\n]);\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction interfacePathLastSegment(path: string | undefined): string | null {\n if (path == null || typeof path !== 'string' || !path.length) {\n return null;\n }\n const seg = path.includes('.') ? path.split('.').pop() : path;\n return seg && seg.length ? seg : null;\n}\n\nexport function shouldApplyDefaultMultiLanguageToEntityProperty(prop: AXPEntityProperty): boolean {\n if (prop.schema.dataType !== 'string') {\n return false;\n }\n if (!DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(prop.name)) {\n return false;\n }\n const widgetType = prop.schema.interface?.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const opts = prop.schema.interface?.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\nexport function shouldApplyDefaultMultiLanguageToWidgetProperty(prop: AXPWidgetProperty): boolean {\n if (prop.schema.dataType !== 'string') {\n return false;\n }\n const key = interfacePathLastSegment(prop.schema.interface.path);\n if (!key || !DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(key)) {\n return false;\n }\n const widgetType = prop.schema.interface.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const opts = prop.schema.interface.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\n/**\n * Leaf widget nodes in entity `schema.interface` trees (e.g. GridLayout → RichText under `pre` /\n * `post`) — same path/type rules as {@link shouldApplyDefaultMultiLanguageToWidgetProperty}, without\n * `schema.dataType` (nodes do not carry entity schema).\n */\nexport function shouldApplyDefaultMultiLanguageToWidgetNode(node: AXPWidgetNode): boolean {\n const widgetType = node.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const key = interfacePathLastSegment(node.path);\n if (!key || !DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(key)) {\n return false;\n }\n const opts = node.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\n/**\n * When {@link AXPDefaultMultiLanguageConfigService#getApplyDefaultMultiLanguage} is true, sets\n * `options.multiLanguage` on eligible editor leaves inside an entity property's widget tree\n * (including nested layouts). Used by entity middleware so object fields (e.g. `pre`, `post`) are\n * covered, not only top-level string properties.\n */\nexport function withDefaultMultiLanguageOnWidgetNodeTree(\n root: AXPWidgetNode | undefined | null,\n applyDefault: boolean,\n): AXPWidgetNode | undefined | null {\n if (root == null || !applyDefault) {\n return root ?? undefined;\n }\n return visitWidgetNodeForDefaultMultiLanguage(root);\n}\n\nfunction visitWidgetNodeForDefaultMultiLanguage(node: AXPWidgetNode): AXPWidgetNode {\n let next = node;\n if (node.children?.length) {\n const newChildren = node.children.map((child) => visitWidgetNodeForDefaultMultiLanguage(child));\n if (newChildren.some((c, i) => c !== node.children![i])) {\n next = { ...node, children: newChildren };\n }\n }\n if (shouldApplyDefaultMultiLanguageToWidgetNode(next)) {\n return {\n ...next,\n options: {\n ...((next.options ?? {}) as Record<string, unknown>),\n multiLanguage: true,\n },\n };\n }\n return next;\n}\n\n/**\n * When {@link AXPDefaultMultiLanguageConfigService#getApplyDefaultMultiLanguage} is true, sets\n * `schema.interface.options.multiLanguage` for eligible string widget properties (same rules as\n * entity middleware), unless the property already specifies `multiLanguage`.\n */\nexport function withDefaultMultiLanguageOnWidgetProperty(\n prop: AXPWidgetProperty,\n applyDefault: boolean,\n): AXPWidgetProperty {\n if (!applyDefault || !shouldApplyDefaultMultiLanguageToWidgetProperty(prop)) {\n return prop;\n }\n const iface = prop.schema.interface;\n const existingOpts = (iface.options ?? {}) as Record<string, unknown>;\n return {\n ...prop,\n schema: {\n ...prop.schema,\n interface: {\n ...iface,\n options: {\n ...existingOpts,\n multiLanguage: true,\n },\n },\n },\n };\n}\n\n//#endregion\n","import { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from '@acorex/platform/core';\nimport { inject } from '@angular/core';\n\nimport { AXPSettingsService } from './settings.service';\n\n//#region ---- Settings expression scope ----\n\n/**\n * Exposes platform settings in expression strings, e.g.\n * `{{ settings.get('Common:Setting:Entity.ShowPageBadge') }}`.\n */\nexport class AXPSettingsEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n private readonly settingsService = inject(AXPSettingsService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('settings', {\n get: async (key: string) => {\n return await this.settingsService.get(key);\n },\n });\n }\n}\n\n//#endregion\n","export enum AXPHomePageSettings {\n UserHomePath = 'Common:Setting:Startup.HomePage',\n}","import { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { Route, Router, Routes } from '@angular/router';\nimport { merge } from 'rxjs';\nimport { AXPSettingsService } from '../settings';\nimport { AXPHomePageSettings } from './home-page-settings.key';\nimport { AXP_HOME_PAGE_DEFAULT_KEY, AXP_HOME_PAGES, AXPHomePageDefinition } from './home-page.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPHomePageService {\n private defaultHomePageKey = inject<string>(AXP_HOME_PAGE_DEFAULT_KEY, { optional: true }) ?? 'home';\n private userHomePageKey: string | null = null;\n private candidates = inject<AXPHomePageDefinition[]>(AXP_HOME_PAGES, { optional: true }) ?? [];\n private settingsService = inject(AXPSettingsService);\n private sessionService = inject(AXPSessionService);\n private injector = inject(Injector);\n private originalConfig: Routes | null = null;\n private loginPath = 'auth/login';\n\n private get flatCandidates() {\n return this.candidates.flatMap((c) => c);\n }\n\n constructor() {\n // remove circular dependency\n setTimeout(async () => {\n await this.init();\n });\n }\n\n private async init() {\n await this.load();\n //\n const keys = [AXPHomePageSettings.UserHomePath];\n this.settingsService.onChanged.subscribe(async (c) => {\n if (keys.some((k) => c.keys.includes(k))) {\n await this.load();\n this.refreshRoutes();\n }\n });\n //\n merge(this.sessionService.status$, this.sessionService.application$, this.sessionService.tenant$).subscribe(\n async (data) => {\n await this.load();\n this.refreshRoutes();\n },\n );\n }\n\n async load() {\n this.userHomePageKey = await this.settingsService.get(AXPHomePageSettings.UserHomePath);\n }\n\n getRegisteredList(): AXPHomePageDefinition[] {\n return this.flatCandidates.filter((c) => c.route);\n }\n\n getRegisteredRoutes(): Routes {\n const defaultHomePage = this.flatCandidates.find((c) => c.key === this.defaultHomePageKey);\n\n const home =\n this.flatCandidates.find((c) => this.userHomePageKey && c.key === this.userHomePageKey) ?? defaultHomePage;\n if (home && home.route && this.sessionService.application?.name) {\n const fullPath = this.findPath(home.route);\n return [\n { path: '', redirectTo: fullPath, pathMatch: 'full' },\n { path: ':app', redirectTo: fullPath, pathMatch: 'full' },\n { ...home?.route, ...{ data: { key: home?.key, title: home?.title, path: fullPath } } },\n ];\n }\n return [{ path: '', redirectTo: this.loginPath, pathMatch: 'full' }];\n }\n\n getCurrent(): { path: string; title: string } {\n const key = this.userHomePageKey ?? this.defaultHomePageKey;\n const homePage = this.getRegisteredRoutes().find((c) => c.data?.['key'] === key)!;\n if (homePage) {\n return {\n path: homePage.data?.['path'],\n title: homePage.data?.['title'],\n };\n }\n return {\n path: this.loginPath,\n title: '',\n };\n }\n\n private findPath(target: Route): string {\n const rawPath = this.buildFullPaths(target).join('/');\n const appName = this.sessionService.application?.name;\n if (appName) {\n return rawPath.replace(':app', appName);\n }\n return rawPath;\n }\n\n private buildFullPaths(route: Route, parentPath: string[] = []): string[] {\n const segments = [...parentPath];\n if (route.path) {\n segments.push(route.path);\n }\n\n // Recursively search the first matched child (deepest first match)\n if (route.children?.length) {\n return this.buildFullPaths(route.children[0], segments);\n }\n\n return segments;\n }\n\n private refreshRoutes() {\n const router = this.injector.get(Router);\n\n // 👇 On first call, remember what was there before:\n if (!this.originalConfig) {\n this.originalConfig = router.config;\n }\n\n this.applyMergedConfig(router);\n }\n\n private applyMergedConfig(router: Router) {\n const newHomeRoutes = this.getRegisteredRoutes(); // your 3 home entries\n\n // Filter the original routes to drop the old home placeholders.\n // We know your dynamic routes always have path === '' or ':app'\n // or carry a `data.key` matching one of your home-page keys.\n const otherRoutes = (this.originalConfig ?? []).filter(\n (r) => r.path !== '' && r.path !== ':app' && !(r.data && typeof r.data['key'] === 'string'),\n );\n\n // Build the new merged tree\n const merged: Routes = [...newHomeRoutes, ...otherRoutes];\n // TODO: check this for custom menu like :app/terms\n router.resetConfig(merged);\n }\n\n async navigateTo() {\n // wait for the router to be initialized\n setTimeout(() => {\n const router = this.injector.get(Router);\n const current = this.getCurrent();\n router.navigate([current.path], { onSameUrlNavigation: 'reload' });\n }, 100);\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from \"@angular/core\";\nimport { Routes, ROUTES } from \"@angular/router\";\nimport { AXPHomePageService } from \"./home-page.service\";\n\nfunction dynamicRoutesFactory(): Routes {\n const service = inject(AXPHomePageService);\n return service.getRegisteredRoutes();\n}\n\nexport function provideDynamicHomePage(): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: ROUTES,\n useFactory: dynamicRoutesFactory,\n multi: true\n }\n ]);\n}","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPPlatformScope, objectKeyValueTransforms } from '@acorex/platform/core';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '../settings';\nimport { AXPHomePageSettings } from './home-page-settings.key';\nimport { AXPHomePageService } from './home-page.service';\nimport { AXP_HOME_PAGE_DEFAULT_KEY } from './home-page.types';\n\n@Injectable()\nexport class AXPHomePageSettingProvider implements AXPSettingDefinitionProvider {\n private readonly translateService = this.injector.get(AXTranslationService);\n private readonly homePageService = this.injector.get(AXPHomePageService);\n private defaultHomePageKey = inject<string>(AXP_HOME_PAGE_DEFAULT_KEY, { optional: true }) ?? 'home';\n\n constructor(private injector: Injector) { }\n\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n const trans = async (key: string) =>\n await this.translateService.translateAsync(`@general:settings.${key}`);\n\n const list = await this.homePageService.getRegisteredList().map((c) => ({ id: c.key, title: c.title }));\n if (list.length === 0) {\n return;\n }\n\n // Define the 'General Settings' group\n context\n .addGroup('general', await trans('general.title'), await trans('general.description'), 'fa-light fa-palette')\n\n // Add the 'Startup' section\n .addSection('startup', await trans('general.startup.title'), await trans('general.startup.description'))\n // Add the 'Home Page' setting\n .addSetting({\n key: AXPHomePageSettings.UserHomePath,\n title: await trans('general.startup.home-page.title'),\n scope: AXPPlatformScope.User,\n isInherited: true,\n defaultValue: this.defaultHomePageKey || list[0].id,\n valueTransforms: objectKeyValueTransforms('id'),\n widget: {\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'id',\n textField: 'title',\n dataSource: list,\n },\n },\n description: await trans('general.startup.home-page.description'),\n })\n\n // End the 'Startup' section\n .endSection()\n\n // End the 'General Settings' group\n .endGroup();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AXP_SETTING_DEFINITION_PROVIDER } from '../settings';\nimport { AXPHomePageSettingProvider } from './home-page-settings.provider';\n\n@NgModule({\n imports: [],\n providers: [\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXPHomePageSettingProvider,\n multi: true,\n },\n ],\n})\nexport class AXPHomePageModule {}\n","export abstract class AXPDataProvider {\n abstract insertOne(entity: any, entityItem: any): Promise<any>;\n abstract insertMany(entity: any, entityList: any): Promise<any>;\n abstract getOne(entity: any, id: string): Promise<any>;\n abstract getMany(entity: any, params?: any): Promise<any>;\n abstract updateOne(entity: any, id?: string, data?: { [key: string]: any }): Promise<any>;\n abstract deleteOne(entity: any, id: string): Promise<any>;\n abstract getFirst(entity: any): Promise<any>;\n abstract uploadFile(file: File, title: string, customUrl?: string): Promise<string>;\n abstract updateFile(id:string,file: File, title: string, customUrl?: string): Promise<string>;\n abstract uploadMultipleFiles(files: File[], title: string): Promise<string[]>;\n abstract viewFile(id: string, name: string): Promise<Blob>;\n abstract downloadFile(id: string, name: string): Promise<Blob>;\n}\n","import { AXDataSourceOperator } from '@acorex/cdk/common';\nimport { Injectable } from '@angular/core';\n\nexport abstract class AXPCustomOperatorService {\n abstract getCustomOperators(): { [key: string]: AXDataSourceOperator };\n}\n\n@Injectable()\nexport class AXPCustomOperatorServiceImpl extends AXPCustomOperatorService {\n getCustomOperators(): { [key: string]: AXDataSourceOperator } {\n return {};\n }\n}\n","import { AXDataSourceFilterOption, AXDataSourceOperator } from '@acorex/cdk/common';\nimport { inject, Injectable } from '@angular/core';\nimport { ALL_DEFAULT_OPERATORS } from '../app';\nimport { AXPCustomOperatorService } from './operators.service';\n\nexport abstract class AXPFilterOperatorMiddlewareService {\n /**\n * Middleware to transform selected filters into corresponding operators.\n * @param filters Array of selected filters (e.g., user input).\n * @param customOperators Optional custom operators map to override default operators.\n * @returns Transformed filters based on custom or default operators.\n */\n abstract transformFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[];\n\n /**\n * Helper method to transform a single filter. This handles recursion for nested filters.\n * @param filter A single filter object.\n * @returns Transformed filter.\n */\n abstract transformFilter(filters: AXDataSourceFilterOption): AXDataSourceFilterOption;\n\n abstract getOperator(key: string): AXDataSourceOperator;\n}\n\n@Injectable()\nexport class AXPFilterOperatorMiddlewareServiceImpl extends AXPFilterOperatorMiddlewareService {\n private customOperatorService = inject(AXPCustomOperatorService);\n\n private operators: { [key: string]: AXDataSourceOperator } = {\n ...this.getDefaultOperators(),\n ...this.customOperatorService.getCustomOperators(),\n };\n\n transformFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[] {\n return filters.map((filter) => this.transformFilter(filter));\n }\n\n transformFilter(filter: AXDataSourceFilterOption): AXDataSourceFilterOption {\n const { operator, value, filters, field } = filter;\n // Find the operator (either default or custom)\n const filterOperator = this.operators[operator?.type ?? ''] || null;\n\n // Start by transforming the filter itself\n const transformedFilter: AXDataSourceFilterOption = {\n ...filter, // Keep the original filter structure\n operator: filterOperator ? filterOperator : operator, // Add operator name\n };\n\n // If the filter contains nested filters, recursively transform them\n if (filters && filters.length > 0) {\n transformedFilter.filters = this.transformFilters(filters); // Recursively transform nested filters\n }\n\n return transformedFilter;\n }\n\n getOperator(key: string) {\n return this.operators[key];\n }\n\n // Helper function to return the default operators\n private getDefaultOperators(): { [key: string]: AXDataSourceOperator } {\n return ALL_DEFAULT_OPERATORS.reduce(\n (acc, operator) => {\n acc[operator.name] = {\n type: operator.name as any,\n };\n return acc;\n },\n {} as { [key: string]: AXDataSourceOperator },\n );\n }\n}\n","import { Injectable, Injector } from \"@angular/core\";\nimport { AXPErrorHandler } from \"./error-handler.types\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXPErrorHandlerRegistryService {\n private errorHandlers: AXPErrorHandler[] = [];\n\n constructor(private injector: Injector) {\n }\n\n register(...plugins: (new () => AXPErrorHandler)[]) {\n plugins.forEach(t => {\n const childInjector = Injector.create({ providers: [{ provide: t, useClass: t, deps: [] }], parent: this.injector });\n const handler = childInjector.get(t);\n if (handler) {\n this.errorHandlers.push(handler);\n }\n })\n }\n\n\n public get handlers(): AXPErrorHandler[] {\n return this.errorHandlers;\n }\n}","import { ErrorHandler, Injectable, Injector } from \"@angular/core\";\nimport { AXPErrorHandlerRegistryService } from \"./error-handler-registry.service\";\n\n@Injectable({ providedIn: 'root' })\nexport class AXPGlobalErrorHandler extends ErrorHandler {\n\n\n\n constructor(private injector: Injector, private registry: AXPErrorHandlerRegistryService) {\n super()\n }\n\n override handleError(error: Error) {\n const handleErrorRecursively = (index: number, error: any) => {\n const errorHandlers = this.registry.handlers;\n if (index < errorHandlers.length) {\n errorHandlers[index].handleError(error, (err) => {\n handleErrorRecursively(index + 1, err);\n });\n } else {\n super.handleError(error); // Fallback to default handler\n }\n };\n if (error.message?.startsWith('NG0100')) {\n //ignore it\n return\n }\n handleErrorRecursively(0, error);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type AXPTokenDefinitionProviderToken =\n | AXPTokenDefinitionProvider\n | Promise<AXPTokenDefinitionProvider>;\n\nexport const AXP_TOKEN_DEFINITION_PROVIDER = new InjectionToken<AXPTokenDefinitionProviderToken[]>(\n 'AXP_TOKEN_DEFINITION_PROVIDER',\n {\n factory: () => [],\n },\n);\n\nexport interface AXPTokenDefinitionProvider<T = any> {\n name: string;\n title: string;\n description?: string;\n\n execute(): Promise<T> | T;\n}\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_TOKEN_DEFINITION_PROVIDER } from './token-definition.provider';\nimport { AXPTokenDefinition } from './token.types';\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPTokenDefinitionService {\n //#region ---- Providers & Caches ----\n\n private readonly definitionProviders = inject(AXP_TOKEN_DEFINITION_PROVIDER, { optional: true }) || [];\n\n /** Cache for definitions by name. */\n private definitionsByName: Map<string, AXPTokenDefinition> = new Map();\n\n\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Returns a token definition by its name.\n * First checks the cache, then queries all providers if not found.\n * @param name The token name.\n * @returns The token definition if found, undefined otherwise.\n */\n async getDefinition(name: string): Promise<AXPTokenDefinition | undefined> {\n // Check cache first\n if (this.definitionsByName.has(name)) {\n return this.definitionsByName.get(name);\n }\n // Not in cache, query providers\n // Resolve all providers (some may be promises, some may be arrays)\n const resolvedProviders = await Promise.all(this.definitionProviders);\n\n // Flatten the array - some providers may be arrays of providers (e.g., dynamic token providers)\n const flattenedProviders: AXPTokenDefinition[] = [];\n for (const provider of resolvedProviders) {\n if (Array.isArray(provider)) {\n // If provider is an array, add all items\n flattenedProviders.push(...provider);\n } else if (provider) {\n // If provider is a single provider, add it\n flattenedProviders.push(provider);\n }\n }\n\n const match = flattenedProviders.find(def => def?.name === name);\n if (match) {\n this.definitionsByName.set(name, match);\n return match;\n }\n return undefined;\n }\n\n /**\n * Gets the resolved value of a token by its name.\n * @param name The token name.\n * @returns The resolved token value, or undefined if the token is not found.\n */\n async getValue(name: string): Promise<any> {\n const definition = await this.getDefinition(name);\n if (definition) {\n return await definition.execute();\n }\n return undefined;\n }\n\n //#endregion\n\n //#region ---- Cache Management ----\n\n /** Clears the definitions by name cache. */\n clearDefinitionsCache(): void {\n this.definitionsByName.clear();\n }\n\n //#endregion\n}\n","\nimport { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from \"@acorex/platform/core\";\nimport { inject } from \"@angular/core\";\nimport { AXPTokenDefinitionService } from \"./token-definition.service\";\n\nexport class AXPTokenEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n\n protected tokenService = inject(AXPTokenDefinitionService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('tokens', {\n get: async (name: string) => {\n return await this.tokenService.getValue(name);\n }\n })\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n Output,\n Renderer2,\n} from '@angular/core';\n\n@Directive({\n selector: '[axpSticky]',\n exportAs: 'axpSticky',\n standalone: true,\n})\nexport class AXPStickyDirective {\n @Input('axpSticky') stickyClass!: string;\n @Input('stickyOffset') stickyOffset: number = 100;\n\n @Output() isStickyChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n private _isSticky: boolean = false;\n public get isSticky(): boolean {\n return this._isSticky;\n }\n public set isSticky(value: boolean) {\n if (this._isSticky !== value) {\n this._isSticky = value;\n this.isStickyChange.emit(value);\n }\n }\n\n private parentElement!: HTMLElement | Window;\n private targetElement!: HTMLElement;\n private mutationObserver!: MutationObserver;\n\n private readonly onWindowResize = (): void => {\n this.applyStickyStateFromScrollPosition();\n };\n\n @Input() stickyParent!: string | HTMLElement;\n @Input() stickyTarget!: string;\n\n constructor(\n private element: ElementRef<HTMLDivElement>,\n private renderer: Renderer2,\n private zone: NgZone,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngAfterViewInit() {\n this.initSticky();\n\n // Add mutation observer for dynamic content\n this.mutationObserver = new MutationObserver(() => {\n this.applyStickyStateFromScrollPosition();\n });\n\n this.mutationObserver.observe(this.element.nativeElement, {\n childList: true,\n subtree: true,\n });\n\n window.addEventListener('resize', this.onWindowResize);\n }\n\n private initSticky() {\n if (this.stickyParent instanceof HTMLElement) {\n this.parentElement = this.stickyParent;\n } else {\n this.parentElement = (document.querySelector(this.stickyParent) as HTMLElement) || window;\n }\n\n this.targetElement = (document.querySelector(this.stickyTarget) as HTMLElement) || this.element.nativeElement;\n\n this.parentElement.addEventListener('scroll', this.onParentScroll);\n this.applyStickyStateFromScrollPosition();\n }\n\n private getScrollTop(): number {\n return this.parentElement === window ? window.scrollY : (this.parentElement as HTMLElement).scrollTop;\n }\n\n /**\n * Toggle stuck styling only while this element is visually pinned (matches `position: sticky; top: 0`).\n * Scroll-offset thresholds would stay true for every section already passed, so multiple stacked stickies\n * would all keep `--stuck`; geometry fixes that.\n */\n private computeShouldStick(): boolean {\n if (this.getScrollTop() <= 0) {\n return false;\n }\n const tRect = this.targetElement.getBoundingClientRect();\n const epsilon = 3;\n let limitY: number;\n if (this.parentElement === window) {\n limitY = this.stickyOffset;\n } else {\n limitY = (this.parentElement as HTMLElement).getBoundingClientRect().top;\n }\n return tRect.top <= limitY + epsilon && tRect.top >= limitY - epsilon;\n }\n\n private applyStickyStateFromScrollPosition(): void {\n this.zone.runOutsideAngular(() => {\n const shouldStick = this.computeShouldStick();\n\n if (shouldStick !== this.isSticky) {\n this.zone.run(() => {\n this.isSticky = shouldStick;\n this.toggleStickyClasses(shouldStick);\n this.cdr.markForCheck();\n });\n }\n });\n }\n\n private onParentScroll = (): void => {\n this.applyStickyStateFromScrollPosition();\n };\n\n private toggleStickyClasses(isSticky: boolean): void {\n const classes = this.stickyClass.split(' ').filter(Boolean);\n classes.forEach((className) => {\n if (isSticky) {\n this.renderer.addClass(this.targetElement, className);\n } else {\n this.renderer.removeClass(this.targetElement, className);\n }\n });\n }\n\n ngOnDestroy() {\n this.parentElement.removeEventListener('scroll', this.onParentScroll);\n window.removeEventListener('resize', this.onWindowResize);\n\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n }\n }\n}\n","import { AXPMenuItem } from './menu.types';\nimport { AXPMenuItemFinder, AXPMenuMiddlewareContext } from './menu.middleware';\n\n//#region ---- Menu Context Builder ----\n\n/**\n * Creates a rich context for menu manipulation\n * Similar to entity modifier context pattern\n */\nexport function createMenuContext(items: AXPMenuItem[]): AXPMenuMiddlewareContext {\n const context: AXPMenuMiddlewareContext = {\n get items() {\n return items;\n },\n\n find(nameOrPattern: string | RegExp): AXPMenuItemFinder {\n if (typeof nameOrPattern === 'string') {\n return context.findByName(nameOrPattern);\n }\n const found = context.findByPattern(nameOrPattern);\n return found.length > 0 ? found[0] : createEmptyFinder();\n },\n\n findByName(name: string): AXPMenuItemFinder {\n return createMenuItemFinder(items, name);\n },\n\n findByPattern(pattern: string | RegExp): AXPMenuItemFinder[] {\n const regex = typeof pattern === 'string' ? wildcardToRegex(pattern) : pattern;\n const results: AXPMenuItemFinder[] = [];\n\n const searchRecursive = (itemList: AXPMenuItem[]) => {\n for (const item of itemList) {\n if (item.name && regex.test(item.name)) {\n results.push(createMenuItemFinder(items, item.name));\n }\n if (item.children) {\n searchRecursive(item.children);\n }\n }\n };\n\n searchRecursive(items);\n return results;\n },\n\n add(...newItems: AXPMenuItem[]): AXPMenuMiddlewareContext {\n items.push(...newItems);\n return context;\n },\n\n remove(predicate: (item: AXPMenuItem) => boolean): AXPMenuMiddlewareContext {\n removeRecursive(items, predicate);\n return context;\n },\n\n sort(): AXPMenuMiddlewareContext {\n sortItemsRecursively(items);\n return context;\n },\n\n toArray(): AXPMenuItem[] {\n return items;\n },\n };\n\n return context;\n}\n\n//#endregion\n\n//#region ---- Menu Item Finder Implementation ----\n\n/**\n * Creates a finder for a specific menu item\n */\nfunction createMenuItemFinder(rootItems: AXPMenuItem[], targetName: string): AXPMenuItemFinder {\n const findItemWithParent = (\n items: AXPMenuItem[],\n name: string,\n parent: { items: AXPMenuItem[] } = { items: rootItems }\n ): { item: AXPMenuItem | undefined; parent: { items: AXPMenuItem[] } } => {\n for (const item of items) {\n if (item.name === name) {\n return { item, parent };\n }\n if (item.children) {\n const result = findItemWithParent(item.children, name, { items: item.children });\n if (result.item) {\n return result;\n }\n }\n }\n return { item: undefined, parent };\n };\n\n const finder: AXPMenuItemFinder = {\n get(): AXPMenuItem | undefined {\n return findItemWithParent(rootItems, targetName).item;\n },\n\n exists(): boolean {\n return finder.get() !== undefined;\n },\n\n update(updater: Partial<AXPMenuItem> | ((item: AXPMenuItem) => Partial<AXPMenuItem>)): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item) {\n const updates = typeof updater === 'function' ? updater(item) : updater;\n Object.assign(item, updates);\n }\n return finder;\n },\n\n remove(): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index, 1);\n }\n }\n return finder;\n },\n\n hide(): AXPMenuItemFinder {\n // Hide by removing the item from menu\n return finder.remove();\n },\n\n show(): AXPMenuItemFinder {\n // Show is a no-op since items are visible by default\n // To truly implement show, we'd need to track removed items and re-add them\n console.warn('show() is not fully implemented - items are visible by default');\n return finder;\n },\n\n setPriority(priority: number): AXPMenuItemFinder {\n return finder.update({ priority });\n },\n\n addChildren(...children: AXPMenuItem[]): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item) {\n item.children = item.children || [];\n item.children.push(...children);\n }\n return finder;\n },\n\n removeChildren(predicate: (child: AXPMenuItem) => boolean): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item && item.children) {\n item.children = item.children.filter((c) => !predicate(c));\n }\n return finder;\n },\n\n moveTo(parentName: string | null | undefined): AXPMenuItemFinder {\n const { item, parent: oldParent } = findItemWithParent(rootItems, targetName);\n if (!item) {\n return finder;\n }\n\n // Remove from old parent\n const oldIndex = oldParent.items.indexOf(item);\n if (oldIndex !== -1) {\n oldParent.items.splice(oldIndex, 1);\n }\n\n // Add to new parent\n if (!parentName || parentName === '') {\n // Move to root (handles null, undefined, and empty string)\n rootItems.push(item);\n } else {\n const { item: newParentItem } = findItemWithParent(rootItems, parentName);\n if (newParentItem) {\n newParentItem.children = newParentItem.children || [];\n newParentItem.children.push(item);\n }\n }\n\n return finder;\n },\n\n insertBefore(...items: AXPMenuItem[]): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index, 0, ...items);\n }\n }\n return finder;\n },\n\n insertAfter(...items: AXPMenuItem[]): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index + 1, 0, ...items);\n }\n }\n return finder;\n },\n };\n\n return finder;\n}\n\n/**\n * Creates an empty finder for items not found\n */\nfunction createEmptyFinder(): AXPMenuItemFinder {\n return {\n get: () => undefined,\n exists: () => false,\n update: () => createEmptyFinder(),\n remove: () => createEmptyFinder(),\n hide: () => createEmptyFinder(),\n show: () => createEmptyFinder(),\n setPriority: () => createEmptyFinder(),\n addChildren: () => createEmptyFinder(),\n removeChildren: () => createEmptyFinder(),\n moveTo: () => createEmptyFinder(),\n insertBefore: () => createEmptyFinder(),\n insertAfter: () => createEmptyFinder(),\n };\n}\n\n//#endregion\n\n//#region ---- Helper Functions ----\n\n/**\n * Converts wildcard pattern to regex\n */\nfunction wildcardToRegex(pattern: string): RegExp {\n const escaped = pattern.replace(/[.+?^${}()|\\[\\]\\\\]/g, '\\\\$&');\n const regexStr = `^${escaped.replace(/\\*/g, '.*')}$`;\n return new RegExp(regexStr);\n}\n\n/**\n * Recursively removes items matching predicate\n */\nfunction removeRecursive(items: AXPMenuItem[], predicate: (item: AXPMenuItem) => boolean): void {\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i];\n if (predicate(item)) {\n items.splice(i, 1);\n } else if (item.children) {\n removeRecursive(item.children, predicate);\n }\n }\n}\n\n/**\n * Recursively sorts items by priority\n */\nfunction sortItemsRecursively(items: AXPMenuItem[]): void {\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n items.forEach((item) => {\n if (item.children && item.children.length > 0) {\n sortItemsRecursively(item.children);\n }\n });\n}\n\n//#endregion\n\n","import { InjectionToken } from '@angular/core';\nimport { AXPMenuItem } from './menu.types';\n\n//#region ---- Menu Middleware Context ----\n\n/**\n * Rich context API for manipulating menu items within middleware\n * Provides helper methods to find, update, remove, and add menu items easily\n */\nexport interface AXPMenuMiddlewareContext {\n /**\n * Get all menu items\n */\n readonly items: AXPMenuItem[];\n\n /**\n * Find menu item(s) by name or pattern\n */\n find(nameOrPattern: string | RegExp): AXPMenuItemFinder;\n\n /**\n * Find menu item by name (exact match)\n */\n findByName(name: string): AXPMenuItemFinder;\n\n /**\n * Find menu items by pattern (regex or wildcard)\n */\n findByPattern(pattern: string | RegExp): AXPMenuItemFinder[];\n\n /**\n * Add new menu items to root level\n */\n add(...items: AXPMenuItem[]): AXPMenuMiddlewareContext;\n\n /**\n * Remove menu items by predicate\n */\n remove(predicate: (item: AXPMenuItem) => boolean): AXPMenuMiddlewareContext;\n\n /**\n * Sort all menu items recursively by priority\n */\n sort(): AXPMenuMiddlewareContext;\n\n /**\n * Get the final menu items array\n */\n toArray(): AXPMenuItem[];\n}\n\n/**\n * Helper for finding and manipulating a specific menu item\n */\nexport interface AXPMenuItemFinder {\n /**\n * Get the found menu item (or undefined)\n */\n get(): AXPMenuItem | undefined;\n\n /**\n * Check if menu item exists\n */\n exists(): boolean;\n\n /**\n * Update menu item properties\n */\n update(updater: Partial<AXPMenuItem> | ((item: AXPMenuItem) => Partial<AXPMenuItem>)): AXPMenuItemFinder;\n\n /**\n * Remove the menu item\n */\n remove(): AXPMenuItemFinder;\n\n /**\n * Hide the menu item (removes it from the menu)\n */\n hide(): AXPMenuItemFinder;\n\n /**\n * Show the menu item (currently a no-op as items are visible by default)\n * Note: To truly implement show, we'd need to track removed items\n */\n show(): AXPMenuItemFinder;\n\n /**\n * Set priority\n */\n setPriority(priority: number): AXPMenuItemFinder;\n\n /**\n * Add children to this menu item\n */\n addChildren(...children: AXPMenuItem[]): AXPMenuItemFinder;\n\n /**\n * Remove children by predicate\n */\n removeChildren(predicate: (child: AXPMenuItem) => boolean): AXPMenuItemFinder;\n\n /**\n * Move menu item to a different parent\n */\n moveTo(parentName: string | null | undefined): AXPMenuItemFinder;\n\n /**\n * Insert menu items before this item\n */\n insertBefore(...items: AXPMenuItem[]): AXPMenuItemFinder;\n\n /**\n * Insert menu items after this item\n */\n insertAfter(...items: AXPMenuItem[]): AXPMenuItemFinder;\n}\n\n//#endregion\n\n//#region ---- Menu Middleware ----\n\n/**\n * Middleware that processes menu items after all providers have executed\n * Middlewares are executed in order based on their priority (higher priority = earlier execution)\n */\nexport interface AXPMenuMiddleware {\n /**\n * Optional priority for execution order (higher = earlier)\n * Default: 0\n */\n readonly priority?: number;\n\n /**\n * Optional name for debugging and identification\n */\n readonly name?: string;\n\n /**\n * Process menu items using the rich context API\n * @param context - The menu middleware context with helper methods\n * @returns Processed context or void (context is mutable)\n */\n process(context: AXPMenuMiddlewareContext): Promise<void | AXPMenuMiddlewareContext>;\n}\n\n/**\n * Provider definition for registering middleware via multi-provider\n */\nexport interface AXPMenuMiddlewareProvider {\n /**\n * The middleware instance\n */\n middleware: AXPMenuMiddleware;\n\n /**\n * Optional priority override\n */\n priority?: number;\n}\n\n/**\n * Injection token for menu middlewares (multi-provider)\n */\nexport const AXP_MENU_MIDDLEWARE = new InjectionToken<AXPMenuMiddleware[]>('AXP_MENU_MIDDLEWARE');\n\n//#endregion\n\n","import { inject, Injectable } from '@angular/core';\nimport { AXP_MENU_MIDDLEWARE, AXPMenuMiddleware } from './menu.middleware';\n\n//#region ---- Menu Middleware Registry ----\n\n/**\n * Central service for managing menu middlewares with priority-based ordering\n * Similar to token registry pattern used in identifier-management\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuMiddlewareRegistry {\n\n //#region ---- Fields ----\n\n /**\n * Manually registered middlewares\n */\n private readonly manualMiddlewares = new Map<string, AXPMenuMiddleware>();\n\n /**\n * Provider-based middlewares (multi-provider injection)\n */\n private readonly providerMiddlewares = inject(AXP_MENU_MIDDLEWARE, { optional: true }) ?? [];\n\n //#endregion\n\n //#region ---- Registration Methods ----\n\n /**\n * Manually register a middleware\n * @param middleware - The middleware to register\n */\n register(middleware: AXPMenuMiddleware): void {\n const name = middleware.name || `middleware_${Date.now()}_${Math.random()}`;\n\n const existing = this.manualMiddlewares.get(name);\n if (!existing || (middleware.priority ?? 0) > (existing.priority ?? 0)) {\n this.manualMiddlewares.set(name, middleware);\n }\n }\n\n /**\n * Unregister a middleware by name\n * @param name - The name of the middleware to remove\n */\n unregister(name: string): void {\n this.manualMiddlewares.delete(name);\n }\n\n /**\n * Get a specific middleware by name\n * @param name - The middleware name\n */\n get(name: string): AXPMenuMiddleware | undefined {\n // Provider-provided middlewares take precedence\n const fromProvider = this.providerMiddlewares\n .filter((m) => m.name === name)\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))[0];\n\n if (fromProvider) {\n return fromProvider;\n }\n\n return this.manualMiddlewares.get(name);\n }\n\n /**\n * Get all middlewares sorted by priority (highest first)\n * Combines provider-based and manually registered middlewares\n */\n list(): AXPMenuMiddleware[] {\n const map = new Map<string, AXPMenuMiddleware>();\n\n // Helper to add middleware, respecting priority\n const addMiddleware = (m: AXPMenuMiddleware) => {\n const name = m.name || `anonymous_${Date.now()}`;\n const existing = map.get(name);\n if (!existing || (m.priority ?? 0) > (existing.priority ?? 0)) {\n map.set(name, m);\n }\n };\n\n // Add provider middlewares first (higher precedence)\n this.providerMiddlewares.forEach(addMiddleware);\n\n // Add manual middlewares\n Array.from(this.manualMiddlewares.values()).forEach(addMiddleware);\n\n // Return sorted by priority (highest first)\n return Array.from(map.values()).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n }\n\n /**\n * Check if a middleware exists\n * @param name - The middleware name\n */\n exists(name: string): boolean {\n return this.get(name) !== undefined;\n }\n\n /**\n * Clear all manually registered middlewares\n * Provider-based middlewares are not affected\n */\n clear(): void {\n this.manualMiddlewares.clear();\n }\n\n //#endregion\n}\n\n//#endregion\n\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { AXPMenuFinderResult, AXPMenuInsertion, AXPMenuItem, AXPMenuProviderContext } from './menu.types';\nimport { createMenuContext } from './menu.context';\nimport { AXPMenuMiddlewareRegistry } from './menu-middleware.registry';\n\nexport interface AXPMenuProvider {\n provide(context: AXPMenuProviderContext): Promise<void>;\n}\n\nexport const AXP_MENU_PROVIDER = new InjectionToken<AXPMenuProvider[]>('AXP_MENU_PROVIDER');\n\n//TODO: check performance of this service\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuProviderService {\n\n //#region ---- Dependencies ----\n\n private providers = inject(AXP_MENU_PROVIDER, { optional: true });\n private middlewareRegistry = inject(AXPMenuMiddlewareRegistry);\n\n //#endregion\n\n //#region ---- State ----\n\n private cache: AXPMenuItem[] | null = null;\n private pendingInserts: Array<{ target: string; newItems: AXPMenuItem[]; position: AXPMenuInsertion }> = [];\n private pendingRemovals: string[] = [];\n private pendingUpdates: Array<{ target: string; updatedItem: Partial<AXPMenuItem> }> = [];\n private pendingAdditions: Array<{ target: string; newItems: AXPMenuItem[] }> = [];\n private pendingMoves: Array<{ source: string; destination: string; position: AXPMenuInsertion }> = [];\n\n /**\n * Observable for menu reload events\n * Emits when menu cache is cleared and consumers should reload\n */\n private menuReloadSubject = new Subject<void>();\n public readonly menuReload$ = this.menuReloadSubject.asObservable();\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get menu items with middlewares applied (for end-user display)\n */\n async items(): Promise<AXPMenuItem[]> {\n // Return cached items if available\n if (this.cache) {\n return this.cache;\n }\n\n const items: AXPMenuItem[] = [];\n const context = this.createMenuProviderContext(items);\n\n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n // Apply pending operations after each provider so subsequent providers\n // can find items added by earlier providers (e.g. Tokens under Data Definitions)\n this.applyPendingOperations(items);\n }\n }\n\n // Sort items by priority\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // Apply middlewares using registry (sorted by priority)\n await this.applyMiddlewares(items);\n\n // ADD level property to items\n setMenuItemMeta(items);\n\n // Cache the computed items\n this.cache = items;\n return items;\n }\n\n /**\n * Get raw menu items WITHOUT middleware applied (for management/editing)\n * Used by menu management pages to show original items before customization\n */\n async rawItems(): Promise<AXPMenuItem[]> {\n const items: AXPMenuItem[] = [];\n const context = this.createMenuProviderContext(items);\n\n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n // Apply pending operations after each provider\n this.applyPendingOperations(items);\n }\n }\n\n // Sort items by priority\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // ADD level property to items (but NO middleware)\n setMenuItemMeta(items);\n\n return items;\n }\n\n /**\n * Clear the cache to force reload of menu items\n * Notifies all subscribers to reload their menu data\n */\n clearCache(): void {\n this.cache = null;\n this.pendingInserts = [];\n this.pendingRemovals = [];\n this.pendingUpdates = [];\n this.pendingAdditions = [];\n this.pendingMoves = [];\n\n // Notify subscribers that menu should be reloaded\n this.menuReloadSubject.next();\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Apply middlewares in priority order using the enhanced context API\n */\n private async applyMiddlewares(items: AXPMenuItem[]): Promise<void> {\n const middlewares = this.middlewareRegistry.list();\n\n for (const middleware of middlewares) {\n try {\n const context = createMenuContext(items);\n await middleware.process(context);\n\n // The context mutates the items array, so no need to reassign\n } catch (error) {\n console.error(\n `Error in menu middleware ${middleware.name || 'anonymous'}:`,\n error\n );\n }\n }\n }\n\n /**\n * Create provider context for menu providers\n */\n private createMenuProviderContext(items: AXPMenuItem[]): AXPMenuProviderContext {\n return {\n addItems: (newItems: AXPMenuItem[]) => {\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingItem = this.findItemByName(items, newItem.name);\n if (existingItem) {\n // Update existing item, merging properties\n this.mergeMenuItem(existingItem, newItem);\n } else {\n // Add new item if it doesn't exist\n items.push(newItem);\n }\n } else {\n // Add item without name (no way to check for duplicates)\n items.push(newItem);\n }\n }\n },\n find: (target: string): AXPMenuFinderResult => {\n const foundItemInfo = this.findItemWithParent(items, target);\n const exists = foundItemInfo.foundItem !== null;\n\n return {\n exists,\n insert: (newItems: AXPMenuItem[], position: AXPMenuInsertion) => {\n this.pendingInserts.push({ target, newItems, position });\n },\n remove: () => {\n this.pendingRemovals.push(target);\n },\n update: (updatedItem: Partial<AXPMenuItem>) => {\n this.pendingUpdates.push({ target, updatedItem });\n },\n addItems: (newItems: AXPMenuItem[]) => {\n this.pendingAdditions.push({ target, newItems });\n },\n moveTo: (destination: string, position: AXPMenuInsertion = 'inside') => {\n this.pendingMoves.push({\n source: target,\n destination,\n position: position ?? 'inside',\n });\n },\n };\n }\n };\n }\n\n private applyPendingOperations(items: AXPMenuItem[]): void {\n for (const { target, newItems, position } of this.pendingInserts) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem, parentItems } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, appending items.`);\n items.push(...newItems);\n } else {\n if (position === 'inside') {\n if (!foundItem.children) {\n foundItem.children = [];\n }\n\n // Check for duplicates by name and merge or add\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingChild = this.findItemByName(foundItem.children, newItem.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newItem);\n } else {\n foundItem.children.push(newItem);\n }\n } else {\n foundItem.children.push(newItem);\n }\n }\n } else {\n // For 'before' and 'after', check for duplicates in parent items\n const itemsToInsert: AXPMenuItem[] = [];\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingItem = this.findItemByName(parentItems, newItem.name);\n if (existingItem) {\n this.mergeMenuItem(existingItem, newItem);\n } else {\n itemsToInsert.push(newItem);\n }\n } else {\n itemsToInsert.push(newItem);\n }\n }\n\n if (itemsToInsert.length > 0) {\n const index = parentItems.indexOf(foundItem);\n const insertPosition = position === 'before' ? index : index + 1;\n parentItems.splice(insertPosition, 0, ...itemsToInsert);\n }\n }\n }\n }\n\n for (const target of this.pendingRemovals) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem, parentItems } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to remove.`);\n } else {\n const index = parentItems.indexOf(foundItem);\n parentItems.splice(index, 1);\n }\n }\n\n for (const { target, updatedItem } of this.pendingUpdates) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to update.`);\n } else {\n Object.assign(foundItem, updatedItem);\n }\n }\n\n for (const { target, newItems } of this.pendingAdditions) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to add items to.`);\n } else {\n if (!foundItem.children) {\n foundItem.children = [];\n }\n\n // Check for duplicates by name and merge or add\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingChild = this.findItemByName(foundItem.children, newItem.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newItem);\n } else {\n foundItem.children.push(newItem);\n }\n } else {\n foundItem.children.push(newItem);\n }\n }\n }\n }\n\n for (const move of this.pendingMoves) {\n this.applyPendingMove(items, move.source, move.destination, move.position);\n }\n\n // Clear pending operations after applying them\n this.pendingInserts = [];\n this.pendingRemovals = [];\n this.pendingUpdates = [];\n this.pendingAdditions = [];\n this.pendingMoves = [];\n }\n\n private findItemWithParent(items: AXPMenuItem[], target: string, parentItems: AXPMenuItem[] = items): { foundItem: AXPMenuItem | null, parentItems: AXPMenuItem[] } {\n for (const item of items) {\n if (item.name === target) {\n return { foundItem: item, parentItems };\n }\n\n if (item.children) {\n const result = this.findItemWithParent(item.children, target, item.children);\n if (result.foundItem) {\n return result;\n }\n }\n }\n return { foundItem: null, parentItems: items };\n }\n\n /**\n * Find menu item by name in the items tree (recursive search)\n */\n private findItemByName(items: AXPMenuItem[], name: string): AXPMenuItem | null {\n for (const item of items) {\n if (item.name === name) {\n return item;\n }\n\n if (item.children) {\n const found = this.findItemByName(item.children, name);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private applyPendingMove(\n items: AXPMenuItem[],\n sourceName: string,\n destName: string,\n position: AXPMenuInsertion\n ): void {\n if (sourceName === destName) {\n console.warn(`moveTo: source and destination are the same (\"${sourceName}\"), ignored.`);\n return;\n }\n\n const sourceInfo = this.findItemWithParent(items, sourceName);\n const { foundItem: sourceItem, parentItems: sourceParent } = sourceInfo;\n if (!sourceItem) {\n console.warn(`moveTo: source \"${sourceName}\" not found.`);\n return;\n }\n\n const destInfo = this.findItemWithParent(items, destName);\n const { foundItem: destItem, parentItems: destParent } = destInfo;\n if (!destItem) {\n console.warn(`moveTo: destination \"${destName}\" not found.`);\n return;\n }\n\n if (this.itemIsInSubtreeOf(sourceItem, destItem)) {\n console.warn(\n `moveTo: cannot move \"${sourceName}\" because \"${destName}\" is inside the source subtree.`\n );\n return;\n }\n\n const sourceIndex = sourceParent.indexOf(sourceItem);\n if (sourceIndex === -1) {\n console.warn(`moveTo: source \"${sourceName}\" not in parent list (inconsistent).`);\n return;\n }\n sourceParent.splice(sourceIndex, 1);\n\n if (position === 'inside') {\n if (!destItem.children) {\n destItem.children = [];\n }\n destItem.children.push(sourceItem);\n return;\n }\n\n const destIndexInParent = destParent.indexOf(destItem);\n if (destIndexInParent === -1) {\n console.warn(\n `moveTo: destination \"${destName}\" not in parent list, reverting source removal.`\n );\n sourceParent.splice(sourceIndex, 0, sourceItem);\n return;\n }\n const insertIndex = position === 'before' ? destIndexInParent : destIndexInParent + 1;\n destParent.splice(insertIndex, 0, sourceItem);\n }\n\n private itemIsInSubtreeOf(root: AXPMenuItem, candidate: AXPMenuItem): boolean {\n if (root === candidate) {\n return true;\n }\n if (!root.children?.length) {\n return false;\n }\n for (const child of root.children) {\n if (child === candidate) {\n return true;\n }\n if (this.itemIsInSubtreeOf(child, candidate)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Merge new item properties into existing item, handling children merge\n */\n private mergeMenuItem(existingItem: AXPMenuItem, newItem: AXPMenuItem): void {\n // Merge top-level properties (newItem properties override existing only if defined)\n if (newItem.text !== undefined) existingItem.text = newItem.text;\n if (newItem.description !== undefined) existingItem.description = newItem.description;\n if (newItem.icon !== undefined) existingItem.icon = newItem.icon;\n if (newItem.path !== undefined) existingItem.path = newItem.path;\n if (newItem.priority !== undefined) existingItem.priority = newItem.priority;\n if (newItem.type !== undefined) existingItem.type = newItem.type;\n if (newItem.command !== undefined) existingItem.command = newItem.command;\n if (newItem.badgeKey !== undefined) existingItem.badgeKey = newItem.badgeKey;\n if (newItem.data !== undefined) existingItem.data = newItem.data;\n if (newItem.policy !== undefined) existingItem.policy = newItem.policy;\n\n // Merge children if both have children\n if (newItem.children && newItem.children.length > 0) {\n if (!existingItem.children) {\n existingItem.children = [];\n }\n\n // For each child in newItem, check if it exists by name and merge or add\n for (const newChild of newItem.children) {\n if (newChild.name) {\n const existingChild = this.findItemByName(existingItem.children, newChild.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newChild);\n } else {\n existingItem.children.push(newChild);\n }\n } else {\n existingItem.children.push(newChild);\n }\n }\n }\n }\n\n //#endregion\n}\n\nfunction setMenuItemMeta(items: any[], parentIndex: string = '', depth: number = 0) {\n items.forEach((item, index) => {\n const currentIndex = parentIndex ? `${parentIndex}-${index}` : `${index}`;\n const hasChildren = !!(item.children && Array.isArray(item.children) && item.children.length > 0);\n\n item.meta = {\n index: currentIndex,\n isRoot: depth === 0,\n hasChildren,\n depth\n }\n\n if (hasChildren) {\n setMenuItemMeta(item.children, currentIndex, depth + 1);\n }\n });\n}\n","//#region ---- Imports ----\n\nimport { AXDataSource } from '@acorex/cdk/common';\nimport {\n AXPDataSourceDefinition,\n AXPDataSourceDefinitionProvider,\n AXPFilterDefinition,\n} from '@acorex/platform/core';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { inject } from '@angular/core';\nimport { AXPMenuItem } from './menu.types';\nimport { AXPMenuProviderService } from './menu.provider';\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction flattenMenuItems(items: AXPMenuItem[], depth: number): Array<{ id: string; title: string }> {\n const rows: Array<{ id: string; title: string }> = [];\n let index = 0;\n for (const it of items) {\n const fallback = `menu-${depth}-${index}`;\n index += 1;\n const id = it.name ?? it.path ?? fallback;\n rows.push({ id, title: it.text });\n if (it.children?.length) {\n rows.push(...flattenMenuItems(it.children, depth + 1));\n }\n }\n return rows;\n}\n\n//#endregion\n\n//#region ---- Menu items data source ----\n\n/**\n * Registered menu items (raw tree flattened) for select widgets via dataSource name {@link MENU_ITEMS_DATASOURCE_NAME}.\n */\nexport const MENU_ITEMS_DATASOURCE_NAME = 'platform-menu-items';\n\n/**\n * Data source definition for menu items from {@link AXPMenuProviderService#rawItems}.\n */\nexport class AXPMenuItemsDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly menuProviderService = inject(AXPMenuProviderService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n async items(): Promise<AXPDataSourceDefinition[]> {\n return [\n {\n name: MENU_ITEMS_DATASOURCE_NAME,\n title: 'Menu items',\n source: () =>\n new AXDataSource({\n key: 'id',\n load: async () => {\n const raw = await this.menuProviderService.rawItems();\n const list = flattenMenuItems(raw, 0);\n return { items: list, total: list.length };\n },\n byKey: async (key: unknown) => {\n const raw = await this.menuProviderService.rawItems();\n const list = flattenMenuItems(raw, 0);\n return list.find((item) => item.id === key);\n },\n pageSize: 1000,\n }),\n columns: [\n {\n name: 'id',\n title: 'ID',\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n {\n name: 'title',\n title: 'Title',\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n ],\n filters: [\n {\n field: 'title',\n title: 'Title',\n operator: { type: 'equal' },\n widget: { type: AXPWidgetsCatalog.text },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ],\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ];\n }\n\n //#endregion\n}\n\n//#endregion\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { AXP_MENU_MIDDLEWARE, AXPMenuMiddleware } from './menu.middleware';\n\n//#region ---- Menu Middleware Provider Helper ----\n\n/**\n * Helper function to provide menu middlewares with proper DI setup\n * Similar to provideCommandMiddleware pattern\n * \n * @example\n * ```typescript\n * // In app.config.ts or module providers\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideMenuMiddleware([\n * customizationMiddleware,\n * securityMiddleware,\n * loggingMiddleware\n * ])\n * ]\n * };\n * ```\n */\nexport function provideMenuMiddleware(\n middlewares: AXPMenuMiddleware[]\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n ...middlewares.map((middleware) => ({\n provide: AXP_MENU_MIDDLEWARE,\n useValue: middleware,\n multi: true,\n })),\n ]);\n}\n\n/**\n * Helper to create a class-based middleware with priority\n * \n * @example\n * ```typescript\n * const myMiddleware = createMenuMiddleware({\n * name: 'my-middleware',\n * priority: 100,\n * process: async (context) => {\n * context.find('dashboard').setPriority(1);\n * }\n * });\n * ```\n */\nexport function createMenuMiddleware(config: {\n name: string;\n priority?: number;\n process: (context: import('./menu.middleware').AXPMenuMiddlewareContext) => Promise<void>;\n}): AXPMenuMiddleware {\n return {\n name: config.name,\n priority: config.priority ?? 0,\n process: config.process,\n };\n}\n\n//#endregion\n\n","import { AXPExecuteCommand, AXPNavigateActionCommand } from '@acorex/platform/core';\nimport { AXPCommandExecutor } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { patchState, signalStore, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuItem } from './menu.types';\n\nexport const AXPMenuService = signalStore(\n { providedIn: 'root' },\n\n // Initial State\n withState((router = inject(Router)) => {\n return {\n items: [] as AXPMenuItem[],\n selectedMenuItem: {\n item: null as AXPMenuItem | null,\n isFullMatch: false,\n },\n };\n }),\n\n // Methods for State Management\n withMethods(\n (\n store,\n router = inject(Router),\n workflow = inject(AXPWorkflowService),\n commandExecutor = inject(AXPCommandExecutor),\n ) => {\n return {\n setMenuItems(items: AXPMenuItem[]): void {\n patchState(store, { items: items });\n },\n\n selectMenuItemByRoute(path: string): void {\n const currentRawPath = path;\n\n const findItem = (items: AXPMenuItem[]): { item: AXPMenuItem | null; isPartialMatch: boolean } => {\n for (const item of items) {\n // Recursively search children first\n if (item.children) {\n const foundChild = findItem(item.children);\n if (foundChild.item) {\n return foundChild;\n }\n }\n if (item.path) {\n // Check if the item path matches the current path (including query param subset if provided on item)\n const matchResult = pathsMatch(item.path, currentRawPath, ['list', 'view', 'edit', 'create']);\n if (matchResult.isMatch) {\n return { item, isPartialMatch: matchResult.isPartial };\n }\n }\n }\n return { item: null, isPartialMatch: false };\n };\n\n const pathsMatch = (\n itemPath: string,\n currentPath: string,\n trailingSegmentsToIgnore: string[] = [],\n ): { isMatch: boolean; isPartial: boolean } => {\n // Split base and query/hash\n const itemNoHash = itemPath.split('#')[0];\n const currentNoHash = currentPath.split('#')[0];\n\n const [itemBase, itemQueryString = ''] = itemNoHash.split('?');\n const [currentBase, currentQueryString = ''] = currentNoHash.split('?');\n\n const itemSegments = itemBase.split('/').filter((segment) => segment.length > 0);\n const pathSegments = currentBase.split('/').filter((segment) => segment.length > 0);\n\n const menuLength = itemSegments.length;\n const pathLength = pathSegments.length;\n\n // Identify the effective base length for the menuPath\n let effectiveMenuLength = menuLength;\n if (menuLength > 0 && trailingSegmentsToIgnore.includes(itemSegments[menuLength - 1])) {\n effectiveMenuLength--; // Exclude trailing non-hierarchical segments\n }\n\n // Check if the menuPath (base segments) is a prefix of browserPath\n let isPrefix = true;\n if (pathLength < effectiveMenuLength) {\n return { isMatch: false, isPartial: false };\n }\n\n for (let i = 0; i < effectiveMenuLength; i++) {\n if (itemSegments[i] !== pathSegments[i]) {\n isPrefix = false;\n break;\n }\n }\n\n if (!isPrefix) {\n return { isMatch: false, isPartial: false };\n }\n\n // Partial match: menuPath base is a strict prefix of browserPath\n const isPartialMatch = effectiveMenuLength < pathLength;\n\n // Exact match: all segments match completely\n const isExactMatch = effectiveMenuLength === pathLength;\n\n // Query params subset match: if item defines any query params, require them to match\n const itemParams = new URLSearchParams(itemQueryString);\n const currentParams = new URLSearchParams(currentQueryString);\n let queryMatches = true;\n const itemParamPairs: Array<[string, string]> = [];\n itemParams.forEach((value, key) => {\n itemParamPairs.push([key, value]);\n });\n if (itemParamPairs.length > 0) {\n for (const [k, v] of itemParamPairs) {\n if (currentParams.get(k) !== v) {\n queryMatches = false;\n break;\n }\n }\n }\n\n return {\n isMatch: (isExactMatch || isPartialMatch) && queryMatches,\n isPartial: isPartialMatch && !isExactMatch,\n };\n };\n\n const items = store.items();\n const { item, isPartialMatch } = findItem(items);\n patchState(store, { selectedMenuItem: { item, isFullMatch: !isPartialMatch } });\n },\n\n executeCommand(item: AXPMenuItem): void {\n if (item.path) {\n workflow.execute('navigate', {\n type: 'router',\n options: { path: item.path },\n } as AXPNavigateActionCommand<'router'>);\n patchState(store, { selectedMenuItem: { item, isFullMatch: true } });\n }\n if (item.command) {\n const command = item.command as AXPExecuteCommand;\n if (workflow.exists(command?.name)) {\n workflow.execute(command.name, command.options);\n } else {\n commandExecutor.execute(command.name, command.options);\n }\n }\n },\n\n isItemOpen(item: AXPMenuItem): boolean {\n const selectedItem = store.selectedMenuItem();\n if (!selectedItem.item) {\n return false;\n }\n\n const findParent = (currentItem: AXPMenuItem, targetItem: AXPMenuItem): boolean => {\n if (currentItem.children?.includes(targetItem)) {\n return true;\n }\n return currentItem.children?.some((child) => findParent(child, targetItem)) ?? false;\n };\n\n return item === selectedItem.item || findParent(item, selectedItem.item);\n },\n };\n },\n ),\n withHooks((store, menuProviderService = inject(AXPMenuProviderService)) => {\n let reloadSubscription: any;\n\n return {\n onInit() {\n // Load initial menu items\n (async () => {\n const items = await menuProviderService.items();\n patchState(store, { items: items });\n })();\n\n // Subscribe to menu reload events\n reloadSubscription = menuProviderService.menuReload$.subscribe(async () => {\n const items = await menuProviderService.items();\n patchState(store, { items: items });\n });\n },\n onDestroy() {\n // Clean up subscription\n if (reloadSubscription) {\n reloadSubscription.unsubscribe();\n }\n },\n };\n }),\n);\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMenuItem } from './menu.types';\nimport { inject, Injectable } from '@angular/core';\n\n/**\n * Service for checking menu item visibility based on permissions, features, and children.\n * This service helps filter out empty menu items that have no visible children.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuVisibilityService {\n private sessionService = inject(AXPSessionService);\n\n /**\n * Checks if a menu item should be visible based on permissions and features.\n */\n isItemVisible(item: AXPMenuItem): boolean {\n const policy = item.policy;\n if (!policy) {\n return true; // No policy means visible\n }\n\n // Check features\n if (policy.features && policy.features.length > 0) {\n const featureKeys = Array.isArray(policy.features) ? policy.features : [policy.features];\n if (!this.sessionService.isFeatureEnabled(...featureKeys)) {\n return false;\n }\n }\n\n // Check permissions\n if (policy.permissions && policy.permissions.length > 0) {\n const permissionKeys = Array.isArray(policy.permissions) ? policy.permissions : [policy.permissions];\n if (!this.sessionService.authorize(...permissionKeys)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Recursively checks if a menu item has any visible children.\n * @param item The menu item to check\n * @param getRouterLink Optional function to check if an item has a router link\n */\n hasVisibleChildren(item: AXPMenuItem, getRouterLink?: (item: AXPMenuItem) => unknown): boolean {\n if (!item.children || item.children.length === 0) {\n return false;\n }\n\n return item.children.some((child) => {\n // Check if child itself is visible\n if (!this.isItemVisible(child)) {\n return false;\n }\n\n // If child has a routerLink, it's visible\n if (getRouterLink && getRouterLink(child)) {\n return true;\n }\n\n // If child has visible children, it's visible\n if (this.hasVisibleChildren(child, getRouterLink)) {\n return true;\n }\n\n // For items without routerLink, check if they have a command (non-empty menu items)\n if (child.command) {\n return true;\n }\n\n return false;\n });\n }\n\n /**\n * Determines if a menu item should be rendered.\n * A menu item should be rendered if:\n * 1. It has a routerLink, OR\n * 2. It has visible children, OR\n * 3. It has a command (for non-router navigation)\n *\n * @param item The menu item to check\n * @param getRouterLink Optional function to check if an item has a router link\n */\n shouldRenderMenuItem(item: AXPMenuItem, getRouterLink?: (item: AXPMenuItem) => unknown): boolean {\n // Check if item itself is visible (permissions/features)\n if (!this.isItemVisible(item)) {\n return false;\n }\n\n // If it has a routerLink, render it\n if (getRouterLink && getRouterLink(item)) {\n return true;\n }\n\n // If it has visible children, render it\n if (this.hasVisibleChildren(item, getRouterLink)) {\n return true;\n }\n\n // If it has a command (for non-router navigation), render it\n if (item.command) {\n return true;\n }\n\n // Otherwise, don't render empty menu items\n return false;\n }\n}\n\n","import { AXPSearchDefinitionProvider, AXPSearchDefinitionProviderContext } from '../../search';\nimport { AXPSystemActionType } from '@acorex/platform/core';\n\nexport class AXPMenuSearchDefinitionProvider implements AXPSearchDefinitionProvider {\n async provide(context: AXPSearchDefinitionProviderContext): Promise<void> {\n context.addDefinition('menu', 'Menu', 'menu', 'fa-thin fa-bars', 2, {\n format: {\n id: '{{data.name}}',\n },\n actions: [\n {\n name: 'navigate',\n type: AXPSystemActionType.View,\n priority: 'primary',\n },\n ],\n });\n }\n}\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { inject } from '@angular/core';\nimport { omit, sortBy } from 'lodash-es';\nimport { AXPSearchProvider, AXPSearchResult } from '../../search';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuItem } from './menu.types';\nimport { AXPExecuteCommand } from '@acorex/platform/core';\n\nexport interface AXPMenuItemWithParent extends AXPMenuItem {\n parent?: AXPMenuItem;\n}\n\nexport class AXPMenuSearchProvider implements AXPSearchProvider {\n menuService = inject(AXPMenuProviderService);\n translateService = inject(AXTranslationService);\n\n async search(text: string): Promise<AXPSearchResult[]> {\n const menuItems = await this.searchMenuItems(await this.menuService.items(), text);\n return sortBy<AXPSearchResult>(\n menuItems.map<AXPSearchResult>((item) => ({\n group: 'menu', // Use `name` or empty string if undefined\n title: item.text, // Use `text` for the `title`\n icon: item.icon, // Include the `icon` if present\n data: omit(item, ['parent', 'children']), // Include all data except `parent` and `children`\n command: item.path ? {\n name: 'navigate',\n options: {\n type: 'router',\n options: {\n path: item.path,\n },\n }\n } as AXPExecuteCommand : item.command as AXPExecuteCommand,\n parent: item.parent\n ? {\n title: item.parent.text,\n }\n : undefined,\n })),\n [(o) => this.translateService.translateSync(o.title!)]\n );\n }\n\n /**\n * Recursively searches AXPMenuItem and its children for a matching text.\n *\n * @param menuItems - The array of AXPMenuItem to search in.\n * @param searchText - The text to search for (case-insensitive).\n * @returns An array of AXPMenuItem that match the search text.\n */\n private async searchMenuItems(menuItems: AXPMenuItem[], searchText: string): Promise<AXPMenuItemWithParent[]> {\n const result: AXPMenuItemWithParent[] = [];\n\n for (const item of menuItems) {\n // Check if the current item's text matches the search text\n if (\n item.type != 'group' &&\n (item.children?.length ?? 0) == 0 &&\n (await this.translateService.translateAsync(item.text)).toLowerCase().includes(searchText.toLowerCase())\n ) {\n result.push(item as AXPMenuItemWithParent);\n }\n\n // Recursively search in children if they exist\n if (item.children && item.children.length > 0) {\n const childResults = await this.searchMenuItems(item.children, searchText);\n result.push(...childResults.map((x) => ({ ...x, parent: item } as AXPMenuItemWithParent)));\n }\n }\n\n return result;\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n template: `\n <small class=\"ax-text-sm\" [innerHTML]=\"text\"></small>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPFooterTextSlotComponent {\n @Input()\n public text!: string;\n}","\nimport { Component, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { AXPMenuItem, AXPMenuItemCommand } from '../../../menu';\n\n@Component({\n template: `\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-5\">\n @for (link of items; track link) {\n <a (click)=\"handleCommand(link.command)\" >{{ link.text }}</a>\n }\n </div>\n `,\n imports: [],\n encapsulation: ViewEncapsulation.None\n})\nexport class AXPNavBarSlotComponent {\n @Input()\n public items!: AXPMenuItem[];\n\n\n protected handleCommand(action?: AXPMenuItemCommand) {\n // if (action)\n // this.store.dispatch(action)\n }\n}","import { AXPSearchAction, AXPSearchDefinition, AXPSearchDefinitionDisplayFormat } from './search.types';\nimport { AXPSystemActionType } from '@acorex/platform/core';\n\nexport class AXPSearchDefinitionProviderContext {\n private definitions: AXPSearchDefinition[] = [];\n private definitionMap: Map<string, AXPSearchDefinition> = new Map();\n\n addDefinition(\n name: string,\n title: string,\n group: string,\n icon: string,\n order: number,\n options?: {\n format?: AXPSearchDefinitionDisplayFormat;\n actions?: AXPSearchAction[];\n }\n ): AXPSearchDefinitionBuilder {\n const definitionSearch: AXPSearchDefinition = {\n name,\n title,\n group,\n icon,\n order,\n format: {\n title: options?.format?.title ?? '{{ title }}',\n description: options?.format?.description ?? undefined,\n icon: options?.format?.icon ?? undefined,\n id: options?.format?.id ?? '{{ id }}',\n },\n actions: options?.actions ?? [],\n };\n\n this.definitions.push(definitionSearch);\n this.definitionMap.set(name, definitionSearch); // Index by name\n return new AXPSearchDefinitionBuilder(this, definitionSearch);\n }\n\n\n getDefinitions(): AXPSearchDefinition[] {\n return this.definitions;\n }\n\n // Expose groupMap for controlled access\n hasEntity(name: string): boolean {\n return this.definitionMap.has(name);\n }\n\n getDefinition(name: string): AXPSearchDefinition | undefined {\n return this.definitionMap.get(name);\n }\n}\n\nexport class AXPSearchDefinitionBuilder {\n private context: AXPSearchDefinitionProviderContext;\n private definition: AXPSearchDefinition;\n\n constructor(context: AXPSearchDefinitionProviderContext, definition: AXPSearchDefinition) {\n this.context = context;\n this.definition = definition;\n }\n\n addAction(name: string): AXPSearchDefinitionActionBuilder {\n const newAction: AXPSearchAction = {\n name,\n type: AXPSystemActionType.View,\n priority: 'primary',\n };\n this.definition.actions.push(newAction);\n return new AXPSearchDefinitionActionBuilder(this);\n }\n\n action(name: string): AXPSearchDefinitionActionBuilder | null {\n const foundAction = this.definition.actions.find((action) => action.name === name);\n if (!foundAction) {\n throw new Error(`action with name \"${name}\" not found in entity \"${this.definition.name}\".`);\n }\n return new AXPSearchDefinitionActionBuilder(this);\n }\n\n endEntity(): AXPSearchDefinitionProviderContext {\n return this.context;\n }\n}\n\nexport class AXPSearchDefinitionActionBuilder {\n private entityBuilder: AXPSearchDefinitionBuilder;\n\n constructor(entityBuilder: AXPSearchDefinitionBuilder) {\n this.entityBuilder = entityBuilder;\n }\n\n endAction(): AXPSearchDefinitionBuilder {\n return this.entityBuilder;\n }\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { AXPSearchDefinitionProviderContext } from './search-definition.builder';\nimport { AXPSearchDefinition } from './search.types';\n\n// Interface for setting providers\nexport interface AXPSearchDefinitionProvider {\n provide(context: AXPSearchDefinitionProviderContext): Promise<void>;\n}\n\n// Injection token for setting providers\nexport const AXP_SEARCH_DEFINITION_PROVIDER = new InjectionToken<AXPSearchDefinitionProvider[]>(\n 'AXP_SEARCH_DEFINITION_PROVIDER'\n);\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSearchDefinitionProviderService {\n private providers = inject(AXP_SEARCH_DEFINITION_PROVIDER, { optional: true });\n private cache: AXPSearchDefinition[] | null = null;\n\n private async load(): Promise<void> {\n if (this.cache) {\n return;\n }\n const context = new AXPSearchDefinitionProviderContext();\n \n // Load providers from DI tokens (backward compatibility)\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n await provider.provide(context);\n }\n }\n\n // Note: Search definition providers are different from search command providers\n // Search command providers are handled separately in search.service.ts\n \n this.cache = context.getDefinitions();\n }\n\n public async getListAsync(): Promise<AXPSearchDefinition[]> {\n await this.load();\n return this.getList();\n }\n\n public getList(): AXPSearchDefinition[] {\n if (!this.cache) {\n return [];\n } else {\n return this.cache;\n }\n }\n\n public findDefinition(definitionName: string): AXPSearchDefinition {\n const definition = this.getList().find((definition) => definition.name === definitionName);\n if (!definition) {\n throw new Error(`Definition with name ${definitionName} not found`);\n }\n return definition;\n }\n\n public findDefinitionByGroup(definitionGroup: string): AXPSearchDefinition {\n const definition = this.getList().find((definition) => definition.group === definitionGroup);\n if (!definition) {\n throw new Error(`Definition with group ${definitionGroup} not found`);\n }\n return definition;\n }\n}\n","import { AXPSearchResult } from './search.types';\n\n// Interface for setting providers\nexport interface AXPSearchProvider {\n search(text: string): Promise<AXPSearchResult[]>;\n}\n\nexport abstract class AXPSearchCommandProvider {\n abstract commands: AXPSearchResult[];\n\n async search(text: string): Promise<AXPSearchResult[]> {\n return this.commands.filter((command) => command.title!.toLowerCase().includes(text.toLowerCase()));\n }\n}\n","import { AXFormatService } from '@acorex/core/format';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\nimport { omit } from 'lodash-es';\nimport { AXPSearchDefinitionProviderService } from './search-definition.provider';\nimport { AXPSearchProvider, AXPSearchCommandProvider } from './search.provider';\nimport { AXPSearchDisplayGroupResult, AXPSearchDisplayResult } from './search.types';\nimport { AXTranslationService } from '@acorex/core/translation';\n\n// Injection token for setting providers\nexport const AXP_SEARCH_PROVIDER = new InjectionToken<AXPSearchProvider[]>('AXP_SEARCH_PROVIDER');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSearchService {\n private providers = inject(AXP_SEARCH_PROVIDER, { optional: true });\n private definitionService = inject(AXPSearchDefinitionProviderService);\n private formatService = inject(AXFormatService);\n private translationService = inject(AXTranslationService);\n\n async search(text: string): Promise<AXPSearchDisplayGroupResult[]> {\n //TODO better handle this\n if (this.definitionService.getList().length == 0) {\n await this.definitionService.getListAsync();\n }\n\n // Collect providers from DI tokens\n const allProviders: AXPSearchProvider[] = [];\n\n // Load from DI tokens\n if (Array.isArray(this.providers)) {\n allProviders.push(...this.providers);\n } else if (this.providers) {\n allProviders.push(this.providers);\n }\n\n if (allProviders.length === 0) {\n throw new Error('No search providers available');\n }\n\n const providersWithSearch = allProviders.filter(\n (provider): provider is AXPSearchProvider =>\n provider != null && typeof provider.search === 'function'\n );\n\n if (providersWithSearch.length === 0) {\n throw new Error('No search providers with a valid search method available');\n }\n\n const mergeData: AXPSearchDisplayResult[] = [];\n const promises = providersWithSearch.map((provider) => provider.search(text));\n const results = await Promise.all(promises);\n for (const resultArray of results) {\n for (const result of resultArray) {\n try {\n const definition = this.definitionService.findDefinition(result.group);\n\n mergeData.push({\n definitionName: definition.group,\n definitionTitle: definition.title,\n name: result.group,\n id: `${definition.name}:${this.formatService.format(definition.format.id, 'string', result)}`,\n title:\n result.title ??\n (definition.format.title\n ? this.formatService.format(definition.format.title, 'string', result.data)\n : 'Unknown'),\n description:\n result.description ??\n (definition.format.description\n ? this.formatService.format(definition.format.description, 'string', result.data)\n : undefined),\n icon: result.icon ?? definition.icon,\n data: result.data,\n command: result.command,\n actions: definition.actions,\n parent: result.parent,\n order: definition.order,\n });\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n // Group data\n const groupedData: AXPSearchDisplayGroupResult[] = [];\n const groupMap: { [key: string]: AXPSearchDisplayGroupResult } = {};\n\n // Create groups\n for (const item of mergeData) {\n const groupName = item.definitionName!; // Change this to the property you want to group by\n if (!groupMap[groupName]) {\n groupMap[groupName] = {\n name: groupName,\n title: item.definitionTitle!, // You can adjust the title logic if needed\n order: item.order, // Add order to the group\n children: [],\n };\n groupedData.push(groupMap[groupName]);\n }\n groupMap[groupName].children.push(omit(item, ['definitionName', 'definitionTitle', 'order']));\n }\n\n // Sort groups by order\n groupedData.sort((a, b) => a.order - b.order);\n\n return groupedData;\n }\n}\n","import type { AXPSearchResult } from './search.types';\n\n/**\n * Shared utility for creating Entity:Create command options used in search command providers.\n * Use with command: { name: 'Entity:Create', options: createEntityCommandOptions(...) }\n */\nexport function createEntityCommandOptions(\n entityKey: string,\n entityInfo: { name: string; module: string; title: string }\n): Record<string, unknown> {\n return {\n __context__: {\n entity: entityKey,\n entityInfo: {\n name: entityInfo.name,\n module: entityInfo.module,\n title: entityInfo.title,\n parentKey: undefined,\n source: entityKey,\n },\n data: {},\n options: {},\n },\n };\n}\n\n/**\n * Creates a search command for \"Create {Entity}\" with consistent i18n pattern.\n * Use titleKey/descriptionKey from module (e.g. @module:entity.permissions.create.title).\n * Standard: \"Create {Entity}\" for title, \"Create new {entities}\" for description.\n */\nexport function createEntitySearchCommand(config: {\n id: string;\n entityKey: string;\n entityInfo: { name: string; module: string; title: string };\n titleKey: string;\n descriptionKey?: string;\n icon: string;\n}): AXPSearchResult {\n return {\n id: config.id,\n group: 'command',\n title: config.titleKey,\n description: config.descriptionKey ?? config.titleKey,\n icon: config.icon,\n command: {\n name: 'Entity:Create',\n options: createEntityCommandOptions(config.entityKey, config.entityInfo),\n },\n };\n}\n","export enum AXPCommonSettings {\n EnableOperationToasts = 'Common:Setting:Notifications.EnableOperationToasts',\n EntityFilterApplyMode = 'Common:Setting:Entity.FilterApplyMode',\n ShowCategoryColumnsByDefault = 'Common:Setting:Entity.ShowCategoryColumnsByDefault',\n ApplyLayoutOrdering = 'Common:Setting:Entity.ApplyLayoutOrdering',\n RedirectToDetailsAfterCreate = 'Common:Setting:Entity.RedirectToDetailsAfterCreate',\n ShowPageBadge = 'Common:Setting:Entity.ShowPageBadge',\n DebugMode = 'PlatformDevTools:Setting:Developer.DebugMode',\n}\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWorkflowAction, AXPWorkflowContext, createWorkFlowEvent } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AXPCommonSettings } from '../configs/common-settings.key';\nimport { AXPSettingsService } from '../settings';\n\n//TODO Loading, Redirect, Drawer, Show toast\n\nexport const AXPRedirectEvent = createWorkFlowEvent<{ url: string }>('Redirect Event Fired');\nexport const AXPRefreshEvent = createWorkFlowEvent<{ entity: string; meta?: any }>('Refresh Event Fired');\nexport const AXPReloadEvent = createWorkFlowEvent<{ entity: string; meta?: any }>('Reload Event Fired');\n\n@Injectable()\nexport class AXPWorkflowNavigateAction extends AXPWorkflowAction {\n private router = inject(Router);\n async execute(context: AXPWorkflowContext): Promise<void> {\n const payload = context.getVariable('payload');\n if (Array.isArray(payload.commands)) {\n this.router.navigate(payload.commands, payload.extras);\n } else {\n if (payload.commands.toLowerCase().startsWith('http') || payload.target == 'blank') {\n window.open(payload.commands, '_blank');\n } else this.router.navigate([payload.commands], payload.extras);\n }\n }\n}\n\n@Injectable()\nexport class AXPDialogConfirmAction extends AXPWorkflowAction {\n private dialogService = inject(AXDialogService);\n private translationService = inject(AXTranslationService);\n\n title!: string;\n message!: string;\n type!: AXStyleColorType;\n\n defaultAction = 'cancel';\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n console.log('AXPDialogConfirmAction', this.title, this.message, this.type);\n context.setOutput('result', false);\n const dialogResult = await this.dialogService.confirm(\n await this.translationService.translateAsync(this.title),\n await this.translationService.translateAsync(this.message),\n (await this.translationService.translateAsync(this.type)) as AXStyleColorType,\n 'horizontal',\n false,\n 'cancel',\n );\n context.setOutput('result', dialogResult.result);\n }\n}\n\n@Injectable()\nexport class AXPToastAction extends AXPWorkflowAction {\n private toastService = inject(AXToastService);\n private translationService = inject(AXTranslationService);\n private settingsService = inject(AXPSettingsService);\n\n color!: AXStyleColorType;\n title!: string;\n content!: string;\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const showResult = await this.settingsService.get(AXPCommonSettings.EnableOperationToasts);\n\n if (showResult) {\n this.toastService.show({\n color: this.color,\n title: await this.translationService.translateAsync(this.title),\n content: await this.translationService.translateAsync(this.content),\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n }\n}\n\n@Injectable()\nexport class AXPReloadAction extends AXPWorkflowAction {\n async execute(context: AXPWorkflowContext): Promise<void> {\n this.dispatch(AXPReloadEvent({ entity: context.getVariable('entity'), meta: context.getVariable<any>('meta') }));\n }\n}\n","import { AXPNavigateActionCommand } from '@acorex/platform/core';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Injectable()\nexport class AXPWorkflowRouterNavigateAction extends AXPWorkflowAction {\n private router = inject(Router);\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const command = context.getVariable<AXPNavigateActionCommand<'router'>>();\n const path = command.options.path;\n\n if (path?.toLowerCase()?.startsWith('http') || command.options?.extras?.target === 'blank') {\n window.open(path, '_blank');\n } else {\n const [basePathAndFragment, queryString] = path.split('?');\n const [basePath, fragment] = basePathAndFragment.split('#'); // Extract fragment if present\n const queryParams = this.parseQueryParams(queryString);\n\n this.router.navigate([basePath], {\n ...command.options.extras,\n queryParams, // Pass query parameters separately\n fragment, // Pass fragment explicitly\n });\n }\n }\n\n /**\n * Parses query parameters from a query string into an object.\n */\n private parseQueryParams(queryString: string | undefined): Record<string, string> | undefined {\n if (!queryString) return undefined;\n\n return queryString\n .split('&')\n .map((pair) => pair.split('='))\n .reduce((params, [key, value]) => {\n params[decodeURIComponent(key)] = decodeURIComponent(value);\n return params;\n }, {} as Record<string, string>);\n }\n}\n\nexport const AXPNavigateWorkflow: AXPWorkflow = {\n startStepId: 'start',\n steps: {\n start: {\n action: 'navigate-router',\n },\n },\n};\n","import { Injectable, NgZone, inject, isDevMode } from \"@angular/core\";\nimport { AXDialogService } from \"@acorex/components/dialog\";\nimport { AXPWorkflowError } from \"@acorex/platform/workflow\";\nimport { AXPErrorHandler } from \"../errors\";\n\n@Injectable()\nexport class AXMWorkflowErrorHandler implements AXPErrorHandler {\n private dialog = inject(AXDialogService);\n\n\n handleError(error: any, next: (error: any) => void): void {\n if (error instanceof AXPWorkflowError) {\n this.dialog.alert(\"Somthing is wrong!\", error.inner ? error.inner.message : error.message, 'danger');\n next(error);\n } else {\n next(error);\n }\n }\n}","import { AXPopupModule } from '@acorex/components/popup';\nimport { AXToastModule } from '@acorex/components/toast';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport {\n AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n AXPAppStartUpProvider,\n AXPModuleManifestModule,\n} from '@acorex/platform/core';\n\nimport { AXPWorkflowModule } from '@acorex/platform/workflow';\nimport { ErrorHandler, inject, Inject, Injector, ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport {\n AXPCustomOperatorService,\n AXPCustomOperatorServiceImpl,\n AXPFilterOperatorMiddlewareService,\n AXPFilterOperatorMiddlewareServiceImpl,\n} from './data';\nimport { AXPErrorHandler, AXPErrorHandlerRegistryService, AXPGlobalErrorHandler } from './errors';\nimport { AXPTokenEvaluatorScopeProvider } from './tokens';\nimport { AXPMenuSearchDefinitionProvider } from './layout';\nimport { AXPMenuSearchProvider } from './layout/menu/search.provider';\nimport { AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from './search';\nimport { AXP_SETTING_DEFINITION_PROVIDER, AXPSettingsEvaluatorScopeProvider } from './settings';\nimport {\n AXPDialogConfirmAction,\n AXPNavigateWorkflow,\n AXPReloadAction,\n AXPToastAction,\n AXPWorkflowRouterNavigateAction,\n} from './workflows';\n\nexport interface AXPCommonModuleConfigs {\n errorHandlers: (new () => AXPErrorHandler)[];\n}\n\n@NgModule({\n imports: [\n AXPWorkflowModule.forChild({\n actions: {\n 'navigate-router': AXPWorkflowRouterNavigateAction,\n 'show-prompt-dialog': AXPDialogConfirmAction,\n 'show-toast': AXPToastAction,\n reload: AXPReloadAction,\n },\n workflows: {\n navigate: AXPNavigateWorkflow,\n },\n }),\n AXPopupModule,\n AXDateTimeModule,\n AXToastModule,\n AXPModuleManifestModule,\n ],\n exports: [RouterModule],\n providers: [\n AXPAppStartUpProvider,\n {\n provide: ErrorHandler,\n useClass: AXPGlobalErrorHandler,\n },\n {\n provide: AXPCustomOperatorService,\n useClass: AXPCustomOperatorServiceImpl,\n },\n {\n provide: AXPFilterOperatorMiddlewareService,\n useClass: AXPFilterOperatorMiddlewareServiceImpl,\n },\n\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXPMenuSearchProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_DEFINITION_PROVIDER,\n useClass: AXPMenuSearchDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXPTokenEvaluatorScopeProvider,\n multi: true,\n },\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXPSettingsEvaluatorScopeProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useFactory: async () => {\n const injector = inject(Injector);\n const provider = (await import('./configs/common-settings.provider')).AXPCommonSettingProvider;\n return new provider(injector);\n },\n multi: true,\n },\n ],\n})\nexport class AXPCommonModule {\n static forRoot(configs?: AXPCommonModuleConfigs): ModuleWithProviders<AXPCommonModule> {\n return {\n ngModule: AXPCommonModule,\n providers: [\n ...(configs?.errorHandlers || []),\n {\n provide: 'AXPCommonModuleFactory',\n useFactory: (registry: AXPErrorHandlerRegistryService) => () => {\n registry.register(...(configs?.errorHandlers || []));\n },\n deps: [AXPErrorHandlerRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n static forChild(configs?: AXPCommonModuleConfigs): ModuleWithProviders<AXPCommonModule> {\n return {\n ngModule: AXPCommonModule,\n providers: [\n ...(configs?.errorHandlers || []),\n {\n provide: 'AXPCommonModuleFactory',\n useFactory: (registry: AXPErrorHandlerRegistryService) => () => {\n registry.register(...(configs?.errorHandlers || []));\n },\n deps: [AXPErrorHandlerRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n /**\n * @ignore\n */\n constructor(\n @Inject('AXPCommonModuleFactory') instances: any[],\n ) {\n instances.forEach((f) => {\n f();\n });\n }\n}\n","import { AXPLogoConfig } from '@acorex/platform/core';\nimport { InjectionToken } from '@angular/core';\nimport { merge } from 'lodash-es';\n\nexport const ENVIRONMENT = new InjectionToken<any>('ENVIRONMENT');\n\nexport const AXP_PLATFORM_CONFIG_TOKEN = new InjectionToken<AXPPlatformConfigs>('AXP_PLATFORM_CONFIG_TOKEN', {\n providedIn: 'root',\n factory: () => {\n return AXPPlatformDefaultConfigs;\n },\n});\n\nexport interface AXPPlatformConfigs {\n title?: string;\n copyright?: string;\n logo?: {\n icon: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n text: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n full: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n };\n network?: {\n timeOut?: number;\n };\n}\n\nexport const AXPPlatformDefaultConfigs: AXPPlatformConfigs = {\n copyright: 'ACoreX @ 2024',\n title: 'ACoreX Platform',\n\n network: {\n timeOut: 5000,\n },\n};\n\nexport function configPlatform(config: Partial<AXPPlatformConfigs> = AXPPlatformDefaultConfigs): AXPPlatformConfigs {\n return merge(AXPPlatformDefaultConfigs, config);\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const AXP_ROOT_CONFIG_TOKEN = new InjectionToken<AXPRootConfigs>('AXP_ROOT_CONFIG_TOKEN');\n\nexport interface AXPRootConfigs {\n baseUrl: string;\n}","import { Injectable } from \"@angular/core\";\nimport { AXPFileStorageCreateRequest, AXPFileStorageInfo, AXPFileStorageUpdateRequest, AXPFileStorageFindRequest, AXPFileManyStorageInfo } from \"./file-storage.types\";\n\n\n@Injectable()\nexport abstract class AXPFileStorageService {\n\n abstract save(request: AXPFileStorageCreateRequest): Promise<AXPFileStorageInfo>;\n\n abstract update(request: AXPFileStorageUpdateRequest): Promise<AXPFileStorageInfo>;\n\n abstract find(request: AXPFileStorageFindRequest): Promise<AXPFileStorageInfo[]>;\n\n abstract findMany(ids : string[]): Promise<AXPFileManyStorageInfo[]>;\n\n abstract getInfo(fileId: string): Promise<AXPFileStorageInfo>;\n\n abstract remove(fileId: string): Promise<void>;\n\n abstract commit(fileId: string): Promise<void>;\n\n abstract markForDeletion(fileId: string): Promise<void>;\n}\n","import { AXPMetaData } from '@acorex/platform/core';\n\nexport enum AXPFileStorageStatus {\n Temporary = 'temporary', // File is not yet associated with a parent entity\n Committed = 'committed', // File is fully associated and in use\n PendingDeletion = 'pendingDeletion', // File is marked for deletion but not yet removed\n Archived = 'archived', // File is archived and no longer actively used\n Error = 'error', // File encountered an error during processing\n}\n\n/**\n * Interface representing a file storage request in the Acorex platform.\n */\nexport interface AXPFileStorageCreateRequest {\n /**\n * The file to be stored.\n */\n file: File;\n\n /**\n * The name of the file.\n */\n name?: string;\n\n /**\n * The unique identifier of referenced entity.\n */\n refId: string;\n /**\n * The type of the referenced entity.\n */\n refType: string;\n /**\n * The category of the file. profile-picture, company-logo, policy, document, etc.\n */\n category: string;\n /**\n * The folder path where the file should be stored.\n * If null, the service will resolve the path based on metadata, user, tenant, or default rules.\n */\n path?: string;\n /**\n * Metadata associated with the file.\n */\n metadata?: AXPMetaData;\n\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n\n /**\n * Indicates the status of the file.\n */\n status?: AXPFileStorageStatus;\n}\n\nexport interface AXPFileStorageUpdateRequest {\n /**\n * The unique identifier for the stored file.\n */\n fileId: string;\n /**\n * The folder path where the file should be stored.\n * If null, the service will resolve the path based on metadata, user, tenant, or default rules.\n */\n path?: string;\n /**\n * The name of the file.\n */\n name?: string;\n /**\n * Metadata associated with the file.\n */\n metadata: AXPMetaData;\n\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n}\n\n/**\n * Represents information about a file stored in the AXP file storage system.\n */\nexport interface AXPFileStorageInfo {\n /**\n * The unique identifier for the stored file.\n */\n id?: string;\n /**\n * The unique identifier for the stored file.\n */\n fileId: string;\n\n /**\n * The unique identifier of referenced entity.\n */\n refId: string;\n /**\n * The type of the referenced entity.\n */\n refType: string;\n /**\n * The category of the file. profile-picture, company-logo, policy, document, etc.\n */\n category: string;\n\n /**\n * The URL where the file can be accessed.\n */\n url?: string;\n\n /**\n * The size of the file in bytes.\n */\n size: number;\n\n /**\n * The name of the file.\n */\n name?: string;\n\n /**\n * The MIME type of the file.\n */\n mimeType: string;\n\n /**\n * The date and time when the file was uploaded.\n */\n uploadedAt: Date;\n\n /**\n * Indicates whether the file is public or private.\n */\n isPublic: boolean;\n\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n\n status: AXPFileStorageStatus; // Updated to use enum\n\n binary: File;\n}\n\nexport interface AXPFileManyStorageInfo {\n /**\n * The unique identifier for the stored file.\n */\n id?: string;\n /**\n * The unique identifier for the stored file.\n */\n fileId: string;\n /**\n * The unique identifier of referenced entity.\n */\n refId: string;\n /**\n * The type of the referenced entity.\n */\n refType: string;\n /**\n * The size of the file in bytes.\n */\n size: number;\n\n /**\n * The name of the file.\n */\n name?: string;\n\n /**\n * The URL where the file can be accessed.\n */\n url?: string;\n\n /**\n * Optional title (e.g. for display in file list).\n */\n title?: string;\n\n /**\n * Optional description (e.g. for display in file list).\n */\n description?: string;\n}\n\nexport interface AXPFileStorageInfo {\n /**\n * The unique identifier for the stored file.\n */\n id?: string;\n /**\n * The unique identifier for the stored file.\n */\n fileId: string;\n\n /**\n * The unique identifier of referenced entity.\n */\n refId: string;\n /**\n * The type of the referenced entity.\n */\n refType: string;\n /**\n * The category of the file. profile-picture, company-logo, policy, document, etc.\n */\n category: string;\n\n /**\n * The URL where the file can be accessed.\n */\n url?: string;\n\n /**\n * The size of the file in bytes.\n */\n size: number;\n\n /**\n * The name of the file.\n */\n name?: string;\n\n /**\n * The MIME type of the file.\n */\n mimeType: string;\n\n /**\n * The date and time when the file was uploaded.\n */\n uploadedAt: Date;\n\n /**\n * Indicates whether the file is public or private.\n */\n isPublic: boolean;\n\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n\n status: AXPFileStorageStatus; // Updated to use enum\n\n binary: File;\n}\n\n/**\n * Represents information about a file stored in the AXP file storage system.\n */\nexport interface AXPFileStorageFindRequest {\n /**\n * The unique identifier of referenced entity.\n */\n refId?: string;\n /**\n * The type of the referenced entity.\n */\n refType?: string;\n /**\n * The category of the file. profile-picture, company-logo, policy, document, etc.\n */\n category?: string;\n /**\n * The MIME type of the file.\n */\n mimeType?: string;\n /**\n * Indicates whether the file is public or private.\n */\n isPublic?: boolean;\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n /**\n * The date and time range when the file was uploaded.\n */\n uploadedAtRange?: { from: Date; to: Date };\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXCFileUploaderActionsPayload } from './file-actions.types';\n\n//#region ---- Provider Interface ----\n\n/**\n * Type for file action provider token (supports both direct and async providers).\n */\nexport type AXPFileActionProviderToken =\n | AXPFileActionProvider\n | Promise<AXPFileActionProvider>;\n\n/**\n * File action provider interface.\n * Providers can add actions to the file uploader widget.\n */\nexport interface AXPFileActionProvider {\n /**\n * Unique key identifying this provider.\n * Should match the webhook key for backward compatibility: 'file-uploader.actions'\n */\n key: string;\n\n /**\n * Execute the provider to add actions.\n * @param payload The payload containing capabilities and current actions.\n * @returns The modified payload with new actions added.\n */\n execute(payload: AXCFileUploaderActionsPayload): Promise<AXCFileUploaderActionsPayload> | AXCFileUploaderActionsPayload;\n\n /**\n * Priority for execution order (lower numbers execute first).\n * Defaults to 0 if not specified.\n */\n priority?: number;\n}\n\n//#endregion\n\n//#region ---- Injection Token ----\n\n/**\n * Multi-provider injection token for file action providers.\n * Modules can provide multiple implementations using this token.\n */\nexport const AXP_FILE_ACTION_PROVIDER = new InjectionToken<AXPFileActionProviderToken[]>(\n 'AXP_FILE_ACTION_PROVIDER',\n);\n\n//#endregion\n","import { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\nimport { AXPHookService } from '@acorex/platform/core';\nimport { AXP_FILE_ACTION_PROVIDER, AXPFileActionProvider } from './file-actions.provider';\nimport { AXCFileUploaderAction, AXCFileUploaderActionsPayload } from './file-actions.types';\n\n//#region ---- Service ----\n\n/**\n * Service for managing file uploader actions.\n * Aggregates actions from multiple providers and filters them based on plugin configuration.\n * Wraps the hook system for backward compatibility.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPFileActionsService {\n //#region ---- Dependencies ----\n\n private readonly actionProviders = inject(AXP_FILE_ACTION_PROVIDER, { optional: true }) || [];\n private readonly hookService = inject(AXPHookService);\n private readonly injector = inject(Injector);\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get all actions from providers, filtered based on plugin configuration.\n * Wraps the hook system for backward compatibility.\n * @param payload Initial payload with capabilities and plugin configuration.\n * @returns Filtered list of actions.\n */\n async getActions(payload: AXCFileUploaderActionsPayload): Promise<AXCFileUploaderAction[]> {\n // First, run hook system for backward compatibility\n // Note: Hook system may still use old format with 'host', but we pass capabilities\n // Hook providers that need host will need to be migrated to use capabilities\n let hookPayload: any;\n try {\n hookPayload = await this.hookService.runAsync('file-uploader.actions', {\n ...payload,\n // For backward compatibility, hooks might expect 'host' but we're using capabilities\n // Old hook providers will need to be migrated\n });\n } catch (err) {\n // If hook fails, continue with new system\n console.warn('[AXPFileActionsService] Hook system failed, continuing with providers only', err);\n }\n\n // Merge hook actions into payload (if any)\n const mergedPayload: AXCFileUploaderActionsPayload = {\n ...payload,\n actions: hookPayload?.actions ?? payload.actions ?? [],\n };\n\n // Resolve all providers (handle both direct and Promise<provider>)\n const providers = await this.resolveProviders();\n\n // Filter providers by key\n const matchingProviders = providers\n .filter((p) => p.key === 'file-uploader.actions')\n .sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // Execute providers sequentially (waterfall pattern)\n let currentPayload = { ...mergedPayload, actions: [...mergedPayload.actions] };\n for (const provider of matchingProviders) {\n try {\n currentPayload = await Promise.resolve(\n runInInjectionContext(this.injector, () => provider.execute(currentPayload)),\n );\n } catch (err) {\n console.error(`[AXPFileActionsService] Provider '${provider.key}' failed`, err);\n }\n }\n\n // Filter actions based on plugin configuration\n return this.filterActions(currentPayload.actions, payload.plugins, payload.excludePlugins);\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Resolve all providers (handle both direct providers and Promise<provider>).\n */\n private async resolveProviders(): Promise<AXPFileActionProvider[]> {\n return Promise.all(\n this.actionProviders.map((p) => (p instanceof Promise ? p : Promise.resolve(p))),\n );\n }\n\n /**\n * Filter actions based on enabled plugins and exclude list.\n */\n private filterActions(\n actions: AXCFileUploaderAction[],\n enabledPlugins: { name: string; options?: unknown }[],\n excludePlugins: string[],\n ): AXCFileUploaderAction[] {\n const enabledPluginNames = enabledPlugins?.map((p) => p.name) ?? [];\n const excludedPluginNames = excludePlugins ?? [];\n\n return actions.filter((action) => {\n // Exclude if in exclude list\n if (excludedPluginNames.includes(action.plugin)) {\n return false;\n }\n\n // Include if global\n if (action.global === true) {\n return true;\n }\n\n // Include if plugin is explicitly enabled\n if (enabledPluginNames.length > 0 && enabledPluginNames.includes(action.plugin)) {\n return true;\n }\n\n // If no plugins are enabled, only show global actions\n if (enabledPluginNames.length === 0) {\n return !!action.global;\n }\n\n return false;\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPFileListItem } from '@acorex/platform/core';\n\n//#region ---- File Uploader Capabilities ----\n\n/**\n * Capabilities API provided to file action providers.\n * These methods allow actions to interact with the file uploader widget.\n */\nexport interface AXCFileUploaderCapabilities {\n /**\n * Get all current files in the uploader.\n */\n getFiles: () => AXPFileListItem[];\n\n /**\n * Replace all files in the uploader.\n */\n setFiles: (files: AXPFileListItem[]) => void;\n\n /**\n * Add new files to the uploader.\n */\n addFiles: (files: AXPFileListItem[]) => void;\n\n /**\n * Update files matching a predicate.\n */\n updateFile: (\n predicate: (f: AXPFileListItem) => boolean,\n updater: (f: AXPFileListItem) => AXPFileListItem,\n ) => void;\n\n /**\n * Remove a file from the uploader.\n */\n removeFile: (file: AXPFileListItem) => void;\n\n /**\n * Clear all files from the uploader.\n */\n clear: () => void;\n\n /**\n * Get a file by its ID.\n */\n getFileById: (id: string) => AXPFileListItem | undefined;\n\n /**\n * Update a file by its ID.\n */\n updateFileById: (id: string, next: Partial<AXPFileListItem>) => void;\n}\n\n//#endregion\n\n//#region ---- File Uploader Action ----\n\n/**\n * A file uploader action that can be added by providers.\n */\nexport interface AXCFileUploaderAction {\n /**\n * Unique identifier for the action/plugin.\n */\n plugin: string;\n\n /**\n * Whether this action is global (available even if plugin is not explicitly enabled).\n */\n global?: boolean;\n\n /**\n * Display text for the action (optional if textKey is provided).\n */\n text?: string;\n\n /**\n * Translation key for the action text (optional if text is provided).\n */\n textKey?: string;\n\n /**\n * Icon class for the action (e.g., 'fa-light fa-file-arrow-up').\n */\n icon?: string;\n\n /**\n * Action execution handler.\n * Receives capabilities to interact with the file uploader.\n * @param capabilities The capabilities API for file operations.\n */\n run: (capabilities: AXCFileUploaderCapabilities) => void | Promise<void>;\n}\n\n//#endregion\n\n//#region ---- File Uploader Actions Payload ----\n\n/**\n * Payload passed to file action providers.\n */\nexport interface AXCFileUploaderActionsPayload {\n /**\n * Enabled plugins configuration.\n */\n plugins: { name: string; options?: unknown }[];\n\n /**\n * List of plugin names to exclude.\n */\n excludePlugins: string[];\n\n /**\n * Capabilities API for interacting with the file uploader.\n */\n capabilities: AXCFileUploaderCapabilities;\n\n /**\n * Current list of actions (providers can add to this array).\n */\n actions: AXCFileUploaderAction[];\n\n /**\n * Widget options (optional, for accessing widget-specific settings).\n */\n options?: {\n /**\n * Whether multiple files are allowed.\n */\n multiple?: boolean;\n\n /**\n * Accepted file types (e.g., '.jpg,.png' or 'image/*').\n */\n accept?: string;\n };\n}\n\n//#endregion\n","import { inject } from '@angular/core';\nimport { AXPDataGenerator, AXPFileListItem } from '@acorex/platform/core';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXPFileActionProvider } from './file-actions.provider';\nimport { AXCFileUploaderActionsPayload, AXCFileUploaderCapabilities } from './file-actions.types';\n\nexport const UploadFromComputerActionProvider: AXPFileActionProvider = {\n key: 'file-uploader.actions',\n priority: 1, // Higher priority than upload-from-drive to show first\n execute: (payload: AXCFileUploaderActionsPayload): AXCFileUploaderActionsPayload => {\n const fileService = inject(AXFileService);\n\n // Capture widget options for use in the action\n const widgetOptions = payload.options;\n\n payload.actions = [\n ...payload.actions,\n {\n plugin: 'upload-from-computer',\n global: true,\n textKey: '@document-management:actions.upload-from-device',\n icon: 'fa-light fa-file-arrow-up',\n run: async (capabilities: AXCFileUploaderCapabilities) => {\n // Open file picker with widget options\n const files = await fileService.choose({\n multiple: widgetOptions?.multiple ?? true,\n accept: widgetOptions?.accept,\n });\n\n // If no files are selected, return\n if (files.length === 0) {\n return;\n }\n\n // Create file list items from selected files\n const fileItems = files.map(\n (file) =>\n ({\n id: AXPDataGenerator.uuid(),\n name: file.name,\n size: file.size,\n status: 'attached',\n source: {\n kind: 'blob',\n value: file,\n },\n }) as AXPFileListItem,\n );\n\n // Add files using capabilities\n capabilities.addFiles(fileItems);\n },\n },\n ];\n\n return payload;\n },\n};\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { AXPFileType } from './file-type.types';\n\nexport interface AXPFileTypeInfoProvider {\n items(): Promise<AXPFileType[]>;\n}\n\nexport const AXP_FILE_TYPE_INFO_PROVIDER = new InjectionToken<AXPFileTypeInfoProvider[]>('AXP_FILE_TYPE_INFO_PROVIDER');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPFileTypeProviderService implements AXPFileTypeInfoProvider {\n private providers = inject(AXP_FILE_TYPE_INFO_PROVIDER, { optional: true });\n\n async items(): Promise<AXPFileType[]> {\n const items: AXPFileType[] = [];\n\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n items.push(...(await provider.items()));\n }\n }\n return items;\n }\n\n async get(name: string): Promise<AXPFileType | undefined> {\n return (await this.items()).find((c) => c.name == name);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport {AXPLockGetInfoRequest, AXPLockInfo, AXPLockRequest, AXPUnLockRequest } from \"./lock.types\";\n\n@Injectable()\nexport abstract class AXPLockService {\n\n abstract lock(request: AXPLockRequest): Promise<AXPLockInfo>;\n\n abstract unlock(request: AXPUnLockRequest): Promise<void>;\n\n abstract check(request: AXPLockGetInfoRequest): Promise<boolean>;\n\n abstract getInfo(request: AXPLockGetInfoRequest): Promise<AXPLockInfo>;\n}\n","/**\n * Status Definition Types\n * Defines the structure for status definitions and their transitions\n */\n\n//#region ---- Status Definition Contracts ----\n\n/**\n * Status definition with metadata\n */\nexport interface AXPStatusDefinition {\n /**\n * Unique identifier for the status\n */\n name: string;\n\n /**\n * Display title for the status\n */\n title: string;\n\n /**\n * Color code or semantic color name for the status\n */\n color: string;\n\n /**\n * Optional icon class (e.g., 'fa-light fa-check')\n */\n icon?: string;\n\n /**\n * Optional description\n */\n description?: string;\n\n /**\n * Optional order for sorting\n */\n order?: number;\n\n /**\n * Whether this is a final status (end state)\n */\n isFinal?: boolean;\n\n /**\n * Whether this is an initial status (starting state)\n */\n isInitial?: boolean;\n\n /**\n * Whether list views should be automatically generated for this status\n */\n generateView?: boolean;\n}\n\n/**\n * Status transition definition\n */\nexport interface AXPStatusTransition {\n /**\n * Source status name\n */\n from: string;\n\n /**\n * Target status name\n */\n to: string;\n\n /**\n * Optional condition expression to evaluate before allowing transition\n * Uses expression evaluator syntax (e.g., \"{{user.isAdmin}}\", \"{{item.priority > 5}}\")\n */\n condition?: string;\n\n /**\n * Optional display title for the transition\n */\n title?: string;\n\n /**\n * Optional description\n */\n description?: string;\n\n /**\n * Optional command descriptor to execute for this transition\n * If not provided, defaults to Entity:UpdateStatus with entity, id, and status\n */\n command?: {\n name: string;\n options?: Record<string, unknown>;\n };\n\n /**\n * Whether this transition is automatic (no user action required)\n */\n isAutomatic?: boolean;\n\n /**\n * Whether this transition requires approval\n */\n requiresApproval?: boolean;\n}\n\n/**\n * Abstract class for status providers\n * Similar to AXPTaskBadgeProvider pattern\n */\nexport abstract class AXPStatusProvider {\n /**\n * Unique key for the status (e.g., 'task-management.status')\n */\n abstract readonly key: string;\n\n /**\n * List of available status definitions\n */\n abstract readonly statuses: AXPStatusDefinition[];\n\n /**\n * List of allowed transitions between statuses\n */\n abstract readonly transitions: AXPStatusTransition[];\n\n /**\n * Optional default status name\n */\n abstract readonly defaultStatus?: string;\n}\n\n//#endregion\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPStatusProvider, AXPStatusTransition } from './status-definition.types';\n\n//#region ---- Injection Token ----\n\n/**\n * Injection token for status providers\n * Use with multi: true to register multiple providers\n */\nexport const AXP_STATUS_PROVIDERS = new InjectionToken<AXPStatusProvider[]>('AXP_STATUS_PROVIDERS');\n\n//#endregion\n\n//#region ---- Provider Service ----\n\n/**\n * Service for managing status definitions from multiple providers\n * Similar to AXPTaskBadgeService pattern - no cache, direct access\n * \n * @example\n * ```typescript\n * // In a module providers array:\n * {\n * provide: AXP_STATUS_PROVIDERS,\n * useClass: TaskStatusProvider,\n * multi: true,\n * }\n * \n * // Example provider implementation:\n * export class TaskStatusProvider extends AXPStatusProvider {\n * readonly key = 'task-management.status';\n * readonly statuses = [\n * { name: 'todo', title: 'To Do', color: '#6b7280', icon: 'fa-light fa-circle', isInitial: true },\n * { name: 'in-progress', title: 'In Progress', color: '#3b82f6', icon: 'fa-light fa-play' },\n * { name: 'done', title: 'Done', color: '#10b981', icon: 'fa-light fa-check-circle', isFinal: true },\n * ];\n * readonly transitions = [\n * { from: 'todo', to: 'in-progress', title: 'Start', condition: '{{user.canEdit}}' },\n * { from: 'in-progress', to: 'done', title: 'Complete' },\n * ];\n * readonly defaultStatus = 'todo';\n * }\n * \n * // Later, get the status:\n * const status = await statusService.getStatus('task-management.status');\n * if (status) {\n * console.log('Statuses:', status.statuses);\n * console.log('Transitions:', status.transitions);\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPStatusDefinitionProviderService {\n //#region ---- Dependencies ----\n\n private providers: AXPStatusProvider[] = inject(AXP_STATUS_PROVIDERS, { optional: true }) ?? [];\n private commandService = inject(AXPCommandService);\n\n //#endregion\n\n //#region ---- State ----\n\n private statusMap = new Map<string, AXPStatusProvider>();\n private initializationPromise: Promise<void> | null = null;\n private isInitialized = false;\n\n //#endregion\n\n //#region ---- Initialization ----\n\n /**\n * Initialize providers (resolve promises if needed)\n * Called lazily on first access\n */\n private async initialize(): Promise<void> {\n if (this.isInitialized) {\n return;\n }\n\n if (this.initializationPromise) {\n return this.initializationPromise;\n }\n\n this.initializationPromise = this._doInitialize();\n await this.initializationPromise;\n }\n\n private async _doInitialize(): Promise<void> {\n // Register all providers, resolving promises if needed\n for (const provider of this.providers) {\n let resolvedProvider: AXPStatusProvider;\n\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n resolvedProvider = await provider;\n } else {\n // If provider is a direct instance, use it directly\n resolvedProvider = provider;\n }\n\n if (this.statusMap.has(resolvedProvider.key)) {\n console.warn(`Status with key \"${resolvedProvider.key}\" already exists. Overwriting with new status.`);\n }\n\n this.statusMap.set(resolvedProvider.key, resolvedProvider);\n }\n\n this.isInitialized = true;\n }\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get a status provider by key\n * Ensures initialization is complete before accessing the status map.\n * \n * @param key - Status key (e.g., 'task-management.status')\n * @returns Promise that resolves to status provider with all statuses and transitions, or undefined if not found\n * \n * @example\n * ```typescript\n * const status = await statusService.getStatus('task-management.status');\n * if (status) {\n * console.log('Statuses:', status.statuses);\n * console.log('Transitions:', status.transitions);\n * }\n * ```\n */\n public async getStatus(key: string): Promise<AXPStatusProvider | undefined> {\n await this.initialize();\n return this.statusMap.get(key);\n }\n\n /**\n * Execute a status transition workflow action\n * Uses transition.command if provided, otherwise defaults to Entity:UpdateStatus\n * Validates the transition is allowed before executing\n * \n * @param definitionKey - Status definition key\n * @param transition - The transition to execute\n * @param context - Context data for the command (must include entity name and id/ids)\n * @returns Promise that resolves when the command execution completes\n * \n * @example\n * ```typescript\n * await statusService.executeTransition(\n * 'task-management.status',\n * { from: 'todo', to: 'in-progress' },\n * { entity: 'TaskManagement.Task', id: '123', ...entityData }\n * );\n * ```\n */\n public async executeTransition(\n definitionKey: string,\n transition: AXPStatusTransition,\n context: Record<string, any>\n ): Promise<void> {\n await this.initialize();\n const provider = this.statusMap.get(definitionKey);\n if (!provider) {\n throw new Error(`Status provider with key \"${definitionKey}\" not found.`);\n }\n\n // Validate transition is allowed\n if (!this.isValidTransition(provider, transition.from, transition.to)) {\n throw new Error(`Invalid transition from \"${transition.from}\" to \"${transition.to}\"`);\n }\n\n // Determine which command to use\n let commandName: string;\n let commandOptions: Record<string, unknown>;\n\n if (transition.command) {\n // Use transition's explicit command\n commandName = transition.command.name;\n commandOptions = {\n ...(transition.command.options ?? {}),\n ...context,\n };\n } else {\n // Use default Entity:UpdateStatus command\n const entity = context['entityName'] ?? context['__meta__']?.config?.name;\n if (!entity) {\n throw new Error('Entity name is required in context when using default status update command');\n }\n\n const id = context['id'];\n const ids = context['ids'];\n\n if (!id && !ids) {\n throw new Error('Either id or ids must be provided in context');\n }\n\n commandName = 'Entity:UpdateStatus';\n commandOptions = {\n entity,\n status: transition.to,\n statusField: context['statusField'] ?? 'statusId',\n ...(id ? { id } : {}),\n ...(ids ? { ids } : {}),\n };\n }\n\n // Execute the command\n const result = await this.commandService.execute(commandName, commandOptions);\n\n if (!result?.success) {\n const text = this.commandMessageTextForError(result?.message?.text);\n throw new Error(text || 'Failed to execute status transition command');\n }\n }\n\n /**\n * Validate if a transition is allowed\n * Checks if the transition exists in the provider's transitions list\n */\n private isValidTransition(\n provider: AXPStatusProvider,\n from: string,\n to: string\n ): boolean {\n return provider.transitions.some(\n (transition) => transition.from === from && transition.to === to\n );\n }\n\n /**\n * Best-effort plain string for {@link Error} messages (no i18n lookup).\n */\n private commandMessageTextForError(value: AXPMultiLanguageString | undefined | null): string {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n const values = Object.values(value as Record<string, string>);\n const first = values.find((v) => typeof v === 'string' && v.length > 0);\n return first ?? '';\n }\n return String(value);\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXPStatusDefinition } from './status-definition.types';\n\n/**\n * Standard system status types\n * These are the predefined status values used across the platform\n */\nexport enum AXPSystemStatusType {\n Todo = 'todo',\n InProgress = 'in-progress',\n InReview = 'in-review',\n Open = 'open',\n Closed = 'closed',\n Blocked = 'blocked',\n Done = 'done',\n Cancelled = 'cancelled',\n Draft = 'draft',\n PendingReview = 'pending-review',\n Approved = 'approved',\n Published = 'published',\n Archived = 'archived',\n Rejected = 'rejected',\n Active = 'active',\n Inactive = 'inactive',\n Pending = 'pending',\n Completed = 'completed',\n Suspended = 'suspended',\n Failed = 'failed',\n Review = 'review',\n Expired = 'expired',\n}\n\nconst i18n = (key: string) => `@general:statuses.${key}`;\n\n/**\n * Standard system status definitions\n * Provides consistent status definitions across the platform\n * Uses AXPStatusDefinition interface from status-definition.types.ts\n */\nexport const AXPSystemStatuses = Object.freeze({\n Open: {\n name: AXPSystemStatusType.Open,\n title: i18n('open.title'),\n icon: 'fa-light fa-circle',\n color: 'secondary',\n description: i18n('open.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n Closed: {\n name: AXPSystemStatusType.Closed,\n title: i18n('closed.title'),\n icon: 'fa-light fa-circle',\n color: 'danger',\n description: i18n('closed.description'),\n order: 2,\n isInitial: false,\n isFinal: true,\n },\n Todo: {\n name: AXPSystemStatusType.Todo,\n title: i18n('todo.title'),\n icon: 'fa-light fa-circle',\n color: 'secondary',\n description: i18n('todo.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n InProgress: {\n name: AXPSystemStatusType.InProgress,\n title: i18n('in-progress.title'),\n icon: 'fa-light fa-play',\n color: 'info',\n description: i18n('in-progress.description'),\n order: 2,\n isInitial: false,\n isFinal: false,\n },\n InReview: {\n name: AXPSystemStatusType.InReview,\n title: i18n('in-review.title'),\n icon: 'fa-light fa-eye',\n color: 'info',\n description: i18n('in-review.description'),\n order: 3,\n isInitial: false,\n isFinal: false,\n },\n Blocked: {\n name: AXPSystemStatusType.Blocked,\n title: i18n('blocked.title'),\n icon: 'fa-light fa-ban',\n color: 'danger',\n description: i18n('blocked.description'),\n order: 4,\n isInitial: false,\n isFinal: false,\n },\n Done: {\n name: AXPSystemStatusType.Done,\n title: i18n('done.title'),\n icon: 'fa-light fa-check-circle',\n color: 'success',\n description: i18n('done.description'),\n order: 5,\n isInitial: false,\n isFinal: true,\n },\n Cancelled: {\n name: AXPSystemStatusType.Cancelled,\n title: i18n('cancelled.title'),\n icon: 'fa-light fa-times-circle',\n color: 'neutral',\n description: i18n('cancelled.description'),\n order: 6,\n isInitial: false,\n isFinal: true,\n },\n Draft: {\n name: AXPSystemStatusType.Draft,\n title: i18n('draft.title'),\n icon: 'fa-light fa-file-pen',\n color: 'neutral',\n description: i18n('draft.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n PendingReview: {\n name: AXPSystemStatusType.PendingReview,\n title: i18n('pending-review.title'),\n icon: 'fa-light fa-clock',\n color: 'warning',\n description: i18n('pending-review.description'),\n order: 2,\n isInitial: false,\n isFinal: false,\n },\n Approved: {\n name: AXPSystemStatusType.Approved,\n title: i18n('approved.title'),\n icon: 'fa-light fa-check-circle',\n color: 'success',\n description: i18n('approved.description'),\n order: 3,\n isInitial: false,\n isFinal: false,\n },\n Published: {\n name: AXPSystemStatusType.Published,\n title: i18n('published.title'),\n icon: 'fa-light fa-globe',\n color: 'primary',\n description: i18n('published.description'),\n order: 4,\n isInitial: false,\n isFinal: false,\n },\n Archived: {\n name: AXPSystemStatusType.Archived,\n title: i18n('archived.title'),\n icon: 'fa-light fa-archive',\n color: 'danger',\n description: i18n('archived.description'),\n order: 5,\n isInitial: false,\n isFinal: true,\n },\n Rejected: {\n name: AXPSystemStatusType.Rejected,\n title: i18n('rejected.title'),\n icon: 'fa-light fa-times-circle',\n color: 'danger',\n description: i18n('rejected.description'),\n order: 6,\n isInitial: false,\n isFinal: true,\n },\n Active: {\n name: AXPSystemStatusType.Active,\n title: i18n('active.title'),\n icon: 'fa-light fa-check-circle',\n color: 'success',\n description: i18n('active.description'),\n order: 1,\n isInitial: false,\n isFinal: false,\n },\n Inactive: {\n name: AXPSystemStatusType.Inactive,\n title: i18n('inactive.title'),\n icon: 'fa-light fa-circle',\n color: 'secondary',\n description: i18n('inactive.description'),\n order: 2,\n isInitial: false,\n isFinal: false,\n },\n Pending: {\n name: AXPSystemStatusType.Pending,\n title: i18n('pending.title'),\n icon: 'fa-light fa-clock',\n color: 'warning',\n description: i18n('pending.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n Completed: {\n name: AXPSystemStatusType.Completed,\n title: i18n('completed.title'),\n icon: 'fa-light fa-check-circle',\n color: 'success',\n description: i18n('completed.description'),\n order: 10,\n isInitial: false,\n isFinal: true,\n },\n Suspended: {\n name: AXPSystemStatusType.Suspended,\n title: i18n('suspended.title'),\n icon: 'fa-light fa-pause-circle',\n color: 'neutral',\n description: i18n('suspended.description'),\n order: 5,\n isInitial: false,\n isFinal: false,\n },\n Failed: {\n name: AXPSystemStatusType.Failed,\n title: i18n('failed.title'),\n icon: 'fa-light fa-xmark-circle',\n color: 'danger',\n description: i18n('failed.description'),\n order: 10,\n isInitial: false,\n isFinal: true,\n },\n\n Review: {\n name: AXPSystemStatusType.Review,\n title: i18n('review.title'),\n icon: 'fa-light fa-eye',\n color: 'info',\n description: i18n('review.description'),\n order: 3,\n },\n Expired: {\n name: AXPSystemStatusType.Expired,\n title: i18n('expired.title'),\n icon: 'fa-light fa-clock',\n color: 'danger',\n description: i18n('expired.description'),\n order: 10,\n isInitial: false,\n isFinal: true,\n },\n} as const satisfies Record<string, AXPStatusDefinition>);\n\n/**\n * Get system status definition by type\n * @param type - Status type\n * @returns System status definition or undefined\n */\nexport function getSystemStatus(type: AXPSystemStatusType): AXPStatusDefinition {\n return Object.values(AXPSystemStatuses).find(status => status.name === type) as AXPStatusDefinition;\n}\n\n/**\n * Resolves the visual appearance (color and icon) for status\n * using the system statuses from the core module.\n * @param statusType - Status type string\n * @returns Color and icon for the status\n */\nexport function resolveStatusLook(statusType: string): { color: AXStyleColorType; icon: string } {\n // Try to get system status first\n const systemStatusType = statusType as AXPSystemStatusType;\n if (systemStatusType) {\n const systemStatus = getSystemStatus(systemStatusType);\n if (systemStatus) {\n // Convert hex color to semantic color type if needed\n // For now, return as-is and let the UI handle it\n return {\n color: systemStatus.color as AXStyleColorType,\n icon: systemStatus.icon || ''\n };\n }\n }\n\n // Fallback for unknown statuses\n return {\n color: 'secondary' as AXStyleColorType,\n icon: ''\n };\n}\n\n/**\n * Resolves the complete status information (title, description, icon, color) for a status\n * using the system statuses from the core module.\n * @param statusType - Status type string\n * @returns Complete status information as AXPStatusDefinition\n */\nexport function getStatusInfo(statusType: string): AXPStatusDefinition {\n const systemStatusType = statusType as AXPSystemStatusType;\n if (systemStatusType) {\n const systemStatus = getSystemStatus(systemStatusType);\n if (systemStatus) {\n return systemStatus;\n }\n }\n\n // Fallback for unknown statuses\n return {\n name: statusType,\n title: statusType,\n description: `Status: ${statusType}`,\n icon: '',\n color: 'secondary'\n };\n}\n\n/**\n * Get system status definition directly (no conversion needed since it's already AXPStatusDefinition)\n * @param statusType - Status type\n * @param overrides - Optional overrides for the status definition\n * @returns AXPStatusDefinition\n */\nexport function systemStatusToDefinition(\n statusType: AXPSystemStatusType,\n overrides?: Partial<AXPStatusDefinition>\n): AXPStatusDefinition {\n const systemStatus = getSystemStatus(statusType);\n if (!systemStatus) {\n throw new Error(`System status ${statusType} not found`);\n }\n\n return {\n ...systemStatus,\n ...overrides,\n };\n}\n","import { AXToastService } from '@acorex/components/toast';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPClipBoardService {\n private toast = inject(AXToastService);\n\n public copy(title: string, value: string) {\n const copyText = document.createElement('input');\n copyText.type = 'text';\n copyText.select();\n copyText.setSelectionRange(0, 99999); // For mobile devices\n copyText.remove();\n navigator.clipboard.writeText(value);\n this.toast.success(`${title} copied!`);\n }\n\n}","//#region ---- Imports ----\n\nimport { Injectable, inject } from '@angular/core';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPModuleManifestRegistry } from '@acorex/platform/core';\n\n//#endregion\n\n//#region ---- Debug Service ----\n\n/**\n * Service for debugging user access information.\n * Displays loaded modules, features, and permissions for the current user.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPDebugService {\n //#region ---- Services & Dependencies ----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly manifestRegistry = inject(AXPModuleManifestRegistry);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Display all loaded modules, features, and permissions for the current user.\n */\n async displayUserAccessInfo(): Promise<void> {\n try {\n // Ensure registry is initialized\n await this.manifestRegistry.initialize();\n\n // Get all registered modules\n const allManifests = this.manifestRegistry.getAll();\n\n // Get all feature definitions\n const allFeatures = this.manifestRegistry.getAllFeatureDefinitions();\n\n // Get current user permissions\n const userPermissions = this.sessionService.permissions;\n const user = this.sessionService.user;\n\n console.group('🔐 User Access Information');\n console.log(`User: ${user?.name || user?.title || 'Unknown'} (${user?.id || 'N/A'})`);\n console.log('');\n\n if (allManifests.length === 0) {\n console.log('No modules loaded');\n console.groupEnd();\n return;\n }\n\n // Group features by module\n const featuresByModule = new Map<string, typeof allFeatures>();\n allFeatures.forEach((feature) => {\n const moduleName = feature.module;\n if (!featuresByModule.has(moduleName)) {\n featuresByModule.set(moduleName, []);\n }\n featuresByModule.get(moduleName)!.push(feature);\n });\n\n // Group permissions by module (if they follow ModuleName:PermissionKey pattern)\n const permissionsByModule = new Map<string, typeof userPermissions>();\n const ungroupedPermissions: typeof userPermissions = [];\n\n userPermissions.forEach((permission) => {\n const parts = permission.split(':');\n if (parts.length >= 2) {\n const moduleName = parts[0];\n if (!permissionsByModule.has(moduleName)) {\n permissionsByModule.set(moduleName, []);\n }\n permissionsByModule.get(moduleName)!.push(permission);\n } else {\n ungroupedPermissions.push(permission);\n }\n });\n\n // Display modules in tree format\n allManifests.forEach((manifest) => {\n const moduleName = manifest.name;\n const moduleFeatures = featuresByModule.get(moduleName) || [];\n const modulePermissions = permissionsByModule.get(moduleName) || [];\n\n console.group(`📦 ${moduleName}`);\n\n // Display Features\n if (moduleFeatures.length > 0) {\n console.log(' --- Features:');\n moduleFeatures.forEach((feature) => {\n console.log(` • ${feature.name}`);\n });\n } else {\n console.log(' --- Features: (none)');\n }\n\n // Display Permissions\n if (modulePermissions.length > 0) {\n console.log(' --- Permissions:');\n modulePermissions.forEach((permission) => {\n console.log(` • ${permission}`);\n });\n } else {\n console.log(' --- Permissions: (none)');\n }\n\n console.groupEnd();\n });\n\n // Display ungrouped permissions if any\n if (ungroupedPermissions.length > 0) {\n console.group('📁 Other Permissions');\n ungroupedPermissions.forEach((permission) => {\n console.log(` • ${permission}`);\n });\n console.groupEnd();\n }\n\n // Summary\n console.log('');\n console.log(\n `Summary: ${allManifests.length} modules, ${allFeatures.length} features, ${userPermissions.length} permissions`\n );\n\n console.groupEnd();\n } catch (error) {\n console.error('[AXPDebugService] Failed to display user access info:', error);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXColorBoxModule } from '@acorex/components/color-box';\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXNumberBoxModule } from '@acorex/components/number-box';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { afterNextRender, Component, linkedSignal, model, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPDomToImageOptions } from './export.service';\n\n@Component({\n template: ` <div class=\"ax-grid ax-grid-cols-[auto_18rem] ax-gap-4 ax-justify-center ax-p-4 ax-items-center\">\n <ax-label>Resolution (px)</ax-label>\n <div class=\"ax-flex ax-gap-2 ax-items-center\">\n <ax-number-box\n [changeOnScroll]=\"true\"\n [decimals]=\"4\"\n [value]=\"width()\"\n (onValueChanged)=\"calculateRatio($event, 'width')\"\n name=\"Width\"\n >\n </ax-number-box>\n <ax-button [toggleable]=\"true\" [(selected)]=\"ratio\"\n ><ax-icon><i class=\"fa-solid fa-vector-square\"></i></ax-icon\n ></ax-button>\n <ax-number-box\n [changeOnScroll]=\"true\"\n [decimals]=\"4\"\n [value]=\"height()\"\n (onValueChanged)=\"calculateRatio($event, 'height')\"\n name=\"Height\"\n >\n </ax-number-box>\n </div>\n\n <ax-label>Background color</ax-label>\n <ax-color-box [(ngModel)]=\"bgcolor\"></ax-color-box>\n\n <ax-label>Quality of image (50-100%)</ax-label>\n <ax-number-box\n [changeOnScroll]=\"true\"\n [minValue]=\"50\"\n [maxValue]=\"100\"\n [(ngModel)]=\"qualityComputed\"\n name=\"Quality\"\n >\n </ax-number-box>\n\n <ax-label>Scale</ax-label>\n <ax-number-box [changeOnScroll]=\"true\" [minValue]=\"1\" [(ngModel)]=\"scale\" name=\"scale\"> </ax-number-box>\n </div>\n\n <ax-footer>\n <ax-prefix> </ax-prefix>\n <ax-suffix>\n <ax-button text=\"Cancel\" look=\"solid\" (onClick)=\"handleClose(true)\"> </ax-button>\n <ax-button text=\"Print\" look=\"solid\" color=\"primary\" (onClick)=\"handleClose()\">\n <ax-icon class=\"fa-solid fa-print\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-footer>`,\n imports: [\n FormsModule,\n AXCheckBoxModule,\n AXNumberBoxModule,\n AXTextBoxModule,\n AXLabelModule,\n AXDecoratorModule,\n AXButtonModule,\n AXColorBoxModule,\n ],\n})\nexport class AXMOrgChartPrintPage extends AXBasePageComponent {\n private data: AXPDomToImageOptions;\n\n protected ratio = signal(false);\n protected baseWidth = signal<number | undefined>(undefined);\n protected baseHeight = signal<number | undefined>(undefined);\n\n protected bgcolor = model<string>();\n protected width = model<number>();\n protected height = model<number>();\n protected quality = model<number>();\n protected qualityComputed = linkedSignal(() => (this.data.quality ?? 1) * 100);\n protected scale = model<number>();\n\n #init = afterNextRender(() => {\n this.bgcolor.set(this.data.bgcolor);\n\n this.width.set(this.data.width);\n this.baseWidth.set(this.data.width);\n\n this.height.set(this.data.height);\n this.baseHeight.set(this.data.height);\n\n this.quality.set(this.data.quality);\n this.scale.set(this.data.scale);\n });\n\n protected calculateRatio(event: AXValueChangedEvent, type: 'width' | 'height'): void {\n if (!this.ratio() || !event.isUserInteraction) return;\n const value = event.value;\n if (type === 'width') {\n const newHeight = Math.round((value / this.baseWidth()!) * this.baseHeight()! * 100) / 100;\n this.height.set(newHeight);\n this.width.set(value);\n } else {\n const newWidth = Math.round((value / this.baseHeight()!) * this.baseWidth()! * 100) / 100;\n this.width.set(newWidth);\n this.height.set(value);\n }\n }\n\n protected async handleClose(isCanceled = false) {\n this.close({\n bgcolor: this.bgcolor(),\n width: this.width(),\n height: this.height(),\n quality: this.qualityComputed() / 100,\n scale: this.scale(),\n isCanceled,\n });\n }\n}\n","// AXPPdfService\nimport { AXPopupService } from '@acorex/components/popup';\nimport { Injectable, inject } from '@angular/core';\nimport { AXMOrgChartPrintPage } from './export-popup';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPExportService {\n popupService = inject(AXPopupService);\n async generateBlobFromElement(element: HTMLElement, blobOptions?: AXPDomToImageOptions): Promise<Blob> {\n const domtoimage = (await import('dom-to-image')).default;\n\n const originalWidth = element.scrollWidth;\n const originalHeight = element.scrollHeight;\n\n let popup: boolean | undefined,\n options: AXPDomToImageOptions = {},\n newOptions: AXPDomToImageOptions = {};\n\n if (blobOptions) {\n ({ popup, ...options } = blobOptions);\n }\n\n if (popup) {\n const result = await this.popupService.open(AXMOrgChartPrintPage, {\n header: true,\n size: 'fit',\n draggable: true,\n hasBackdrop: true,\n title: 'Export Options',\n data: { data: options },\n });\n if (result.data.isCanceled) {\n throw new Error('Process is Canceled by User!');\n } else {\n newOptions = { ...options, ...result.data };\n }\n }\n\n return domtoimage.toBlob(element, {\n ...newOptions,\n width: (newOptions.width ?? originalWidth) * (newOptions?.scale ?? 1),\n height: (newOptions.height ?? originalHeight) * (newOptions?.scale ?? 1),\n style: {\n transform: `scale(${newOptions?.scale ?? 1})`,\n transformOrigin: 'top left',\n },\n });\n }\n\n download(blob: Blob, filename: string): void {\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(link.href);\n }\n}\n\nexport interface AXPDomToImageOptions {\n popup?: true;\n filter?: (node: Node) => boolean;\n bgcolor?: string;\n width?: number;\n height?: number;\n style?: {};\n quality?: number;\n imagePlaceholder?: string;\n cacheBust?: boolean;\n scale?: number;\n}\n","import { AXDataSourceFilterOption } from '@acorex/cdk/common';\n\nexport function AXPCleanNestedFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[] {\n return filters\n .map((filter) => {\n if (!filter) return undefined;\n if (filter.filters?.length) {\n const cleanedNestedFilters = AXPCleanNestedFilters(filter.filters);\n if (!filter.field && !filter.operator && cleanedNestedFilters.length === 0) {\n return undefined;\n }\n return {\n ...filter,\n filters: cleanedNestedFilters.filter(Boolean),\n };\n }\n if ((!filter.value && filter.value != false) || filter.value === 'unknown') {\n return undefined;\n }\n return filter;\n })\n .filter(Boolean) as AXDataSourceFilterOption[];\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXPLanguage, AXPLocaleProfile } from './regional.types';\n\n/**\n * Narrow API for reading app locale profiles and active languages.\n * Implemented by locale-management; consumed by platform layout without importing the module (avoids circular deps).\n */\nexport interface AXPLocaleManagementPort {\n getLocaleProfiles(): Promise<AXPLocaleProfile[]>;\n getLanguages(): Promise<AXPLanguage[]>;\n}\n\nexport const AXP_LOCALE_MANAGEMENT_PORT = new InjectionToken<AXPLocaleManagementPort>('AXP_LOCALE_MANAGEMENT_PORT');\n","//#region ---- Versioning Types ----\n\nexport interface AXPVersionStream {\n id: string;\n entityType: string;\n entityId: string;\n createdAt: string;\n}\n\nexport enum AXVChangeType {\n Create = 'Create',\n Update = 'Update',\n Delete = 'Delete',\n}\n\nexport type CanonicalChangeOp = 'add' | 'remove' | 'replace' | 'rename' | 'metadata';\n\nexport interface CanonicalChange {\n path: string;\n op: CanonicalChangeOp;\n oldValue?: unknown;\n newValue?: unknown;\n meta?: Record<string, unknown>;\n}\n\nexport interface AXPVersionEntry {\n id: string;\n streamId: string;\n versionNumber: number;\n changeType: AXVChangeType;\n changedBy: string;\n changedAt: string;\n snapshotJson: unknown;\n patchFromPrevJson: CanonicalChange[];\n summary?: string;\n metadataJson?: unknown;\n}\n\nexport interface AXPVersionChange {\n id?: number;\n versionEntryId: string;\n path: string;\n op: CanonicalChangeOp;\n oldValue?: unknown;\n newValue?: unknown;\n}\n\nexport interface VersionedFileInfo {\n id: string;\n name: string;\n size: number;\n mime: string;\n hash: string;\n url?: string;\n thumbUrl?: string;\n}\n\n//#endregion\n\n//#region ---- Service Contract ----\n\nexport abstract class AXPVersioningService {\n abstract getStreamIdIfExists(entityType: string, entityId: string): Promise<string | null>;\n abstract listEntries(streamId: string, options?: { limit?: number; offset?: number }): Promise<AXPVersionEntry[]>;\n abstract getUiFriendlyDiff(streamId: string, v1: number, v2: number): Promise<Array<{ badge: string; path: string; summary: string; oldValue?: unknown; newValue?: unknown }>>;\n}\n\n//#endregion\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["merge","i1.AXPErrorHandlerRegistryService","i1"],"mappings":"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"}
|