{"version":3,"file":"acorex-platform-common.mjs","sources":["../../../../libs/platform/common/src/lib/contracts/datasource.keys.ts","../../../../libs/platform/common/src/lib/contracts/index.ts","../../../../libs/platform/common/src/lib/ai/output-contract-transcript-segment.types.ts","../../../../libs/platform/common/src/lib/ai/output-contract-transcript-segment.provider.ts","../../../../libs/platform/common/src/lib/ai/output-contract-transcript-segment.service.ts","../../../../libs/platform/common/src/lib/app/app-version.provider.ts","../../../../libs/platform/common/src/lib/app/operators.ts","../../../../libs/platform/common/src/lib/app/date-filter-presets.ts","../../../../libs/platform/common/src/lib/home-page/home-page.types.ts","../../../../libs/platform/common/src/lib/configs/common-settings.key.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-coercion.ts","../../../../libs/platform/common/src/lib/settings/settings.provider.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/settings/regional-calendar.service.ts","../../../../libs/platform/common/src/lib/settings/unsaved-changes-confirm.service.ts","../../../../libs/platform/common/src/lib/settings/unsaved-changes-popstate.service.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-route-cache.registry.ts","../../../../libs/platform/common/src/lib/settings/unsaved-changes-can-deactivate.guard.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/background-operation/background-operation.notification.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation-notification.service.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.util.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation-completion.service.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.types.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.const.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.entity.storage.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.entity.mapper.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.store.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.entity-store.service.ts","../../../../libs/platform/common/src/lib/background-operation/entities/background-operation/background-operation.types.ts","../../../../libs/platform/common/src/lib/background-operation/entities/background-operation/background-operation.entity.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.handler.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.provider.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.service.ts","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-item.component.ts","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-item.component.html","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-panel.component.ts","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-panel.component.html","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-slot.component.ts","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-slot.component.html","../../../../libs/platform/common/src/lib/configs/app.config.ts","../../../../libs/platform/common/src/lib/utils/app-path-navigation.util.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-route-matcher.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-visibility.service.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-keyboard-shortcuts.service.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.service.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-key.util.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-navigation.types.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-route-resolver.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-title.util.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-preview.service.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-route-policy.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-navigation.service.ts","../../../../libs/platform/common/src/lib/browser-title/browser-title.service.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/errors/not-found.error.ts","../../../../libs/platform/common/src/lib/errors/not-found.routes.ts","../../../../libs/platform/common/src/lib/errors/unauthorized.routes.ts","../../../../libs/platform/common/src/lib/formatters/translate.formatter.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage.service.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage-trace.constants.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/keyboard-shortcuts/keyboard-shortcuts-help.component.ts","../../../../libs/platform/common/src/lib/keyboard-shortcuts/keyboard-shortcuts-help.service.ts","../../../../libs/platform/common/src/lib/layout/sticky.directive.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-route-access.service.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-route.guard.ts","../../../../libs/platform/common/src/lib/layout/menu/protected-route.guards.ts","../../../../libs/platform/common/src/lib/layout/menu/search-definition.provider.ts","../../../../libs/platform/common/src/lib/search/search-definition-lazy-resolver.token.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-display-string.util.ts","../../../../libs/platform/common/src/lib/search/search.provider.ts","../../../../libs/platform/common/src/lib/search/entity-search-display-title.util.ts","../../../../libs/platform/common/src/lib/search/search.service.ts","../../../../libs/platform/common/src/lib/search/entity-row-display-title.util.ts","../../../../libs/platform/common/src/lib/search/search-entity-command.util.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/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/utils/query-params-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/workflows/common.workflow.ts","../../../../libs/platform/common/src/lib/workflows/entity-workflow.events.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/entity-create-list-behavior.util.ts","../../../../libs/platform/common/src/lib/configs/config.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/integration/integration.provider.ts","../../../../libs/platform/common/src/lib/integration/integration-provider.context.ts","../../../../libs/platform/common/src/lib/integration/integration-provider.registry.service.ts","../../../../libs/platform/common/src/lib/integration/integration-secret-store.token.ts","../../../../libs/platform/common/src/lib/integration/integration-connection-established.token.ts","../../../../libs/platform/common/src/lib/integration/index.ts","../../../../libs/platform/common/src/lib/lock-system/lock.service.ts","../../../../libs/platform/common/src/lib/status-definition/status-definition-provider.service.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-preview.types.ts","../../../../libs/platform/common/src/lib/utils/entity-list-return-url.util.ts","../../../../libs/platform/common/src/lib/utils/clipboard-service.ts","../../../../libs/platform/common/src/lib/utils/dom-graphic.util.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":["//#region ---- Datasource keys ----\n\n/** Platform common datasource registry names. */\nexport const AXPPlatformCommonDataSourceKeys = {\n  MenuItems: 'platform-menu-items',\n} as const;\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './datasource.keys';\n\n//#endregion\n","//#region ---- Output kind & segment ----\n\nimport type { AXPAgentOutputKind, AXPOutputTranscriptSegmentId } from '@acorex/platform/contracts';\n\n//#endregion\n\n//#region ---- JSON Schema (minimal subset) ----\n\n/**\n * Minimal JSON-Schema-like object for native provider hints and local validation.\n */\nexport interface AXPJsonSchemaLike {\n  type?: 'object' | 'array' | 'string' | 'number' | 'integer' | 'boolean' | 'null';\n  properties?: Record<string, AXPJsonSchemaLike>;\n  items?: AXPJsonSchemaLike | AXPJsonSchemaLike[];\n  required?: string[];\n  enum?: unknown[];\n  additionalProperties?: boolean | AXPJsonSchemaLike;\n  description?: string;\n  [key: string]: unknown;\n}\n\n//#endregion\n\n//#region ---- Provider response format ----\n\n/** Provider-native structured output hint (OpenAI `response_format`, Gemini `responseMimeType`). */\nexport type AXPAgentResponseFormat =\n  | { type: 'text' }\n  | { type: 'json_object' }\n  | {\n      type: 'json_schema';\n      schema: AXPJsonSchemaLike;\n      name?: string;\n      strict?: boolean;\n    };\n\n//#endregion\n\n//#region ---- Output contract ----\n\n/**\n * Catalog row contract for specialist final output (separate from domain `systemPrompt`).\n * Field paths align with agent/assist entity `outputContract` JSON.\n */\nexport interface AXPAgentOutputContract {\n  kind: AXPAgentOutputKind;\n  /**\n   * When `kind` is `object`: `text` = generic JSON object as text; `node` = inner widget node in chat;\n   * `followUp` = `{\"type\":\"followUp\",\"content\":[...]}` envelope.\n   */\n  transcriptSegment?: AXPOutputTranscriptSegmentId;\n  instruction?: string;\n  schemaSummary?: string;\n  schema?: AXPJsonSchemaLike;\n  schemaName?: string;\n  schemaStrict?: boolean;\n  validationCommandName?: string;\n  structuredRetries?: number;\n  providerResponseFormat?: AXPAgentResponseFormat;\n}\n\n/** Default structured retry count when `structuredRetries` is omitted on structured kinds. */\nexport const AXP_AGENT_OUTPUT_CONTRACT_DEFAULT_STRUCTURED_RETRIES = 2;\n\n//#endregion\n\n//#region ---- Transcript segment definition ----\n\n/**\n * Registered preset for an output-contract transcript segment.\n * Modules register via {@link AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER}.\n */\nexport interface AXPOutputContractTranscriptSegmentDefinition {\n  /** Segment id (`text`, `node`, `followUp`). */\n  name: AXPOutputTranscriptSegmentId;\n  /** i18n key or display title for admin UI selects. */\n  title: string;\n  description?: string;\n  /** Contract kinds this segment applies to (defaults to `object` only). */\n  applicableKinds?: AXPAgentOutputKind[];\n  /** Default `outputContract` field values when this segment is chosen. */\n  contract: AXPAgentOutputContract;\n}\n\n//#endregion\n","import { InjectionToken } from '@angular/core';\nimport type { AXPOutputContractTranscriptSegmentDefinition } from './output-contract-transcript-segment.types';\n\n//#region ---- Provider token ----\n\nexport type AXPOutputContractTranscriptSegmentProviderToken =\n  | AXPOutputContractTranscriptSegmentProvider\n  | Promise<AXPOutputContractTranscriptSegmentProvider>;\n\n/**\n * Registers one or more transcript-segment presets for agent/assist `outputContract`.\n * Use with `multi: true` in module providers.\n */\nexport interface AXPOutputContractTranscriptSegmentProvider {\n  provide():\n    | AXPOutputContractTranscriptSegmentDefinition[]\n    | Promise<AXPOutputContractTranscriptSegmentDefinition[]>;\n}\n\nexport const AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER = new InjectionToken<\n  AXPOutputContractTranscriptSegmentProviderToken[]\n>('AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER', {\n  factory: () => [],\n});\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport type { AXPOutputTranscriptSegmentId } from '@acorex/platform/contracts';\nimport { AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER } from './output-contract-transcript-segment.provider';\nimport type {\n  AXPAgentOutputContract,\n  AXPOutputContractTranscriptSegmentDefinition,\n} from './output-contract-transcript-segment.types';\n\n//#endregion\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPOutputContractTranscriptSegmentService {\n  //#region ---- Dependencies & cache ----\n\n  private readonly segmentProviders =\n    inject(AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER, { optional: true }) ?? [];\n\n  private definitionsByName = new Map<string, AXPOutputContractTranscriptSegmentDefinition>();\n  private loadPromise: Promise<void> | null = null;\n\n  //#endregion\n\n  //#region ---- Public API ----\n\n  /** All registered transcript segment definitions (deduped by `name`). */\n  async getAll(): Promise<AXPOutputContractTranscriptSegmentDefinition[]> {\n    await this.ensureLoaded();\n    return [...this.definitionsByName.values()];\n  }\n\n  /** Lookup by segment id (`text`, `node`, `followUp`). */\n  async get(\n    name: AXPOutputTranscriptSegmentId,\n  ): Promise<AXPOutputContractTranscriptSegmentDefinition | undefined> {\n    await this.ensureLoaded();\n    return this.definitionsByName.get(name);\n  }\n\n  /** Default `outputContract` for a segment, or `undefined` when not registered. */\n  async getContractPreset(name: AXPOutputTranscriptSegmentId): Promise<AXPAgentOutputContract | undefined> {\n    const definition = await this.get(name);\n    return definition?.contract;\n  }\n\n  /** Clears the in-memory registry (e.g. after hot reload in dev). */\n  clearCache(): void {\n    this.definitionsByName.clear();\n    this.loadPromise = null;\n  }\n\n  //#endregion\n\n  //#region ---- Load ----\n\n  private async ensureLoaded(): Promise<void> {\n    if (this.loadPromise) {\n      return this.loadPromise;\n    }\n    this.loadPromise = this.loadDefinitions();\n    return this.loadPromise;\n  }\n\n  private async loadDefinitions(): Promise<void> {\n    const resolvedProviders = await Promise.all(this.segmentProviders);\n\n    for (const provider of resolvedProviders) {\n      if (!provider) {\n        continue;\n      }\n      const definitions = await Promise.resolve(provider.provide());\n      for (const definition of definitions) {\n        if (!definition?.name) {\n          continue;\n        }\n        if (this.definitionsByName.has(definition.name)) {\n          console.warn(\n            `[AXPOutputContractTranscriptSegmentService] Segment \"${definition.name}\" already registered; overwriting.`,\n          );\n        }\n        this.definitionsByName.set(definition.name, definition);\n      }\n    }\n  }\n\n  //#endregion\n}\n","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","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  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 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 type { AXCalendarService } from '@acorex/core/date-time';\n\nimport { BETWEEN_OPER } from './operators';\n\nexport type AXPDateTimeFilterPresetKind = 'computed' | 'manual';\n\nexport interface AXPDateTimeFilterPreset {\n  id: string;\n  title: string;\n  kind: AXPDateTimeFilterPresetKind;\n  operationType?: string;\n}\n\nexport const DEFAULT_DATE_FILTER_PRESETS: AXPDateTimeFilterPreset[] = [\n  { id: 'today', title: '@general:terms.date-presets.today', kind: 'computed' },\n  { id: 'this-week', title: '@general:terms.date-presets.this-week', kind: 'computed' },\n  { id: 'this-month', title: '@general:terms.date-presets.this-month', kind: 'computed' },\n  { id: 'yesterday', title: '@general:terms.date-presets.yesterday', kind: 'computed' },\n  { id: 'last-week', title: '@general:terms.date-presets.last-week', kind: 'computed' },\n  { id: 'last-month', title: '@general:terms.date-presets.last-month', kind: 'computed' },\n  { id: 'tomorrow', title: '@general:terms.date-presets.tomorrow', kind: 'computed' },\n  { id: 'next-week', title: '@general:terms.date-presets.next-week', kind: 'computed' },\n  { id: 'next-month', title: '@general:terms.date-presets.next-month', kind: 'computed' },\n  { id: 'between', title: BETWEEN_OPER.title, kind: 'manual', operationType: 'between' },\n  { id: 'greater-than', title: '@general:terms.operators.greater-than', kind: 'manual', operationType: 'greaterThan' },\n  { id: 'less-than', title: '@general:terms.operators.less-than', kind: 'manual', operationType: 'lessThan' },\n];\n\nexport interface AXPDateTimeFilterValue {\n  operation?: { type: string };\n  value?: string | { from?: string; to?: string };\n}\n\nexport function resolveDateFilterPresets(\n  customPresets?: AXPDateTimeFilterPreset[],\n  presetIds?: string[],\n): AXPDateTimeFilterPreset[] {\n  let presets = customPresets?.length ? customPresets : DEFAULT_DATE_FILTER_PRESETS;\n  if (presetIds?.length) {\n    presets = presets.filter((p) => presetIds.includes(p.id));\n  }\n  return presets;\n}\n\nexport function applyDateFilterPreset(\n  presetId: string,\n  calendarService: AXCalendarService,\n): AXPDateTimeFilterValue | undefined {\n  const currentDate = calendarService.now().date;\n  const calendar = calendarService.calendar;\n\n  switch (presetId) {\n    case 'today':\n      return {\n        operation: { type: 'between' },\n        value: {\n          from: calendar.startOf(currentDate, 'day').date.toISOString(),\n          to: calendar.endOf(currentDate, 'day').date.toISOString(),\n        },\n      };\n    case 'this-week':\n      return {\n        operation: { type: 'between' },\n        value: {\n          from: calendar.startOf(currentDate, 'week').date.toISOString(),\n          to: calendar.endOf(currentDate, 'week').date.toISOString(),\n        },\n      };\n    case 'this-month':\n      return {\n        operation: { type: 'between' },\n        value: {\n          from: calendar.startOf(currentDate, 'month').date.toISOString(),\n          to: calendar.endOf(currentDate, 'month').date.toISOString(),\n        },\n      };\n    case 'yesterday': {\n      const yesterday = calendar.add(currentDate, 'day', -1);\n      return {\n        operation: { type: 'between' },\n        value: {\n          from: yesterday.startOf('day').date.toISOString(),\n          to: yesterday.endOf('day').date.toISOString(),\n        },\n      };\n    }\n    case 'last-week': {\n      const lastWeek = calendar.add(currentDate, 'week', -1);\n      return {\n        operation: { type: 'between' },\n        value: {\n          from: lastWeek.startOf('week').date.toISOString(),\n          to: lastWeek.endOf('week').date.toISOString(),\n        },\n      };\n    }\n    case 'last-month': {\n      const lastMonth = calendar.add(currentDate, 'month', -1);\n      return {\n        operation: { type: 'between' },\n        value: {\n          from: lastMonth.startOf('month').date.toISOString(),\n          to: lastMonth.endOf('month').date.toISOString(),\n        },\n      };\n    }\n    case 'tomorrow': {\n      const tomorrow = calendar.add(currentDate, 'day', 1);\n      return {\n        operation: { type: 'between' },\n        value: {\n          from: tomorrow.startOf('day').date.toISOString(),\n          to: tomorrow.endOf('day').date.toISOString(),\n        },\n      };\n    }\n    case 'next-week': {\n      const nextWeek = calendar.add(currentDate, 'week', 1);\n      return {\n        operation: { type: 'between' },\n        value: {\n          from: nextWeek.startOf('week').date.toISOString(),\n          to: nextWeek.endOf('week').date.toISOString(),\n        },\n      };\n    }\n    case 'next-month': {\n      const nextMonth = calendar.add(currentDate, 'month', 1);\n      return {\n        operation: { type: 'between' },\n        value: {\n          from: nextMonth.startOf('month').date.toISOString(),\n          to: nextMonth.endOf('month').date.toISOString(),\n        },\n      };\n    }\n    case 'between':\n      return undefined;\n    case 'greater-than':\n      return { operation: { type: 'greaterThan' } };\n    case 'less-than':\n      return { operation: { type: 'lessThan' } };\n    default:\n      return {\n        operation: { type: 'between' },\n        value: { from: '', to: '' },\n      };\n  }\n}\n\nexport function findManualPresetIdByOperation(\n  operationType: string | undefined,\n  presets: AXPDateTimeFilterPreset[],\n): string | undefined {\n  if (!operationType) {\n    return undefined;\n  }\n  return presets.find((p) => p.kind === 'manual' && p.operationType === operationType)?.id;\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","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  HighlightAfterCreateInList = 'Common:Setting:Entity.HighlightAfterCreateInList',\n  ShowPageBadge = 'Common:Setting:Entity.ShowPageBadge',\n  ConfirmUnsavedChanges = 'Common:Setting:Entity.ConfirmUnsavedChanges',\n  DebugMode = 'PlatformDevTools:Setting:Developer.DebugMode',\n  ShowRowIndexColumn = 'Common:Setting:Entity.ShowRowIndexColumn',\n  EntityListPersistenceMode = 'Common:Setting:Entity.ListPersistenceMode',\n  NavigationMode = 'Common:Setting:Navigation.Mode',\n  MaxOpenTabs = 'Common:Setting:Navigation.MaxOpenTabs',\n}\n","\nimport { AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXPOptionsData, AXPPlatformScopeKey, AXPValidationRules, AXPValueTransformerFunctions, AXPWidgetTriggers } from '@acorex/platform/contracts';\n\nimport { merge } from 'lodash-es';\nimport { AXPSettingDefinition, AXPSettingDefinitionGroup, AXPSettingDefinitionSection, AXPSettingLayoutOptions } from './index';\n\nexport class AXPSettingDefinitionProviderContext {\n  private rootGroups: AXPSettingDefinitionGroup[] = [];\n  private groupMap: Map<string, AXPSettingDefinitionGroup> = new Map();\n\n  addGroup(\n    name: string,\n    title: string,\n    description?: string,\n    icon?: string,\n    pageTitle?: string,\n    priority?: number,\n  ): AXPSettingDefinitionGroupBuilder {\n    const newGroup: AXPSettingDefinitionGroup = {\n      name,\n      title,\n      pageTitle,\n      description,\n      icon,\n      priority,\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(\n    name: string,\n    title: string,\n    description?: string,\n    icon?: string,\n    pageTitle?: string,\n    priority?: number,\n  ): AXPSettingDefinitionGroupBuilder {\n    const newGroup: AXPSettingDefinitionGroup = {\n      name,\n      title,\n      pageTitle,\n      description: description,\n      icon,\n      priority,\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?: AXPSettingLayoutOptions;\n    };\n    description?: string;\n    searchTagKeys?: string[];\n    isRequired?: boolean;\n    isInherited?: boolean;\n    isEncrypted?: boolean;\n    requiresPageRefresh?: 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      searchTagKeys: setting.searchTagKeys,\n      isRequired: setting.isRequired ?? false,\n      isInherited: setting.isInherited ?? false,\n      isEncrypted: setting.isEncrypted ?? false,\n      requiresPageRefresh: setting.requiresPageRefresh ?? 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 { AXPPlatformScope, AXPPlatformScopeKey } from '@acorex/platform/contracts';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { sortBy } from 'lodash-es';\nimport { AXPSettingDefinitionProviderContext } from './setting.builder';\nimport { AXPGroupSearchResult, AXPSettingDefaultValuesProvider, AXPSettingDefinitionGroup } from './settings.types';\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[]>(\n  'AXP_SETTING_DEFINITION_PROVIDER',\n);\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\n            .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            }))\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), [(group) => group.priority ?? 1000, 'title']);\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  async settingScopeByKey(): Promise<Record<string, AXPPlatformScope>> {\n    const scopes: Record<string, AXPPlatformScope> = {};\n\n    const collect = (groups: AXPSettingDefinitionGroup[]) => {\n      groups.forEach((group) => {\n        group.sections.forEach((section) => {\n          section.settings.forEach((setting) => {\n            scopes[setting.name] = setting.scope as AXPPlatformScope;\n          });\n        });\n        collect(group.groups);\n      });\n    };\n\n    if (!this.cache) {\n      await this.load();\n    }\n    collect(this.cache!);\n\n    return scopes;\n  }\n\n  async requiresPageRefreshByKey(): Promise<Record<string, boolean>> {\n    const refreshByKey: Record<string, boolean> = {};\n\n    const collect = (groups: AXPSettingDefinitionGroup[]) => {\n      groups.forEach((group) => {\n        group.sections.forEach((section) => {\n          section.settings.forEach((setting) => {\n            if (setting.requiresPageRefresh) {\n              refreshByKey[setting.name] = true;\n            }\n          });\n        });\n        collect(group.groups);\n      });\n    };\n\n    if (!this.cache) {\n      await this.load();\n    }\n    collect(this.cache!);\n\n    return refreshByKey;\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 = [\n        ...breadcrumb,\n        { name: group.name, title: group.title, description: group.description },\n      ];\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  {\n    providedIn: 'root',\n    factory: () => [],\n  },\n);\n\nexport interface AXPSettingMergedDefaults {\n  defaults: Record<string, unknown>;\n  /** Per-key scope override for seeding (from providers that set `scope`). */\n  seedScopeByKey: Record<string, AXPPlatformScope>;\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 getMerged(): Promise<AXPSettingMergedDefaults> {\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    const seedScopeByKey: Record<string, AXPPlatformScope> = {};\n    for (const provider of ordered) {\n      try {\n        const overrideMap = await provider.provide();\n        Object.assign(merged, overrideMap);\n        if (provider.scope) {\n          for (const key of Object.keys(overrideMap)) {\n            seedScopeByKey[key] = provider.scope;\n          }\n        }\n      } catch (err) {\n        console.error('AXPSettingDefaultValuesProvider failed:', err);\n      }\n    }\n    return { defaults: merged, seedScopeByKey };\n  }\n\n  async getDefaults(): Promise<Record<string, unknown>> {\n    const { defaults } = await this.getMerged();\n    return defaults;\n  }\n}\n","//#region ---- Imports ----\n\nimport { coerceUnknownToBoolean, coerceUnknownToDate, coerceUnknownToFiniteNumber, coerceUnknownToTrimmedString, unwrapValueProperty } from '@acorex/platform/contracts';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Supported primitive coercions for persisted setting values (including `{ value: ... }` wrappers).\n */\nexport type AXPSettingCoercionKind = 'string' | 'boolean' | 'number' | 'date';\n\n//#endregion\n\n//#region ---- Kind inference ----\n\n/**\n * If the payload uses the common `{ value: T }` shape from setting widgets, returns the inner value; otherwise returns `raw`.\n */\nexport function peelSettingValueKey(raw: unknown): unknown {\n  return unwrapValueProperty(raw);\n}\n\nfunction coercionKindFromScalarSample(v: unknown): AXPSettingCoercionKind | null {\n  if (v === null || v === undefined) {\n    return null;\n  }\n  if (typeof v === 'boolean') {\n    return 'boolean';\n  }\n  if (typeof v === 'number' && Number.isFinite(v)) {\n    return 'number';\n  }\n  if (v instanceof Date) {\n    return 'date';\n  }\n  if (typeof v === 'string') {\n    if (v === 'true' || v === 'false') {\n      return 'boolean';\n    }\n    return 'string';\n  }\n  return null;\n}\n\n/**\n * Picks a primitive coercion kind from the setting definition default and/or the effective stored value.\n * Type argument `T` on the settings service `get` method is compile-time only; runtime behavior follows this inference.\n */\nexport function inferSettingCoercionKind(defaultSample: unknown, effective: unknown): AXPSettingCoercionKind | null {\n  const fromDefault = coercionKindFromScalarSample(defaultSample);\n  if (fromDefault) {\n    return fromDefault;\n  }\n  return coercionKindFromScalarSample(unwrapValueProperty(effective));\n}\n\n//#endregion\n\n//#region ---- Value coercion ----\n\nexport function coerceAXPSettingRawValueByKind(raw: unknown, kind: AXPSettingCoercionKind): string | boolean | number | Date {\n  switch (kind) {\n    case 'string':\n      return coerceUnknownToTrimmedString(raw);\n    case 'boolean':\n      return coerceUnknownToBoolean(raw);\n    case 'number':\n      return coerceUnknownToFiniteNumber(raw);\n    case 'date':\n      return coerceUnknownToDate(raw);\n    default: {\n      const _exhaustive: never = kind;\n      return _exhaustive;\n    }\n  }\n}\n\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'string'): string;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'boolean'): boolean;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'number'): number;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'date'): Date;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: AXPSettingCoercionKind): string | boolean | number | Date {\n  return coerceAXPSettingRawValueByKind(raw, kind);\n}\n\n//#endregion\n","import { AXPSessionService, AXPSessionStatus } from '@acorex/platform/auth';\nimport { AXPPlatformScope } from '@acorex/platform/contracts';\nimport { inject, InjectionToken, Injector } from '@angular/core';\nimport { AXPSettingValue, AXPSettingValueProvider } from './settings.types';\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\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(\n    private _scope: AXPPlatformScope,\n    private injector: Injector,\n  ) {\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  private async clear() {\n    if (!this.localStorageKey) {\n      return;\n    }\n    localStorage.removeItem(this.localStorageKey);\n  }\n}\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPPlatformScope } from '@acorex/platform/contracts';\nimport { AXPBroadcastEventService, AXPDebugService } from '@acorex/platform/core';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { cloneDeep, get } from 'lodash-es';\nimport { distinctUntilChanged, Subject } from 'rxjs';\nimport { AXPCommonSettings } from '../configs/common-settings.key';\nimport {\n  AXPSettingDefaultValuesAggregatorService,\n  AXPSettingDefinitionProviderService,\n} from './setting-definition.service';\nimport { coerceAXPSettingRawValueByKind, inferSettingCoercionKind } from './settings-coercion';\nimport { AXP_SETTING_VALUE_PROVIDER } from './settings.provider';\nimport { AXPSettingChangedEvent, AXPSettingValue, AXPSettingValueProvider } from './settings.types';\n\nexport interface AXPSettingsServiceInterface {\n  load(): Promise<AXPSettingValue[]>;\n  get<T = any>(key: string): Promise<T>;\n  peekCached(key: string): unknown | undefined;\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 debugService = inject(AXPDebugService);\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 = [AXPPlatformScope.Platform, AXPPlatformScope.Tenant, AXPPlatformScope.User];\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      void this.applyDebugModeFromEvent(data);\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      await this.seedMissingDefaults();\n      this.onLoaded.next();\n      await this.applyDebugModeFromSettings();\n      return settingsList;\n    } catch (error) {\n      console.error('Error loading settings', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Returns the effective setting value. Primitive coercion (string, boolean, number, date) is inferred from the\n   * definition default and/or the stored shape (including `{ value: ... }`). Type argument `T` is compile-time only;\n   * it is not read at runtime—use it to document the expected result (e.g. `get<boolean>(key)`).\n   */\n  async get<T = any>(key: string): Promise<T> {\n    const { effective, defaultSample } = await this.resolveEffectiveAndDefault(key);\n    const kind = inferSettingCoercionKind(defaultSample, effective);\n    if (kind !== null) {\n      return coerceAXPSettingRawValueByKind(effective, kind) as T;\n    }\n    if (effective === undefined) {\n      return effective as T;\n    }\n    return cloneDeep(effective) as T;\n  }\n\n  /**\n   * Synchronous read from the in-memory scope cache (User → Tenant → Platform).\n   * Returns `undefined` when the key is not cached yet (e.g. before {@link load} completes).\n   */\n  peekCached(key: string): unknown | undefined {\n    const scopeOrder = [AXPPlatformScope.User, AXPPlatformScope.Tenant, AXPPlatformScope.Platform];\n    for (const scope of scopeOrder) {\n      const scopeCache = this.scopedSettingsCache.get(scope);\n      if (!scopeCache?.has(key)) {\n        continue;\n      }\n      const value = scopeCache.get(key);\n      if (value !== undefined && value !== null) {\n        return value;\n      }\n    }\n    return undefined;\n  }\n\n  /**\n   * Effective value (user → tenant → platform) when set; otherwise the definition default. Used for reads and coercion hints.\n   */\n  private async resolveEffectiveAndDefault(key: string): Promise<{ effective: unknown; defaultSample: unknown }> {\n    if (this.scopedSettingsCache.size === 0) {\n      await this.load();\n    }\n    const defaults = await this.injector.get(AXPSettingDefaultValuesAggregatorService).getDefaults();\n    const defaultSample = get(defaults, key);\n    const scopeOrder = [AXPPlatformScope.User, AXPPlatformScope.Tenant, AXPPlatformScope.Platform];\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 { effective: value, defaultSample };\n        }\n      }\n    }\n    return { effective: defaultSample, defaultSample };\n  }\n\n  async defaultValues(scope: AXPPlatformScope): Promise<Record<string, unknown>> {\n    let scopeOrder = [AXPPlatformScope.Platform, AXPPlatformScope.Tenant, AXPPlatformScope.User].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.applyDebugModeFromEvent(event);\n    this.eventService.publish<AXPSettingChangedEvent>('AXPSettingChangedEvent', event);\n  }\n\n  private async applyDebugModeFromSettings(): Promise<void> {\n    try {\n      const debugMode = await this.get<boolean>(AXPCommonSettings.DebugMode);\n      this.debugService.setDebugMode(!!debugMode);\n    } catch {\n      this.debugService.setDebugMode(false);\n    }\n  }\n\n  private applyDebugModeFromEvent(event: AXPSettingChangedEvent): void {\n    if (!event.keys.includes(AXPCommonSettings.DebugMode)) {\n      return;\n    }\n\n    this.debugService.setDebugMode(!!event.values[AXPCommonSettings.DebugMode]);\n  }\n\n  private async seedMissingDefaults(): Promise<void> {\n    const definitionService = this.injector.get(AXPSettingDefinitionProviderService);\n    const aggregator = this.injector.get(AXPSettingDefaultValuesAggregatorService);\n    const [{ defaults, seedScopeByKey }, scopeByKey] = await Promise.all([\n      aggregator.getMerged(),\n      definitionService.settingScopeByKey(),\n    ]);\n    const persistedKeysByScope = new Map(\n      await Promise.all(\n        this.providers.map(async (provider) => {\n          const stored = await provider.load();\n          return [provider.scope, new Set(stored.map((s) => s.key))] as const;\n        }),\n      ),\n    );\n    const toPersist: Partial<Record<AXPPlatformScope, Record<string, unknown>>> = {};\n\n    for (const [key, value] of Object.entries(defaults)) {\n      const scope = seedScopeByKey[key] ?? scopeByKey[key];\n      if (!scope || value === undefined || persistedKeysByScope.get(scope)?.has(key)) {\n        continue;\n      }\n      toPersist[scope] ??= {};\n      toPersist[scope]![key] = value;\n    }\n\n    for (const [scope, values] of Object.entries(toPersist) as [AXPPlatformScope, Record<string, unknown>][]) {\n      if (Object.keys(values).length > 0) {\n        await this.scope(scope).set(values);\n      }\n    }\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    const effective = setting?.value;\n    const defaults = await this.parent.defaultValues(this.provider.scope);\n    const defaultSample = get(defaults, key);\n    const kind = inferSettingCoercionKind(defaultSample, effective);\n    if (kind !== null) {\n      return coerceAXPSettingRawValueByKind(effective, kind) as T;\n    }\n    if (effective === undefined) {\n      return effective as T;\n    }\n    return cloneDeep(effective) as T;\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      await this.provider.set(keyOrValues, value);\n      this.scopeCache.set(keyOrValues, value);\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      await this.provider.set(keyOrValues);\n      Object.entries(keyOrValues).forEach(([key, val]) => this.scopeCache.set(key, val));\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 '@acorex/platform/contracts';\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 { AXPWidgetProperty } from '@acorex/platform/layout/widget-core-contracts';\nimport type { AXPWidgetNode } from '@acorex/platform/contracts';\n\nimport type { AXPEntityProperty } from '@acorex/platform/layout/entity-contracts';\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","import { AXCalendarService } from '@acorex/core/date-time';\nimport { Injectable } from '@angular/core';\n\n/**\n * Platform-provided {@link AXCalendarService} that applies locale profile week layout\n * (first day of week, weekends) through the core calendar service lifecycle.\n *\n * Temporary bridge until @acorex/components reads week layout from AXLocaleService.\n */\n@Injectable()\nexport class AXPRegionalCalendarService extends AXCalendarService {}\n","import { AXDialogService } from '@acorex/components/dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPCommonSettings } from '../configs/common-settings.key';\nimport { AXPSettingsService } from './settings.service';\n\n//#region ----   Types   ----\n\nexport interface AXPUnsavedChangesConfirmOptions {\n  /** When false, skips confirm even if the global setting is enabled (e.g. dialog `confirmCloseWhenDirty`). */\n  enabled?: boolean;\n  title?: AXPMultiLanguageString;\n  message?: AXPMultiLanguageString;\n  /**\n   * When true (default), confirming sets leave approval for the next route deactivation.\n   * Set false for in-place actions such as discarding edits without navigating away.\n   */\n  approveLeaveOnConfirm?: boolean;\n}\n\nexport interface AXPUnsavedChangesCanDeactivate {\n  canDeactivate(): boolean | Promise<boolean>;\n}\n\n//#endregion\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPUnsavedChangesConfirmService {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly settingsService = inject(AXPSettingsService);\n  private readonly dialogService = inject(AXDialogService);\n  private readonly translateService = inject(AXTranslationService);\n\n  //#endregion\n\n  //#region ----   State   ----\n\n  /** Ensures concurrent leave paths share a single unsaved-changes confirm dialog. */\n  private confirmPromise?: Promise<boolean>;\n\n  /** Set after the user confirms leaving; cleared on {@link NavigationEnd} by popstate handler. */\n  private leaveConfirmed = false;\n\n  //#endregion\n\n  //#region ----   Public API   ----\n\n  /**\n   * Whether the global \"confirm unsaved changes\" setting is enabled.\n   */\n  async isGloballyEnabled(): Promise<boolean> {\n    const value = await this.settingsService.get<boolean>(AXPCommonSettings.ConfirmUnsavedChanges);\n    return value !== false;\n  }\n\n  /**\n   * Marks the next route deactivation as already approved (avoids a second prompt after in-app navigation).\n   */\n  markLeaveConfirmed(): void {\n    this.leaveConfirmed = true;\n  }\n\n  /** True while an unsaved-changes confirm dialog is open or being resolved. */\n  isConfirmPending(): boolean {\n    return this.confirmPromise != null;\n  }\n\n  /** Whether the user already approved leaving during the current navigation. */\n  hasLeaveConfirmed(): boolean {\n    return this.leaveConfirmed;\n  }\n\n  /** Clears leave approval after navigation settles. */\n  clearLeaveConfirmed(): void {\n    this.leaveConfirmed = false;\n  }\n\n  consumeLeaveConfirmed(): boolean {\n    if (!this.leaveConfirmed) {\n      return false;\n    }\n    this.leaveConfirmed = false;\n    return true;\n  }\n\n  /**\n   * Prompts when `isDirty` and the global setting (and optional per-instance `enabled`) allow it.\n   * Returns true when navigation/dismiss may proceed.\n   */\n  async confirmIfDirty(isDirty: boolean, options?: AXPUnsavedChangesConfirmOptions): Promise<boolean> {\n    if (this.confirmPromise) {\n      return this.confirmPromise;\n    }\n\n    if (options?.enabled === false || !isDirty) {\n      return true;\n    }\n\n    // Reserve before any await so concurrent close/navigation paths share one dialog.\n    this.confirmPromise = this.resolveConfirmIfDirty(options);\n    try {\n      return await this.confirmPromise;\n    } finally {\n      this.confirmPromise = undefined;\n    }\n  }\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  private async resolveConfirmIfDirty(options?: AXPUnsavedChangesConfirmOptions): Promise<boolean> {\n    if (!(await this.isGloballyEnabled())) {\n      return true;\n    }\n\n    const confirmed = await this.prompt(options);\n    if (confirmed && options?.approveLeaveOnConfirm !== false) {\n      this.leaveConfirmed = true;\n    }\n    return confirmed;\n  }\n\n  private async prompt(options?: AXPUnsavedChangesConfirmOptions): Promise<boolean> {\n    const [title, message, yesText, noText] = await Promise.all([\n      this.translateService.translateAsync(options?.title ?? '@general:messages.unsaved-changes.title'),\n      this.translateService.translateAsync(options?.message ?? '@general:messages.unsaved-changes.message'),\n      this.translateService.translateAsync('@general:terms.common.yes-no.yes'),\n      this.translateService.translateAsync('@general:terms.common.yes-no.no'),\n    ]);\n\n    return new Promise((resolve) => {\n      const popup = this.dialogService.open({\n        title,\n        content: message,\n        type: 'warning',\n        orientation: 'horizontal',\n        draggable: false,\n        buttons: [\n          {\n            name: 'yes',\n            text: yesText,\n            color: 'warning',\n            autofocus: false,\n            onClick: () => {\n              popup.close();\n              resolve(true);\n            },\n          },\n          {\n            name: 'no',\n            text: noText,\n            color: 'default',\n            autofocus: true,\n            onClick: () => {\n              popup.close();\n              resolve(false);\n            },\n            hotkey: {\n              Escape: () => {\n                popup.close();\n                resolve(false);\n              },\n            },\n          },\n        ],\n      });\n    });\n  }\n\n  //#endregion\n}\n","import { Location } from '@angular/common';\nimport { DestroyRef, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { AXPUnsavedChangesConfirmService } from './unsaved-changes-confirm.service';\n\n//#region ----   Types   ----\n\nexport interface AXPUnsavedChangesPopstateSource {\n  id: string;\n  isDirty: () => boolean;\n}\n\n//#endregion\n\n/**\n * Intercepts browser back/forward (`popstate`) when a registered page is dirty.\n * Captures dirty state synchronously on {@link NavigationStart}, restores the current URL\n * before route activation, prompts once, then re-triggers `history.back()` only if confirmed.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPUnsavedChangesPopstateService {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly router = inject(Router);\n  private readonly location = inject(Location);\n  private readonly confirm = inject(AXPUnsavedChangesConfirmService);\n  private readonly destroyRef = inject(DestroyRef);\n\n  //#endregion\n\n  //#region ----   State   ----\n\n  private sources: AXPUnsavedChangesPopstateSource[] = [];\n  private committedUrl = '';\n  private handling = false;\n\n  //#endregion\n\n  //#region ----   Lifecycle   ----\n\n  constructor() {\n    this.committedUrl = this.router.url;\n\n    this.router.events.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n      if (event instanceof NavigationEnd) {\n        this.committedUrl = event.urlAfterRedirects;\n        this.confirm.clearLeaveConfirmed();\n        return;\n      }\n\n      if (event instanceof NavigationStart && event.navigationTrigger === 'popstate') {\n        void this.handlePopstateNavigation(event);\n      }\n    });\n  }\n\n  //#endregion\n\n  //#region ----   Registry   ----\n\n  registerSource(source: AXPUnsavedChangesPopstateSource): void {\n    this.sources = this.sources.filter((entry) => entry.id !== source.id);\n    this.sources.push(source);\n  }\n\n  unregisterSource(id: string): void {\n    this.sources = this.sources.filter((entry) => entry.id !== id);\n  }\n\n  //#endregion\n\n  //#region ----   Popstate Handler   ----\n\n  /** True while a popstate back/forward is being intercepted or confirmed. */\n  isHandlingPopstate(): boolean {\n    return this.handling;\n  }\n\n  private async handlePopstateNavigation(start: NavigationStart): Promise<void> {\n    if (this.handling) {\n      return;\n    }\n\n    if (this.confirm.hasLeaveConfirmed()) {\n      return;\n    }\n\n    const dirty = this.isDirty();\n    if (!dirty) {\n      return;\n    }\n\n    const stayUrl = this.committedUrl;\n    const targetUrl = start.url;\n    if (!stayUrl || stayUrl === targetUrl) {\n      return;\n    }\n\n    this.handling = true;\n    try {\n      this.location.go(stayUrl);\n\n      const allowed = await this.confirm.confirmIfDirty(true);\n      if (!allowed) {\n        await this.router.navigateByUrl(stayUrl, { replaceUrl: true });\n        return;\n      }\n\n      window.history.back();\n    } finally {\n      this.handling = false;\n    }\n  }\n\n  //#endregion\n\n  //#region ----   Utility Methods   ----\n\n  private isDirty(): boolean {\n    return this.sources.some((source) => source.isDirty());\n  }\n\n  //#endregion\n}\n","import { Injectable } from '@angular/core';\nimport type { DetachedRouteHandle } from '@angular/router';\n\n//#region ---- Types ----\n\ninterface DestroyableRouteHandle {\n  componentRef?: { destroy: () => void; instance?: unknown };\n}\n\n//#endregion\n\n/**\n * Holds detached Angular route component instances keyed by tab key so tabular navigation can\n * preserve a page's full state (data-table selection, scroll, unsaved form values, etc.) while it\n * is in the background, then reattach it without re-rendering.\n *\n * The registry has no `Router` dependency on purpose: it is consumed by the {@link RouteReuseStrategy}\n * implementation, so depending on `Router` here would create a construction-time cycle.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPTabRouteCacheRegistry {\n  //#region ---- State ----\n\n  private readonly handles = new Map<string, DetachedRouteHandle>();\n  private openKeys = new Set<string>();\n  private enabled = false;\n  private deactivateGuardSuspended = false;\n\n  //#endregion\n\n  //#region ---- Deactivate Guard Suspension ----\n\n  /**\n   * Runs `action` while unsaved-changes `canDeactivate` guards are suspended, so switching between\n   * tabs preserves a dirty page without prompting. Closing a tab does not use this path, so the\n   * prompt still appears there.\n   */\n  async runWithSuspendedDeactivateGuards<T>(action: () => Promise<T>): Promise<T> {\n    const previous = this.deactivateGuardSuspended;\n    this.deactivateGuardSuspended = true;\n    try {\n      return await action();\n    } finally {\n      this.deactivateGuardSuspended = previous;\n    }\n  }\n\n  isDeactivateGuardSuspended(): boolean {\n    return this.deactivateGuardSuspended;\n  }\n\n  //#endregion\n\n  //#region ---- Mode ----\n\n  /** Enables caching (tabular mode). Disabling clears and destroys every cached component. */\n  setEnabled(enabled: boolean): void {\n    if (this.enabled === enabled) {\n      return;\n    }\n    this.enabled = enabled;\n    if (!enabled) {\n      this.clear();\n    }\n  }\n\n  isEnabled(): boolean {\n    return this.enabled;\n  }\n\n  //#endregion\n\n  //#region ---- Open Keys Sync ----\n\n  /**\n   * Reconciles open scoped tab keys and active tab URLs. Cached handles whose key is not an open\n   * scoped tab key, an active tab URL, or a child path under an open scoped tab are destroyed.\n   */\n  syncOpenKeys(scopedKeys: string[], activeTabUrls: string[] = []): void {\n    const scopedSet = new Set(scopedKeys);\n    const activePathSet = new Set(\n      activeTabUrls.map((url) => url.split('?')[0].split('#')[0].replace(/\\/+$/, '') || '/'),\n    );\n\n    for (const cacheKey of [...this.handles.keys()]) {\n      const normalizedCacheKey = cacheKey.replace(/\\/+$/, '') || '/';\n      const keepsScopedKey = scopedSet.has(normalizedCacheKey);\n      const keepsActiveUrl = activePathSet.has(normalizedCacheKey);\n      const keepsUnderScopedTab = [...scopedSet].some(\n        (scopedKey) =>\n          normalizedCacheKey === scopedKey || normalizedCacheKey.startsWith(`${scopedKey}/`),\n      );\n\n      if (!keepsScopedKey && !keepsActiveUrl && !keepsUnderScopedTab) {\n        this.destroyHandle(this.handles.get(cacheKey));\n        this.handles.delete(cacheKey);\n      }\n    }\n\n    this.openKeys = scopedSet;\n  }\n\n  isOpen(key: string): boolean {\n    return this.openKeys.has(key);\n  }\n\n  /**\n   * Returns the live component instance for a cached background tab, when available.\n   * Matches the tab key directly or any cached handle under a scoped tab prefix.\n   */\n  getComponentInstance<T>(key: string): T | null {\n    const normalizedKey = key.replace(/\\/+$/, '') || '/';\n    const direct = this.handles.get(normalizedKey) ?? this.handles.get(key);\n    if (direct) {\n      return this.readComponentInstance<T>(direct);\n    }\n\n    for (const [cacheKey, handle] of this.handles) {\n      const normalizedCacheKey = cacheKey.replace(/\\/+$/, '') || '/';\n      if (normalizedCacheKey === normalizedKey || normalizedCacheKey.startsWith(`${normalizedKey}/`)) {\n        return this.readComponentInstance<T>(handle);\n      }\n    }\n\n    return null;\n  }\n\n  //#endregion\n\n  //#region ---- Handle Store ----\n\n  /**\n   * Caches a detached background handle. Overwrites without destroying the previous handle: on a\n   * repeat visit Angular hands back a new handle object wrapping the same live `componentRef`, so\n   * destroying the old one would destroy the live component and corrupt the view (NG0922).\n   */\n  store(key: string, handle: DetachedRouteHandle): void {\n    this.handles.set(key, handle);\n  }\n\n  /**\n   * Returns the cached handle without mutating the map. Angular reads a handle twice per\n   * navigation (once while building the future state, once while attaching), so `retrieve` must be\n   * idempotent; the handle is released afterwards via {@link release} when Angular calls\n   * `store(snapshot, null)`.\n   */\n  retrieve(key: string): DetachedRouteHandle | null {\n    return this.handles.get(key) ?? null;\n  }\n\n  /**\n   * Drops a handle that the router has just reattached (it is now a live foreground view, so it\n   * must not be destroyed). The map keeps only truly backgrounded handles.\n   */\n  release(key: string): void {\n    this.handles.delete(key);\n  }\n\n  has(key: string): boolean {\n    return this.handles.has(key);\n  }\n\n  /** Destroys and removes a single cached handle (used when a tab closes). */\n  evict(key: string): void {\n    this.destroyHandle(this.handles.get(key));\n    this.handles.delete(key);\n  }\n\n  /** Destroys and removes every cached handle. */\n  clear(): void {\n    for (const handle of this.handles.values()) {\n      this.destroyHandle(handle);\n    }\n    this.handles.clear();\n    this.openKeys.clear();\n  }\n\n  //#endregion\n\n  //#region ---- Utility Methods ----\n\n  private readComponentInstance<T>(handle: DetachedRouteHandle): T | null {\n    const componentRef = (handle as unknown as DestroyableRouteHandle).componentRef;\n    return (componentRef?.instance as T) ?? null;\n  }\n\n  private destroyHandle(handle: DetachedRouteHandle | undefined): void {\n    if (!handle) {\n      return;\n    }\n    const componentRef = (handle as unknown as DestroyableRouteHandle).componentRef;\n    componentRef?.destroy?.();\n  }\n\n  //#endregion\n}\n","import { inject } from '@angular/core';\nimport { CanDeactivateFn } from '@angular/router';\nimport { AXPTabRouteCacheRegistry } from '../tab-navigation/tab-route-cache.registry';\nimport { AXPUnsavedChangesCanDeactivate } from './unsaved-changes-confirm.service';\n\n//#region ----   Unsaved Changes Can Deactivate Guard Factory   ----\n\nexport function createUnsavedChangesCanDeactivateGuard<T extends AXPUnsavedChangesCanDeactivate>(): CanDeactivateFn<T> {\n  return (component) => {\n    // Tab switches keep the page alive in the background, so skip the prompt; closing a tab does not\n    // suspend guards and still prompts.\n    const tabCache = inject(AXPTabRouteCacheRegistry, { optional: true });\n    if (tabCache?.isDeactivateGuardSuspended()) {\n      return true;\n    }\n    return component.canDeactivate();\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, UrlTree } 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: { ...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  /**\n   * Resolves the current user's home page as a router URL tree.\n   */\n  resolveHomeUrlTree(): UrlTree {\n    const router = this.injector.get(Router);\n    const current = this.getCurrent();\n    const path = current.path.startsWith('/') ? current.path : `/${current.path}`;\n    return router.parseUrl(path);\n  }\n\n  async navigateTo(): Promise<void> {\n    // wait for the router to be initialized\n    setTimeout(() => {\n      const router = this.injector.get(Router);\n      router.navigateByUrl(this.resolveHomeUrlTree(), { 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}","\nimport { AXPPlatformScope, AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport { objectKeyValueTransforms } from '@acorex/platform/core';\n\nimport { Injectable, Injector, inject } 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\nconst I18N = '@general:settings';\n\n@Injectable()\nexport class AXPHomePageSettingProvider implements AXPSettingDefinitionProvider {\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 list = 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(\n        'general',\n        `${I18N}.general.nav-title`,\n        `${I18N}.general.description`,\n        'fa-light fa-palette',\n        `${I18N}.general.title`,\n        1,\n      )\n\n      // Add the 'Startup' section\n      .addSection('startup', `${I18N}.general.startup.title`, `${I18N}.general.startup.description`)\n      // Add the 'Home Page' setting\n      .addSetting({\n        key: AXPHomePageSettings.UserHomePath,\n        title: `${I18N}.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: `${I18N}.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","//#region ---- Imports ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPUserReference } from '@acorex/platform/contracts';\n//#endregion\n\n//#region ---- In-app notification port ----\n\nexport type AXPInAppNotificationPriority = 'Notice' | 'Danger' | 'Warning';\n\nexport interface AXPInAppNotificationCreateRequest {\n  id: string;\n  name: string;\n  title: string;\n  body: string;\n  icon: string;\n  priority: AXPInAppNotificationPriority;\n  receiver: AXPUserReference;\n  data?: Record<string, unknown>;\n}\n\n/**\n * Persists in-app notifications. Notification-management registers an implementation\n * backed by {@link AXMNotificationService}.\n */\nexport interface AXPInAppNotificationService {\n  create(request: AXPInAppNotificationCreateRequest): Promise<void>;\n}\n\nexport const AXP_IN_APP_NOTIFICATION_SERVICE = new InjectionToken<AXPInAppNotificationService>(\n  'AXP_IN_APP_NOTIFICATION_SERVICE',\n);\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable } from '@angular/core';\nimport { get } from 'lodash-es';\nimport {\n  AXP_IN_APP_NOTIFICATION_SERVICE,\n  type AXPInAppNotificationCreateRequest,\n  type AXPInAppNotificationPriority,\n} from './background-operation.notification';\nimport type { AXPBackgroundOperation } from './background-operation.types';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Sends in-app notifications when a background operation finishes or fails.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPBackgroundOperationNotificationService {\n  private readonly inAppNotificationService = inject(AXP_IN_APP_NOTIFICATION_SERVICE, { optional: true });\n\n  private readonly sessionService = inject(AXPSessionService);\n\n  async notify(operation: AXPBackgroundOperation): Promise<void> {\n    if (!this.inAppNotificationService || !this.shouldNotify(operation)) {\n      return;\n    }\n\n    const userId = this.sessionService.user?.id;\n    if (!userId) {\n      return;\n    }\n\n    const body = this.resolveBody(operation);\n    const { icon, priority } = this.resolveTemplate(operation);\n\n    const request: AXPInAppNotificationCreateRequest = {\n      id: `notif-bg-op-${operation.id}-${operation.status}`,\n      name: operation.title,\n      title: operation.title,\n      body,\n      icon,\n      priority,\n      receiver: {\n        id: userId,\n        type: 'user',\n        fullName: get(this.sessionService.user, 'title') as string | undefined,\n        username: get(this.sessionService.user, 'name') as string | undefined,\n      },\n      data: {\n        backgroundOperationId: operation.id,\n        providerKey: operation.providerKey,\n        status: operation.status,\n        ...(operation.data ?? {}),\n      },\n    };\n\n    await this.inAppNotificationService.create(request);\n  }\n\n  //#region ---- Helpers ----\n\n  private shouldNotify(operation: AXPBackgroundOperation): boolean {\n    const { capabilities } = operation;\n\n    if (operation.status === 'failed') {\n      return capabilities.notifyOnFailed !== false;\n    }\n\n    if (operation.status === 'completed' || operation.status === 'cancelled') {\n      return capabilities.notifyOnComplete !== false;\n    }\n\n    return false;\n  }\n\n  private resolveBody(operation: AXPBackgroundOperation): string {\n    if (operation.status === 'failed') {\n      return operation.error?.message ?? operation.statusText ?? 'Background task failed';\n    }\n\n    const statusText = operation.statusText?.trim();\n    return statusText || operation.title;\n  }\n\n  private resolveTemplate(operation: AXPBackgroundOperation): {\n    icon: string;\n    priority: AXPInAppNotificationPriority;\n  } {\n    switch (operation.status) {\n      case 'completed':\n        return { icon: 'fa-light fa-circle-check', priority: 'Notice' };\n      case 'failed':\n        return { icon: 'fa-light fa-circle-exclamation', priority: 'Danger' };\n      case 'cancelled':\n        return { icon: 'fa-light fa-ban', priority: 'Warning' };\n      default:\n        return { icon: 'fa-light fa-list-check', priority: 'Notice' };\n    }\n  }\n\n  //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPDataGenerator } from '@acorex/platform/contracts';\nimport { isNumber } from 'lodash-es';\nimport type {\n  AXPBackgroundOperation,\n  AXPBackgroundOperationCapabilities,\n  AXPBackgroundOperationCreateRequest,\n  AXPBackgroundOperationFailurePolicy,\n  AXPBackgroundOperationStatus,\n} from './background-operation.types';\n\n//#endregion\n\n//#region ---- Factories ----\n\nexport function axpCreateBackgroundOperationId(): string {\n  return `bg-op-${AXPDataGenerator.uuid()}`;\n}\n\nexport function axpBuildBackgroundOperation(\n  providerKey: string,\n  request: AXPBackgroundOperationCreateRequest,\n  overrides?: Partial<AXPBackgroundOperation>,\n): AXPBackgroundOperation {\n  const now = new Date();\n  const operation: AXPBackgroundOperation = {\n    id: axpCreateBackgroundOperationId(),\n    providerKey,\n    title: request.title,\n    status: 'queued',\n    progress: request.progress,\n    estimatedDurationMs: request.estimatedDurationMs,\n    statusText: request.statusText,\n    currentStep: request.currentStep,\n    createdAt: now,\n    capabilities: request.capabilities,\n    failurePolicy: request.failurePolicy,\n    ...overrides,\n  };\n  const hasStarted = operation.status === 'running' || operation.status === 'paused';\n\n  return {\n    ...operation,\n    createdAt: operation.createdAt ?? now,\n    startedAt: operation.startedAt ?? (hasStarted ? now : undefined),\n  };\n}\n\nexport function axpCoerceBackgroundOperationDate(value: Date | string | undefined): Date | null {\n  if (!value) {\n    return null;\n  }\n  const date = value instanceof Date ? value : new Date(value);\n  return Number.isNaN(date.getTime()) ? null : date;\n}\n\nexport function axpBackgroundOperationDisplayTime(operation: AXPBackgroundOperation): Date | null {\n  return (\n    axpCoerceBackgroundOperationDate(operation.startedAt) ??\n    axpCoerceBackgroundOperationDate(operation.createdAt)\n  );\n}\n\n/**\n * Remaining duration in milliseconds for ETA display.\n */\nexport function axpBackgroundOperationRemainingMs(operation: AXPBackgroundOperation): number | null {\n  if (!operation.capabilities.supportsEstimate || !isNumber(operation.estimatedDurationMs)) {\n    return null;\n  }\n\n  const { estimatedDurationMs, progress, startedAt, status } = operation;\n  if (status !== 'running' && status !== 'paused' && status !== 'queued') {\n    return null;\n  }\n\n  if (isNumber(progress) && progress >= 100) {\n    return 0;\n  }\n\n  if (isNumber(progress) && progress > 0) {\n    return Math.max(0, Math.round((estimatedDurationMs * (100 - progress)) / 100));\n  }\n\n  const started = axpCoerceBackgroundOperationDate(startedAt);\n  if (started) {\n    const elapsed = Date.now() - started.getTime();\n    return Math.max(0, estimatedDurationMs - elapsed);\n  }\n\n  return estimatedDurationMs;\n}\n\n/**\n * Estimated completion instant for relative-time formatting (e.g. timeleft pipe).\n */\nexport function axpBackgroundOperationEstimateEndDate(operation: AXPBackgroundOperation): Date | null {\n  const remainingMs = axpBackgroundOperationRemainingMs(operation);\n  if (remainingMs === null) {\n    return null;\n  }\n  return new Date(Date.now() + remainingMs);\n}\n\nexport function axpBackgroundOperationCapabilities(\n  partial: Partial<AXPBackgroundOperationCapabilities> = {},\n): AXPBackgroundOperationCapabilities {\n  return {\n    cancellable: partial.cancellable ?? false,\n    pausable: partial.pausable ?? false,\n    resumable: partial.resumable ?? false,\n    retryable: partial.retryable ?? false,\n    supportsProgress: partial.supportsProgress ?? false,\n    supportsEstimate: partial.supportsEstimate ?? false,\n    clickable: partial.clickable ?? false,\n    notifyOnComplete: partial.notifyOnComplete ?? true,\n    notifyOnFailed: partial.notifyOnFailed ?? true,\n  };\n}\n\nexport function axpBackgroundOperationFailurePolicy(\n  partial: Partial<AXPBackgroundOperationFailurePolicy> = {},\n): AXPBackgroundOperationFailurePolicy {\n  return {\n    mode: partial.mode ?? 'abort',\n    currentStepId: partial.currentStepId,\n    maxRetries: partial.maxRetries,\n    retryCount: partial.retryCount ?? 0,\n  };\n}\n\nexport function axpIsActiveBackgroundOperationStatus(status: AXPBackgroundOperationStatus): boolean {\n  return status === 'queued' || status === 'running' || status === 'paused';\n}\n\nexport function axpIsCompletedBackgroundOperationStatus(status: AXPBackgroundOperationStatus): boolean {\n  return status === 'completed' || status === 'cancelled';\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPBackgroundOperationNotificationService } from './background-operation-notification.service';\nimport type { AXPBackgroundOperation } from './background-operation.types';\nimport { axpIsCompletedBackgroundOperationStatus } from './background-operation.util';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Sends notifications and removes tray rows when a background operation reaches a terminal state.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPBackgroundOperationCompletionService {\n  private readonly notificationService = inject(AXPBackgroundOperationNotificationService);\n\n  /** Whether the operation just reached a finished state (completed or cancelled). */\n  shouldAutoFinish(previousStatus: string | undefined, operation: AXPBackgroundOperation): boolean {\n    return (\n      previousStatus !== operation.status && axpIsCompletedBackgroundOperationStatus(operation.status)\n    );\n  }\n\n  /** Whether the operation just transitioned to failed. */\n  shouldNotifyFailure(previousStatus: string | undefined, operation: AXPBackgroundOperation): boolean {\n    return previousStatus !== operation.status && operation.status === 'failed';\n  }\n\n  /** Notifies the user and invokes {@link remove} to drop the operation from the tray. */\n  async notifyAndRemove(operation: AXPBackgroundOperation, remove: () => void): Promise<void> {\n    await this.notify(operation);\n    remove();\n  }\n\n  /** Notifies the user while keeping the failed operation in the tray for retry. */\n  async notifyFailure(operation: AXPBackgroundOperation): Promise<void> {\n    await this.notify(operation);\n  }\n\n  //#region ---- Notification ----\n\n  private async notify(operation: AXPBackgroundOperation): Promise<void> {\n    try {\n      await this.notificationService.notify(operation);\n    } catch (error: unknown) {\n      console.warn('Failed to send background-operation notification', operation.id, error);\n    }\n  }\n\n  //#endregion\n}\n\n//#endregion\n","//#region ---- Status & capabilities ----\n\nexport type AXPBackgroundOperationStatus =\n  | 'queued'\n  | 'running'\n  | 'paused'\n  | 'completed'\n  | 'failed'\n  | 'cancelled';\n\nexport interface AXPBackgroundOperationCapabilities {\n  cancellable: boolean;\n  pausable: boolean;\n  resumable: boolean;\n  retryable: boolean;\n  /** When true, UI shows a progress bar only while {@link AXPBackgroundOperation.progress} is set. */\n  supportsProgress: boolean;\n  /** When true, UI may show ETA while {@link AXPBackgroundOperation.estimatedDurationMs} is set. */\n  supportsEstimate: boolean;\n  /** When true, the tray item is clickable and delegates to a registered handler. */\n  clickable: boolean;\n  /** When false, skip in-app notification on completed/cancelled. Default: true. */\n  notifyOnComplete?: boolean;\n  /** When false, skip in-app notification on failed. Default: true. */\n  notifyOnFailed?: boolean;\n}\n\nexport type AXPBackgroundOperationFailureMode = 'retry' | 'continue' | 'abort';\n\nexport interface AXPBackgroundOperationFailurePolicy {\n  mode: AXPBackgroundOperationFailureMode;\n  currentStepId?: string;\n  maxRetries?: number;\n  retryCount?: number;\n}\n\nexport interface AXPBackgroundOperationError {\n  code?: string;\n  message: string;\n  detail?: string;\n}\n\n//#endregion\n\n//#region ---- Operation model ----\n\nexport interface AXPBackgroundOperation {\n  id: string;\n  providerKey: string;\n  title: string;\n  status: AXPBackgroundOperationStatus;\n  progress?: number;\n  estimatedDurationMs?: number;\n  statusText?: string;\n  currentStep?: string;\n  createdAt: Date;\n  startedAt?: Date;\n  completedAt?: Date;\n  capabilities: AXPBackgroundOperationCapabilities;\n  failurePolicy: AXPBackgroundOperationFailurePolicy;\n  error?: AXPBackgroundOperationError;\n  /** Handler-specific payload (e.g. conversationId for chat navigation). */\n  data?: Record<string, unknown>;\n}\n\nexport interface AXPBackgroundOperationCreateRequest {\n  title: string;\n  progress?: number;\n  estimatedDurationMs?: number;\n  statusText?: string;\n  currentStep?: string;\n  capabilities: AXPBackgroundOperationCapabilities;\n  failurePolicy: AXPBackgroundOperationFailurePolicy;\n}\n\nexport type AXPBackgroundOperationActionKey = 'cancel' | 'pause' | 'resume' | 'retry' | 'dismiss';\n\n//#endregion\n","//#region ---- Root config ----\n\nexport const AXPBackgroundOperationRootConfig = {\n  module: {\n    name: 'Common',\n    title: '@general:module.common.title',\n    icon: 'fa-light fa-layer-group',\n  },\n  entities: {\n    backgroundOperation: {\n      name: 'BackgroundOperations',\n      title: '@general:background-operation.entity.title',\n      titlePlural: '@general:background-operation.entity.plural',\n      icon: 'fa-light fa-spinner',\n    },\n  },\n} as const;\n\n/** Full entity key used with {@link AXPEntityStorageService} (e.g. `Common.BackgroundOperations`). */\nexport function axpBackgroundOperationEntityName(): string {\n  return `${AXPBackgroundOperationRootConfig.module.name}.${AXPBackgroundOperationRootConfig.entities.backgroundOperation.name}`;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPBackgroundOperationEntityModel } from './entities/background-operation/background-operation.types';\n\n//#endregion\n\n//#region ---- Storage adapter ----\n\n/**\n * Optional persistence adapter for background-operation entity rows.\n * Mock connectivity registers an implementation backed by {@link AXPEntityStorageService}.\n */\nexport interface AXPBackgroundOperationEntityStorageAdapter {\n  getAll(entityName: string): Promise<AXPBackgroundOperationEntityModel[]>;\n  upsertOne(entityName: string, row: AXPBackgroundOperationEntityModel): Promise<void>;\n  deleteOne(entityName: string, id: string): Promise<void>;\n}\n\nexport const AXP_BACKGROUND_OPERATION_ENTITY_STORAGE = new InjectionToken<AXPBackgroundOperationEntityStorageAdapter>(\n  'AXP_BACKGROUND_OPERATION_ENTITY_STORAGE',\n);\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPBackgroundOperation } from './background-operation.types';\nimport type { AXPBackgroundOperationEntityModel } from './entities/background-operation/background-operation.types';\nimport { axpCoerceBackgroundOperationDate } from './background-operation.util';\n\n//#endregion\n\n//#region ---- Mappers ----\n\nexport function axpBackgroundOperationToEntityModel(\n  operation: AXPBackgroundOperation,\n): AXPBackgroundOperationEntityModel {\n  return {\n    id: operation.id,\n    providerKey: operation.providerKey,\n    title: operation.title,\n    status: operation.status,\n    progress: operation.progress,\n    estimatedDurationMs: operation.estimatedDurationMs,\n    statusText: operation.statusText,\n    currentStep: operation.currentStep,\n    createdAt: operation.createdAt.toISOString(),\n    startedAt: operation.startedAt?.toISOString(),\n    completedAt: operation.completedAt?.toISOString(),\n    capabilities: operation.capabilities,\n    failurePolicy: operation.failurePolicy,\n    error: operation.error,\n    data: operation.data,\n  };\n}\n\nexport function axpBackgroundOperationFromEntityModel(\n  model: AXPBackgroundOperationEntityModel,\n): AXPBackgroundOperation {\n  const createdAt = axpCoerceBackgroundOperationDate(model.createdAt) ?? new Date();\n\n  return {\n    id: model.id,\n    providerKey: model.providerKey,\n    title: model.title,\n    status: model.status,\n    progress: model.progress,\n    estimatedDurationMs: model.estimatedDurationMs,\n    statusText: model.statusText,\n    currentStep: model.currentStep,\n    createdAt,\n    startedAt: axpCoerceBackgroundOperationDate(model.startedAt) ?? undefined,\n    completedAt: axpCoerceBackgroundOperationDate(model.completedAt) ?? undefined,\n    capabilities: model.capabilities,\n    failurePolicy: model.failurePolicy,\n    error: model.error,\n    data: model.data,\n  };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { signal, type Signal } from '@angular/core';\nimport type { AXPBackgroundOperation } from './background-operation.types';\n\n//#endregion\n\n//#region ---- Store factory ----\n\n/**\n * Lightweight in-memory store for a single background-operation provider.\n */\nexport function createBackgroundOperationStore(): {\n  readonly operations: Signal<readonly AXPBackgroundOperation[]>;\n  upsert(operation: AXPBackgroundOperation): void;\n  patch(id: string, patch: Partial<AXPBackgroundOperation>): void;\n  find(id: string): AXPBackgroundOperation | undefined;\n  remove(id: string): void;\n} {\n  const operationsState = signal<AXPBackgroundOperation[]>([]);\n\n  return {\n    operations: operationsState.asReadonly(),\n\n    upsert(operation: AXPBackgroundOperation): void {\n      operationsState.update((list) => {\n        const index = list.findIndex((item) => item.id === operation.id);\n        if (index < 0) {\n          return [operation, ...list];\n        }\n        const next = [...list];\n        next[index] = operation;\n        return next;\n      });\n    },\n\n    patch(id: string, patch: Partial<AXPBackgroundOperation>): void {\n      operationsState.update((list) =>\n        list.map((item) => (item.id === id ? { ...item, ...patch } : item)),\n      );\n    },\n\n    find(id: string): AXPBackgroundOperation | undefined {\n      return operationsState().find((item) => item.id === id);\n    },\n\n    remove(id: string): void {\n      operationsState.update((list) => list.filter((item) => item.id !== id));\n    },\n  };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { computed, inject, Injectable, type Signal } from '@angular/core';\nimport { axpBackgroundOperationEntityName } from './background-operation.const';\nimport {\n  axpBackgroundOperationFromEntityModel,\n  axpBackgroundOperationToEntityModel,\n} from './background-operation.entity.mapper';\nimport { AXP_BACKGROUND_OPERATION_ENTITY_STORAGE } from './background-operation.entity.storage';\nimport { AXPBackgroundOperationCompletionService } from './background-operation-completion.service';\nimport type { AXPBackgroundOperation } from './background-operation.types';\nimport { axpIsCompletedBackgroundOperationStatus } from './background-operation.util';\nimport { createBackgroundOperationStore } from './background-operation.store';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXPBackgroundOperationProviderStore {\n  readonly operations: Signal<readonly AXPBackgroundOperation[]>;\n  upsert(operation: AXPBackgroundOperation): void;\n  patch(operationId: string, patch: Partial<AXPBackgroundOperation>): void;\n  find(operationId: string): AXPBackgroundOperation | undefined;\n  remove(id: string): void;\n}\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Entity-backed store for background operations (`Common.BackgroundOperations`).\n * Uses in-memory signals for UI reactivity and optionally persists via {@link AXP_BACKGROUND_OPERATION_ENTITY_STORAGE}.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPBackgroundOperationEntityStoreService {\n  private readonly entityStorage = inject(AXP_BACKGROUND_OPERATION_ENTITY_STORAGE, { optional: true });\n\n  private readonly completionService = inject(AXPBackgroundOperationCompletionService);\n\n  private readonly entityName = axpBackgroundOperationEntityName();\n\n  private hydrated = false;\n\n  private hydratePromise?: Promise<void>;\n\n  private readonly innerStores = new Map<string, ReturnType<typeof createBackgroundOperationStore>>();\n\n  //#region ---- Hydration ----\n\n  async ensureHydrated(): Promise<void> {\n    if (this.hydrated || !this.entityStorage) {\n      this.hydrated = true;\n      return;\n    }\n\n    if (!this.hydratePromise) {\n      this.hydratePromise = this.hydrateFromEntityStorage();\n    }\n\n    await this.hydratePromise;\n  }\n\n  async hasAnyOperationForProviders(providerKeys: readonly string[]): Promise<boolean> {\n    await this.ensureHydrated();\n\n    if (providerKeys.length === 0) {\n      return false;\n    }\n\n    if (this.entityStorage) {\n      const rows = await this.entityStorage.getAll(this.entityName);\n      return rows.some((row) => providerKeys.includes(row.providerKey));\n    }\n\n    return [...this.innerStores.values()].some((store) =>\n      store.operations().some((operation) => providerKeys.includes(operation.providerKey)),\n    );\n  }\n\n  //#endregion\n\n  //#region ---- Provider stores ----\n\n  createProviderStore(providerKey: string): AXPBackgroundOperationProviderStore {\n    const inner = this.getOrCreateInnerStore(providerKey);\n\n    return {\n      operations: computed(() => inner.operations().filter((operation) => operation.providerKey === providerKey)),\n\n      upsert: (operation: AXPBackgroundOperation): void => {\n        inner.upsert(operation);\n        void this.persistOperation(operation);\n      },\n\n      patch: (operationId: string, patch: Partial<AXPBackgroundOperation>): void => {\n        const previous = inner.find(operationId);\n        inner.patch(operationId, patch);\n        const operation = inner.find(operationId);\n        if (!operation) {\n          return;\n        }\n\n        if (this.completionService.shouldAutoFinish(previous?.status, operation)) {\n          void this.completionService.notifyAndRemove(operation, () => {\n            inner.remove(operationId);\n            void this.deleteOperation(operationId);\n          });\n          return;\n        }\n\n        if (this.completionService.shouldNotifyFailure(previous?.status, operation)) {\n          void this.completionService.notifyFailure(operation);\n        }\n\n        void this.persistOperation(operation);\n      },\n\n      find: (operationId: string): AXPBackgroundOperation | undefined => inner.find(operationId),\n\n      remove: (operationId: string): void => {\n        inner.remove(operationId);\n        void this.deleteOperation(operationId);\n      },\n    };\n  }\n\n  /** All operations across providers (post-hydration). */\n  readonly allOperations = computed(() =>\n    [...this.innerStores.values()].flatMap((store) => store.operations()),\n  );\n\n  //#endregion\n\n  //#region ---- Entity persistence ----\n\n  private async hydrateFromEntityStorage(): Promise<void> {\n    if (!this.entityStorage) {\n      this.hydrated = true;\n      return;\n    }\n\n    const rows = await this.entityStorage.getAll(this.entityName);\n\n    for (const row of rows) {\n      const operation = axpBackgroundOperationFromEntityModel(row);\n\n      if (axpIsCompletedBackgroundOperationStatus(operation.status)) {\n        void this.deleteOperation(operation.id);\n        continue;\n      }\n\n      this.getOrCreateInnerStore(operation.providerKey).upsert(operation);\n    }\n\n    this.hydrated = true;\n  }\n\n  private async persistOperation(operation: AXPBackgroundOperation): Promise<void> {\n    if (!this.entityStorage) {\n      return;\n    }\n\n    try {\n      await this.entityStorage.upsertOne(this.entityName, axpBackgroundOperationToEntityModel(operation));\n    } catch (error: unknown) {\n      console.warn('Failed to persist background operation entity', operation.id, error);\n    }\n  }\n\n  private async deleteOperation(operationId: string): Promise<void> {\n    if (!this.entityStorage) {\n      return;\n    }\n\n    try {\n      await this.entityStorage.deleteOne(this.entityName, operationId);\n    } catch (error: unknown) {\n      console.warn('Failed to delete background operation entity', operationId, error);\n    }\n  }\n\n  private getOrCreateInnerStore(providerKey: string): ReturnType<typeof createBackgroundOperationStore> {\n    let store = this.innerStores.get(providerKey);\n    if (!store) {\n      store = createBackgroundOperationStore();\n      this.innerStores.set(providerKey, store);\n    }\n    return store;\n  }\n\n  //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n  AXPBackgroundOperationCapabilities,\n  AXPBackgroundOperationError,\n  AXPBackgroundOperationFailurePolicy,\n  AXPBackgroundOperationStatus,\n} from '../../background-operation.types';\n\n//#endregion\n\n//#region ---- Entity model ----\n\n/** Persisted row shape for {@link axpBackgroundOperationEntityName}. */\nexport interface AXPBackgroundOperationEntityModel {\n  id: string;\n  providerKey: string;\n  title: string;\n  status: AXPBackgroundOperationStatus;\n  progress?: number;\n  estimatedDurationMs?: number;\n  statusText?: string;\n  currentStep?: string;\n  createdAt: string;\n  startedAt?: string;\n  completedAt?: string;\n  capabilities: AXPBackgroundOperationCapabilities;\n  failurePolicy: AXPBackgroundOperationFailurePolicy;\n  error?: AXPBackgroundOperationError;\n  data?: Record<string, unknown>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport { AXPBackgroundOperationRootConfig } from '../../background-operation.const';\n\n//#endregion\n\n//#region ---- Entity factory ----\n\n/**\n * Storage-only entity for background-operation tray rows (`Common.BackgroundOperations`).\n * No master UI — persisted through {@link AXPEntityStorageService}.\n */\nexport async function backgroundOperationEntityFactory(): Promise<AXPEntity | null> {\n  const { module, entities } = AXPBackgroundOperationRootConfig;\n\n  return {\n    module: module.name,\n    name: entities.backgroundOperation.name,\n    title: entities.backgroundOperation.title,\n    icon: entities.backgroundOperation.icon,\n    formats: {\n      individual: entities.backgroundOperation.title,\n      plural: entities.backgroundOperation.titlePlural,\n    },\n    properties: [\n      {\n        name: 'id',\n        title: 'ID',\n        schema: { dataType: 'string' },\n      },\n      {\n        name: 'providerKey',\n        title: 'Provider key',\n        schema: { dataType: 'string' },\n      },\n      {\n        name: 'title',\n        title: '@general:terms.common.title',\n        schema: { dataType: 'string' },\n      },\n      {\n        name: 'status',\n        title: '@general:terms.common.status',\n        schema: { dataType: 'string' },\n      },\n      {\n        name: 'progress',\n        title: 'Progress',\n        schema: { dataType: 'number' },\n      },\n      {\n        name: 'estimatedDurationMs',\n        title: 'Estimated duration (ms)',\n        schema: { dataType: 'number' },\n      },\n      {\n        name: 'statusText',\n        title: 'Status text',\n        schema: { dataType: 'string' },\n      },\n      {\n        name: 'currentStep',\n        title: 'Current step',\n        schema: { dataType: 'string' },\n      },\n      {\n        name: 'createdAt',\n        title: '@general:terms.common.created-at',\n        schema: { dataType: 'dateTime' },\n      },\n      {\n        name: 'startedAt',\n        title: 'Started at',\n        schema: { dataType: 'dateTime' },\n      },\n      {\n        name: 'completedAt',\n        title: 'Completed at',\n        schema: { dataType: 'dateTime' },\n      },\n      {\n        name: 'capabilities',\n        title: 'Capabilities',\n        schema: { dataType: 'object' },\n      },\n      {\n        name: 'failurePolicy',\n        title: 'Failure policy',\n        schema: { dataType: 'object' },\n      },\n      {\n        name: 'error',\n        title: 'Error',\n        schema: { dataType: 'object' },\n      },\n      {\n        name: 'data',\n        title: 'Payload',\n        schema: { dataType: 'object' },\n      },\n    ],\n  };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport type { AXPBackgroundOperation } from './background-operation.types';\n\n//#endregion\n\n//#region ---- Token ----\n\nexport const AXP_BACKGROUND_OPERATION_HANDLERS = new InjectionToken<AXPBackgroundOperationHandler[]>(\n  'AXP_BACKGROUND_OPERATION_HANDLERS',\n);\n\n//#endregion\n\n//#region ---- Handler contract ----\n\n/**\n * Handles user interactions for background operations (e.g. navigate on click).\n * Register one handler per {@link AXPBackgroundOperation.providerKey}.\n */\nexport abstract class AXPBackgroundOperationHandler {\n  abstract readonly providerKey: string;\n\n  abstract execute(command: AXPExecuteCommand, operation: AXPBackgroundOperation): Promise<void>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { InjectionToken, Signal } from '@angular/core';\nimport type {\n  AXPBackgroundOperation,\n  AXPBackgroundOperationCreateRequest,\n} from './background-operation.types';\n\n//#endregion\n\n//#region ---- Token ----\n\nexport const AXP_BACKGROUND_OPERATION_PROVIDERS = new InjectionToken<AXPBackgroundOperationProvider[]>(\n  'AXP_BACKGROUND_OPERATION_PROVIDERS',\n);\n\n//#endregion\n\n//#region ---- Provider contract ----\n\n/**\n * Registers a source of background operations (multi-provider).\n * Each feature module or mock can contribute one provider per domain key.\n */\nexport abstract class AXPBackgroundOperationProvider {\n  abstract readonly key: string;\n  abstract readonly operations: Signal<readonly AXPBackgroundOperation[]>;\n\n  abstract create(request: AXPBackgroundOperationCreateRequest): Promise<AXPBackgroundOperation>;\n  abstract cancel(operationId: string): Promise<void>;\n\n  /** Optional — only when {@link AXPBackgroundOperationCapabilities.pausable} is true. */\n  pause?(operationId: string): Promise<void>;\n  /** Optional — only when {@link AXPBackgroundOperationCapabilities.resumable} is true. */\n  resume?(operationId: string): Promise<void>;\n  /** Optional — only when {@link AXPBackgroundOperationCapabilities.retryable} is true. */\n  retry?(operationId: string): Promise<void>;\n  /** Optional — removes completed/failed operations from the tray. */\n  dismiss?(operationId: string): Promise<void>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { computed, inject, Injectable, signal } from '@angular/core';\nimport type {\n  AXPBackgroundOperation,\n  AXPBackgroundOperationActionKey,\n  AXPBackgroundOperationCreateRequest,\n} from './background-operation.types';\nimport {\n  AXP_BACKGROUND_OPERATION_HANDLERS,\n  AXPBackgroundOperationHandler,\n} from './background-operation.handler';\nimport {\n  AXP_BACKGROUND_OPERATION_PROVIDERS,\n  AXPBackgroundOperationProvider,\n} from './background-operation.provider';\nimport type { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport {\n  axpIsActiveBackgroundOperationStatus,\n} from './background-operation.util';\n\n//#endregion\n\n//#region ---- Service ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPBackgroundOperationService {\n  //#region ---- Dependencies ----\n\n  private readonly providers = inject(AXP_BACKGROUND_OPERATION_PROVIDERS, { optional: true }) ?? [];\n\n  private readonly handlers = inject(AXP_BACKGROUND_OPERATION_HANDLERS, { optional: true }) ?? [];\n\n  //#endregion\n\n  //#region ---- State ----\n\n  private readonly busy = signal(false);\n\n  readonly loading = this.busy.asReadonly();\n\n  readonly operations = computed<readonly AXPBackgroundOperation[]>(() =>\n    this.providers.flatMap((provider) => provider.operations()),\n  );\n\n  readonly activeCount = computed(\n    () => this.operations().filter((operation) => axpIsActiveBackgroundOperationStatus(operation.status)).length,\n  );\n\n  readonly failedCount = computed(\n    () => this.operations().filter((operation) => operation.status === 'failed').length,\n  );\n\n  //#endregion\n\n  //#region ---- Queries ----\n\n  getAvailableActions(operation: AXPBackgroundOperation): AXPBackgroundOperationActionKey[] {\n    const actions: AXPBackgroundOperationActionKey[] = [];\n    const { capabilities, status } = operation;\n\n    if (capabilities.cancellable && (status === 'queued' || status === 'running' || status === 'paused')) {\n      actions.push('cancel');\n    }\n    if (capabilities.pausable && status === 'running') {\n      actions.push('pause');\n    }\n    if (capabilities.resumable && status === 'paused') {\n      actions.push('resume');\n    }\n    if (capabilities.retryable && status === 'failed') {\n      actions.push('retry');\n    }\n\n    return actions;\n  }\n\n  //#endregion\n\n  //#region ---- Commands ----\n\n  async create(providerKey: string, request: AXPBackgroundOperationCreateRequest): Promise<AXPBackgroundOperation> {\n    const provider = this.resolveProvider(providerKey);\n    return this.run(() => provider.create(request));\n  }\n\n  async cancel(operationId: string): Promise<void> {\n    const { provider, operation } = this.resolveOperation(operationId);\n    if (!operation.capabilities.cancellable) {\n      throw new Error(`Operation ${operationId} cannot be cancelled`);\n    }\n    await this.run(() => provider.cancel(operationId));\n  }\n\n  async pause(operationId: string): Promise<void> {\n    const { provider, operation } = this.resolveOperation(operationId);\n    if (!operation.capabilities.pausable || !provider.pause) {\n      throw new Error(`Operation ${operationId} cannot be paused`);\n    }\n    await this.run(() => provider.pause!(operationId));\n  }\n\n  async resume(operationId: string): Promise<void> {\n    const { provider, operation } = this.resolveOperation(operationId);\n    if (!operation.capabilities.resumable || !provider.resume) {\n      throw new Error(`Operation ${operationId} cannot be resumed`);\n    }\n    await this.run(() => provider.resume!(operationId));\n  }\n\n  async retry(operationId: string): Promise<void> {\n    const { provider, operation } = this.resolveOperation(operationId);\n    if (!operation.capabilities.retryable || !provider.retry) {\n      throw new Error(`Operation ${operationId} cannot be retried`);\n    }\n    await this.run(() => provider.retry!(operationId));\n  }\n\n  async dismiss(operationId: string): Promise<void> {\n    const { provider } = this.resolveOperation(operationId);\n    if (provider.dismiss) {\n      await this.run(() => provider.dismiss!(operationId));\n      return;\n    }\n    await this.run(() => provider.cancel(operationId));\n  }\n\n  hasClickHandler(operation: AXPBackgroundOperation): boolean {\n    return (\n      operation.capabilities.clickable &&\n      this.handlers.some((handler) => handler.providerKey === operation.providerKey)\n    );\n  }\n\n  async executeCommand(operationId: string, command: AXPExecuteCommand): Promise<void> {\n    const { operation } = this.resolveOperation(operationId);\n    const handler = this.resolveHandler(operation.providerKey);\n    if (!handler) {\n      return;\n    }\n    await this.run(() => handler.execute(command, operation));\n  }\n\n  async executeClick(operationId: string): Promise<void> {\n    await this.executeCommand(operationId, { name: 'click' });\n  }\n\n  async runAction(operationId: string, action: AXPBackgroundOperationActionKey): Promise<void> {\n    switch (action) {\n      case 'cancel':\n        await this.cancel(operationId);\n        break;\n      case 'pause':\n        await this.pause(operationId);\n        break;\n      case 'resume':\n        await this.resume(operationId);\n        break;\n      case 'retry':\n        await this.retry(operationId);\n        break;\n      case 'dismiss':\n        await this.dismiss(operationId);\n        break;\n      default:\n        break;\n    }\n  }\n\n  //#endregion\n\n  //#region ---- Resolution ----\n\n  private resolveHandler(providerKey: string): AXPBackgroundOperationHandler | undefined {\n    return this.handlers.find((handler) => handler.providerKey === providerKey);\n  }\n\n  private resolveProvider(providerKey: string): AXPBackgroundOperationProvider {\n    const provider = this.providers.find((item) => item.key === providerKey);\n    if (!provider) {\n      throw new Error(`Background operation provider \"${providerKey}\" is not registered`);\n    }\n    return provider;\n  }\n\n  private resolveOperation(operationId: string): {\n    provider: AXPBackgroundOperationProvider;\n    operation: AXPBackgroundOperation;\n  } {\n    for (const provider of this.providers) {\n      const operation = provider.operations().find((item) => item.id === operationId);\n      if (operation) {\n        return { provider, operation };\n      }\n    }\n    throw new Error(`Background operation \"${operationId}\" was not found`);\n  }\n\n  private async run<T>(fn: () => Promise<T>): Promise<T> {\n    this.busy.set(true);\n    try {\n      return await fn();\n    } finally {\n      this.busy.set(false);\n    }\n  }\n\n  //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXProgressBarModule } from '@acorex/components/progress-bar';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  inject,\n  input,\n  output,\n  signal,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { isNumber } from 'lodash-es';\nimport { AXPBackgroundOperationService } from '../background-operation.service';\nimport { axpIsActiveBackgroundOperationStatus } from '../background-operation.util';\nimport type {\n  AXPBackgroundOperation,\n  AXPBackgroundOperationActionKey,\n} from '../background-operation.types';\nimport { AXStyleLookType } from '@acorex/cdk/common';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n  selector: 'axp-background-operation-item',\n  templateUrl: './background-operation-item.component.html',\n  styleUrls: ['./background-operation-item.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXProgressBarModule, AXTranslationModule],\n})\nexport class AXPBackgroundOperationItemComponent {\n  //#region ---- Services & Dependencies ----\n\n  private readonly operationService = inject(AXPBackgroundOperationService);\n\n  //#endregion\n\n  //#region ---- Inputs & Outputs ----\n\n  data = input.required<AXPBackgroundOperation>();\n\n  actionCompleted = output<void>();\n\n  itemClicked = output<void>();\n\n  //#endregion\n\n  //#region ---- State ----\n\n  protected readonly pendingAction = signal<AXPBackgroundOperationActionKey | null>(null);\n\n  //#endregion\n\n  //#region ---- Computed ----\n\n  protected readonly statusClass = computed(() => `--${this.data().status}`);\n\n  protected readonly statusIcon = computed(() => {\n    switch (this.data().status) {\n      case 'queued':\n        return 'fa-light fa-clock';\n      case 'running':\n        return 'fa-light fa-spinner fa-spin';\n      case 'paused':\n        return 'fa-light fa-pause';\n      case 'completed':\n        return 'fa-light fa-circle-check';\n      case 'failed':\n        return 'fa-light fa-circle-exclamation';\n      case 'cancelled':\n        return 'fa-light fa-ban';\n      default:\n        return 'fa-light fa-list-check';\n    }\n  });\n\n  protected readonly progressColor = computed(() => {\n    switch (this.data().status) {\n      case 'failed':\n        return 'danger';\n      case 'paused':\n        return 'warning';\n      case 'completed':\n        return 'success';\n      default:\n        return 'primary';\n    }\n  });\n\n  protected readonly showProgressBar = computed(() => {\n    const operation = this.data();\n    return axpIsActiveBackgroundOperationStatus(operation.status);\n  });\n\n  protected readonly isIndeterminateProgress = computed(() => {\n    const operation = this.data();\n    return !isNumber(operation.progress) && !operation.currentStep;\n  });\n\n  protected readonly progressMode = computed(() =>\n    this.isIndeterminateProgress() ? 'indeterminate' : 'determinate',\n  );\n\n  protected readonly progressValue = computed(() => {\n    const progress = this.data().progress;\n    if (isNumber(progress)) {\n      return Math.min(Math.max(progress, 0), 100);\n    }\n    return 0;\n  });\n\n  protected readonly isClickable = computed(() => this.operationService.hasClickHandler(this.data()));\n\n  protected readonly showError = computed(() => this.data().status === 'failed' && !!this.data().error?.message);\n\n  protected readonly actions = computed(() => this.operationService.getAvailableActions(this.data()));\n\n  protected readonly showMetaRow = computed(() => {\n    const operation = this.data();\n    return (\n      !!operation.statusText ||\n      !!operation.currentStep ||\n      this.actions().length > 0\n    );\n  });\n\n  //#endregion\n\n  //#region ---- Action presentation ----\n\n  protected actionLabelKey(action: AXPBackgroundOperationActionKey): string {\n    return `@general:background-operation.actions.${action}`;\n  }\n\n  protected actionButtonLook(action: AXPBackgroundOperationActionKey): AXStyleLookType {\n    if (action === 'dismiss') {\n      return 'blank';\n    }\n    return 'twotone';\n  }\n\n  protected actionButtonColor(action: AXPBackgroundOperationActionKey): string {\n    switch (action) {\n      case 'cancel':\n        return 'danger';\n      case 'resume':\n      case 'retry':\n        return 'primary';\n      default:\n        return 'default';\n    }\n  }\n\n  //#endregion\n\n  //#region ---- Event Handlers ----\n\n  protected async onItemClick(): Promise<void> {\n    if (!this.isClickable()) {\n      return;\n    }\n    try {\n      await this.operationService.executeClick(this.data().id);\n      this.itemClicked.emit();\n    } catch (error) {\n      console.error('Background operation click failed:', error);\n    }\n  }\n\n  protected async onAction(action: AXPBackgroundOperationActionKey): Promise<void> {\n    if (this.pendingAction()) {\n      return;\n    }\n    this.pendingAction.set(action);\n    try {\n      await this.operationService.runAction(this.data().id, action);\n      this.actionCompleted.emit();\n    } catch (error) {\n      console.error('Background operation action failed:', error);\n    } finally {\n      this.pendingAction.set(null);\n    }\n  }\n\n  protected isActionDisabled(action: AXPBackgroundOperationActionKey): boolean {\n    const pending = this.pendingAction();\n    return pending !== null && pending !== action;\n  }\n\n  protected isActionLoading(action: AXPBackgroundOperationActionKey): boolean {\n    return this.pendingAction() === action;\n  }\n\n  //#endregion\n}\n\n//#endregion\n","<article\n  class=\"operation-item\"\n  [class]=\"statusClass()\"\n  [class.--clickable]=\"isClickable()\"\n  (click)=\"onItemClick()\"\n>\n  <div class=\"operation-item__body\">\n    <div class=\"operation-item__header\">\n      <ax-icon class=\"operation-item__status-icon\" [class]=\"statusClass()\">\n        <i [class]=\"statusIcon()\"></i>\n      </ax-icon>\n\n      <div class=\"operation-item__summary\">\n        <h3 class=\"operation-item__title\">{{ data().title }}</h3>\n\n        @if (showMetaRow()) {\n          <div class=\"operation-item__meta\">\n            <div class=\"operation-item__meta-content\">\n              @if (data().statusText) {\n                <p class=\"operation-item__status-text\">{{ data().statusText }}</p>\n              }\n\n              @if (data().currentStep) {\n                <span class=\"operation-item__step\">\n                  {{ '@general:background-operation.step' | translate | async }} {{ data().currentStep }}\n                </span>\n              }\n            </div>\n\n            @if (actions().length > 0) {\n              <footer class=\"operation-item__actions\" (click)=\"$event.stopPropagation()\">\n                @for (action of actions(); track action) {\n                  <ax-button\n                    class=\"ax-xs\"\n                    [look]=\"actionButtonLook(action)\"\n                    [color]=\"actionButtonColor(action)\"\n                    [text]=\"(actionLabelKey(action) | translate | async) ?? ''\"\n                    [disabled]=\"isActionDisabled(action) || isActionLoading(action)\"\n                    (onClick)=\"onAction(action)\"\n                  ></ax-button>\n                }\n              </footer>\n            }\n          </div>\n        }\n\n        @if (showProgressBar()) {\n          <ax-progress-bar\n            [progress]=\"progressValue()\"\n            [mode]=\"progressMode()\"\n            [color]=\"progressColor()\"\n            [style.height.px]=\"4\"\n          ></ax-progress-bar>\n        }\n\n        @if (showError()) {\n          <p class=\"operation-item__error\" role=\"alert\">{{ data().error!.message }}</p>\n        }\n      </div>\n    </div>\n  </div>\n</article>\n","//#region ---- Imports ----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  inject,\n  output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { AXPBackgroundOperationService } from '../background-operation.service';\nimport type { AXPBackgroundOperationStatus } from '../background-operation.types';\nimport { axpIsActiveBackgroundOperationStatus } from '../background-operation.util';\nimport { AXPBackgroundOperationItemComponent } from './background-operation-item.component';\n\n//#endregion\n\n//#region ---- Sort priority ----\n\nconst STATUS_SORT_PRIORITY: Record<AXPBackgroundOperationStatus, number> = {\n  running: 0,\n  queued: 1,\n  paused: 2,\n  failed: 3,\n  completed: 4,\n  cancelled: 5,\n};\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n  selector: 'axp-background-operation-panel',\n  templateUrl: './background-operation-panel.component.html',\n  styleUrls: ['./background-operation-panel.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, AXTranslationModule, AXPBackgroundOperationItemComponent],\n})\nexport class AXPBackgroundOperationPanelComponent {\n  //#region ---- Outputs ----\n\n  onActiveCountChange = output<number>();\n\n  onClosePopover = output<void>();\n\n  //#endregion\n\n  //#region ---- Services & Dependencies ----\n\n  protected readonly operationService = inject(AXPBackgroundOperationService);\n\n  //#endregion\n\n  //#region ---- Computed ----\n\n  protected readonly visibleOperations = computed(() =>\n    [...this.operationService.operations()]\n      .filter(\n        (operation) =>\n          axpIsActiveBackgroundOperationStatus(operation.status) || operation.status === 'failed',\n      )\n      .sort((left, right) => {\n      const priorityDiff = STATUS_SORT_PRIORITY[left.status] - STATUS_SORT_PRIORITY[right.status];\n      if (priorityDiff !== 0) {\n        return priorityDiff;\n      }\n      return right.createdAt.getTime() - left.createdAt.getTime();\n    }),\n  );\n\n  //#endregion\n}\n\n//#endregion\n","<div class=\"operation-panel\">\n  <header class=\"operation-panel__header\">\n    <h2 class=\"operation-panel__title\">{{ '@general:background-operation.panel.title' | translate | async }}</h2>\n  </header>\n\n  <div class=\"operation-panel__list\">\n    @if (visibleOperations().length === 0) {\n      <div class=\"operation-panel__empty\">\n        <i class=\"fa-regular fa-list-check\"></i>\n        <span class=\"ax-text-sm\">{{ '@general:background-operation.empty.all' | translate | async }}</span>\n      </div>\n    } @else {\n      @for (operation of visibleOperations(); track operation.id) {\n        <axp-background-operation-item\n          [data]=\"operation\"\n          (actionCompleted)=\"onActiveCountChange.emit(operationService.activeCount())\"\n          (itemClicked)=\"onClosePopover.emit()\"\n        ></axp-background-operation-item>\n      }\n    }\n  </div>\n</div>\n","//#region ---- Imports ----\n\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  inject,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { AXPBackgroundOperationService } from '../background-operation.service';\nimport { AXPBackgroundOperationPanelComponent } from './background-operation-panel.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n  selector: 'axp-background-operation-slot',\n  templateUrl: './background-operation-slot.component.html',\n  styleUrls: ['./background-operation-slot.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, AXDecoratorModule, AXTranslationModule, AXPopoverModule, AXPBackgroundOperationPanelComponent],\n})\nexport class AXPBackgroundOperationSlotComponent {\n  //#region ---- Services & Dependencies ----\n\n  private readonly operationService = inject(AXPBackgroundOperationService);\n\n  //#endregion\n\n  //#region ---- View Queries ----\n\n  private readonly popover = viewChild(AXPopoverComponent);\n\n  //#endregion\n\n  //#region ---- Computed ----\n\n  protected readonly activeCount = this.operationService.activeCount;\n\n  protected readonly failedCount = this.operationService.failedCount;\n\n  protected readonly showSlot = computed(\n    () => this.activeCount() > 0 || this.failedCount() > 0,\n  );\n\n  protected readonly slotShowsFailureOnly = computed(\n    () => this.activeCount() === 0 && this.failedCount() > 0,\n  );\n\n  protected readonly slotLabelKey = computed(() => {\n    if (this.slotShowsFailureOnly()) {\n      return this.failedCount() === 1\n        ? '@general:background-operation.slot.failed-single'\n        : '@general:background-operation.slot.failed-multiple';\n    }\n\n    return this.activeCount() === 1\n      ? '@general:background-operation.slot.single'\n      : '@general:background-operation.slot.multiple';\n  });\n\n  protected readonly slotLabelParams = computed(() => ({\n    count: this.slotShowsFailureOnly() ? this.failedCount() : this.activeCount(),\n  }));\n\n  //#endregion\n\n  //#region ---- Event Handlers ----\n\n  protected closePopover(): void {\n    this.popover()?.close();\n  }\n\n  //#endregion\n}\n\n//#endregion\n","@if (showSlot()) {\n  <button type=\"button\" class=\"operation-slot__trigger\" #operationTrigger>\n    <ax-icon class=\"operation-slot__icon\">\n      @if (slotShowsFailureOnly()) {\n        <i class=\"fa-light fa-circle-exclamation\"></i>\n      } @else {\n        <i class=\"fa-light fa-spinner fa-spin\"></i>\n      }\n    </ax-icon>\n    <span class=\"operation-slot__text\">\n      {{ slotLabelKey() | translate: { params: slotLabelParams() } | async }}\n    </span>\n  </button>\n\n  <ax-popover [target]=\"operationTrigger\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\">\n    <div class=\"ax-bg-lightest ax-rounded-md ax-w-full\">\n      <axp-background-operation-panel (onClosePopover)=\"closePopover()\"></axp-background-operation-panel>\n    </div>\n  </ax-popover>\n}\n","import { AXPLogoConfig } from '@acorex/platform/contracts';\n\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 { NavigationExtras, Router } from '@angular/router';\n\n//#region ----   Types   ----\n\nexport interface AXPAppPathParts {\n  segments: string[];\n  queryParams?: Record<string, string>;\n  fragment?: string;\n}\n\n//#endregion\n\n//#region ----   App Path Navigation   ----\n\n/**\n * Splits an absolute app path (`/app/m/module/e/Entity/id/view`) into router command segments.\n * Prefer this over `navigate([fullPath])` or ambiguous single-segment navigation so browser history stays correct.\n */\nexport function axpParseAppPath(path: string): AXPAppPathParts {\n  const trimmed = path.trim();\n  const withoutLeadingSlash = trimmed.startsWith('/') ? trimmed.slice(1) : trimmed;\n  const [pathAndFragment, queryString] = withoutLeadingSlash.split('?');\n  const [pathPart, fragment] = pathAndFragment.split('#');\n  const segments = pathPart.split('/').filter(Boolean);\n\n  const queryParams = queryString\n    ? queryString.split('&').reduce<Record<string, string>>((params, pair) => {\n        const [key, value = ''] = pair.split('=');\n        if (key) {\n          params[decodeURIComponent(key)] = decodeURIComponent(value);\n        }\n        return params;\n      }, {})\n    : undefined;\n\n  return {\n    segments,\n    queryParams,\n    fragment: fragment || undefined,\n  };\n}\n\n/** Navigates using explicit path segments (same pattern as entity preload filters). */\nexport function axpNavigateAppPath(router: Router, path: string, extras?: NavigationExtras): Promise<boolean> {\n  const { segments, queryParams, fragment } = axpParseAppPath(path);\n  return router.navigate(segments, {\n    ...extras,\n    queryParams,\n    fragment,\n  });\n}\n\n/** True when a URL path is an entity master list route (`.../e/{Entity}/list`). */\nexport function axpIsEntityListPath(url: string): boolean {\n  const path = url.split('?')[0].split('#')[0];\n  return /\\/e\\/[^/]+\\/list$/.test(path);\n}\n\n/** True when the current browser URL is an entity master list route (`.../e/{Entity}/list`). */\nexport function axpIsEntityListRoute(router: Router): boolean {\n  return axpIsEntityListPath(router.url);\n}\n\n/** True when a URL path is an entity details view route (`.../e/{Entity}/{id}/view`). */\nexport function axpIsEntityDetailsPath(url: string): boolean {\n  const path = url.split('?')[0].split('#')[0];\n  return /\\/e\\/[^/]+\\/[^/]+\\/view$/.test(path);\n}\n\n/** True when the current browser URL is an entity details view route (`.../e/{Entity}/{id}/view`). */\nexport function axpIsEntityDetailsViewRoute(router: Router): boolean {\n  return axpIsEntityDetailsPath(router.url);\n}\n\n/**\n * Merges query params on the current entity list route without pushing history.\n * Uses absolute path segments so a stale `relativeTo` cannot rewrite the active URL after navigating away.\n */\nexport function axpReplaceEntityListRouteQueryParams(\n  router: Router,\n  queryParams: Record<string, string | null | undefined>,\n): void {\n  const url = router.url;\n  if (!axpIsEntityListPath(url)) {\n    return;\n  }\n\n  const parsed = router.parseUrl(url);\n  const pathOnly = url.split('?')[0].split('#')[0];\n  const { segments } = axpParseAppPath(pathOnly);\n  const mergedQueryParams = { ...parsed.queryParams, ...queryParams };\n\n  void router.navigate(segments, {\n    queryParams: mergedQueryParams,\n    replaceUrl: true,\n  });\n}\n\n//#endregion\n","import { axpIsEntityDetailsPath, axpIsEntityListPath } from '../../utils/app-path-navigation.util';\nimport { AXPMenuItem } from './menu.types';\n\nexport interface AXPMenuRouteMatchResult {\n  item: AXPMenuItem;\n  /** Parent menu items from root down to the direct parent of the matched item. */\n  ancestors: AXPMenuItem[];\n  isPartialMatch: boolean;\n}\n\nconst DEFAULT_TRAILING_SEGMENTS = ['list', 'view', 'edit', 'create'];\n\n/** Query params managed by entity list UI; ignored when matching generic (no-query) menu paths. */\nconst ENTITY_LIST_UI_QUERY_KEYS = new Set(['view']);\n\ninterface EntityRouteKey {\n  app: string;\n  module: string;\n  entity: string;\n  /** Segment index after the entity name (first segment that is not part of the entity key). */\n  entityEndIndex: number;\n}\n\n//#region ---- Entity Route Helpers ----\n\n/**\n * Parses `/{app}/m/{module}/e/{entity}/...` routes into a stable entity key.\n */\nfunction axpParseEntityRouteKey(segments: string[]): EntityRouteKey | null {\n  const mIndex = segments.indexOf('m');\n  const eIndex = segments.indexOf('e');\n\n  if (mIndex < 1 || eIndex <= mIndex + 1 || eIndex + 1 >= segments.length) {\n    return null;\n  }\n\n  return {\n    app: segments[mIndex - 1],\n    module: segments[mIndex + 1],\n    entity: segments[eIndex + 1],\n    entityEndIndex: eIndex + 2,\n  };\n}\n\nfunction axpEntityRouteKeysEqual(left: EntityRouteKey, right: EntityRouteKey): boolean {\n  return left.app === right.app && left.module === right.module && left.entity === right.entity;\n}\n\nfunction axpParseQueryString(queryString: string): URLSearchParams {\n  return new URLSearchParams(queryString);\n}\n\nfunction axpMenuDeclaredNavigationParams(queryString: string): URLSearchParams {\n  const params = axpParseQueryString(queryString);\n  const navigationParams = new URLSearchParams();\n\n  params.forEach((value, key) => {\n    if (!ENTITY_LIST_UI_QUERY_KEYS.has(key)) {\n      navigationParams.append(key, value);\n    }\n  });\n\n  return navigationParams;\n}\n\nfunction axpMenuHasDeclaredNavigationParams(itemQueryString: string): boolean {\n  return axpMenuDeclaredNavigationParams(itemQueryString).toString().length > 0;\n}\n\n/**\n * True when every navigation query param declared on the menu path equals the current URL.\n */\nfunction axpMenuDeclaredQueryParamsMatch(itemQueryString: string, currentQueryString: string): boolean {\n  const itemParams = axpMenuDeclaredNavigationParams(itemQueryString);\n  const declaredPairs: Array<[string, string]> = [];\n  itemParams.forEach((value, key) => {\n    declaredPairs.push([key, value]);\n  });\n\n  if (declaredPairs.length === 0) {\n    return axpGenericEntityListMenuQueryParamsMatch(currentQueryString);\n  }\n\n  const currentParams = axpParseQueryString(currentQueryString);\n  return declaredPairs.every(([key, value]) => currentParams.get(key) === value);\n}\n\n/**\n * Generic entity list menu items (no declared query params) match only when the URL has no\n * navigation query params beyond UI-managed keys such as `view`.\n */\nfunction axpGenericEntityListMenuQueryParamsMatch(currentQueryString: string): boolean {\n  const currentParams = axpParseQueryString(currentQueryString);\n  let hasNavigationParam = false;\n\n  currentParams.forEach((_value, key) => {\n    if (!ENTITY_LIST_UI_QUERY_KEYS.has(key)) {\n      hasNavigationParam = true;\n    }\n  });\n\n  return !hasNavigationParam;\n}\n\n/**\n * Counts declared menu query params that match the current URL (for best-match selection).\n */\nfunction axpMenuQueryParamSpecificity(itemPath: string, currentPath: string): number {\n  const itemQueryString = itemPath.split('#')[0].split('?')[1] ?? '';\n  const currentQueryString = currentPath.split('#')[0].split('?')[1] ?? '';\n  const itemParams = axpMenuDeclaredNavigationParams(itemQueryString);\n  const currentParams = axpParseQueryString(currentQueryString);\n  let specificity = 0;\n\n  itemParams.forEach((value, key) => {\n    if (currentParams.get(key) === value) {\n      specificity++;\n    }\n  });\n\n  return specificity;\n}\n\n/**\n * Matches entity list menu entries against list/detail/create/edit routes for the same entity.\n */\nfunction axpTryMatchEntityMenuRoute(\n  itemSegments: string[],\n  pathSegments: string[],\n  currentBase: string,\n  itemQueryString: string,\n  currentQueryString: string,\n): { isMatch: boolean; isPartial: boolean } | null {\n  const menuEntity = axpParseEntityRouteKey(itemSegments);\n  const currentEntity = axpParseEntityRouteKey(pathSegments);\n\n  if (!menuEntity || !currentEntity || !axpEntityRouteKeysEqual(menuEntity, currentEntity)) {\n    return null;\n  }\n\n  const itemHasDeclaredParams = axpMenuHasDeclaredNavigationParams(itemQueryString);\n\n  if (itemHasDeclaredParams) {\n    if (!axpIsEntityListPath(currentBase)) {\n      return { isMatch: false, isPartial: false };\n    }\n\n    if (!axpMenuDeclaredQueryParamsMatch(itemQueryString, currentQueryString)) {\n      return { isMatch: false, isPartial: false };\n    }\n\n    return { isMatch: true, isPartial: false };\n  }\n\n  if (axpIsEntityListPath(currentBase) && !axpGenericEntityListMenuQueryParamsMatch(currentQueryString)) {\n    return { isMatch: false, isPartial: false };\n  }\n\n  const isPartial =\n    pathSegments.length > menuEntity.entityEndIndex ||\n    axpIsEntityDetailsPath(currentBase) ||\n    !axpIsEntityListPath(currentBase);\n\n  return { isMatch: true, isPartial };\n}\n\n//#endregion\n\n/**\n * Compares a menu item path with the current browser path.\n * Mirrors the matching rules used when selecting the active menu item.\n */\nexport function axpMenuPathsMatch(\n  itemPath: string,\n  currentPath: string,\n  trailingSegmentsToIgnore: string[] = DEFAULT_TRAILING_SEGMENTS,\n): { isMatch: boolean; isPartial: boolean } {\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 entityMatch = axpTryMatchEntityMenuRoute(\n    itemSegments,\n    pathSegments,\n    `/${currentBase}`,\n    itemQueryString,\n    currentQueryString,\n  );\n  if (entityMatch) {\n    return entityMatch;\n  }\n\n  const menuLength = itemSegments.length;\n  const pathLength = pathSegments.length;\n\n  let effectiveMenuLength = menuLength;\n  if (menuLength > 0 && trailingSegmentsToIgnore.includes(itemSegments[menuLength - 1])) {\n    effectiveMenuLength--;\n  }\n\n  if (pathLength < effectiveMenuLength) {\n    return { isMatch: false, isPartial: false };\n  }\n\n  let isPrefix = true;\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  const isPartialMatch = effectiveMenuLength < pathLength;\n  const isExactMatch = effectiveMenuLength === pathLength;\n\n  const itemParams = axpParseQueryString(itemQueryString);\n  const currentParams = axpParseQueryString(currentQueryString);\n  let queryMatches = true;\n\n  const itemParamPairs: Array<[string, string]> = [];\n  itemParams.forEach((value, key) => {\n    itemParamPairs.push([key, value]);\n  });\n\n  if (itemParamPairs.length > 0) {\n    for (const [key, value] of itemParamPairs) {\n      if (currentParams.get(key) !== value) {\n        queryMatches = false;\n        break;\n      }\n    }\n  }\n\n  return {\n    isMatch: (isExactMatch || isPartialMatch) && queryMatches,\n    isPartial: isPartialMatch && !isExactMatch,\n  };\n}\n\n/**\n * Finds the most specific menu item that matches the given route path.\n */\nexport function axpFindMenuItemByRoute(\n  items: AXPMenuItem[],\n  currentPath: string,\n  trailingSegmentsToIgnore: string[] = DEFAULT_TRAILING_SEGMENTS,\n): AXPMenuRouteMatchResult | null {\n  let bestMatch: AXPMenuRouteMatchResult | null = null;\n  let bestEffectiveLength = -1;\n  let bestQuerySpecificity = -1;\n\n  const visit = (menuItems: AXPMenuItem[], ancestors: AXPMenuItem[]): void => {\n    for (const item of menuItems) {\n      if (item.children?.length) {\n        visit(item.children, [...ancestors, item]);\n      }\n\n      if (!item.path) {\n        continue;\n      }\n\n      const matchResult = axpMenuPathsMatch(item.path, currentPath, trailingSegmentsToIgnore);\n      if (!matchResult.isMatch) {\n        continue;\n      }\n\n      const itemNoHash = item.path.split('#')[0];\n      const [itemBase] = itemNoHash.split('?');\n      const itemSegments = itemBase.split('/').filter((segment) => segment.length > 0);\n\n      let effectiveMenuLength = itemSegments.length;\n      if (\n        itemSegments.length > 0 &&\n        trailingSegmentsToIgnore.includes(itemSegments[itemSegments.length - 1])\n      ) {\n        effectiveMenuLength--;\n      }\n\n      const menuEntity = axpParseEntityRouteKey(itemSegments);\n      if (menuEntity) {\n        effectiveMenuLength = menuEntity.entityEndIndex;\n      }\n\n      const querySpecificity = axpMenuQueryParamSpecificity(item.path, currentPath);\n\n      if (\n        effectiveMenuLength > bestEffectiveLength ||\n        (effectiveMenuLength === bestEffectiveLength && querySpecificity > bestQuerySpecificity)\n      ) {\n        bestEffectiveLength = effectiveMenuLength;\n        bestQuerySpecificity = querySpecificity;\n        bestMatch = { item, ancestors, isPartialMatch: matchResult.isPartial };\n      }\n    }\n  };\n\n  visit(items, []);\n  return bestMatch;\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","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 visibility for a menu branch, including ancestor policies.\n     * Parent module features and permissions must pass before child routes are accessible.\n     */\n    isMenuBranchVisible(item: AXPMenuItem, ancestors: AXPMenuItem[] = []): boolean {\n        for (const menuItem of [...ancestors, item]) {\n            if (!this.isItemVisible(menuItem)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\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","//#region ---- Imports ----\n\nimport { AXPKeyboardShortcutBinding, AXPKeyboardShortcutPriority } from '@acorex/platform/contracts';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPKeyboardShortcutRegistry, normalizeKeyboardShortcuts } from '@acorex/platform/core';\nimport { DestroyRef, inject, Injectable, Injector } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AXPMenuService } from './menu.service';\nimport { AXPMenuVisibilityService } from './menu-visibility.service';\nimport { AXPMenuItem } from './menu.types';\n\n//#endregion\n\n//#region ---- Types ----\n\ninterface AXPMenuShortcutEntry {\n  item: AXPMenuItem;\n  ancestors: AXPMenuItem[];\n}\n\n//#endregion\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPMenuKeyboardShortcutService {\n  //#region ---- Services & Dependencies ----\n\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly injector = inject(Injector);\n  private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n  private readonly visibilityService = inject(AXPMenuVisibilityService);\n  private readonly sessionService = inject(AXPSessionService);\n  private readonly isAuthenticated = toSignal(this.sessionService.isAuthenticated$, { initialValue: false });\n\n  //#endregion\n\n  //#region ---- Public Methods ----\n\n  /**\n   * Registers global keyboard shortcuts declared on menu items (`shortcuts` property).\n   * Replaces the previous registration when the menu tree is reloaded.\n   */\n  sync(items: AXPMenuItem[]): void {\n    const shortcuts = this.buildShortcutBindings(items);\n\n    this.shortcutRegistry.register({\n      owner: this.destroyRef,\n      id: 'menu-items-shortcuts',\n      priority: AXPKeyboardShortcutPriority.Global,\n      group: '@general:keyboard-shortcuts.groups.global',\n      when: () => this.isAuthenticated() === true,\n      shortcuts,\n    });\n  }\n\n  //#endregion\n\n  //#region ---- Private Methods ----\n\n  private buildShortcutBindings(items: AXPMenuItem[]): AXPKeyboardShortcutBinding[] {\n    const shortcuts: AXPKeyboardShortcutBinding[] = [];\n\n    for (const entry of this.collectShortcutEntries(items)) {\n      if (!entry.item.path && !entry.item.command) {\n        continue;\n      }\n\n      for (const shortcut of normalizeKeyboardShortcuts(entry.item.shortcuts)) {\n        for (const chord of shortcut.keys) {\n          shortcuts.push({\n            keys: [chord],\n            title: entry.item.text,\n            group: '@general:keyboard-shortcuts.groups.global',\n            allowInEditableFields: shortcut.allowInEditableFields,\n            directionBehavior: shortcut.directionBehavior,\n            when: () => this.isShortcutActive(entry) && (shortcut.when?.() ?? true),\n            handler: () => {\n              this.injector.get(AXPMenuService).executeCommand(entry.item);\n            },\n          });\n        }\n      }\n    }\n\n    return shortcuts;\n  }\n\n  private collectShortcutEntries(\n    items: AXPMenuItem[],\n    ancestors: AXPMenuItem[] = [],\n  ): AXPMenuShortcutEntry[] {\n    const result: AXPMenuShortcutEntry[] = [];\n\n    for (const item of items) {\n      const parents = ancestors;\n      if (item.shortcuts?.length) {\n        result.push({ item, ancestors: parents });\n      }\n\n      if (item.children?.length) {\n        result.push(...this.collectShortcutEntries(item.children, [...parents, item]));\n      }\n    }\n\n    return result;\n  }\n\n  private isShortcutActive(entry: AXPMenuShortcutEntry): boolean {\n    if (this.isAuthenticated() !== true) {\n      return false;\n    }\n\n    return this.visibilityService.isMenuBranchVisible(entry.item, entry.ancestors);\n  }\n\n  //#endregion\n}\n","import { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { 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 { AXPMenuKeyboardShortcutService } from './menu-keyboard-shortcuts.service';\nimport { axpFindMenuItemByRoute } from './menu-route-matcher';\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 match = axpFindMenuItemByRoute(store.items(), path, ['list', 'view', 'edit', 'create']);\n          patchState(store, {\n            selectedMenuItem: {\n              item: match?.item ?? null,\n              isFullMatch: match ? !match.isPartialMatch : false,\n            },\n          });\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().item;\n          if (!selectedItem) {\n            return false;\n          }\n\n          if (item === selectedItem || (item.name && item.name === selectedItem.name)) {\n            return true;\n          }\n\n          const findParent = (currentItem: AXPMenuItem, targetItem: AXPMenuItem): boolean => {\n            if (\n              currentItem.children?.some(\n                (child) => child === targetItem || (child.name && child.name === targetItem.name),\n              )\n            ) {\n              return true;\n            }\n            return currentItem.children?.some((child) => findParent(child, targetItem)) ?? false;\n          };\n\n          return findParent(item, selectedItem);\n        },\n      };\n    },\n  ),\n  withHooks((store, menuProviderService = inject(AXPMenuProviderService), menuKeyboardShortcuts = inject(AXPMenuKeyboardShortcutService), router = inject(Router)) => {\n    let reloadSubscription: any;\n\n    const applyMenuItems = (items: AXPMenuItem[]): void => {\n      patchState(store, { items });\n      menuKeyboardShortcuts.sync(items);\n      store.selectMenuItemByRoute(router.url);\n    };\n\n    return {\n      onInit() {\n        // Load initial menu items\n        (async () => {\n          applyMenuItems(await menuProviderService.items());\n        })();\n\n        // Subscribe to menu reload events\n        reloadSubscription = menuProviderService.menuReload$.subscribe(async () => {\n          applyMenuItems(await menuProviderService.items());\n        });\n      },\n      onDestroy() {\n        // Clean up subscription\n        if (reloadSubscription) {\n          reloadSubscription.unsubscribe();\n        }\n      },\n    };\n  }),\n);\n","import { defaultTo } from 'lodash-es';\n\n//#region ---- Tab Key ----\n\n/** Query params ignored when building a tab dedupe key. */\nconst IGNORED_QUERY_KEYS = new Set(['_ts']);\n\n/**\n * Builds a stable tab key from a router URL.\n * Path segments define identity; query params are excluded so the same entity record\n * or list reuses one tab even when filters or refresh tokens change.\n */\nexport function axpBuildTabKey(url: string): string {\n  const normalized = normalizeRouterUrl(url);\n  const pathOnly = normalized.split('?')[0].split('#')[0];\n  return pathOnly;\n}\n\n/** Normalizes a router URL for storage and navigation. */\nexport function normalizeRouterUrl(url: string): string {\n  const trimmed = url.trim();\n  if (!trimmed.length) {\n    return '/';\n  }\n\n  const withLeadingSlash = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n  const [pathAndFragment, queryString = ''] = withLeadingSlash.split('?');\n  const [pathPart, fragment = ''] = pathAndFragment.split('#');\n\n  const normalizedPath = pathPart.replace(/\\/+$/, '') || '/';\n  const filteredQuery = filterQueryString(queryString);\n\n  let result = normalizedPath;\n  if (filteredQuery) {\n    result += `?${filteredQuery}`;\n  }\n  if (fragment) {\n    result += `#${fragment}`;\n  }\n  return result;\n}\n\nfunction filterQueryString(queryString: string): string {\n  if (!queryString) {\n    return '';\n  }\n\n  const params = new URLSearchParams(queryString);\n  const kept: string[] = [];\n  params.forEach((value, key) => {\n    if (!IGNORED_QUERY_KEYS.has(key)) {\n      kept.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);\n    }\n  });\n  kept.sort();\n  return kept.join('&');\n}\n\n/** Human-readable fallback title from the URL path. */\nexport function axpFallbackTabTitle(url: string): string {\n  const pathOnly = url.split('?')[0].split('#')[0];\n  const segments = pathOnly.split('/').filter(Boolean);\n  const last = defaultTo(segments[segments.length - 1], 'Page');\n  return decodeURIComponent(last);\n}\n\n//#endregion\n","//#region ---- Types ----\n\nexport type AXPNavigationMode = 'simple' | 'tabular';\n\nexport const AXP_HOME_TAB_KEY = 'axp:home';\n\n/** Route `data` key for tab-navigation behavior (`data.tab`). */\nexport const AXP_TAB_ROUTE_DATA_KEY = 'tab';\n\n/**\n * Set `data.tab = true` on the route that should act as the tab boundary.\n * Child navigations under this route update the same tab rather than opening a new one.\n */\nexport type AXPTabRouteData = true;\n\nexport interface AXPTabDescriptor {\n  /** Stable dedupe key derived from the route (path-based, query excluded). */\n  key: string;\n  /** Full router URL including query string and fragment. */\n  url: string;\n  title: string;\n  /** Resolved breadcrumb segments used for tab chrome (leaf/prefix); avoids parsing joined titles. */\n  titleSegments?: string[];\n  icon?: string;\n  pinned: boolean;\n  closable: boolean;\n  /** Timestamp used for LRU eviction when max tabs is reached. */\n  openedAt: number;\n  /** Updated whenever the tab becomes active. */\n  lastActivatedAt: number;\n}\n\nexport interface AXPTabSessionState {\n  tabs: AXPTabDescriptor[];\n  activeTabKey: string | null;\n}\n\n/** Optional hook for confirming closure of a cached background tab (no router navigation). */\nexport interface AXPTabCloseConfirm {\n  onBeforeTabClose(): boolean | Promise<boolean>;\n}\n\n//#endregion\n","import { ActivatedRouteSnapshot, Router, Routes } from '@angular/router';\nimport { normalizeRouterUrl } from './tab-key.util';\nimport { AXP_TAB_ROUTE_DATA_KEY } from './tab-navigation.types';\n\n//#region ---- Route Data ----\n\n/** True when the route declares itself as a scoped tab root (`data.tab = true`). */\nexport function axpHasTabScope(data: Record<string, unknown> | undefined): boolean {\n  return data?.[AXP_TAB_ROUTE_DATA_KEY] === true;\n}\n\n//#endregion\n\n//#region ---- Snapshot Resolution ----\n\n/** Resolved URL path for a snapshot (no query or fragment). */\nexport function axpPathFromSnapshot(snapshot: ActivatedRouteSnapshot): string {\n  const segments = snapshot.pathFromRoot\n    .flatMap((entry) => entry.url.map((segment) => segment.path))\n    .filter(Boolean);\n  return segments.length ? `/${segments.join('/')}` : '/';\n}\n\n/** Returns the leaf snapshot under the router state root. */\nexport function axpGetLeafRouteSnapshot(root: ActivatedRouteSnapshot): ActivatedRouteSnapshot {\n  let route = root;\n  while (route.firstChild) {\n    route = route.firstChild;\n  }\n  return route;\n}\n\n/**\n * Resolves the tab dedupe key from an activated route tree.\n * Uses the nearest ancestor with `data.tab = true`; otherwise the leaf path.\n */\nexport function axpResolveTabKeyFromSnapshot(leaf: ActivatedRouteSnapshot): string {\n  const chain = leaf.pathFromRoot;\n\n  for (let index = chain.length - 1; index >= 0; index--) {\n    const snapshot = chain[index];\n    if (axpHasTabScope(snapshot.data)) {\n      return axpPathFromSnapshot(snapshot);\n    }\n  }\n\n  return axpPathFromSnapshot(leaf);\n}\n\n//#endregion\n\n//#region ---- Router / URL Resolution ----\n\n/**\n * Resolves a tab key for the given URL (or the current router URL).\n * Prefers the live route snapshot when it matches the target URL; otherwise matches route config.\n */\nexport function axpResolveTabKey(router: Router, url?: string): string {\n  const normalized = normalizeRouterUrl(url ?? router.url);\n  const pathOnly = normalized.split('?')[0].split('#')[0];\n\n  const currentPath = normalizeRouterUrl(router.url).split('?')[0].split('#')[0];\n  if (!url || pathOnly === currentPath) {\n    const leaf = axpGetLeafRouteSnapshot(router.routerState.snapshot.root);\n    return axpResolveTabKeyFromSnapshot(leaf);\n  }\n\n  const fromConfig = axpResolveTabKeyFromRouteConfig(router.config, pathOnly);\n  if (fromConfig) {\n    return fromConfig;\n  }\n\n  return pathOnly.startsWith('/') ? pathOnly : `/${pathOnly}`;\n}\n\n//#endregion\n\n//#region ---- Route Config Matching ----\n\ninterface MatchedRouteLevel {\n  mergedData: Record<string, unknown>;\n  path: string;\n}\n\n/**\n * Matches a URL path against registered routes and resolves the tab key from `data.tab`.\n */\nexport function axpResolveTabKeyFromRouteConfig(routes: Routes, pathOnly: string): string | null {\n  const normalized = pathOnly.startsWith('/') ? pathOnly.replace(/\\/+$/, '') || '/' : `/${pathOnly}`.replace(/\\/+$/, '') || '/';\n  const segments = normalized === '/' ? [] : normalized.split('/').filter(Boolean);\n  const chain = matchRouteConfigChain(routes, segments, 0, {}, []);\n\n  if (!chain?.length) {\n    return null;\n  }\n\n  for (let index = chain.length - 1; index >= 0; index--) {\n    const level = chain[index];\n    if (axpHasTabScope(level.mergedData)) {\n      return level.path;\n    }\n  }\n\n  return chain[chain.length - 1]?.path ?? null;\n}\n\nfunction matchRouteConfigChain(\n  routes: Routes,\n  segments: string[],\n  startIndex: number,\n  inheritedData: Record<string, unknown>,\n  chain: MatchedRouteLevel[],\n): MatchedRouteLevel[] | null {\n  let bestMatch: MatchedRouteLevel[] | null = null;\n\n  for (const route of routes) {\n    if (route.redirectTo) {\n      continue;\n    }\n\n    const segmentMatch = matchRoutePath(route.path ?? '', segments, startIndex);\n    if (!segmentMatch) {\n      continue;\n    }\n\n    const pathSegments = [...segments.slice(0, startIndex), ...segments.slice(startIndex, startIndex + segmentMatch.consumed)];\n    const path = pathSegments.length ? `/${pathSegments.join('/')}` : '/';\n    const mergedData: Record<string, unknown> = { ...inheritedData, ...(route.data ?? {}) };\n    const level: MatchedRouteLevel = { mergedData, path };\n    const nextChain = [...chain, level];\n    const nextIndex = startIndex + segmentMatch.consumed;\n\n    if (route.children?.length) {\n      const childMatch = matchRouteConfigChain(route.children, segments, nextIndex, mergedData, nextChain);\n      if (childMatch && (!bestMatch || childMatch.length > bestMatch.length)) {\n        bestMatch = childMatch;\n      }\n    }\n\n    if (nextIndex === segments.length) {\n      if (!bestMatch || nextChain.length > bestMatch.length) {\n        bestMatch = nextChain;\n      }\n    }\n  }\n\n  return bestMatch;\n}\n\nfunction matchRoutePath(\n  routePath: string,\n  segments: string[],\n  startIndex: number,\n): { consumed: number } | null {\n  if (routePath === '**') {\n    return { consumed: Math.max(0, segments.length - startIndex) };\n  }\n\n  const parts = routePath.split('/').filter(Boolean);\n  if (!parts.length) {\n    return { consumed: 0 };\n  }\n\n  let consumed = 0;\n  for (const part of parts) {\n    const segment = segments[startIndex + consumed];\n    if (segment === undefined) {\n      return null;\n    }\n\n    if (part.startsWith(':') || part === segment) {\n      consumed++;\n      continue;\n    }\n\n    return null;\n  }\n\n  return { consumed };\n}\n\n//#endregion\n","//#region ---- Tab Title ----\n\nexport const AXP_TAB_BREADCRUMB_JOIN_SEPARATOR = ' - ';\n\nexport interface AXPTabTitleParts {\n  prefix: string | null;\n  leaf: string;\n}\n\n/** Joins breadcrumb segments for the stored tab title and tooltip full label. */\nexport function axpJoinTabTitleSegments(segments: string[]): string {\n  return segments.join(AXP_TAB_BREADCRUMB_JOIN_SEPARATOR);\n}\n\n/** Derives compact tab label parts from structured breadcrumb segments. */\nexport function axpResolveTabTitleParts(\n  tab: { titleSegments?: string[] },\n  fallbackTitle: string,\n): AXPTabTitleParts {\n  const segments = tab.titleSegments;\n  if (!segments?.length) {\n    return { prefix: null, leaf: fallbackTitle };\n  }\n\n  if (segments.length === 1) {\n    return { prefix: null, leaf: segments[0] };\n  }\n\n  return {\n    prefix: axpJoinTabTitleSegments(segments.slice(0, -1)),\n    leaf: segments[segments.length - 1],\n  };\n}\n\n//#endregion\n","import { Injectable, signal } from '@angular/core';\nimport type { AXPTabStructuredPreview } from './tab-preview.types';\n\n//#region ---- Tab Preview Service ----\n\n/**\n * In-memory structured previews for tab hover cards and dirty indicators.\n * Populated by active/cached pages via {@link AXPPageLayoutBaseComponent}.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPTabPreviewService {\n  //#region ---- State ----\n\n  private readonly previewMap = signal<Readonly<Record<string, AXPTabStructuredPreview>>>({});\n\n  readonly previews = this.previewMap.asReadonly();\n\n  //#endregion\n\n  //#region ---- Public API ----\n\n  setPreview(key: string, preview: AXPTabStructuredPreview): void {\n    this.previewMap.update((current) => ({\n      ...current,\n      [key]: preview,\n    }));\n  }\n\n  patchPreview(key: string, patch: Partial<AXPTabStructuredPreview>): void {\n    this.previewMap.update((current) => {\n      const existing = current[key];\n      if (!existing) {\n        if (!patch.url) {\n          return current;\n        }\n\n        return {\n          ...current,\n          [key]: {\n            title: patch.title ?? '',\n            url: patch.url,\n            icon: patch.icon,\n            subtitle: patch.subtitle,\n            isDirty: patch.isDirty ?? false,\n            breadcrumbTrail: patch.breadcrumbTrail ?? [],\n          },\n        };\n      }\n\n      return {\n        ...current,\n        [key]: {\n          ...existing,\n          ...patch,\n        },\n      };\n    });\n  }\n\n  getPreview(key: string): AXPTabStructuredPreview | undefined {\n    return this.previewMap()[key];\n  }\n\n  isTabDirty(key: string): boolean {\n    return !!this.previewMap()[key]?.isDirty;\n  }\n\n  clearPreview(key: string): void {\n    this.previewMap.update((current) => {\n      if (!(key in current)) {\n        return current;\n      }\n\n      const next = { ...current };\n      delete next[key];\n      return next;\n    });\n  }\n\n  clearPreviews(keys: Iterable<string>): void {\n    const keySet = new Set(keys);\n    if (!keySet.size) {\n      return;\n    }\n\n    this.previewMap.update((current) => {\n      const next: Record<string, AXPTabStructuredPreview> = { ...current };\n      let changed = false;\n\n      for (const key of keySet) {\n        if (key in next) {\n          delete next[key];\n          changed = true;\n        }\n      }\n\n      return changed ? next : current;\n    });\n  }\n\n  clearAll(): void {\n    this.previewMap.set({});\n  }\n\n  //#endregion\n}\n\n//#endregion\n","//#region ---- Tab Route Policy ----\n\nconst EXCLUDED_PATH_PREFIXES = ['/auth', '/error'] as const;\n\nconst EXCLUDED_PATH_PATTERNS: RegExp[] = [\n  /^\\/assessment\\/fill\\//i,\n  /^\\/forms\\//i,\n];\n\n/**\n * Returns true when the URL represents an in-app page that may appear in the tab bar.\n */\nexport function axpIsTabEligibleUrl(url: string): boolean {\n  const pathOnly = url.split('?')[0].split('#')[0].trim();\n  if (!pathOnly || pathOnly === '/') {\n    return false;\n  }\n\n  const normalized = pathOnly.startsWith('/') ? pathOnly : `/${pathOnly}`;\n\n  if (EXCLUDED_PATH_PREFIXES.some((prefix) => normalized.startsWith(prefix))) {\n    return false;\n  }\n\n  if (EXCLUDED_PATH_PATTERNS.some((pattern) => pattern.test(normalized))) {\n    return false;\n  }\n\n  return true;\n}\n\n//#endregion\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPDeviceService } from '@acorex/platform/core';\nimport { computed, DestroyRef, effect, inject, Injectable, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, NavigationExtras, Router } from '@angular/router';\nimport { cloneDeep, defaultTo } from 'lodash-es';\nimport { filter } from 'rxjs/operators';\nimport { AXPCommonSettings } from '../configs/common-settings.key';\nimport { AXPHomePageService } from '../home-page/home-page.service';\nimport { axpFindMenuItemByRoute } from '../layout/menu/menu-route-matcher';\nimport { AXPMenuService } from '../layout/menu/menu.service';\nimport { AXPSettingsService } from '../settings/settings.service';\nimport { AXPUnsavedChangesConfirmService } from '../settings/unsaved-changes-confirm.service';\nimport { axpNavigateAppPath } from '../utils/app-path-navigation.util';\nimport { axpFallbackTabTitle, normalizeRouterUrl } from './tab-key.util';\nimport { axpJoinTabTitleSegments } from './tab-title.util';\nimport {\n  AXP_HOME_TAB_KEY,\n  type AXPNavigationMode,\n  type AXPTabCloseConfirm,\n  type AXPTabDescriptor,\n  type AXPTabSessionState,\n} from './tab-navigation.types';\nimport { AXPTabPreviewService } from './tab-preview.service';\nimport { AXPTabRouteCacheRegistry } from './tab-route-cache.registry';\nimport { axpIsTabEligibleUrl } from './tab-route-policy';\nimport { axpResolveTabKey } from './tab-route-resolver';\n\n//#region ---- Constants ----\n\nconst SESSION_STORAGE_PREFIX = 'AXP_TAB_NAV';\n\n//#endregion\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPTabNavigationService {\n  //#region ---- Services & Dependencies ----\n\n  private readonly router = inject(Router);\n  private readonly settingsService = inject(AXPSettingsService);\n  private readonly deviceService = inject(AXPDeviceService);\n  private readonly menuService = inject(AXPMenuService);\n  private readonly homePageService = inject(AXPHomePageService);\n  private readonly sessionService = inject(AXPSessionService);\n  private readonly routeCacheRegistry = inject(AXPTabRouteCacheRegistry);\n  private readonly tabPreviewService = inject(AXPTabPreviewService);\n  private readonly unsavedChangesConfirm = inject(AXPUnsavedChangesConfirmService);\n  private readonly destroyRef = inject(DestroyRef);\n\n  //#endregion\n\n  //#region ---- State ----\n\n  private readonly navigationMode = signal<AXPNavigationMode>('simple');\n  private readonly maxOpenTabs = signal(5);\n  private readonly tabs = signal<AXPTabDescriptor[]>([]);\n  private readonly activeTabKey = signal<string | null>(null);\n  private suppressNavigationSync = false;\n\n  //#endregion\n\n  //#region ---- Computed ----\n\n  /** Effective mode: mobile always uses simple navigation. */\n  readonly effectiveMode = computed<AXPNavigationMode>(() => {\n    if (this.deviceService.isSmall()) {\n      return 'simple';\n    }\n    return this.navigationMode();\n  });\n\n  readonly isTabBarVisible = computed(() => this.effectiveMode() === 'tabular' && this.tabs().length > 0);\n\n  readonly tabList = this.tabs.asReadonly();\n  readonly activeKey = this.activeTabKey.asReadonly();\n\n  //#endregion\n\n  //#region ---- Lifecycle ----\n\n  constructor() {\n    void this.loadSettings();\n    this.bindRouterEvents();\n    this.bindSettingsChanges();\n    this.bindSessionChanges();\n    this.bindRouteCacheSync();\n  }\n\n  //#endregion\n\n  //#region ---- Public API ----\n\n  /** Navigates to a path, opening or activating a tab when tabular mode is active. */\n  async navigate(path: string, extras?: NavigationExtras): Promise<boolean> {\n    const normalizedPath = normalizeRouterUrl(path);\n\n    if (this.effectiveMode() === 'simple' || !axpIsTabEligibleUrl(normalizedPath)) {\n      return axpNavigateAppPath(this.router, normalizedPath, extras);\n    }\n\n    await this.openOrActivateTab(normalizedPath);\n    return true;\n  }\n\n  /** Opens a tab or activates an existing tab with the same key. */\n  async openOrActivateTab(url: string, title?: string): Promise<void> {\n    if (this.effectiveMode() === 'simple') {\n      await axpNavigateAppPath(this.router, url);\n      return;\n    }\n\n    const normalizedUrl = normalizeRouterUrl(url);\n    if (!axpIsTabEligibleUrl(normalizedUrl)) {\n      await axpNavigateAppPath(this.router, normalizedUrl);\n      return;\n    }\n\n    await this.ensureHomeTab();\n\n    if (this.isHomePageUrl(normalizedUrl)) {\n      await this.activateTabKey(AXP_HOME_TAB_KEY, normalizedUrl);\n      return;\n    }\n\n    const resolvedKey = axpResolveTabKey(this.router, normalizedUrl);\n    const existing = this.findTabForUrl(normalizedUrl);\n\n    if (existing) {\n      if (existing.key !== resolvedKey) {\n        this.migrateTabKey(existing.key, resolvedKey);\n      }\n      this.updateTabUrl(resolvedKey, normalizedUrl);\n      await this.activateTabKey(resolvedKey, normalizedUrl);\n      return;\n    }\n\n    // Navigate first so scoped tab keys (`data.tab`) resolve from the live route snapshot.\n    this.suppressNavigationSync = true;\n    try {\n      await axpNavigateAppPath(this.router, normalizedUrl);\n      const key = axpResolveTabKey(this.router);\n      const postNavExisting = this.findTabForUrl(normalizedUrl);\n\n      if (postNavExisting) {\n        if (postNavExisting.key !== key) {\n          this.migrateTabKey(postNavExisting.key, key);\n        }\n        this.updateTabUrl(key, normalizedUrl);\n        this.touchTab(key);\n        this.activeTabKey.set(key);\n        this.persistSession();\n        return;\n      }\n\n      this.insertTab(this.createTabDescriptor(normalizedUrl, title, key));\n      this.activeTabKey.set(key);\n      this.persistSession();\n    } finally {\n      this.suppressNavigationSync = false;\n    }\n  }\n\n  /**\n   * Activates a tab and navigates to its URL. The previously active page is detached and cached by\n   * the reuse strategy, so its state is preserved; this tab's cached instance is reattached when\n   * available instead of being re-rendered.\n   *\n   * @param suspendDeactivateGuard When true (default for tab switches), unsaved-changes prompts are\n   * skipped so switching tabs keeps a dirty page alive. Closing a tab passes false to keep the prompt.\n   */\n  async activateTabKey(key: string, urlOverride?: string, suspendDeactivateGuard = true): Promise<void> {\n    const tab = this.tabs().find((item) => item.key === key);\n    if (!tab) {\n      return;\n    }\n\n    const targetUrl = urlOverride ?? tab.url;\n    this.touchTab(key);\n    this.activeTabKey.set(key);\n    this.persistSession();\n\n    const navigate = async (): Promise<void> => {\n      this.suppressNavigationSync = true;\n      try {\n        await this.router.navigateByUrl(targetUrl);\n      } finally {\n        this.suppressNavigationSync = false;\n      }\n    };\n\n    if (suspendDeactivateGuard) {\n      await this.routeCacheRegistry.runWithSuspendedDeactivateGuards(navigate);\n      return;\n    }\n\n    await navigate();\n  }\n\n  /** Closes a tab and navigates to a neighbor when the active tab is closed. */\n  async closeTab(key: string): Promise<void> {\n    await this.closeTabs([key]);\n  }\n\n  /** Closes every closable tab except the given key (pinned tabs are kept). */\n  async closeOtherTabs(keepKey: string): Promise<void> {\n    const keys = this.tabs()\n      .filter((tab) => tab.closable && !tab.pinned && tab.key !== keepKey)\n      .map((tab) => tab.key);\n    await this.closeTabs(keys);\n  }\n\n  /** Closes all closable tabs (pinned tabs are kept). */\n  async closeAllTabs(): Promise<void> {\n    const keys = this.tabs()\n      .filter((tab) => tab.closable && !tab.pinned)\n      .map((tab) => tab.key);\n    await this.closeTabs(keys);\n  }\n\n  /** Toggles whether a tab stays pinned in the strip (home tab is always pinned). */\n  toggleTabPinned(key: string): void {\n    if (key === AXP_HOME_TAB_KEY) {\n      return;\n    }\n\n    this.tabs.update((items) => {\n      const updated = items.map((tab) => {\n        if (tab.key !== key) {\n          return tab;\n        }\n\n        const pinned = !tab.pinned;\n        return {\n          ...tab,\n          pinned,\n          closable: !pinned,\n        };\n      });\n\n      return this.normalizeTabOrder(updated);\n    });\n    this.persistSession();\n  }\n\n  /**\n   * Reorders tabs after drag-and-drop. Home stays first; pinned and unpinned tabs cannot cross groups.\n   */\n  reorderTabs(previousIndex: number, currentIndex: number): void {\n    if (previousIndex === currentIndex) {\n      return;\n    }\n\n    const items = this.tabs();\n    if (previousIndex < 0 || currentIndex < 0 || previousIndex >= items.length || currentIndex >= items.length) {\n      return;\n    }\n\n    const moving = items[previousIndex];\n    if (moving.key === AXP_HOME_TAB_KEY) {\n      return;\n    }\n\n    const lastPinnedIndex = this.getLastPinnedTabIndex(items);\n    let targetIndex = currentIndex;\n\n    if (moving.pinned) {\n      if (targetIndex === 0) {\n        return;\n      }\n      targetIndex = Math.max(1, Math.min(targetIndex, lastPinnedIndex));\n    } else {\n      const firstUnpinnedIndex = lastPinnedIndex + 1;\n      if (firstUnpinnedIndex >= items.length) {\n        return;\n      }\n      targetIndex = Math.max(firstUnpinnedIndex, Math.min(targetIndex, items.length - 1));\n    }\n\n    if (previousIndex === targetIndex) {\n      return;\n    }\n\n    const next = [...items];\n    const [removed] = next.splice(previousIndex, 1);\n    next.splice(targetIndex, 0, removed);\n    this.tabs.set(next);\n    this.persistSession();\n  }\n\n  /** Updates a tab title from the current page chrome (e.g. breadcrumb trail). */\n  syncTabTitle(key: string, titleOrSegments: string | string[]): void {\n    if (this.effectiveMode() === 'simple') {\n      return;\n    }\n\n    if (!this.tabs().some((tab) => tab.key === key)) {\n      return;\n    }\n\n    const segments = Array.isArray(titleOrSegments) ? titleOrSegments : undefined;\n    const title = (Array.isArray(titleOrSegments) ? axpJoinTabTitleSegments(titleOrSegments) : titleOrSegments).trim();\n    if (!title || this.isGenericHomeTitle(title)) {\n      return;\n    }\n\n    this.updateTabTitle(key, title, segments);\n  }\n\n  /** Updates a tab icon from the current page chrome or menu metadata. */\n  syncTabIcon(key: string, icon: string): void {\n    if (this.effectiveMode() === 'simple') {\n      return;\n    }\n\n    if (!this.tabs().some((tab) => tab.key === key)) {\n      return;\n    }\n\n    const normalized = icon.trim();\n    if (!normalized) {\n      return;\n    }\n\n    this.updateTabIcon(key, normalized);\n  }\n\n  //#endregion\n\n  //#region ---- Bulk Tab Close ----\n\n  /** Closes multiple tabs in one update; navigates once when the active tab is closed. */\n  private async closeTabs(keys: string[]): Promise<void> {\n    const uniqueKeys = [...new Set(keys)];\n    if (!uniqueKeys.length) {\n      return;\n    }\n\n    const closableKeySet = new Set(\n      uniqueKeys.filter((key) => {\n        const tab = this.tabs().find((item) => item.key === key);\n        return !!tab?.closable && !tab.pinned;\n      }),\n    );\n\n    if (!closableKeySet.size) {\n      return;\n    }\n\n    const activeKey = this.activeTabKey();\n    const backgroundKeys = [...closableKeySet].filter((key) => key !== activeKey);\n\n    for (const key of backgroundKeys) {\n      if (!(await this.confirmBackgroundTabClose(key))) {\n        closableKeySet.delete(key);\n      }\n    }\n\n    if (!closableKeySet.size) {\n      return;\n    }\n\n    const currentTabs = this.tabs();\n    const wasActiveClosed = !!activeKey && closableKeySet.has(activeKey);\n    const closedActiveIndex = wasActiveClosed ? currentTabs.findIndex((item) => item.key === activeKey) : -1;\n    const nextTabs = currentTabs.filter((item) => !closableKeySet.has(item.key));\n\n    if (wasActiveClosed) {\n      const navigated = await this.navigateAwayBeforeClosingActiveTab(closedActiveIndex, nextTabs);\n      if (!navigated) {\n        return;\n      }\n    }\n\n    this.tabs.set(nextTabs);\n    this.tabPreviewService.clearPreviews(closableKeySet);\n    this.persistSession();\n  }\n\n  //#endregion\n\n  //#region ---- Tab Close Helpers ----\n\n  /**\n   * Prompts before closing a cached background tab. Uses the page's {@link AXPTabCloseConfirm}\n   * hook when available, otherwise falls back to the tab preview dirty flag.\n   */\n  private async confirmBackgroundTabClose(key: string): Promise<boolean> {\n    const instance = this.routeCacheRegistry.getComponentInstance<AXPTabCloseConfirm>(key);\n    if (instance && typeof instance.onBeforeTabClose === 'function') {\n      return instance.onBeforeTabClose();\n    }\n\n    return this.unsavedChangesConfirm.confirmIfDirty(this.tabPreviewService.isTabDirty(key), {\n      approveLeaveOnConfirm: false,\n    });\n  }\n\n  //#endregion\n\n  //#region ---- Tab Close Navigation ----\n\n  /**\n   * Navigates away from the active tab before it is removed so canDeactivate runs while the tab is still visible.\n   * Returns false when navigation was cancelled (e.g. unsaved-changes confirmation declined).\n   */\n  private async navigateAwayBeforeClosingActiveTab(\n    closedActiveIndex: number,\n    remainingTabs: AXPTabDescriptor[],\n  ): Promise<boolean> {\n    const fallbackIndex = this.resolveFallbackTabIndex(closedActiveIndex, remainingTabs);\n    const fallback = fallbackIndex >= 0 ? remainingTabs[fallbackIndex] : undefined;\n\n    let targetKey: string;\n    let targetUrl: string;\n\n    if (fallback) {\n      targetKey = fallback.key;\n      targetUrl = fallback.url;\n    } else {\n      await this.ensureHomeTab();\n      const home = this.tabs().find((item) => item.key === AXP_HOME_TAB_KEY);\n      if (!home) {\n        return false;\n      }\n      targetKey = home.key;\n      targetUrl = home.url;\n    }\n\n    this.suppressNavigationSync = true;\n    try {\n      const navigated = await this.router.navigateByUrl(targetUrl);\n      if (!navigated) {\n        return false;\n      }\n    } finally {\n      this.suppressNavigationSync = false;\n    }\n\n    this.activeTabKey.set(targetKey);\n    this.touchTab(targetKey);\n    return true;\n  }\n\n  /** Prefers the tab to the right after removal, then the tab to the left (browser-like). */\n  private resolveFallbackTabIndex(closedIndex: number, remainingTabs: AXPTabDescriptor[]): number {\n    if (!remainingTabs.length) {\n      return -1;\n    }\n\n    if (closedIndex < remainingTabs.length) {\n      return closedIndex;\n    }\n\n    return closedIndex - 1;\n  }\n\n  //#endregion\n\n  //#region ---- Route Cache Sync ----\n\n  /**\n   * Keeps the route cache registry aligned with the current navigation mode and the set of open\n   * tabs. Cached page instances for closed/evicted tabs are destroyed by the registry.\n   */\n  private bindRouteCacheSync(): void {\n    effect(() => {\n      this.routeCacheRegistry.setEnabled(this.effectiveMode() === 'tabular');\n      this.routeCacheRegistry.syncOpenKeys(\n        this.tabs().map((tab) => tab.key),\n        this.tabs().map((tab) => tab.url),\n      );\n    });\n  }\n\n  //#endregion\n\n  //#region ---- Router Sync ----\n\n  private bindRouterEvents(): void {\n    this.router.events\n      .pipe(\n        filter((event) => event instanceof NavigationEnd),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe((event: NavigationEnd) => {\n        void this.handleNavigationEnd(event.urlAfterRedirects);\n      });\n  }\n\n  private async handleNavigationEnd(url: string): Promise<void> {\n    if (this.suppressNavigationSync) {\n      return;\n    }\n\n    if (this.effectiveMode() === 'simple') {\n      return;\n    }\n\n    const normalizedUrl = normalizeRouterUrl(url);\n    if (!axpIsTabEligibleUrl(normalizedUrl)) {\n      return;\n    }\n\n    await this.ensureHomeTab();\n\n    if (this.isHomePageUrl(normalizedUrl)) {\n      this.activateHomeTabForUrl(normalizedUrl);\n      return;\n    }\n\n    const key = axpResolveTabKey(this.router, normalizedUrl);\n    const existing = this.findTabForUrl(normalizedUrl);\n\n    if (existing) {\n      if (existing.key !== key) {\n        this.migrateTabKey(existing.key, key);\n      }\n      this.updateTabUrl(key, normalizedUrl);\n      this.touchTab(key);\n      this.activeTabKey.set(key);\n      this.persistSession();\n      return;\n    }\n\n    this.insertTab(this.createTabDescriptor(normalizedUrl, undefined, key));\n    this.activeTabKey.set(key);\n    this.persistSession();\n  }\n\n  //#endregion\n\n  //#region ---- Settings ----\n\n  private async loadSettings(): Promise<void> {\n    const [mode, maxTabs] = await Promise.all([\n      this.settingsService.get<AXPNavigationMode>(AXPCommonSettings.NavigationMode),\n      this.settingsService.get<number>(AXPCommonSettings.MaxOpenTabs),\n    ]);\n\n    this.navigationMode.set(mode === 'tabular' ? 'tabular' : 'simple');\n    this.maxOpenTabs.set(this.normalizeMaxTabs(maxTabs));\n    await this.restoreSessionIfNeeded();\n  }\n\n  private bindSettingsChanges(): void {\n    this.settingsService.onChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n      if (event.keys.includes(AXPCommonSettings.NavigationMode)) {\n        const raw = event.values[AXPCommonSettings.NavigationMode] as AXPNavigationMode;\n        const newMode: AXPNavigationMode = raw === 'tabular' ? 'tabular' : 'simple';\n        if (newMode !== this.navigationMode()) {\n          this.navigationMode.set(newMode);\n          if (this.effectiveMode() === 'simple') {\n            this.clearSession();\n          } else {\n            void this.ensureHomeTab().then(() => this.syncCurrentRouteAsTab());\n          }\n        }\n      }\n\n      if (event.keys.includes(AXPCommonSettings.MaxOpenTabs)) {\n        this.maxOpenTabs.set(this.normalizeMaxTabs(event.values[AXPCommonSettings.MaxOpenTabs] as number));\n        this.enforceMaxTabs();\n        this.persistSession();\n      }\n    });\n  }\n\n  private bindSessionChanges(): void {\n    this.sessionService.user$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      void this.restoreSessionIfNeeded();\n    });\n  }\n\n  //#endregion\n\n  //#region ---- Tab Management ----\n\n  private async ensureHomeTab(): Promise<void> {\n    const homePath = this.resolveHomePath();\n    if (!homePath) {\n      return;\n    }\n\n    const homeUrl = normalizeRouterUrl(homePath);\n    const homeKey = AXP_HOME_TAB_KEY;\n    const existing = this.tabs().find((tab) => tab.key === homeKey);\n\n    if (existing) {\n      this.tabs.update((items) =>\n        items.map((tab) =>\n          tab.key === homeKey\n            ? {\n                ...tab,\n                url: homeUrl,\n                title: this.isGenericHomeTitle(tab.title) ? this.resolveHomeTitle() : tab.title,\n                icon: this.resolveTabIcon(homeUrl, 'fa-light fa-house'),\n              }\n            : tab,\n        ),\n      );\n      return;\n    }\n\n    const now = Date.now();\n    const homeTab: AXPTabDescriptor = {\n      key: homeKey,\n      url: homeUrl,\n      title: this.resolveHomeTitle(),\n      icon: this.resolveTabIcon(homeUrl, 'fa-light fa-house'),\n      pinned: true,\n      closable: false,\n      openedAt: now,\n      lastActivatedAt: now,\n    };\n\n    this.tabs.update((items) => this.normalizeTabOrder([homeTab, ...items.filter((tab) => tab.key !== homeKey)]));\n  }\n\n  private insertTab(tab: AXPTabDescriptor): void {\n    if (this.isHomePageUrl(tab.url)) {\n      this.activateHomeTabForUrl(tab.url);\n      return;\n    }\n\n    this.tabs.update((items) => {\n      const withoutDuplicate = items.filter((item) => {\n        if (item.key === tab.key) {\n          return false;\n        }\n\n        return axpResolveTabKey(this.router, item.url) !== tab.key;\n      });\n      return this.normalizeTabOrder([...withoutDuplicate, tab]);\n    });\n    this.enforceMaxTabs();\n  }\n\n  /** Home first; preserves session order for the remaining tabs. */\n  private ensureHomeTabFirst(items: AXPTabDescriptor[]): AXPTabDescriptor[] {\n    const home = items.find((tab) => tab.key === AXP_HOME_TAB_KEY);\n    const others = items.filter((tab) => tab.key !== AXP_HOME_TAB_KEY);\n    return home ? [home, ...others] : items;\n  }\n\n  private getLastPinnedTabIndex(items: ReadonlyArray<AXPTabDescriptor>): number {\n    for (let index = items.length - 1; index >= 0; index -= 1) {\n      if (items[index]?.pinned) {\n        return index;\n      }\n    }\n\n    return 0;\n  }\n\n  /** Home first, then other pinned tabs, then unpinned tabs (stable by openedAt within each group). */\n  private normalizeTabOrder(items: AXPTabDescriptor[]): AXPTabDescriptor[] {\n    const home = items.find((tab) => tab.key === AXP_HOME_TAB_KEY);\n    const pinned = items.filter((tab) => tab.key !== AXP_HOME_TAB_KEY && tab.pinned);\n    const unpinned = items.filter((tab) => tab.key !== AXP_HOME_TAB_KEY && !tab.pinned);\n    const byOpenedAt = (a: AXPTabDescriptor, b: AXPTabDescriptor) => a.openedAt - b.openedAt;\n\n    return [...(home ? [home] : []), ...pinned.sort(byOpenedAt), ...unpinned.sort(byOpenedAt)];\n  }\n\n  private enforceMaxTabs(): void {\n    const limit = this.maxOpenTabs();\n    let current = this.tabs();\n\n    while (current.length > limit) {\n      const evictionCandidate = [...current]\n        .filter((tab) => tab.closable && !tab.pinned && tab.key !== this.activeTabKey())\n        .filter((tab) => !this.tabPreviewService.isTabDirty(tab.key))\n        .sort((a, b) => a.lastActivatedAt - b.lastActivatedAt)[0];\n\n      if (!evictionCandidate) {\n        break;\n      }\n\n      current = current.filter((tab) => tab.key !== evictionCandidate.key);\n    }\n\n    this.tabs.set(current);\n  }\n\n  private createTabDescriptor(url: string, title?: string, keyOverride?: string): AXPTabDescriptor {\n    const now = Date.now();\n    const key = keyOverride ?? axpResolveTabKey(this.router, url);\n    return {\n      key,\n      url,\n      title: title ?? this.resolveTabTitle(url),\n      icon: this.resolveTabIcon(url),\n      pinned: false,\n      closable: true,\n      openedAt: now,\n      lastActivatedAt: now,\n    };\n  }\n\n  /** Finds a tab by scoped key or legacy full-path key for the same URL. */\n  private findTabForUrl(url: string): AXPTabDescriptor | undefined {\n    if (this.isHomePageUrl(url)) {\n      return this.tabs().find((tab) => tab.key === AXP_HOME_TAB_KEY);\n    }\n\n    const resolvedKey = axpResolveTabKey(this.router, url);\n    return this.tabs().find(\n      (tab) =>\n        tab.key !== AXP_HOME_TAB_KEY &&\n        (tab.key === resolvedKey || axpResolveTabKey(this.router, tab.url) === resolvedKey),\n    );\n  }\n\n  /** True when the URL is the configured application home page (e.g. dashboard). */\n  private isHomePageUrl(url: string): boolean {\n    const homeUrl = this.resolveHomeUrl();\n    if (!homeUrl) {\n      return false;\n    }\n\n    return normalizeRouterUrl(url) === homeUrl;\n  }\n\n  private resolveHomeUrl(): string | null {\n    const homePath = this.resolveHomePath();\n    if (!homePath) {\n      return null;\n    }\n\n    return normalizeRouterUrl(homePath);\n  }\n\n  /** Activates the pinned home tab for a home-page URL instead of opening a duplicate tab. */\n  private activateHomeTabForUrl(url: string): void {\n    this.updateTabUrl(AXP_HOME_TAB_KEY, normalizeRouterUrl(url));\n    this.touchTab(AXP_HOME_TAB_KEY);\n    this.activeTabKey.set(AXP_HOME_TAB_KEY);\n    this.persistSession();\n  }\n\n  /** Drops non-home tabs that duplicate the home page URL after session restore. */\n  private removeDuplicateHomeUrlTabs(tabs: AXPTabDescriptor[]): AXPTabDescriptor[] {\n    const homeUrl = this.resolveHomeUrl();\n    if (!homeUrl) {\n      return tabs;\n    }\n\n    return tabs.filter((tab) => tab.key === AXP_HOME_TAB_KEY || normalizeRouterUrl(tab.url) !== homeUrl);\n  }\n\n  /** Rewrites a tab key when route-scope resolution changes (e.g. profile sub-routes). */\n  private migrateTabKey(fromKey: string, toKey: string): void {\n    if (fromKey === toKey) {\n      return;\n    }\n\n    if (this.activeTabKey() === fromKey) {\n      this.activeTabKey.set(toKey);\n    }\n\n    this.tabs.update((items) => {\n      const tab = items.find((item) => item.key === fromKey);\n      if (!tab) {\n        return items;\n      }\n\n      const without = items.filter((item) => item.key !== fromKey && item.key !== toKey);\n      return this.normalizeTabOrder([...without, { ...tab, key: toKey }]);\n    });\n  }\n\n  /** Collapses restored tabs that share the same scoped route key. */\n  private normalizeRestoredTabKeys(tabs: AXPTabDescriptor[]): AXPTabDescriptor[] {\n    const byResolvedKey = new Map<string, AXPTabDescriptor>();\n\n    for (const tab of tabs) {\n      if (tab.key === AXP_HOME_TAB_KEY) {\n        byResolvedKey.set(AXP_HOME_TAB_KEY, tab);\n        continue;\n      }\n\n      const resolvedKey = axpResolveTabKey(this.router, tab.url);\n      const normalized = { ...tab, key: resolvedKey };\n      const existing = byResolvedKey.get(resolvedKey);\n\n      if (!existing || normalized.lastActivatedAt > existing.lastActivatedAt) {\n        byResolvedKey.set(resolvedKey, normalized);\n      }\n    }\n\n    return [...byResolvedKey.values()];\n  }\n\n  private updateTabUrl(key: string, url: string): void {\n    this.tabs.update((items) => items.map((tab) => (tab.key === key ? { ...tab, url } : tab)));\n  }\n\n  private updateTabTitle(key: string, title: string, titleSegments?: string[]): void {\n    this.tabs.update((items) =>\n      items.map((tab) => {\n        if (tab.key !== key) {\n          return tab;\n        }\n\n        const segmentsUnchanged =\n          tab.titleSegments === titleSegments ||\n          (tab.titleSegments?.length === titleSegments?.length &&\n            tab.titleSegments?.every((segment, index) => segment === titleSegments?.[index]));\n\n        if (tab.title === title && segmentsUnchanged) {\n          return tab;\n        }\n\n        return { ...tab, title, titleSegments };\n      }),\n    );\n    this.persistSession();\n  }\n\n  private updateTabIcon(key: string, icon: string): void {\n    this.tabs.update((items) => items.map((tab) => (tab.key === key && tab.icon !== icon ? { ...tab, icon } : tab)));\n    this.persistSession();\n  }\n\n  private touchTab(key: string): void {\n    const now = Date.now();\n    this.tabs.update((items) => items.map((tab) => (tab.key === key ? { ...tab, lastActivatedAt: now } : tab)));\n  }\n\n  private resolveTabTitle(url: string, fallback?: string): string {\n    const match = axpFindMenuItemByRoute(this.menuService.items(), url);\n    if (match?.item.text) {\n      return match.item.text;\n    }\n    return fallback ?? axpFallbackTabTitle(url);\n  }\n\n  private resolveTabIcon(url: string, fallback = 'fa-light fa-window'): string {\n    const match = axpFindMenuItemByRoute(this.menuService.items(), url);\n    if (match?.item.icon?.trim()) {\n      return match.item.icon.trim();\n    }\n    return fallback;\n  }\n\n  private resolveHomePath(): string {\n    const current = this.homePageService.getCurrent();\n    return current.path ? normalizeRouterUrl(current.path) : '';\n  }\n\n  private resolveHomeTitle(): string {\n    const current = this.homePageService.getCurrent();\n    return current.title || 'Home';\n  }\n\n  private isGenericHomeTitle(title: string): boolean {\n    if (title === '@general:terms.interface.navigation.home') {\n      return true;\n    }\n\n    const homeTitle = this.resolveHomeTitle().trim();\n    return title === homeTitle;\n  }\n\n  private async syncCurrentRouteAsTab(): Promise<void> {\n    if (this.effectiveMode() === 'simple') {\n      return;\n    }\n\n    await this.ensureHomeTab();\n    await this.handleNavigationEnd(this.router.url);\n  }\n\n  private normalizeMaxTabs(value: unknown): number {\n    const parsed = Number(value);\n    if (!Number.isFinite(parsed)) {\n      return 5;\n    }\n    return Math.min(20, Math.max(2, Math.round(parsed)));\n  }\n\n  //#endregion\n\n  //#region ---- Session Persistence ----\n\n  private sessionStorageKey(): string | null {\n    const userId = this.sessionService.user?.id;\n    if (!userId) {\n      return null;\n    }\n    return `${SESSION_STORAGE_PREFIX}(${userId})`;\n  }\n\n  private persistSession(): void {\n    const key = this.sessionStorageKey();\n    if (!key || this.effectiveMode() === 'simple') {\n      return;\n    }\n\n    const payload: AXPTabSessionState = {\n      tabs: cloneDeep(this.tabs()),\n      activeTabKey: this.activeTabKey(),\n    };\n    sessionStorage.setItem(key, JSON.stringify(payload));\n  }\n\n  private clearSession(): void {\n    const key = this.sessionStorageKey();\n    if (key) {\n      sessionStorage.removeItem(key);\n    }\n    this.tabs.set([]);\n    this.activeTabKey.set(null);\n    this.tabPreviewService.clearAll();\n  }\n\n  private async restoreSessionIfNeeded(): Promise<void> {\n    if (this.effectiveMode() === 'simple') {\n      return;\n    }\n\n    const storageKey = this.sessionStorageKey();\n    if (!storageKey) {\n      await this.ensureHomeTab();\n      await this.syncCurrentRouteAsTab();\n      return;\n    }\n\n    const raw = sessionStorage.getItem(storageKey);\n    if (!raw) {\n      await this.ensureHomeTab();\n      await this.syncCurrentRouteAsTab();\n      return;\n    }\n\n    try {\n      const parsed = JSON.parse(raw) as AXPTabSessionState;\n      const restoredTabs = this.removeDuplicateHomeUrlTabs(\n        this.normalizeRestoredTabKeys(defaultTo(parsed.tabs, []).filter((tab) => tab?.key && tab?.url)),\n      );\n      this.tabs.set(this.ensureHomeTabFirst(restoredTabs));\n      await this.ensureHomeTab();\n\n      const activeKey = parsed.activeTabKey ?? this.tabs()[this.tabs().length - 1]?.key ?? AXP_HOME_TAB_KEY;\n      this.activeTabKey.set(activeKey);\n\n      const activeTab = this.tabs().find((tab) => tab.key === activeKey);\n      if (activeTab && normalizeRouterUrl(this.router.url) !== normalizeRouterUrl(activeTab.url)) {\n        this.suppressNavigationSync = true;\n        try {\n          await this.router.navigateByUrl(activeTab.url);\n        } finally {\n          this.suppressNavigationSync = false;\n        }\n      }\n    } catch {\n      await this.ensureHomeTab();\n      await this.syncCurrentRouteAsTab();\n    }\n  }\n\n  //#endregion\n}\n","import { DOCUMENT } from '@angular/common';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { DestroyRef, Injectable, effect, inject, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { AXP_PLATFORM_CONFIG_TOKEN } from '../configs/app.config';\nimport { axpFindMenuItemByRoute } from '../layout/menu/menu-route-matcher';\nimport { AXPMenuService } from '../layout/menu/menu.service';\nimport { axpResolveTabKey } from '../tab-navigation/tab-route-resolver';\nimport { AXPTabNavigationService } from '../tab-navigation/tab-navigation.service';\nimport type { AXPNavigationMode } from '../tab-navigation/tab-navigation.types';\n\ninterface AXPSimpleModePageTitleState {\n  routeKey: string;\n  title: string;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPBrowserTitleService {\n  //#region ---- Services & Dependencies ----\n\n  private readonly document = inject(DOCUMENT);\n  private readonly translateService = inject(AXTranslationService);\n  private readonly tabNavigation = inject(AXPTabNavigationService);\n  private readonly menuService = inject(AXPMenuService);\n  private readonly sessionService = inject(AXPSessionService);\n  private readonly platformConfig = inject(AXP_PLATFORM_CONFIG_TOKEN);\n  private readonly router = inject(Router);\n  private readonly destroyRef = inject(DestroyRef);\n\n  //#endregion\n\n  //#region ---- State ----\n\n  private readonly simpleModePageTitle = signal<AXPSimpleModePageTitleState | null>(null);\n  private readonly localeRevision = signal(0);\n  private readonly sessionRevision = signal(0);\n  private readonly routeRevision = signal(0);\n\n  //#endregion\n\n  //#region ---- Lifecycle ----\n\n  constructor() {\n    this.translateService.langChanges$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.localeRevision.update((value) => value + 1);\n    });\n\n    this.sessionService.application$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.sessionRevision.update((value) => value + 1);\n    });\n\n    this.router.events\n      .pipe(\n        filter((event) => event instanceof NavigationEnd),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe(() => {\n        this.routeRevision.update((value) => value + 1);\n      });\n\n    effect(() => {\n      this.localeRevision();\n      this.sessionRevision();\n      this.routeRevision();\n      const mode = this.tabNavigation.effectiveMode();\n      const simpleModePageTitle = this.simpleModePageTitle();\n\n      if (mode === 'tabular') {\n        const activeKey = this.tabNavigation.activeKey();\n        const tabs = this.tabNavigation.tabList();\n        untracked(() => {\n          void this.syncDocumentTitle(mode, activeKey, tabs, simpleModePageTitle);\n        });\n        return;\n      }\n\n      untracked(() => {\n        void this.syncDocumentTitle(mode, null, [], simpleModePageTitle);\n      });\n    });\n  }\n\n  //#endregion\n\n  //#region ---- Public API ----\n\n  /** Publishes the resolved page title for the given route key (ignored in tabular mode). */\n  setSimpleModePageTitle(title: string | null, routeKey: string): void {\n    if (!routeKey.trim()) {\n      return;\n    }\n\n    if (!title?.trim()) {\n      const current = this.simpleModePageTitle();\n      if (current?.routeKey === routeKey) {\n        this.simpleModePageTitle.set(null);\n      }\n      return;\n    }\n\n    this.simpleModePageTitle.set({\n      routeKey: routeKey.trim(),\n      title: title.trim(),\n    });\n  }\n\n  //#endregion\n\n  //#region ---- Title Sync ----\n\n  private async syncDocumentTitle(\n    mode: AXPNavigationMode,\n    activeTabKey: string | null,\n    tabs: ReturnType<AXPTabNavigationService['tabList']>,\n    simpleModePageTitle: AXPSimpleModePageTitleState | null,\n  ): Promise<void> {\n    const routeTitle =\n      mode === 'tabular'\n        ? await this.resolveTabularRouteTitle(activeTabKey, tabs)\n        : await this.resolveSimpleRouteTitle(simpleModePageTitle);\n\n    const appTitle = await this.resolveApplicationTitle();\n    const nextTitle = this.buildDocumentTitle(routeTitle, appTitle);\n\n    if (this.document?.title !== nextTitle) {\n      this.document.title = nextTitle;\n    }\n  }\n\n  private async resolveTabularRouteTitle(\n    activeTabKey: string | null,\n    tabs: ReturnType<AXPTabNavigationService['tabList']>,\n  ): Promise<string | null> {\n    if (!activeTabKey) {\n      return null;\n    }\n\n    const tab = tabs.find((item) => item.key === activeTabKey);\n    if (!tab?.title?.trim()) {\n      return null;\n    }\n\n    return this.resolveLocalizedText(tab.title);\n  }\n\n  private async resolveSimpleRouteTitle(\n    simpleModePageTitle: AXPSimpleModePageTitleState | null,\n  ): Promise<string | null> {\n    const currentRouteKey = axpResolveTabKey(this.router);\n    if (simpleModePageTitle?.routeKey === currentRouteKey && simpleModePageTitle.title) {\n      return simpleModePageTitle.title;\n    }\n\n    return this.resolveMenuRouteTitle(this.router.url);\n  }\n\n  private async resolveMenuRouteTitle(url: string): Promise<string | null> {\n    const match = axpFindMenuItemByRoute(this.menuService.items(), url);\n    if (!match?.item.text?.trim()) {\n      return null;\n    }\n\n    return this.resolveLocalizedText(match.item.text);\n  }\n\n  private async resolveApplicationTitle(): Promise<string> {\n    const application = this.sessionService.application;\n    const sessionTitle = application?.title?.trim() || application?.name?.trim() || '';\n    if (sessionTitle) {\n      return (await this.resolveLocalizedText(sessionTitle)) ?? sessionTitle;\n    }\n\n    const platformTitle = this.platformConfig.title?.trim() || '';\n    if (!platformTitle) {\n      return '';\n    }\n\n    return (await this.resolveLocalizedText(platformTitle)) ?? platformTitle;\n  }\n\n  private async resolveLocalizedText(value: string): Promise<string | null> {\n    const trimmed = value.trim();\n    if (!trimmed) {\n      return null;\n    }\n\n    if (trimmed.startsWith('@')) {\n      return (await this.translateService.translateAsync(trimmed)) || trimmed;\n    }\n\n    return trimmed;\n  }\n\n  private buildDocumentTitle(routeTitle: string | null, appTitle: string): string {\n    const route = routeTitle?.trim();\n    const app = appTitle.trim();\n\n    if (route && app) {\n      return `${route} | ${app}`;\n    }\n\n    return route || app;\n  }\n\n  //#endregion\n}\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","/** Thrown when a requested platform resource cannot be resolved. */\nexport class AXPNotFoundError extends Error {\n  constructor(message = 'Resource not found') {\n    super(message);\n    this.name = 'AXPNotFoundError';\n  }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { RedirectCommand, Route, Router, ROUTES } from '@angular/router';\n\n/** Canonical route path for the platform 404 page. */\nexport const AXP_NOT_FOUND_ROUTE = '/error/404';\n\n/**\n * Catch-all route that redirects unknown URLs to the platform 404 page.\n * Register this as the **last** route source in the application (after all app and module routes).\n */\nexport const AXP_NOT_FOUND_CATCH_ALL_ROUTE: Route = {\n  path: '**',\n  redirectTo: AXP_NOT_FOUND_ROUTE,\n};\n\n/**\n * Registers the platform catch-all 404 route.\n * Must be the last `ROUTES` provider in `app.config` so custom app routes are matched first.\n */\nexport function AXPNotFoundCatchAllRoute(): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    {\n      provide: ROUTES,\n      multi: true,\n      useValue: [AXP_NOT_FOUND_CATCH_ALL_ROUTE],\n    },\n  ]);\n}\n\n/**\n * Returns true when an entity byKey query did not resolve a record.\n */\nexport function axpIsEntityRecordNotFound(data: unknown): boolean {\n  return data == null;\n}\n\n/**\n * Creates an Angular redirect command to the platform 404 page.\n */\nexport function axpRedirectToNotFound(router: Router = inject(Router)): RedirectCommand {\n  return new RedirectCommand(router.parseUrl(AXP_NOT_FOUND_ROUTE));\n}\n","import { inject } from '@angular/core';\nimport { RedirectCommand, Router } from '@angular/router';\n\n/** Canonical route path for the platform 401 page. */\nexport const AXP_UNAUTHORIZED_ROUTE = '/error/401';\n\n/**\n * Creates an Angular redirect command to the platform 401 page.\n */\nexport function axpRedirectToUnauthorized(router: Router = inject(Router)): RedirectCommand {\n  return new RedirectCommand(router.parseUrl(AXP_UNAUTHORIZED_ROUTE));\n}\n","//#region ---- Imports ----\n\nimport { AXFormatOptions, AXFormatter } from '@acorex/core/format';\nimport { AXTranslationService, translateSync } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport { isNil, isObject, isString } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXPTranslateFormatterOptions extends AXFormatOptions {\n  scope?: string;\n  lang?: string;\n  params?: Record<string, unknown>;\n}\n\n//#endregion\n\n/**\n * Platform formatter for display text: resolves ML objects, i18n keys (`@scope:key`), and primitives.\n * Register via {@link AXPCommonModule} (auto) or `AXFormatModule.forRoot({ formatters: [AXPTranslateFormatter] })`.\n */\n@Injectable()\nexport class AXPTranslateFormatter implements AXFormatter {\n  //#region ---- Services & Dependencies ----\n\n  private readonly translationService = inject(AXTranslationService);\n\n  //#endregion\n\n  //#region ---- AXFormatter ----\n\n  get name(): string {\n    return 'translate';\n  }\n\n  format(value: unknown, options?: AXPTranslateFormatterOptions | string): string {\n    if (isNil(value) || value === '') {\n      return '';\n    }\n\n    if (isObject(value) && !Array.isArray(value) && !(value instanceof Date)) {\n      const resolved = this.translationService.resolve(value as never);\n      return resolved?.trim() ?? '';\n    }\n\n    if (isString(value)) {\n      const text = value.trim();\n      if (!text) {\n        return '';\n      }\n      if (text.startsWith('@')) {\n        const translateOptions = typeof options === 'object' ? options : undefined;\n        const translated = translateSync(text, translateOptions);\n        return translated?.trim() ?? text;\n      }\n      return text;\n    }\n\n    if (typeof value === 'number' || typeof value === 'boolean') {\n      return String(value);\n    }\n\n    if (value instanceof Date) {\n      return value.toISOString();\n    }\n\n    return String(value).trim();\n  }\n\n  //#endregion\n}\n","import { Injectable } from \"@angular/core\";\nimport { AXPFileManyStorageInfo, AXPFileStorageCreateRequest, AXPFileStorageFindRequest, AXPFileStorageInfo, AXPFileStorageUpdateRequest } from '@acorex/platform/contracts';\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","/** Trace namespace for file-storage expression evaluator scope diagnostics. */\nexport const FILE_STORAGE_TRACE_NS = 'file-storage';\n","import {\n  AXPDebugService,\n  AXPExpressionEvaluatorScopeProvider,\n  AXPExpressionEvaluatorScopeProviderContext,\n} from '@acorex/platform/core';\nimport { inject } from '@angular/core';\nimport { FILE_STORAGE_TRACE_NS } from './file-storage-trace.constants';\nimport { AXPFileStorageService } from './file-storage.service';\n\nexport class AXPFileStorageEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n  private readonly fileStorageService = inject(AXPFileStorageService);\n  private readonly debug = inject(AXPDebugService);\n\n  async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n    this.debug.trace(FILE_STORAGE_TRACE_NS, 'expression-evaluator-scope', 'Scope provider registered');\n\n    context.addScope('fileStorage', {\n      getFiles: async (entityType: string, entityId: string) => {\n        this.debug.trace(FILE_STORAGE_TRACE_NS, 'getFiles', 'Loading files for entity', () => ({\n          entityType,\n          entityId,\n        }));\n\n        const filesFromService = await this.fileStorageService.find({\n          category: '',\n          refId: entityId,\n          refType: entityType,\n        });\n        const mappedFiles = filesFromService?.map((file) => ({\n          id: file.id ?? '',\n          name: file.name,\n          size: file.size,\n          status: 'remote',\n          source: {\n            kind: 'fileId',\n            value: file.fileId,\n          },\n        }));\n\n        return mappedFiles;\n      },\n    });\n  }\n}\n","//#region ---- Imports ----\n\nimport { AXPKeyboardShortcutHelpEntry } from '@acorex/platform/contracts';\nimport { AXKBDComponent, AXKBDItemComponent } from '@acorex/components/kbd';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPKeyboardShortcutRegistry, chordToKbdItemKeys } from '@acorex/platform/core';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, ViewEncapsulation } from '@angular/core';\n\n//#endregion\n\ninterface AXPKeyboardShortcutHelpGroup {\n  label: string;\n  items: AXPKeyboardShortcutHelpEntry[];\n}\n\n@Component({\n  selector: 'axp-keyboard-shortcuts-help',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [AsyncPipe, AXKBDComponent, AXKBDItemComponent, AXTranslationModule],\n  styleUrls: ['./keyboard-shortcuts-help.component.scss'],\n  template: `\n    <div class=\"axp-keyboard-shortcuts-help\">\n      <div class=\"__body\">\n        @if (groups().length === 0) {\n          <p class=\"__empty\">\n            {{ '@general:keyboard-shortcuts.no-shortcuts' | translate | async }}\n          </p>\n        } @else {\n          @for (group of groups(); track group.label) {\n            <section class=\"__section\">\n              <h3 class=\"__heading\">\n                {{ group.label | translate | async }}\n              </h3>\n              <div class=\"__list\">\n                @for (item of group.items; track item.registrationId + item.bindingTitle) {\n                  <div class=\"__row\">\n                    <span class=\"__action\">\n                      {{ item.bindingTitle | translate | async }}\n                    </span>\n                    <div class=\"__keys\">\n                      @for (chord of item.displayChords; track chord; let last = $last) {\n                        <ax-kbd look=\"solid\">\n                          <ax-kbd-item [keys]=\"chordToKbdKeys(chord)\" join=\"split\" look=\"solid\"></ax-kbd-item>\n                        </ax-kbd>\n                        @if (!last) {\n                          <span class=\"__or\">\n                            {{ '@general:keyboard-shortcuts.or' | translate | async }}\n                          </span>\n                        }\n                      }\n                    </div>\n                  </div>\n                }\n              </div>\n            </section>\n          }\n        }\n      </div>\n    </div>\n  `,\n})\nexport class AXPKeyboardShortcutsHelpComponent {\n  //#region ---- Services & Dependencies ----\n\n  private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n\n  //#endregion\n\n  //#region ---- Computed Properties ----\n\n  protected readonly groups = computed((): AXPKeyboardShortcutHelpGroup[] => {\n    const grouped = new Map<string, AXPKeyboardShortcutHelpEntry[]>();\n\n    for (const entry of this.shortcutRegistry.helpEntries()) {\n      const label = entry.group ?? entry.scope ?? '@general:keyboard-shortcuts.groups.general';\n      const bucket = grouped.get(label) ?? [];\n      bucket.push(entry);\n      grouped.set(label, bucket);\n    }\n\n    return [...grouped.entries()].map(([label, items]) => ({ label, items }));\n  });\n\n  //#endregion\n\n  //#region ---- Utility Methods ----\n\n  protected chordToKbdKeys(chord: string): string[] {\n    return chordToKbdItemKeys(chord, { skipDirectionResolve: true });\n  }\n\n  //#endregion\n}\n","//#region ---- Imports ----\n\nimport { DOCUMENT } from '@angular/common';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPKeyboardShortcutRegistry, hasForegroundOverlayLayer } from '@acorex/platform/core';\nimport { Injectable, inject } from '@angular/core';\n\n//#endregion\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPKeyboardShortcutsHelpService {\n  //#region ---- Services & Dependencies ----\n\n  private readonly popupService = inject(AXPopupService);\n  private readonly translationService = inject(AXTranslationService);\n  private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n  private readonly document = inject(DOCUMENT);\n\n  //#endregion\n\n  //#region ---- State ----\n\n  /** In-flight help popup session (open until the popup closes). */\n  private activeShow: Promise<void> | null = null;\n\n  //#endregion\n\n  //#region ---- Lifecycle ----\n\n  constructor() {\n    this.shortcutRegistry.setHelpDialogHandler(() => this.show());\n  }\n\n  //#endregion\n\n  //#region ---- Public Methods ----\n\n  /**\n   * Opens the keyboard shortcuts help popup, or no-ops when it is already open.\n   */\n  show(): Promise<void> {\n    if (this.activeShow) {\n      return this.activeShow;\n    }\n\n    if (typeof this.document !== 'undefined' && hasForegroundOverlayLayer(this.document)) {\n      return Promise.resolve();\n    }\n\n    this.activeShow = this.openHelpPopup().finally(() => {\n      this.activeShow = null;\n    });\n\n    return this.activeShow;\n  }\n\n  //#endregion\n\n  //#region ---- Private Methods ----\n\n  private async openHelpPopup(): Promise<void> {\n    const title = await this.translationService.translateAsync('@general:keyboard-shortcuts.help-title');\n    const component = await import('./keyboard-shortcuts-help.component').then(\n      (module) => module.AXPKeyboardShortcutsHelpComponent,\n    );\n\n    await this.popupService.open(component, {\n      title,\n      size: 'sm',\n      closeButton: true,\n      closeOnBackdropClick: true,\n      draggable: false,\n    });\n  }\n\n  //#endregion\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","//#region ---- Imports ----\n\nimport { AXPFilterDefinition, AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport { AXDataSource } from '@acorex/cdk/common';\n\nimport { AXPDataSourceDefinition, AXPDataSourceDefinitionProvider } from '@acorex/platform/core';\n\nimport { inject } from '@angular/core';\nimport { AXPMenuItem } from './menu.types';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPPlatformCommonDataSourceKeys } from '../../contracts/datasource.keys';\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 * 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: AXPPlatformCommonDataSourceKeys.MenuItems,\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 { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { axpFindMenuItemByRoute } from './menu-route-matcher';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuVisibilityService } from './menu-visibility.service';\n\nconst SKIP_ROUTE_PREFIXES = ['/auth', '/error'];\nconst SKIP_ROUTE_PATHS = new Set(['/404', '/401', '/error/404', '/error/401']);\n\n//#region ----   Menu Route Access Service   ----\n\n/**\n * Resolves route access using menu policy, route metadata, permissions, and features.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuRouteAccessService {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly menuProvider = inject(AXPMenuProviderService);\n  private readonly menuVisibility = inject(AXPMenuVisibilityService);\n  private readonly sessionService = inject(AXPSessionService);\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  /**\n   * Checks whether navigation to the target URL is allowed for the current user.\n   */\n  async canAccess(route: ActivatedRouteSnapshot, url: string): Promise<boolean> {\n    if (this.shouldSkip(route, url)) {\n      return true;\n    }\n\n    if (!this.hasExplicitRouteAccess(route)) {\n      return false;\n    }\n\n    const menuItems = await this.menuProvider.items();\n    const menuMatch = axpFindMenuItemByRoute(menuItems, url);\n\n    if (!menuMatch) {\n      return true;\n    }\n\n    if (this.menuVisibility.isMenuBranchVisible(menuMatch.item, menuMatch.ancestors)) {\n      return true;\n    }\n\n    return false;\n  }\n\n  //#endregion\n\n  //#region ----   Utility Methods   ----\n\n  private shouldSkip(route: ActivatedRouteSnapshot, url: string): boolean {\n    if (this.hasRouteFlag(route, 'skipMenuRouteGuard')) {\n      return true;\n    }\n\n    const normalizedUrl = this.normalizeUrl(url);\n\n    if (SKIP_ROUTE_PATHS.has(normalizedUrl)) {\n      return true;\n    }\n\n    return SKIP_ROUTE_PREFIXES.some((prefix) => normalizedUrl.startsWith(prefix));\n  }\n\n  private hasRouteFlag(route: ActivatedRouteSnapshot, key: string): boolean {\n    let current: ActivatedRouteSnapshot | null = route;\n\n    while (current) {\n      if (current.data?.[key] === true) {\n        return true;\n      }\n      current = current.parent;\n    }\n\n    return false;\n  }\n\n  private hasExplicitRouteAccess(route: ActivatedRouteSnapshot): boolean {\n    const requiredPermission = this.getInheritedRouteData<string | string[] | null>(route, 'requiredPermission');\n    const requiredFeature = this.getInheritedRouteData<string | string[] | null>(route, 'requiredFeature');\n\n    const permissionKeys = this.normalizeKeys(requiredPermission);\n    if (permissionKeys.length > 0 && !this.sessionService.authorize(...permissionKeys)) {\n      return false;\n    }\n\n    const featureKeys = this.normalizeKeys(requiredFeature);\n    if (featureKeys.length > 0 && !this.sessionService.isFeatureEnabled(...featureKeys)) {\n      return false;\n    }\n\n    return true;\n  }\n\n  private getInheritedRouteData<T>(route: ActivatedRouteSnapshot, key: string): T | null {\n    let current: ActivatedRouteSnapshot | null = route;\n\n    while (current) {\n      const value = current.data?.[key] as T | undefined;\n      if (value != null) {\n        return value;\n      }\n      current = current.parent;\n    }\n\n    return null;\n  }\n\n  private normalizeKeys(keys: string | string[] | null | undefined): string[] {\n    if (!keys) {\n      return [];\n    }\n\n    return Array.isArray(keys) ? keys : [keys];\n  }\n\n  private normalizeUrl(url: string): string {\n    const path = url.split('?')[0]?.split('#')[0] ?? url;\n    return path.startsWith('/') ? path : `/${path}`;\n  }\n\n  //#endregion\n}\n\n//#endregion\n","import { AXP_UNAUTHORIZED_ROUTE } from '../../errors/unauthorized.routes';\n\nimport { AXPSessionService } from '@acorex/platform/auth';\n\nimport { inject } from '@angular/core';\n\nimport { ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot, UrlTree } from '@angular/router';\n\nimport { first, from, map, switchMap } from 'rxjs';\n\nimport { AXPMenuRouteAccessService } from './menu-route-access.service';\n\n\n\n/**\n\n * Blocks navigation when the target route is not accessible for the current user.\n\n * Evaluates menu policy, permissions, and features.\n\n */\n\nexport const AXPMenuRouteGuard: CanActivateFn = (\n\n  route: ActivatedRouteSnapshot,\n\n  state: RouterStateSnapshot,\n\n) => {\n\n  const sessionService = inject(AXPSessionService);\n\n  const menuRouteAccessService = inject(AXPMenuRouteAccessService);\n\n  const router = inject(Router);\n\n\n\n  return sessionService.isAuthorizedWithLoading$.pipe(\n\n    first(),\n\n    switchMap(() => from(menuRouteAccessService.canAccess(route, state.url))),\n\n    map((isAllowed): boolean | UrlTree => {\n\n      if (isAllowed) {\n\n        return true;\n\n      }\n\n\n\n      return router.parseUrl(AXP_UNAUTHORIZED_ROUTE);\n\n    }),\n\n  );\n\n};\n\n\n","import { AXPAuthGuard } from '@acorex/platform/auth';\nimport { AXPMenuRouteGuard } from './menu-route.guard';\n\n/** Standard guards for authenticated routes with menu-based access enforcement. */\nexport const AXP_PROTECTED_ROUTE_GUARDS = [AXPAuthGuard, AXPMenuRouteGuard] as const;\n","import { AXPSearchDefinitionProvider, AXPSearchDefinitionProviderContext } from '../../search';\nimport { AXPSystemActionType } from '@acorex/platform/contracts';\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 { InjectionToken } from '@angular/core';\nimport { AXPSearchDefinition } from './search.types';\n\n/**\n * Optional hook to resolve entity search definitions on demand (e.g. Module.X.Entity).\n */\nexport interface AXPSearchDefinitionLazyResolver {\n  resolve(definitionName: string): Promise<AXPSearchDefinition | null>;\n}\n\nexport const AXP_SEARCH_DEFINITION_LAZY_RESOLVER = new InjectionToken<AXPSearchDefinitionLazyResolver>(\n  'AXP_SEARCH_DEFINITION_LAZY_RESOLVER',\n);\n","import { AXPSearchAction, AXPSearchDefinition, AXPSearchDefinitionDisplayFormat } from './search.types';\nimport { AXPSystemActionType } from '@acorex/platform/contracts';\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  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 {\n  AXP_SEARCH_DEFINITION_LAZY_RESOLVER,\n  type AXPSearchDefinitionLazyResolver,\n} from './search-definition-lazy-resolver.token';\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 lazyResolver = inject(AXP_SEARCH_DEFINITION_LAZY_RESOLVER, { 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((item) => item.name === definitionName);\n    if (!definition) {\n      throw new Error(`Definition with name ${definitionName} not found`);\n    }\n    return definition;\n  }\n\n  public async findDefinitionAsync(definitionName: string): Promise<AXPSearchDefinition | null> {\n    await this.load();\n\n    const existing = this.getList().find((item) => item.name === definitionName);\n    if (existing) {\n      return existing;\n    }\n\n    const lazy = this.lazyResolver as AXPSearchDefinitionLazyResolver | null;\n    if (!lazy) {\n      return null;\n    }\n\n    const resolved = await lazy.resolve(definitionName);\n    if (!resolved) {\n      return null;\n    }\n\n    this.cache = [...(this.cache ?? []), resolved];\n    return resolved;\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","//#region ---- Imports ----\n\nimport { AXPMultiLanguageString, isLocaleStringMap } from '@acorex/platform/contracts';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\n\nimport { AXPContextEvalFactory, AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { isPlainObject, isString } from 'lodash-es';\nimport { normalizeEntityDisplayTemplate, sanitizeResolvedEntityDisplayTitle } from '@acorex/platform/layout/entity-contracts';\n\n//#endregion\n\n//#region ---- Searchable text resolution ----\n\n/**\n * Resolves a value to plain text for global-search matching (i18n keys, locale maps, scalars).\n */\nexport function resolveSearchableText(\n  value: unknown,\n  locale: string,\n  translationService: AXTranslationService,\n): string {\n  if (value == null || value === false) {\n    return '';\n  }\n\n  if (typeof value === 'number' || typeof value === 'boolean') {\n    return String(value);\n  }\n\n  if (typeof value === 'string') {\n    const trimmed = value.trim();\n    if (!trimmed) {\n      return '';\n    }\n    if (trimmed.startsWith('@')) {\n      return translationService.translateSync(trimmed) || trimmed;\n    }\n    return trimmed;\n  }\n\n  if (isLocaleStringMap(value) || translationService.isValidMultiLanguageObject(value)) {\n    return resolveMultiLanguageString(value as AXPMultiLanguageString, locale).trim();\n  }\n\n  return '';\n}\n\n/**\n * Case-insensitive match against i18n keys, locale maps, and plain strings.\n */\nexport function searchInSearchableValue(\n  value: unknown,\n  query: string,\n  locale: string,\n  translationService: AXTranslationService,\n): boolean {\n  const q = query.trim().toLocaleLowerCase(locale);\n  if (!q) {\n    return true;\n  }\n\n  if (isLocaleStringMap(value)) {\n    return Object.values(value)\n      .filter((entry): entry is string => typeof entry === 'string' && entry.trim() !== '')\n      .some((entry) => entry.toLocaleLowerCase(locale).includes(q));\n  }\n\n  const text = resolveSearchableText(value, locale, translationService).toLocaleLowerCase(locale);\n  return text.includes(q);\n}\n\n/**\n * Shallow + nested search over entity/command payloads (skips id / entityName keys).\n */\nexport function searchInRecordValues(\n  value: unknown,\n  query: string,\n  locale: string,\n  translationService: AXTranslationService,\n  depth = 0,\n): boolean {\n  const maxDepth = 4;\n  if (depth > maxDepth || value == null) {\n    return false;\n  }\n\n  if (searchInSearchableValue(value, query, locale, translationService)) {\n    return true;\n  }\n\n  if (Array.isArray(value)) {\n    return value.some((item) => searchInRecordValues(item, query, locale, translationService, depth + 1));\n  }\n\n  if (isPlainObject(value) && !isLocaleStringMap(value)) {\n    return Object.entries(value as Record<string, unknown>).some(([key, entry]) => {\n      if (key === 'id' || key === 'entityName') {\n        return false;\n      }\n      return searchInRecordValues(entry, query, locale, translationService, depth + 1);\n    });\n  }\n\n  return false;\n}\n\n//#endregion\n\n//#region ---- Display template resolution ----\n\nfunction countMustacheExpressions(template: string): number {\n  return (template.match(/\\{\\{/g) ?? []).length;\n}\n\n/** Standard display-tier row scope for entity title/search templates. */\nexport function createEntityRowExpressionScope(\n  data: unknown,\n  contextEvalFactory: AXPContextEvalFactory,\n): AXPExpressionEvaluatorScope {\n  return {\n    context: contextEvalFactory.createScope((data ?? {}) as Record<string, unknown>),\n  };\n}\n\n/**\n * Coerces an evaluated display segment to plain text.\n * Piped eval returns strings; unpiped MLS still resolves via compat fallback.\n */\nfunction formatDisplaySegment(\n  segment: unknown,\n  locale: string,\n  translationService: AXTranslationService,\n): string {\n  if (segment === false || segment == null) {\n    return '';\n  }\n  if (isString(segment)) {\n    return segment.trim();\n  }\n  return resolveSearchableText(segment, locale, translationService);\n}\n\n/**\n * Evaluates a normalized entity display template via {@link AXPExpressionEvaluatorService}.\n */\nexport async function evaluateEntityDisplayTemplate(\n  template: string,\n  data: unknown,\n  expressionEvaluator: AXPExpressionEvaluatorService,\n  locale: string,\n  translationService: AXTranslationService,\n  contextEvalFactory: AXPContextEvalFactory,\n): Promise<unknown> {\n  const normalized = normalizeEntityDisplayTemplate(template);\n  const scope = createEntityRowExpressionScope(data, contextEvalFactory);\n\n  if (!normalized.includes('{{')) {\n    return normalized;\n  }\n\n  if (\n    countMustacheExpressions(normalized) === 1 &&\n    expressionEvaluator.isExpression(normalized)\n  ) {\n    return expressionEvaluator.evaluate(normalized, scope);\n  }\n\n  const regex = /\\{\\{\\s*([\\s\\S]*?)\\s*\\}\\}/g;\n  let result = '';\n  let lastIndex = 0;\n\n  for (const match of normalized.matchAll(regex)) {\n    result += normalized.slice(lastIndex, match.index);\n    const segment = await expressionEvaluator.evaluate(`{{ ${match[1].trim()} }}`, scope);\n    result += formatDisplaySegment(segment, locale, translationService);\n    lastIndex = (match.index ?? 0) + match[0].length;\n  }\n\n  result += normalized.slice(lastIndex);\n  return result;\n}\n\n/**\n * Best display string from row values that contain the active search query (deep-match fallback).\n */\nexport function resolveQueryMatchingDisplayText(\n  value: unknown,\n  query: string,\n  locale: string,\n  translationService: AXTranslationService,\n  depth = 0,\n): string {\n  const q = query.trim().toLocaleLowerCase(locale);\n  if (!q || depth > 4 || value == null) {\n    return '';\n  }\n\n  let best = '';\n  const consider = (candidate: unknown) => {\n    const text = resolveSearchableText(candidate, locale, translationService).trim();\n    if (text && text.toLocaleLowerCase(locale).includes(q) && text.length > best.length) {\n      best = text;\n    }\n  };\n\n  consider(value);\n\n  if (Array.isArray(value)) {\n    for (const item of value) {\n      const nested = resolveQueryMatchingDisplayText(item, query, locale, translationService, depth + 1);\n      if (nested.length > best.length) {\n        best = nested;\n      }\n    }\n    return best;\n  }\n\n  if (isPlainObject(value) && !isLocaleStringMap(value)) {\n    for (const [key, entry] of Object.entries(value as Record<string, unknown>)) {\n      if (key === 'id' || key === 'entityName') {\n        continue;\n      }\n      const nested = resolveQueryMatchingDisplayText(entry, query, locale, translationService, depth + 1);\n      if (nested.length > best.length) {\n        best = nested;\n      }\n    }\n  }\n\n  return best;\n}\n\n/**\n * Resolves entity search display templates; coerces multi-language field values to readable text.\n */\nexport async function resolveSearchDisplayTemplate(\n  template: string | undefined,\n  data: unknown,\n  locale: string,\n  translationService: AXTranslationService,\n  formatService: AXFormatService,\n  expressionEvaluator: AXPExpressionEvaluatorService,\n  contextEvalFactory: AXPContextEvalFactory,\n): Promise<AXPMultiLanguageString> {\n  if (!template) {\n    return '';\n  }\n\n  if (!template.includes('{{') && !template.includes('{')) {\n    if (template.trim().startsWith('@')) {\n      return resolveSearchableText(template, locale, translationService);\n    }\n\n    const formatted = formatService.format(template, 'string', data);\n    return sanitizeResolvedEntityDisplayTitle(\n      typeof formatted === 'string' ? formatted : String(formatted ?? ''),\n    );\n  }\n\n  const evaluated = await evaluateEntityDisplayTemplate(\n    template,\n    data,\n    expressionEvaluator,\n    locale,\n    translationService,\n    contextEvalFactory,\n  );\n  return sanitizeResolvedEntityDisplayTitle(\n    resolveSearchableText(evaluated, locale, translationService),\n  );\n}\n\n//#endregion\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { inject } from '@angular/core';\nimport { searchInSearchableValue } from './search-display-string.util';\nimport { 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  private readonly translationService = inject(AXTranslationService);\n  abstract commands: AXPSearchResult[];\n\n  async search(text: string): Promise<AXPSearchResult[]> {\n    const locale = this.translationService.getActiveLang() ?? 'en-US';\n    return this.commands.filter(\n      (command) =>\n        searchInSearchableValue(command.title, text, locale, this.translationService) ||\n        searchInSearchableValue(command.description, text, locale, this.translationService),\n    );\n  }\n}\n","//#region ---- Imports ----\n\nimport { type AXPEntity, buildEntitySearchTitleContext, isMeaningfulEntityDisplayTitle, isUnresolvedEntityDisplayTemplate, normalizeEntityDisplayTemplate, resolveEntityModifyRecordTitleTemplate, resolveEntityRowTitleTemplate, sanitizeResolvedEntityDisplayTitle } from '@acorex/platform/layout/entity-contracts';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\n\nimport { AXPContextEvalFactory, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { get } from 'lodash-es';\n\nimport { resolveSearchDisplayTemplate, resolveSearchableText } from './search-display-string.util';\nimport { AXPSearchDefinitionDisplayFormat } from './search.types';\n\n//#endregion\n\n//#region ---- Runtime resolution ----\n\n/**\n * Modify/edit popup chrome: `{action} {individual} ({update.title ?? single.title})` when a record template exists.\n */\nexport async function resolveEntityModifyPopupTitle(\n  entity: AXPEntity,\n  recordData: unknown,\n  translationService: AXTranslationService,\n  formatService: AXFormatService,\n  expressionEvaluator: AXPExpressionEvaluatorService,\n  contextEvalFactory: AXPContextEvalFactory,\n  actionTitleKey = '@general:actions.modify.title',\n): Promise<string> {\n  const actionPrefix = translationService.translateSync(actionTitleKey);\n  const entityLabel = translationService.translateSync(entity.formats.individual);\n  const baseTitle = `${actionPrefix} ${entityLabel}`.trim();\n\n  const recordTemplate = resolveEntityModifyRecordTitleTemplate(entity);\n  if (!recordTemplate) {\n    return baseTitle;\n  }\n\n  const locale = translationService.getActiveLang();\n  const resolved = await resolveSearchDisplayTemplate(\n    recordTemplate,\n    recordData,\n    locale,\n    translationService,\n    formatService,\n    expressionEvaluator,\n    contextEvalFactory,\n  );\n  const recordTitle = sanitizeResolvedEntityDisplayTitle(\n    typeof resolved === 'string'\n      ? resolved\n      : resolveSearchableText(resolved, locale, translationService),\n  );\n\n  if (!isMeaningfulEntityDisplayTitle(recordTitle)) {\n    return baseTitle;\n  }\n\n  return `${baseTitle} (${recordTitle})`;\n}\n\n/**\n * Resolves an entity row title using entity-driven fallback templates and property paths.\n */\nexport async function resolveEntitySearchTitleFallback(\n  format: Pick<AXPSearchDefinitionDisplayFormat, 'titleFallbackTemplates' | 'titleFallbackFields'>,\n  data: unknown,\n  locale: string,\n  translationService: AXTranslationService,\n  formatService: AXFormatService,\n  expressionEvaluator: AXPExpressionEvaluatorService,\n  contextEvalFactory: AXPContextEvalFactory,\n): Promise<string> {\n  if (data == null) {\n    return '';\n  }\n\n  for (const template of format.titleFallbackTemplates ?? []) {\n    const resolved = await resolveSearchDisplayTemplate(\n      template,\n      data,\n      locale,\n      translationService,\n      formatService,\n      expressionEvaluator,\n      contextEvalFactory,\n    );\n    const text = sanitizeResolvedEntityDisplayTitle(\n      typeof resolved === 'string'\n        ? resolved\n        : resolveSearchableText(resolved, locale, translationService),\n    );\n    if (isMeaningfulEntityDisplayTitle(text)) {\n      return text;\n    }\n  }\n\n  for (const path of format.titleFallbackFields ?? []) {\n    const text = resolveSearchableText(get(data, path), locale, translationService).trim();\n    if (text) {\n      return text;\n    }\n  }\n\n  return '';\n}\n\n//#endregion\n","import { isMeaningfulEntityDisplayTitle, sanitizeResolvedEntityDisplayTitle } from '@acorex/platform/layout/entity-contracts';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPContextEvalFactory, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\nimport { omit } from 'lodash-es';\nimport { AXPSearchDefinitionProviderService } from './search-definition.provider';\nimport { resolveEntitySearchTitleFallback } from './entity-search-display-title.util';\nimport {\n  resolveSearchDisplayTemplate,\n  resolveSearchableText,\n  searchInRecordValues,\n  searchInSearchableValue,\n} from './search-display-string.util';\nimport { AXPSearchProvider } from './search.provider';\nimport { AXPSearchDisplayGroupResult, AXPSearchDisplayResult } from './search.types';\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  private expressionEvaluator = inject(AXPExpressionEvaluatorService);\n  private contextEvalFactory = inject(AXPContextEvalFactory);\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 => 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 locale = this.translationService.getActiveLang() ?? 'en-US';\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 = await this.definitionService.findDefinitionAsync(result.group);\n          if (!definition) {\n            continue;\n          }\n\n          const resolvedTitle =\n            result.title ??\n            (definition.format.title\n              ? await resolveSearchDisplayTemplate(\n                  definition.format.title,\n                  result.data,\n                  locale,\n                  this.translationService,\n                  this.formatService,\n                  this.expressionEvaluator,\n                  this.contextEvalFactory,\n                )\n              : '');\n          const resolvedDescription =\n            result.description ??\n            (definition.format.description\n              ? await resolveSearchDisplayTemplate(\n                  definition.format.description,\n                  result.data,\n                  locale,\n                  this.translationService,\n                  this.formatService,\n                  this.expressionEvaluator,\n                  this.contextEvalFactory,\n                )\n              : undefined);\n\n          let titleText = sanitizeResolvedEntityDisplayTitle(\n            typeof resolvedTitle === 'string'\n              ? resolvedTitle\n              : resolveSearchableText(resolvedTitle, locale, this.translationService),\n          );\n\n          if (!isMeaningfulEntityDisplayTitle(titleText)) {\n            titleText = await resolveEntitySearchTitleFallback(\n              definition.format,\n              result.data,\n              locale,\n              this.translationService,\n              this.formatService,\n              this.expressionEvaluator,\n              this.contextEvalFactory,\n            );\n          }\n\n          if (!isMeaningfulEntityDisplayTitle(titleText)) {\n            continue;\n          }\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.data ?? result)}`,\n            title: titleText,\n            description: resolvedDescription,\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    const normalizedQuery = text.trim();\n    const visibleData =\n      normalizedQuery.length === 0\n        ? mergeData\n        : mergeData.filter(\n            (item) =>\n              searchInSearchableValue(item.title, normalizedQuery, locale, this.translationService) ||\n              searchInSearchableValue(item.description, normalizedQuery, locale, this.translationService) ||\n              searchInRecordValues(item.data, normalizedQuery, locale, this.translationService),\n          );\n\n    // Group data\n    const groupedData: AXPSearchDisplayGroupResult[] = [];\n    const groupMap: { [key: string]: AXPSearchDisplayGroupResult } = {};\n\n    // Create groups\n    for (const item of visibleData) {\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","//#region ---- Imports ----\n\nimport { type AXPEntity, buildEntitySearchTitleContext, ENTITY_LAYOUT_SINGLE_TITLE_PATH, ENTITY_ROW_POPUP_TITLE_OPTION, ENTITY_ROW_TITLE_TEMPLATE_OPTION, isUnresolvedEntityDisplayTemplate, normalizeEntityDisplayTemplate, resolveEntityRowTitleTemplate } from '@acorex/platform/layout/entity-contracts';\nimport { AXFormatService } from '@acorex/core/format';\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\n\nimport { AXPMultiLanguageString } from '@acorex/platform/contracts';\n\nimport { get } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXPResolveEntityRowDisplayTitleOptions {\n  /** Row or form context data used to evaluate title templates. */\n  data: Record<string, unknown> | undefined;\n  activeLang: string;\n  formatService: AXFormatService;\n  /** Entity definition when available (forms, columns with entity resolver). */\n  entity?: AXPEntity | null;\n  /** Widget/interface options — may contain `popupTitle` or `titleTemplate`. */\n  widgetOptions?: Record<string, unknown> | undefined;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst INVALID_DISPLAY_TEXT = '[object Object]';\n\nconst DEFAULT_ROW_TITLE_FALLBACK_PATHS = ['title', 'name', 'code'] as const;\n\n//#endregion\n\n//#region ---- Value normalization ----\n\n/** Resolves a row field or format result to a plain display string for the active locale. */\nexport function resolveEntityRowDisplayText(value: unknown, activeLang: string): string {\n  if (value == null || value === '') {\n    return '';\n  }\n\n  if (typeof value === 'string') {\n    const text = value.trim();\n    if (!text || text === INVALID_DISPLAY_TEXT || isUnresolvedEntityDisplayTemplate(text)) {\n      return '';\n    }\n    return text;\n  }\n\n  if (typeof value === 'number' || typeof value === 'boolean') {\n    return String(value);\n  }\n\n  if (typeof value === 'object' && !Array.isArray(value)) {\n    const text = resolveMultiLanguageString(value as AXPMultiLanguageString, activeLang).trim();\n    if (!text || text === INVALID_DISPLAY_TEXT || isUnresolvedEntityDisplayTemplate(text)) {\n      return '';\n    }\n    return text;\n  }\n\n  return '';\n}\n\n//#endregion\n\n//#region ---- Row title resolution ----\n\nfunction readTitleTemplateFromWidgetOptions(\n  widgetOptions: Record<string, unknown> | undefined,\n): unknown {\n  if (!widgetOptions) {\n    return undefined;\n  }\n\n  return widgetOptions[ENTITY_ROW_POPUP_TITLE_OPTION] ?? widgetOptions[ENTITY_ROW_TITLE_TEMPLATE_OPTION];\n}\n\nfunction resolveEntityRowDisplayTitleFromContext(\n  data: Record<string, unknown>,\n  widgetOptions: Record<string, unknown> | undefined,\n  formatService: AXFormatService,\n  activeLang: string,\n): string {\n  const titleTemplate = readTitleTemplateFromWidgetOptions(widgetOptions);\n  const fromTemplateValue = resolveEntityRowDisplayText(titleTemplate, activeLang);\n  if (fromTemplateValue) {\n    return fromTemplateValue;\n  }\n\n  const fromEntityLayout = resolveEntityRowDisplayText(get(data, ENTITY_LAYOUT_SINGLE_TITLE_PATH), activeLang);\n  if (fromEntityLayout) {\n    return fromEntityLayout;\n  }\n\n  if (typeof titleTemplate === 'string' && titleTemplate.trim()) {\n    const formatted = formatService.format(normalizeEntityDisplayTemplate(titleTemplate), 'string', data);\n    const fromFormattedTemplate = resolveEntityRowDisplayText(formatted, activeLang);\n    if (fromFormattedTemplate) {\n      return fromFormattedTemplate;\n    }\n  }\n\n  for (const path of DEFAULT_ROW_TITLE_FALLBACK_PATHS) {\n    const fromField = resolveEntityRowDisplayText(get(data, path), activeLang);\n    if (fromField) {\n      return fromField;\n    }\n  }\n\n  return '';\n}\n\n/**\n * Resolves an entity row title for list columns, view widgets, and edit widgets.\n * Uses entity metadata when provided, otherwise widget title templates and common field paths.\n */\nexport function resolveEntityRowDisplayTitle(options: AXPResolveEntityRowDisplayTitleOptions): string {\n  const { data, activeLang, formatService, entity, widgetOptions } = options;\n  if (!data) {\n    return '';\n  }\n\n  if (entity) {\n    const fromEntity = formatEntityRowDisplayTitle(entity, data, formatService, activeLang);\n    if (fromEntity) {\n      return fromEntity;\n    }\n  }\n\n  return resolveEntityRowDisplayTitleFromContext(data, widgetOptions, formatService, activeLang);\n}\n\n/**\n * @deprecated Use {@link resolveEntityRowDisplayTitle} instead.\n */\nexport function resolveEntityRowDisplayTitleFromColumnContext(\n  rowData: Record<string, unknown> | undefined,\n  columnOptions: Record<string, unknown> | undefined,\n  formatService: AXFormatService,\n  activeLang: string,\n): string {\n  return resolveEntityRowDisplayTitle({\n    data: rowData,\n    widgetOptions: columnOptions,\n    formatService,\n    activeLang,\n  });\n}\n\n/**\n * Formats the entity row title for display using entity-driven templates and property paths.\n */\nexport function formatEntityRowDisplayTitle(\n  entity: AXPEntity | null | undefined,\n  rowData: Record<string, unknown> | undefined,\n  formatService: AXFormatService,\n  activeLang: string,\n): string {\n  if (!rowData) {\n    return '';\n  }\n\n  const titleContext = buildEntitySearchTitleContext(entity ?? ({} as AXPEntity));\n\n  for (const path of titleContext.fallbackFields) {\n    const fromField = resolveEntityRowDisplayText(get(rowData, path), activeLang);\n    if (fromField) {\n      return fromField;\n    }\n  }\n\n  const templates = [\n    resolveEntityRowTitleTemplate(entity),\n    ...titleContext.fallbackTemplates,\n  ].filter((template): template is string => !!template?.trim());\n\n  for (const template of templates) {\n    const formatted = formatService.format(normalizeEntityDisplayTemplate(template), 'string', rowData);\n    const fromTemplate = resolveEntityRowDisplayText(formatted, activeLang);\n    if (fromTemplate) {\n      return fromTemplate;\n    }\n  }\n\n  return '';\n}\n\n//#endregion\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","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { inject } from '@angular/core';\nimport { omit, sortBy } from 'lodash-es';\nimport { AXPSearchProvider, AXPSearchResult, searchInSearchableValue } from '../../search';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuItem } from './menu.types';\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 = 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          ? ({\n              name: 'navigate',\n              options: {\n                type: 'router',\n                options: {\n                  path: item.path,\n                },\n              },\n            } as AXPExecuteCommand)\n          : (item.command as AXPExecuteCommand),\n        parent: item.parent\n          ? {\n              title: item.parent.text,\n            }\n          : undefined,\n      })),\n      [(o) => this.translateService.translateSync(String(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 searchMenuItems(menuItems: AXPMenuItem[], searchText: string): AXPMenuItemWithParent[] {\n    const result: AXPMenuItemWithParent[] = [];\n    const locale = this.translateService.getActiveLang() ?? 'en-US';\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        searchInSearchableValue(item.text, searchText, locale, this.translateService)\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 = 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 { 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 { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from '@acorex/platform/core';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\n\n//#region ---- Query params expression scope ----\n\n/**\n * Exposes URL query parameters in expression strings, e.g.\n * `{{ queryParams.get('view') }}`.\n */\nexport class AXPQueryParamsEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n  private readonly router = inject(Router);\n\n  async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n    context.addScope('queryParams', {\n      get: (key: string) => {\n        const value = this.router.parseUrl(this.router.url).queryParamMap.get(key);\n        return value ?? undefined;\n      },\n    });\n  }\n}\n\n//#endregion\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';\nimport { AXPTabNavigationService } from '../tab-navigation/tab-navigation.service';\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  private tabNavigation = inject(AXPTabNavigationService);\n\n  async execute(context: AXPWorkflowContext): Promise<void> {\n    const payload = context.getVariable('payload');\n    if (Array.isArray(payload.commands)) {\n      await this.router.navigate(payload.commands, payload.extras);\n      return;\n    }\n\n    const path = payload.commands as string;\n    if (!path) {\n      return;\n    }\n\n    if (path.toLowerCase().startsWith('http') || payload.target === 'blank') {\n      window.open(path, '_blank');\n      return;\n    }\n\n    await this.tabNavigation.navigate(path, payload.extras);\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","//#region ---- Entity Workflow Events ----\n\n/** Workflow event type dispatched after a successful entity delete. */\nexport const AXP_ENTITY_DELETED_WORKFLOW_EVENT_TYPE = '[Entity] Deleted';\n\nexport interface AXPEntityDeletedEventPayload {\n  entity: string;\n  ids: string[];\n  meta?: unknown;\n}\n\n//#endregion\n","import { AXPNavigateActionCommand } from '@acorex/platform/core';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPTabNavigationService } from '../tab-navigation/tab-navigation.service';\n\n@Injectable()\nexport class AXPWorkflowRouterNavigateAction extends AXPWorkflowAction {\n  private readonly tabNavigation = inject(AXPTabNavigationService);\n\n  async execute(context: AXPWorkflowContext): Promise<void> {\n    const command = context.getVariable<AXPNavigateActionCommand<'router'>>();\n    const path = command.options.path;\n    if (!path) {\n      console.error('Path is required for navigate workflow');\n      return;\n    }\n\n    if (path?.toLowerCase()?.startsWith('http') || command.options?.extras?.target === 'blank') {\n      window.open(path, '_blank');\n    } else {\n      await this.tabNavigation.navigate(path, command.options.extras);\n    }\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 { AXFormatterRegistryService } from '@acorex/core/format';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport {\n  AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n  AXPAppStartUpProvider,\n  AXPComponentSlotModule,\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 { AXPBackgroundOperationSlotComponent } from './background-operation';\nimport { AXPBrowserTitleService } from './browser-title';\nimport {\n  AXPCustomOperatorService,\n  AXPCustomOperatorServiceImpl,\n  AXPFilterOperatorMiddlewareService,\n  AXPFilterOperatorMiddlewareServiceImpl,\n} from './data';\nimport { AXPErrorHandler, AXPErrorHandlerRegistryService, AXPGlobalErrorHandler } from './errors';\nimport { AXPTranslateFormatter } from './formatters';\nimport { AXPFileStorageEvaluatorScopeProvider } from './file-storage';\nimport { AXPKeyboardShortcutsHelpService } from './keyboard-shortcuts';\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 { AXPTokenEvaluatorScopeProvider } from './tokens';\nimport { AXPQueryParamsEvaluatorScopeProvider } from './utils/query-params-evaluator-scope.provider';\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    AXPComponentSlotModule.forChild({\n      'root-footer-end': [\n        {\n          name: 'background-operation',\n          component: AXPBackgroundOperationSlotComponent,\n        },\n      ],\n    }),\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_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n      useClass: AXPFileStorageEvaluatorScopeProvider,\n      multi: true,\n    },\n    {\n      provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n      useClass: AXPQueryParamsEvaluatorScopeProvider,\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    _keyboardShortcutsHelp: AXPKeyboardShortcutsHelpService,\n    formatterRegistry: AXFormatterRegistryService,\n  ) {\n    formatterRegistry.register(AXPTranslateFormatter);\n    instances.forEach((f) => {\n      f();\n    });\n  }\n}\n","import { AXPCommonSettings } from './common-settings.key';\nimport type { AXPSettingsService } from '../settings/settings.service';\n\nexport interface AXPEntityCreateListBehaviorOptions {\n  redirect?: boolean;\n}\n\nexport interface AXPEntityCreateListBehavior {\n  shouldRedirect: boolean;\n  shouldHighlight: boolean;\n}\n\n/**\n * Resolves post-create list behavior from user settings and optional action overrides.\n */\nexport async function resolveEntityCreateListBehavior(\n  settingsService: AXPSettingsService,\n  options?: AXPEntityCreateListBehaviorOptions,\n): Promise<AXPEntityCreateListBehavior> {\n  const [redirectSetting, highlightSetting] = await Promise.all([\n    settingsService.get<boolean>(AXPCommonSettings.RedirectToDetailsAfterCreate),\n    settingsService.get<boolean>(AXPCommonSettings.HighlightAfterCreateInList),\n  ]);\n\n  const shouldRedirect =\n    options?.redirect !== undefined ? options.redirect : redirectSetting !== false;\n  const shouldHighlight = highlightSetting === true;\n\n  return { shouldRedirect, shouldHighlight };\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 { 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/contracts';\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/contracts';\n\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 { InjectionToken } from '@angular/core';\nimport type { AXPIntegrationProviderContext } from './integration-provider.context';\n\n//#region ---- Integration provider interface ----\n\nexport interface AXPIntegrationProvider {\n  provide(context: AXPIntegrationProviderContext): Promise<void>;\n}\n\nexport const AXP_INTEGRATION_PROVIDER = new InjectionToken<AXPIntegrationProvider[]>(\n  'AXP_INTEGRATION_PROVIDER',\n  {\n    providedIn: 'root',\n    factory: () => [],\n  },\n);\n\n//#endregion\n\n//#region ---- Integration runtime provider (lazy hooks) ----\n\nexport interface AXPIntegrationRuntimeProvider {\n  readonly providerId: string;\n  getHooks(): Promise<import('@acorex/platform/contracts').AXPIntegrationProviderRuntimeHooks>;\n}\n\nexport const AXP_INTEGRATION_RUNTIME_PROVIDER = new InjectionToken<AXPIntegrationRuntimeProvider[]>(\n  'AXP_INTEGRATION_RUNTIME_PROVIDER',\n  {\n    providedIn: 'root',\n    factory: () => [],\n  },\n);\n\n//#endregion\n","import type { AXPIntegrationProviderDefinition } from '@acorex/platform/contracts';\n\n//#region ---- Integration provider context ----\n\nexport class AXPIntegrationProviderContext {\n  //#region ---- State ----\n\n  private readonly definitions = new Map<string, AXPIntegrationProviderDefinition>();\n\n  //#endregion\n\n  //#region ---- Builder API ----\n\n  /**\n   * Registers a provider definition. Throws when duplicate ids are registered.\n   */\n  register(definition: AXPIntegrationProviderDefinition): void {\n    if (this.definitions.has(definition.id)) {\n      throw new Error(\n        `[AXPIntegrationProviderContext] Duplicate integration provider id '${definition.id}'.`,\n      );\n    }\n    this.definitions.set(definition.id, definition);\n  }\n\n  //#endregion\n\n  //#region ---- Accessors ----\n\n  getDefinitions(): ReadonlyMap<string, AXPIntegrationProviderDefinition> {\n    return this.definitions;\n  }\n\n  //#endregion\n}\n\n//#endregion\n","import type { AXPIntegrationProviderDefinition } from '@acorex/platform/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPIntegrationProviderContext } from './integration-provider.context';\nimport { AXP_INTEGRATION_PROVIDER, type AXPIntegrationProvider } from './integration.provider';\n\n//#region ---- Integration provider registry ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPIntegrationProviderRegistryService {\n  //#region ---- Dependencies ----\n\n  private readonly providers = inject(AXP_INTEGRATION_PROVIDER, { optional: true });\n\n  //#endregion\n\n  //#region ---- State ----\n\n  private cache: Map<string, AXPIntegrationProviderDefinition> | null = null;\n\n  //#endregion\n\n  //#region ---- Public API ----\n\n  async list(): Promise<AXPIntegrationProviderDefinition[]> {\n    const map = await this.load();\n    return Array.from(map.values());\n  }\n\n  async get(id: string): Promise<AXPIntegrationProviderDefinition | null> {\n    const map = await this.load();\n    return map.get(id) ?? null;\n  }\n\n  async getOrThrow(id: string): Promise<AXPIntegrationProviderDefinition> {\n    const definition = await this.get(id);\n    if (!definition) {\n      throw new Error(`[AXPIntegrationProviderRegistry] Unknown integration provider '${id}'.`);\n    }\n    return definition;\n  }\n\n  clearCache(): void {\n    this.cache = null;\n  }\n\n  //#endregion\n\n  //#region ---- Private Methods ----\n\n  private async load(): Promise<Map<string, AXPIntegrationProviderDefinition>> {\n    if (this.cache) {\n      return this.cache;\n    }\n\n    const context = new AXPIntegrationProviderContext();\n    const providerList = this.providers ?? [];\n\n    for (const provider of providerList) {\n      const resolved: AXPIntegrationProvider =\n        provider instanceof Promise ? await provider : provider;\n      await resolved.provide(context);\n    }\n\n    this.cache = new Map(context.getDefinitions());\n    return this.cache;\n  }\n\n  //#endregion\n}\n\n//#endregion\n","import type { AXPIntegrationAuthContext, AXPIntegrationProviderDefinition, AXPIntegrationResolvedCredentials, AXPIntegrationRuntimeContext, AXPIntegrationSecretPayload } from '@acorex/platform/contracts';\nimport { InjectionToken } from '@angular/core';\n\n//#region ---- Secret store token ----\n\nexport interface AXPIntegrationSecretRefInput {\n  providerId: string;\n  connectionId: string;\n  tenantId: string;\n  userId: string;\n  authMethodType: string;\n}\n\nexport interface AXPIntegrationSecretStore {\n  store(ref: AXPIntegrationSecretRefInput, payload: AXPIntegrationSecretPayload): Promise<string>;\n  rotate(\n    secretRef: string,\n    context: AXPIntegrationAuthContext,\n    payload: Partial<AXPIntegrationSecretPayload>,\n  ): Promise<void>;\n  resolve(secretRef: string, context: AXPIntegrationAuthContext): Promise<AXPIntegrationResolvedCredentials>;\n  revoke(secretRef: string, context: AXPIntegrationAuthContext): Promise<void>;\n  delete(secretRef: string, context: AXPIntegrationAuthContext): Promise<void>;\n}\n\nexport const AXP_INTEGRATION_SECRET_STORE = new InjectionToken<AXPIntegrationSecretStore>(\n  'AXP_INTEGRATION_SECRET_STORE',\n);\n\n//#endregion\n\n//#region ---- Runtime service token ----\n\nexport interface AXPIntegrationWithClientOptions {\n  providerId: string;\n  connectionScope?: 'user' | 'tenant';\n  connectionKey?: string;\n  requiredCapabilities?: string[];\n  requiredScopes?: string[];\n}\n\nexport abstract class AXPIntegrationRuntimeService {\n  abstract getProvider(id: string): Promise<AXPIntegrationProviderDefinition>;\n  abstract listProviders(): Promise<AXPIntegrationProviderDefinition[]>;\n  abstract getConnection(\n    options: AXPIntegrationWithClientOptions,\n  ): Promise<import('@acorex/platform/contracts').AXPSafeIntegrationConnectionDto>;\n  abstract withClient<T>(\n    options: AXPIntegrationWithClientOptions,\n    fn: (client: unknown, ctx: AXPIntegrationRuntimeContext) => Promise<T>,\n  ): Promise<T>;\n  abstract buildRuntimeContext(\n    connection: import('@acorex/platform/contracts').AXPSafeIntegrationConnectionDto & { secretRef: string },\n  ): Promise<AXPIntegrationRuntimeContext>;\n}\n\nexport interface AXPIntegrationOAuthStartInput {\n  providerId: string;\n  connectionScope: 'user' | 'tenant';\n  connectionKey: string;\n  displayName: string;\n  redirectUri: string;\n  tenantId: string;\n  userId: string;\n  scopes?: string[];\n}\n\nexport interface AXPIntegrationOAuthCompleteInput {\n  providerId: string;\n  state: string;\n  code: string;\n}\n\nexport abstract class AXPIntegrationOAuthService {\n  abstract startAuthorization(\n    input: AXPIntegrationOAuthStartInput,\n  ): Promise<{ redirectUrl: string; state: string }>;\n  abstract completeCallback(input: AXPIntegrationOAuthCompleteInput): Promise<{ connectionId: string }>;\n}\n\nexport const AXP_INTEGRATION_OAUTH_SERVICE = new InjectionToken<AXPIntegrationOAuthService>(\n  'AXP_INTEGRATION_OAUTH_SERVICE',\n);\n\n//#endregion\n","import type { AXPSafeIntegrationConnectionDto } from '@acorex/platform/contracts';\nimport { InjectionToken } from '@angular/core';\n\n//#region ---- Connection established handler ----\n\n/**\n * Optional hook invoked after a connection is successfully established (OAuth callback or credentials connect).\n * Use to link provider-specific records (e.g. Jira/GitLab instance ↔ integration connection).\n */\nexport interface AXPIntegrationConnectionEstablishedHandler {\n  readonly providerId: string;\n  onEstablished(connection: AXPSafeIntegrationConnectionDto): Promise<void>;\n}\n\nexport const AXP_INTEGRATION_CONNECTION_ESTABLISHED = new InjectionToken<\n  AXPIntegrationConnectionEstablishedHandler[]\n>('AXP_INTEGRATION_CONNECTION_ESTABLISHED', {\n  providedIn: 'root',\n  factory: () => [],\n});\n\n//#endregion\n","//#region ---- Integration barrel ----\n\nexport * from './integration.provider';\nexport * from './integration-provider.context';\nexport * from './integration-provider.registry.service';\nexport * from './integration-secret-store.token';\nexport * from './integration-connection-established.token';\n\n//#endregion\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","import { AXPMultiLanguageString, AXPStatusProvider, AXPStatusTransition } from '@acorex/platform/contracts';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\n\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 =\n        context['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'] ?? context['fieldName'] ?? '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","//#region ---- Types ----\n\n/** Structured hover-card payload for a tab (kept in memory; not session-persisted). */\nexport interface AXPTabStructuredPreview {\n  /** Primary label (usually page title or breadcrumb trail). */\n  title: string;\n  /** Optional page description or secondary line. */\n  subtitle?: string;\n  /** Full router URL for the tab. */\n  url: string;\n  icon?: string;\n  /** Whether the cached page reports unsaved user edits. */\n  isDirty: boolean;\n  /** Breadcrumb segments excluding home (for the hover card). */\n  breadcrumbTrail: string[];\n}\n\n//#endregion\n","import { normalizeRouterUrl } from '../tab-navigation/tab-key.util';\nimport { axpIsEntityListPath } from './app-path-navigation.util';\n\n//#region ---- Types ----\n\nexport interface AXPEntityListRouteParts {\n  module: string;\n  entity: string;\n}\n\nexport interface AXPEntityDetailsRouteParts extends AXPEntityListRouteParts {\n  id: string;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst SESSION_KEY_PREFIX = 'axp-entity-list-return:';\n\n//#endregion\n\n//#region ---- Route Parsing ----\n\n/** Parses an entity master list route (`.../m/{module}/e/{entity}/list`). */\nexport function axpParseEntityListRoute(url: string): AXPEntityListRouteParts | null {\n  const path = url.split('?')[0].split('#')[0];\n  const match = path.match(/\\/m\\/([^/]+)\\/e\\/([^/]+)\\/list$/);\n  if (!match) {\n    return null;\n  }\n\n  return {\n    module: decodeURIComponent(match[1]),\n    entity: decodeURIComponent(match[2]),\n  };\n}\n\n/** Parses an entity details route (`.../m/{module}/e/{entity}/{id}/view`). */\nexport function axpParseEntityDetailsRoute(url: string): AXPEntityDetailsRouteParts | null {\n  const path = url.split('?')[0].split('#')[0];\n  const match = path.match(/\\/m\\/([^/]+)\\/e\\/([^/]+)\\/([^/]+)\\/view$/);\n  if (!match) {\n    return null;\n  }\n\n  return {\n    module: decodeURIComponent(match[1]),\n    entity: decodeURIComponent(match[2]),\n    id: decodeURIComponent(match[3]),\n  };\n}\n\n//#endregion\n\n//#region ---- Session Storage ----\n\nfunction buildStorageKey(module: string, entity: string): string {\n  return `${SESSION_KEY_PREFIX}${module}.${entity}`;\n}\n\n/** Persists the last list URL (including query params) used before opening entity details. */\nexport function axpSaveEntityListReturnUrl(module: string, entity: string, url: string): void {\n  if (!axpIsEntityListPath(url)) {\n    return;\n  }\n\n  const parsed = axpParseEntityListRoute(url);\n  if (!parsed || parsed.module !== module || parsed.entity !== entity) {\n    return;\n  }\n\n  try {\n    sessionStorage.setItem(buildStorageKey(module, entity), normalizeRouterUrl(url));\n  } catch {\n    // sessionStorage may be unavailable\n  }\n}\n\n/** Returns the stored list URL for the entity, or the provided fallback path. */\nexport function axpGetEntityListReturnUrl(module: string, entity: string, fallbackPath: string): string {\n  try {\n    const stored = sessionStorage.getItem(buildStorageKey(module, entity));\n    if (!stored || !axpIsEntityListPath(stored)) {\n      return fallbackPath;\n    }\n\n    const parsed = axpParseEntityListRoute(stored);\n    if (parsed?.module === module && parsed.entity === entity) {\n      return stored;\n    }\n  } catch {\n    // sessionStorage may be unavailable\n  }\n\n  return fallbackPath;\n}\n\n//#endregion\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPClipBoardService {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly toast = inject(AXToastService);\n  private readonly translationService = inject(AXTranslationService);\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  public async copy(title: string, value: string): Promise<void> {\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    await navigator.clipboard.writeText(value);\n\n    const message = await this.translationService.translateAsync('@general:messages.clipboard.copied', {\n      params: { title },\n    });\n    this.toast.success(message);\n  }\n\n  //#endregion\n}\n","//#region ---- Types ----\n\nexport type AXPGraphicDownloadFormat = 'svg' | 'png' | 'jpeg';\n\nexport interface AXPGraphicPrintContent {\n  bodyMarkup: string;\n  styleRule: string;\n}\n\nexport interface AXPPrintGraphicOptions {\n  /** Used when the rendered element has no measurable size. */\n  fallbackSize?: number;\n  title?: string;\n  imageAlt?: string;\n}\n\nexport interface AXPGraphicDownloadOptions {\n  format: AXPGraphicDownloadFormat;\n  filename: string;\n  /** Used when rasterizing SVG or sizing canvas output. */\n  fallbackSize?: number;\n}\n\n//#endregion\n\n//#region ---- Option normalization ----\n\n/**\n * Normalizes widget option values to a positive finite number\n * (plain number, numeric string, or editor object with `value` / `id`).\n */\nexport function normalizePositiveNumberOption(value: unknown, fallback: number): number {\n  if (typeof value === 'number' && Number.isFinite(value) && value > 0) {\n    return value;\n  }\n\n  if (typeof value === 'string') {\n    const parsed = Number(value);\n    if (Number.isFinite(parsed) && parsed > 0) {\n      return parsed;\n    }\n  }\n\n  if (value != null && typeof value === 'object') {\n    const record = value as Record<string, unknown>;\n    if ('value' in record) {\n      return normalizePositiveNumberOption(record['value'], fallback);\n    }\n    if ('id' in record) {\n      return normalizePositiveNumberOption(record['id'], fallback);\n    }\n  }\n\n  return fallback;\n}\n\n//#endregion\n\n//#region ---- DOM measurement ----\n\n/**\n * Resolves the rendered graphic size from a container (canvas or SVG).\n */\nexport function resolveGraphicElementSize(container: HTMLElement, fallback: number): number {\n  const canvas = container.querySelector('canvas');\n  if (canvas instanceof HTMLCanvasElement && canvas.width > 0) {\n    return canvas.width;\n  }\n\n  const svg = container.querySelector('svg');\n  if (svg instanceof SVGSVGElement) {\n    const svgWidth = svg.width?.baseVal?.value;\n    if (svgWidth > 0) {\n      return svgWidth;\n    }\n\n    const widthAttr = svg.getAttribute('width');\n    if (widthAttr) {\n      const parsed = Number.parseFloat(widthAttr);\n      if (Number.isFinite(parsed) && parsed > 0) {\n        return parsed;\n      }\n    }\n  }\n\n  return normalizePositiveNumberOption(fallback, fallback);\n}\n\n//#endregion\n\n//#region ---- SVG helpers ----\n\n/**\n * Serializes an SVG element to a string, optionally prefixing the XML declaration.\n */\nexport function serializeSvgElement(svg: SVGSVGElement, includeXmlDeclaration = true): string {\n  const serializer = new XMLSerializer();\n  let source = serializer.serializeToString(svg);\n\n  if (includeXmlDeclaration && !source.match(/^<\\?xml/)) {\n    source = `<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n${source}`;\n  }\n\n  return source;\n}\n\n//#endregion\n\n//#region ---- Graphic content resolution ----\n\n/**\n * Builds printable HTML body markup and CSS for an SVG or canvas inside a container.\n */\nexport function resolveGraphicPrintContent(\n  container: HTMLElement,\n  size: number,\n  imageAlt = 'Graphic',\n): AXPGraphicPrintContent | undefined {\n  const svg = container.querySelector('svg');\n  if (svg instanceof SVGSVGElement) {\n    return {\n      bodyMarkup: svg.outerHTML,\n      styleRule: `svg { width: ${size}px !important; height: ${size}px !important; }`,\n    };\n  }\n\n  const canvas = container.querySelector('canvas');\n  if (canvas instanceof HTMLCanvasElement) {\n    try {\n      const dataUrl = canvas.toDataURL('image/png');\n      if (!dataUrl.startsWith('data:image/png')) {\n        return undefined;\n      }\n\n      return {\n        bodyMarkup: `<img src=\"${dataUrl}\" width=\"${size}\" height=\"${size}\" alt=\"${imageAlt}\" />`,\n        styleRule: `img { width: ${size}px !important; height: ${size}px !important; }`,\n      };\n    } catch {\n      return undefined;\n    }\n  }\n\n  return undefined;\n}\n\n//#endregion\n\n//#region ---- Browser download ----\n\n/**\n * Triggers a file download for the given blob via a temporary anchor element.\n */\nexport function triggerBrowserDownload(blob: Blob, filename: string): void {\n  const link = document.createElement('a');\n  const url = URL.createObjectURL(blob);\n  link.href = url;\n  link.download = filename;\n  document.body.appendChild(link);\n  link.click();\n  document.body.removeChild(link);\n  URL.revokeObjectURL(url);\n}\n\n//#endregion\n\n//#region ---- Print ----\n\n/**\n * Opens the system print dialog for an SVG or canvas graphic inside the given container.\n */\nexport function printGraphicFromElement(container: HTMLElement, options: AXPPrintGraphicOptions = {}): void {\n  const fallbackSize = options.fallbackSize ?? 200;\n  const size = resolveGraphicElementSize(container, fallbackSize);\n  const printContent = resolveGraphicPrintContent(container, size, options.imageAlt ?? 'Graphic');\n  if (!printContent) {\n    return;\n  }\n\n  const iframe = document.createElement('iframe');\n  iframe.setAttribute('aria-hidden', 'true');\n  iframe.style.cssText = `position:fixed;left:0;top:0;width:${size}px;height:${size}px;border:0;visibility:hidden;`;\n  document.body.appendChild(iframe);\n\n  const printWindow = iframe.contentWindow;\n  const doc = printWindow?.document;\n  if (!printWindow || !doc) {\n    iframe.remove();\n    return;\n  }\n\n  const title = options.title ?? 'Print';\n\n  doc.open();\n  doc.write(`<!DOCTYPE html>\n<html>\n  <head>\n    <title>${title}</title>\n    <style>\n      body {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        min-height: 100vh;\n        margin: 0;\n      }\n      @media print {\n        body {\n          min-height: auto;\n        }\n      }\n      ${printContent.styleRule}\n    </style>\n  </head>\n  <body>${printContent.bodyMarkup}</body>\n</html>`);\n  doc.close();\n\n  const cleanup = (): void => {\n    iframe.remove();\n  };\n\n  const triggerPrint = (): void => {\n    printWindow.focus();\n    printWindow.print();\n\n    printWindow.addEventListener('afterprint', cleanup, { once: true });\n    window.setTimeout(cleanup, 1000);\n  };\n\n  const image = doc.querySelector('img');\n  if (image && !image.complete) {\n    image.addEventListener('load', triggerPrint, { once: true });\n    image.addEventListener('error', cleanup, { once: true });\n    return;\n  }\n\n  requestAnimationFrame(triggerPrint);\n}\n\n//#endregion\n\n//#region ---- Download ----\n\n/**\n * Downloads an SVG or canvas graphic from a container as SVG, PNG, or JPEG.\n */\nexport function downloadGraphicFromElement(container: HTMLElement, options: AXPGraphicDownloadOptions): void {\n  const size = resolveGraphicElementSize(container, options.fallbackSize ?? 200);\n\n  if (options.format === 'svg') {\n    downloadSvgGraphic(container, options.filename);\n    return;\n  }\n\n  const mime = options.format === 'png' ? 'image/png' : 'image/jpeg';\n  downloadRasterGraphic(container, mime, options.filename, size);\n}\n\nfunction downloadSvgGraphic(container: HTMLElement, filename: string): void {\n  const svg = container.querySelector('svg');\n  if (!(svg instanceof SVGSVGElement)) {\n    return;\n  }\n\n  const source = serializeSvgElement(svg);\n  triggerBrowserDownload(new Blob([source], { type: 'image/svg+xml;charset=utf-8' }), filename);\n}\n\nfunction downloadRasterGraphic(\n  container: HTMLElement,\n  mime: 'image/png' | 'image/jpeg',\n  filename: string,\n  size: number,\n): void {\n  const canvas = container.querySelector('canvas');\n  if (canvas instanceof HTMLCanvasElement) {\n    const dataUrl = rasterizeCanvasToDataUrl(canvas, mime, size);\n    if (dataUrl) {\n      triggerBrowserDownload(dataUrlToBlob(dataUrl), filename);\n    }\n    return;\n  }\n\n  const svg = container.querySelector('svg');\n  if (svg instanceof SVGSVGElement) {\n    rasterizeSvgToDataUrl(svg, mime, size, (dataUrl) => {\n      triggerBrowserDownload(dataUrlToBlob(dataUrl), filename);\n    });\n  }\n}\n\nfunction rasterizeCanvasToDataUrl(\n  canvas: HTMLCanvasElement,\n  mime: 'image/png' | 'image/jpeg',\n  size: number,\n): string | undefined {\n  if (mime === 'image/png') {\n    try {\n      return canvas.toDataURL('image/png');\n    } catch {\n      return undefined;\n    }\n  }\n\n  const outputCanvas = document.createElement('canvas');\n  outputCanvas.width = size;\n  outputCanvas.height = size;\n  const ctx = outputCanvas.getContext('2d');\n  if (!ctx) {\n    return undefined;\n  }\n\n  ctx.fillStyle = '#ffffff';\n  ctx.fillRect(0, 0, size, size);\n  ctx.drawImage(canvas, 0, 0, size, size);\n\n  try {\n    return outputCanvas.toDataURL('image/jpeg');\n  } catch {\n    return undefined;\n  }\n}\n\nfunction rasterizeSvgToDataUrl(\n  svg: SVGSVGElement,\n  mime: 'image/png' | 'image/jpeg',\n  size: number,\n  onReady: (dataUrl: string) => void,\n): void {\n  const source = serializeSvgElement(svg);\n  const svgUrl = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(source)}`;\n  const img = new Image();\n  const canvas = document.createElement('canvas');\n  canvas.width = size;\n  canvas.height = size;\n  const ctx = canvas.getContext('2d');\n  if (!ctx) {\n    return;\n  }\n\n  if (mime === 'image/jpeg') {\n    ctx.fillStyle = '#ffffff';\n    ctx.fillRect(0, 0, size, size);\n  }\n\n  img.onload = () => {\n    ctx.drawImage(img, 0, 0, size, size);\n    onReady(canvas.toDataURL(mime));\n  };\n  img.src = svgUrl;\n}\n\nfunction dataUrlToBlob(dataUrl: string): Blob {\n  const [header, data] = dataUrl.split(',');\n  const mime = header.match(/:(.*?);/)?.[1] ?? 'application/octet-stream';\n  const binary = atob(data);\n  const bytes = new Uint8Array(binary.length);\n\n  for (let index = 0; index < binary.length; index++) {\n    bytes[index] = binary.charCodeAt(index);\n  }\n\n  return new Blob([bytes], { type: mime });\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';\nimport { triggerBrowserDownload } from './dom-graphic.util';\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    triggerBrowserDownload(blob, filename);\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","i2","i4","i1","i3","i1.AXPErrorHandlerRegistryService","i1.AXPKeyboardShortcutsHelpService"],"mappings":"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"}