{"version":3,"file":"acorex-platform-core.mjs","sources":["../../../../libs/platform/core/src/lib/activity-log/activity-log.service.ts","../../../../libs/platform/core/src/lib/activity-log/activity-log.provider.ts","../../../../libs/platform/core/src/lib/catalog-scope/catalog-scope-definition.types.ts","../../../../libs/platform/core/src/lib/catalog-scope/catalog-scope-definition.provider.ts","../../../../libs/platform/core/src/lib/catalog-scope/catalog-scope-definition-provider.service.ts","../../../../libs/platform/core/src/lib/catalog-scope/catalog-scope-definitions.datasource.ts","../../../../libs/platform/core/src/lib/color-palette/color-palette.provider.ts","../../../../libs/platform/core/src/lib/color-palette/color-palette.service.ts","../../../../libs/platform/core/src/lib/color-palette/color-palette.types.ts","../../../../libs/platform/core/src/lib/color-palette/default-palettes.provider.ts","../../../../libs/platform/core/src/lib/column-width/column-width.provider.ts","../../../../libs/platform/core/src/lib/column-width/column-width.service.ts","../../../../libs/platform/core/src/lib/column-width/column-width.types.ts","../../../../libs/platform/core/src/lib/column-width/default-column-width.provider.ts","../../../../libs/platform/core/src/lib/component-slot/component-slot.types.ts","../../../../libs/platform/core/src/lib/debug/debug.service.ts","../../../../libs/platform/core/src/lib/context/form-dirty-trace.constants.ts","../../../../libs/platform/core/src/lib/context/context-store.service.ts","../../../../libs/platform/core/src/lib/expression-evaluator/context-eval-pipes.util.ts","../../../../libs/platform/core/src/lib/expression-evaluator/context-eval.factory.ts","../../../../libs/platform/core/src/lib/expression-evaluator/context-eval.types.ts","../../../../libs/platform/core/src/lib/expression-evaluator/expression-template-normalize.util.ts","../../../../libs/platform/core/src/lib/expression-evaluator/expression-evaluator-scope-provider.service.ts","../../../../libs/platform/core/src/lib/expression-evaluator/expression-evaluator.service.ts","../../../../libs/platform/core/src/lib/component-slot/component-slot-placeholder.component.ts","../../../../libs/platform/core/src/lib/component-slot/component-slot-registery.service.ts","../../../../libs/platform/core/src/lib/component-slot/component-slot.directive.ts","../../../../libs/platform/core/src/lib/component-slot/component-slot.module.ts","../../../../libs/platform/core/src/lib/context-definition/context-definition.types.ts","../../../../libs/platform/core/src/lib/context-definition/context-definition.provider.ts","../../../../libs/platform/core/src/lib/context-definition/context-definition-provider.service.ts","../../../../libs/platform/core/src/lib/data/data-generator.ts","../../../../libs/platform/core/src/lib/data/value-transformer.ts","../../../../libs/platform/core/src/lib/data/datasource-definition-provider.service.ts","../../../../libs/platform/core/src/lib/data/datasource-query.service.ts","../../../../libs/platform/core/src/lib/directives/content-checker.directive.ts","../../../../libs/platform/core/src/lib/directives/dbl-click.directive.ts","../../../../libs/platform/core/src/lib/directives/element-data.directive.ts","../../../../libs/platform/core/src/lib/directives/grid-layout.directive.ts","../../../../libs/platform/core/src/lib/distributed-events/distributed-event-listener.provider.ts","../../../../libs/platform/core/src/lib/distributed-events/distributed-event-listener.service.ts","../../../../libs/platform/core/src/lib/event-service/event.service.ts","../../../../libs/platform/core/src/lib/hook/utill.service.ts","../../../../libs/platform/core/src/lib/overlay/overlay-layer.util.ts","../../../../libs/platform/core/src/lib/keyboard-shortcuts/keyboard-shortcut.util.ts","../../../../libs/platform/core/src/lib/keyboard-shortcuts/keyboard-shortcut-declaration.util.ts","../../../../libs/platform/core/src/lib/keyboard-shortcuts/keyboard-shortcut-registry.service.ts","../../../../libs/platform/core/src/lib/keyboard-shortcuts/dialog-action-shortcuts.util.ts","../../../../libs/platform/core/src/lib/keyboard-shortcuts/popup-footer-keyboard-shortcuts.util.ts","../../../../libs/platform/core/src/lib/overlay/overlay-release.constants.ts","../../../../libs/platform/core/src/lib/module-manifest/module-manifest.types.ts","../../../../libs/platform/core/src/lib/module-manifest/provider-interfaces.ts","../../../../libs/platform/core/src/lib/module-manifest/feature-definition.provider.ts","../../../../libs/platform/core/src/lib/module-manifest/module-manifest.registry.ts","../../../../libs/platform/core/src/lib/module-manifest/module-manifests.datasource.ts","../../../../libs/platform/core/src/lib/startup/app-startup.service.ts","../../../../libs/platform/core/src/lib/module-manifest/module-manifest.module.ts","../../../../libs/platform/core/src/lib/scheduling/idle-scheduler.service.ts","../../../../libs/platform/core/src/lib/scheduling/idle-scheduler.types.ts","../../../../libs/platform/core/src/lib/tags/tag.types.ts","../../../../libs/platform/core/src/lib/tags/tag.provider.ts","../../../../libs/platform/core/src/lib/tags/tag.service.ts","../../../../libs/platform/core/src/lib/types/action-menu.types.ts","../../../../libs/platform/core/src/lib/types/logo.types.ts","../../../../libs/platform/core/src/lib/utils/countdown-timer.ts","../../../../libs/platform/core/src/lib/utils/data-conditioner.ts","../../../../libs/platform/core/src/lib/utils/device.service.ts","../../../../libs/platform/core/src/lib/utils/highlighter.ts","../../../../libs/platform/core/src/lib/utils/provider.util.ts","../../../../libs/platform/core/src/acorex-platform-core.ts"],"sourcesContent":["import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { AXPActivityLogProvider } from './activity-log.provider';\nimport { AXPActivityLog } from './activity-log.types';\n\nexport const AXP_ACTIVITY_LOG_PROVIDER = new InjectionToken<AXPActivityLogProvider[]>('AXP_ACTIVITY_LOGS_PROVIDER');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPActivityLogService {\n  private providers = inject(AXP_ACTIVITY_LOG_PROVIDER, { optional: true });\n\n  async getHistory(refId: string, refType: string, options?: { from?: Date; to?: Date; limit?: number; offset?: number }): Promise<AXPActivityLog[]> {\n    return (await Promise.all(this.providers?.map((p) => p.getHistory(refId, refType, options)) ?? [])).flat();\n\n  }\n\n  async getHistoryByIds(refId: string, refType: string, ids: string[]): Promise<AXPActivityLog[]> {\n    return (await Promise.all(this.providers?.map((p) => p.getHistoryByIds(refId, refType, ids)) ?? [])).flat();\n  }\n}","import { AXPActivityLog } from './activity-log.types';\n\nexport abstract class AXPActivityLogProvider {\n  abstract getHistory(refId: string, refType: string, options?: { from?: Date; to?: Date; limit?: number; offset?: number }): Promise<AXPActivityLog[]>;\n  abstract getHistoryByIds(refId: string, refType: string, ids: string[]): Promise<AXPActivityLog[]>;\n}","//#region ---- Catalog scope definition ----\n\nimport type { AXPMultiLanguageString } from '@acorex/platform/contracts';\n\n/**\n * Stable catalog scope registered by a module provider (integration contract).\n */\nexport interface AXPCatalogScopeDefinition {\n  /** Unique key, e.g. `human-capital-management.hr`. */\n  name: string;\n\n  title: string | AXPMultiLanguageString;\n\n  description?: string | AXPMultiLanguageString;\n\n  /**\n   * Entity refs filtered by this scope elsewhere (lookups, workflow selectors, etc.).\n   * Does not restrict which scopes appear on the owning entity's catalog-scope picker.\n   */\n  targets: string[];\n\n  icon?: string;\n\n  /**\n   * Platform utility classes applied to the whole scope badge (surface, on-surface, border).\n   * Example: `ax-primary-surface ax-text-on-primary-surface ax-border-border-primary-surface`.\n   */\n  cssClass?: string;\n\n  order?: number;\n}\n\n//#endregion\n","//#region ---- Provider contract ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPCatalogScopeDefinition } from './catalog-scope-definition.types';\n\nexport interface AXPCatalogScopeDefinitionProvider {\n  items(): Promise<AXPCatalogScopeDefinition[]>;\n}\n\nexport const AXP_CATALOG_SCOPE_DEFINITION_PROVIDER = new InjectionToken<AXPCatalogScopeDefinitionProvider[]>(\n  'AXP_CATALOG_SCOPE_DEFINITION_PROVIDER',\n);\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_CATALOG_SCOPE_DEFINITION_PROVIDER } from './catalog-scope-definition.provider';\nimport type { AXPCatalogScopeDefinition } from './catalog-scope-definition.types';\n\n//#endregion\n\n//#region ---- Aggregator service ----\n\n/**\n * Collects {@link AXPCatalogScopeDefinition} entries from all registered providers.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPCatalogScopeDefinitionProviderService {\n  //#region ---- Services & Dependencies ----\n\n  private readonly providers = inject(AXP_CATALOG_SCOPE_DEFINITION_PROVIDER, { optional: true });\n  private readonly translation = inject(AXTranslationService);\n\n  //#endregion\n\n  //#region ---- Public API ----\n\n  async items(): Promise<AXPCatalogScopeDefinition[]> {\n    const merged: AXPCatalogScopeDefinition[] = [];\n    const seen = new Set<string>();\n\n    if (!Array.isArray(this.providers)) {\n      return merged;\n    }\n\n    for (const raw of this.providers) {\n      const provider = await Promise.resolve(raw);\n      if (!provider || typeof provider.items !== 'function') {\n        continue;\n      }\n      for (const item of await provider.items()) {\n        const name = item.name?.trim();\n        if (!name) {\n          continue;\n        }\n        if (seen.has(name)) {\n          throw new Error(`Duplicate catalog scope definition: \"${name}\"`);\n        }\n        seen.add(name);\n        merged.push(item);\n      }\n    }\n\n    return merged.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n  }\n\n  async get(name: string): Promise<AXPCatalogScopeDefinition | undefined> {\n    const key = name?.trim();\n    if (!key) {\n      return undefined;\n    }\n    return (await this.items()).find((d) => d.name === key);\n  }\n\n  /**\n   * Scopes applicable to the given entity ref (`Module.Entity`).\n   */\n  async byTarget(entityRef: string): Promise<AXPCatalogScopeDefinition[]> {\n    const target = entityRef?.trim();\n    if (!target) {\n      return [];\n    }\n    return (await this.items()).filter((d) => d.targets?.some((t) => t === target));\n  }\n\n  /**\n   * Resolves display title for a scope key (active locale).\n   */\n  resolveTitle(definition: AXPCatalogScopeDefinition): string {\n    const locale = this.translation.getActiveLang() ?? 'en-US';\n    if (typeof definition.title === 'string') {\n      const title = definition.title.trim();\n      if (title.startsWith('@')) {\n        return this.translation.translateSync(title) || title;\n      }\n      return title;\n    }\n    return resolveMultiLanguageString(definition.title, locale) || definition.name;\n  }\n\n  //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { inject } from '@angular/core';\nimport {\n  AXPDataSourceDefinition,\n  AXPDataSourceDefinitionProvider,\n} from '../data/datasource-definition-provider.service';\nimport { AXPFilterDefinition, AXPPlatformCoreDataSourceKeys } from '@acorex/platform/contracts';\nimport { AXPCatalogScopeDefinitionProviderService } from './catalog-scope-definition-provider.service';\n\n//#endregion\n\n//#region ---- Data source definition ----\n\n/**\n * Registered catalog scopes for select / selection-list widgets via {@link AXPPlatformCoreDataSourceKeys.CatalogScopes}.\n */\nexport class AXPCatalogScopeDefinitionsDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n  //#region ---- Services & Dependencies ----\n\n  private readonly catalogScopeRegistry = inject(AXPCatalogScopeDefinitionProviderService);\n\n  //#endregion\n\n  //#region ---- Public API ----\n\n  async items(): Promise<AXPDataSourceDefinition[]> {\n    return [\n      {\n        name: AXPPlatformCoreDataSourceKeys.CatalogScopes,\n        title: 'Catalog scopes',\n        source: () =>\n          new AXDataSource({\n            key: 'name',\n            pageSize: 500,\n            load: async (e) => {\n              const all = await this.catalogScopeRegistry.items();\n              const localeFilter = this.readTargetFilter(e?.filter);\n              const items = all\n                .filter((scope) => !localeFilter || scope.targets?.includes(localeFilter))\n                .map((scope) => ({\n                  name: scope.name,\n                  title: this.catalogScopeRegistry.resolveTitle(scope),\n                  description: scope.description,\n                  targets: scope.targets,\n                  icon: scope.icon,\n                  cssClass: scope.cssClass,\n                }));\n              return { items, total: items.length };\n            },\n            byKey: async (key: unknown) => {\n              const name = String(key ?? '').trim();\n              if (!name) {\n                return undefined;\n              }\n              const scope = await this.catalogScopeRegistry.get(name);\n              if (!scope) {\n                return undefined;\n              }\n              return {\n                name: scope.name,\n                title: this.catalogScopeRegistry.resolveTitle(scope),\n                description: scope.description,\n                targets: scope.targets,\n                icon: scope.icon,\n                cssClass: scope.cssClass,\n              };\n            },\n          }),\n        columns: [\n          { name: 'name', title: 'Name', datatype: 'string', type: 'text-editor' },\n          { name: 'title', title: 'Title', datatype: 'string', type: 'text-editor' },\n        ],\n        filters: [\n          {\n            field: 'targets',\n            title: 'Target entity',\n            operator: { type: 'contains' },\n            widget: { type: 'text-editor' },\n            filterType: { advance: false, inline: false },\n          } as AXPFilterDefinition,\n        ],\n        textField: { name: 'title', title: 'Title' },\n        valueField: { name: 'name', title: 'Name' },\n      },\n    ];\n  }\n\n  //#endregion\n\n  //#region ---- Helpers ----\n\n  private readTargetFilter(filter: unknown): string | undefined {\n    if (!filter || typeof filter !== 'object') {\n      return undefined;\n    }\n    const f = filter as { field?: string; value?: unknown };\n    if (f.field === 'targets' && typeof f.value === 'string' && f.value.trim()) {\n      return f.value.trim();\n    }\n    return undefined;\n  }\n\n  //#endregion\n}\n\n//#endregion\n","import { InjectionToken } from '@angular/core';\nimport { AXPColorPalette } from './color-palette.types';\n\n//#region ----   Color Palette Provider   ----\n\n/**\n * Abstract class for color palette providers\n * Implement this to provide palettes from different sources (system, app, module, etc.)\n */\nexport abstract class AXPColorPaletteProvider {\n    /**\n     * Unique name for this provider (e.g., 'system', 'app', 'module')\n     */\n    abstract name: string;\n\n    /**\n     * Provide color palettes from this source\n     * @returns Promise of palettes\n     */\n    abstract provide(): Promise<AXPColorPalette[]>;\n}\n\n/**\n * Injection token for color palette providers\n * Use this to register multiple palette providers\n */\nexport const AXP_COLOR_PALETTE_PROVIDER = new InjectionToken<AXPColorPaletteProvider[]>(\n    'AXP_COLOR_PALETTE_PROVIDER',\n);\n\n//#endregion\n\n","import { inject, Injectable } from '@angular/core';\nimport { AXP_COLOR_PALETTE_PROVIDER, AXPColorPaletteProvider } from './color-palette.provider';\nimport { AXPColorPalette, AXPColorPaletteFilterOptions } from './color-palette.types';\n\n//#region ----   Color Palette Service   ----\n\n/**\n * Service for managing color palettes from multiple providers\n * Aggregates palettes from all registered providers\n */\n@Injectable({\n    providedIn: 'root',\n})\nexport class AXPColorPaletteService {\n    //#region ----   Dependencies   ----\n\n    private providers: AXPColorPaletteProvider[] = inject(AXP_COLOR_PALETTE_PROVIDER, { optional: true }) ?? [];\n\n    //#endregion\n\n    //#region ----   State   ----\n\n    private cache: AXPColorPalette[] | null = null;\n\n    //#endregion\n\n    //#region ----   Public API   ----\n\n    /**\n     * Get all palettes from all providers\n     * @param options Filter options\n     * @returns Promise of palettes\n     */\n    async getPalettes(options?: AXPColorPaletteFilterOptions): Promise<AXPColorPalette[]> {\n        if (!this.cache) {\n            await this.loadPalettes();\n        }\n\n        let palettes = this.cache!;\n\n        // Apply category filter\n        if (options?.category) {\n            palettes = palettes.filter((palette) => palette.category === options.category);\n        }\n\n        // Apply search filter\n        if (options?.search) {\n            const searchLower = options.search.toLowerCase();\n            palettes = palettes.filter(\n                (palette) =>\n                    palette.name.toLowerCase().includes(searchLower) ||\n                    palette.title.toLowerCase().includes(searchLower) ||\n                    palette.description?.toLowerCase().includes(searchLower),\n            );\n        }\n\n        return palettes;\n    }\n\n    /**\n     * Get a palette by name\n     * @param name The unique name of the palette\n     * @returns Promise of palette or undefined if not found\n     */\n    async getPalette(name: string): Promise<AXPColorPalette | undefined> {\n        if (!this.cache) {\n            await this.loadPalettes();\n        }\n\n        return this.cache!.find((p) => p.name === name);\n    }\n\n    /**\n     * Get palettes by category\n     * @param category The category to filter by\n     * @returns Promise of palettes in the specified category\n     */\n    async getByCategory(category: string): Promise<AXPColorPalette[]> {\n        return this.getPalettes({ category });\n    }\n\n    /**\n     * Check if a palette exists\n     * @param name The unique name of the palette\n     * @returns Promise of true if the palette exists\n     */\n    async has(name: string): Promise<boolean> {\n        const palette = await this.getPalette(name);\n        return palette !== undefined;\n    }\n\n    /**\n     * Reload palettes from all providers\n     */\n    async reload(): Promise<void> {\n        this.cache = null;\n        await this.loadPalettes();\n    }\n\n    /**\n     * Get the default palette (material-design) or fallback colors\n     * @returns Promise of default palette, never returns undefined\n     */\n    async getDefaultPalette(): Promise<AXPColorPalette> {\n        const defaultPalette = await this.getPalette('material-design');\n        if (defaultPalette) {\n            return defaultPalette;\n        }\n\n        // Fallback to hardcoded material design colors if provider fails\n        return {\n            name: 'material-design',\n            title: 'Material Design',\n            category: 'material',\n            description: 'Google Material Design color palette',\n            colors: [\n                '#F44336', // Red\n                '#E91E63', // Pink\n                '#9C27B0', // Purple\n                '#673AB7', // Deep Purple\n                '#3F51B5', // Indigo\n                '#2196F3', // Blue\n                '#03A9F4', // Light Blue\n                '#00BCD4', // Cyan\n                '#009688', // Teal\n                '#4CAF50', // Green\n                '#8BC34A', // Light Green\n                '#CDDC39', // Lime\n                '#FFEB3B', // Yellow\n                '#FFC107', // Amber\n                '#FF9800', // Orange\n                '#FF5722', // Deep Orange\n            ],\n        };\n    }\n\n    //#endregion\n\n    //#region ----   Private Methods   ----\n\n    /**\n     * Load palettes from all providers\n     */\n    private async loadPalettes(): Promise<void> {\n        const allPalettes: AXPColorPalette[] = [];\n\n        for (const provider of this.providers) {\n            try {\n                const palettes = await provider.provide();\n                allPalettes.push(...palettes);\n            } catch (error) {\n                console.error(`Error loading palettes from provider ${provider.name}:`, error);\n            }\n        }\n\n        // Remove duplicates based on name\n        const uniquePalettes = allPalettes.filter(\n            (palette, index, self) => index === self.findIndex((p) => p.name === palette.name),\n        );\n\n        this.cache = uniquePalettes;\n    }\n\n    //#endregion\n}\n\n//#endregion\n","//#region ----   Color Palette Types   ----\n\n/**\n * Represents a color palette with a unique identifier and collection of colors\n */\nexport interface AXPColorPalette {\n    /**\n     * Unique identifier for the palette\n     * @example 'material-design', 'brand-colors', 'pastel-theme'\n     */\n    name: string;\n\n    /**\n     * Display title for the palette\n     * @example 'Material Design', 'Brand Colors', 'Pastel Theme'\n     */\n    title: string;\n\n    /**\n     * Array of color codes in any valid CSS color format\n     * @example ['#FF6B6B', '#4ECDC4', 'rgb(255, 107, 107)']\n     */\n    colors: string[];\n\n    /**\n     * Optional description of the palette\n     */\n    description?: string;\n\n    /**\n     * Optional category for grouping palettes\n     * @example 'brand', 'material', 'theme', 'custom'\n     */\n    category?: string;\n}\n\n/**\n * Options for filtering color palettes\n */\nexport interface AXPColorPaletteFilterOptions {\n    category?: string;\n    search?: string;\n}\n\n//#endregion\n\n","import { Injectable } from '@angular/core';\nimport { AXPColorPaletteProvider } from './color-palette.provider';\nimport { AXPColorPalette } from './color-palette.types';\n\n//#region ----   Default System Palettes Provider   ----\n\n/**\n * Default system color palette provider\n * Provides built-in color palettes\n */\n@Injectable()\nexport class AXPDefaultColorPalettesProvider extends AXPColorPaletteProvider {\n    name = 'system';\n\n    async provide(): Promise<AXPColorPalette[]> {\n        return [\n            {\n                name: 'material-design',\n                title: 'Material Design',\n                category: 'material',\n                description: 'Google Material Design color palette',\n                colors: [\n                    '#F44336', // Red\n                    '#E91E63', // Pink\n                    '#9C27B0', // Purple\n                    '#673AB7', // Deep Purple\n                    '#3F51B5', // Indigo\n                    '#2196F3', // Blue\n                    '#03A9F4', // Light Blue\n                    '#00BCD4', // Cyan\n                    '#009688', // Teal\n                    '#4CAF50', // Green\n                    '#8BC34A', // Light Green\n                    '#CDDC39', // Lime\n                    '#FFEB3B', // Yellow\n                    '#FFC107', // Amber\n                    '#FF9800', // Orange\n                    '#FF5722', // Deep Orange\n                ],\n            },\n            {\n                name: 'pastel',\n                title: 'Pastel Colors',\n                category: 'theme',\n                description: 'Soft pastel color palette',\n                colors: [\n                    '#FFB3BA', // Light Pink\n                    '#FFDFBA', // Light Peach\n                    '#FFFFBA', // Light Yellow\n                    '#BAFFC9', // Light Green\n                    '#BAE1FF', // Light Blue\n                    '#E0BBE4', // Light Purple\n                    '#FFDFD3', // Light Coral\n                    '#D4F1F4', // Light Cyan\n                ],\n            },\n            {\n                name: 'vibrant',\n                title: 'Vibrant Colors',\n                category: 'theme',\n                description: 'Bold and vibrant color palette',\n                colors: [\n                    '#FF6B6B', // Vibrant Red\n                    '#4ECDC4', // Vibrant Teal\n                    '#45B7D1', // Vibrant Blue\n                    '#FFA07A', // Vibrant Salmon\n                    '#98D8C8', // Vibrant Mint\n                    '#F7DC6F', // Vibrant Yellow\n                    '#BB8FCE', // Vibrant Purple\n                    '#85C1E2', // Vibrant Sky Blue\n                ],\n            },\n            {\n                name: 'earth-tones',\n                title: 'Earth Tones',\n                category: 'theme',\n                description: 'Natural earth tone color palette',\n                colors: [\n                    '#8B4513', // Saddle Brown\n                    '#A0522D', // Sienna\n                    '#D2691E', // Chocolate\n                    '#CD853F', // Peru\n                    '#DEB887', // Burlywood\n                    '#F5DEB3', // Wheat\n                    '#556B2F', // Dark Olive Green\n                    '#6B8E23', // Olive Drab\n                ],\n            },\n            {\n                name: 'monochrome',\n                title: 'Monochrome',\n                category: 'theme',\n                description: 'Grayscale color palette',\n                colors: [\n                    '#000000', // Black\n                    '#262626', // Very Dark Gray\n                    '#404040', // Dark Gray\n                    '#595959', // Medium Dark Gray\n                    '#737373', // Medium Gray\n                    '#8C8C8C', // Light Medium Gray\n                    '#A6A6A6', // Light Gray\n                    '#BFBFBF', // Very Light Gray\n                    '#D9D9D9', // Lighter Gray\n                    '#F2F2F2', // Almost White\n                    '#FFFFFF', // White\n                ],\n            },\n        ];\n    }\n}\n\n//#endregion\n\n","import { InjectionToken } from '@angular/core';\nimport { AXPColumnWidthProvider } from './column-width.types';\n\n//#region ----   Column Width Provider   ----\n\n/**\n * Injection token for column width providers\n * Use this to register multiple column width providers with multi: true\n *\n * @example\n * ```typescript\n * providers: [\n *   {\n *     provide: AXP_COLUMN_WIDTH_PROVIDER,\n *     useValue: {\n *       matchers: [\n *         { name: 'title', width: '300px', priority: 10 },\n *         { widgetType: /text-box/i, width: '200px' }\n *       ],\n *       priority: 150\n *     },\n *     multi: true\n *   }\n * ]\n * ```\n */\nexport const AXP_COLUMN_WIDTH_PROVIDER = new InjectionToken<AXPColumnWidthProvider[]>(\n  'AXP_COLUMN_WIDTH_PROVIDER'\n);\n\n//#endregion\n","import { inject, Injectable } from '@angular/core';\nimport { AXP_COLUMN_WIDTH_PROVIDER } from './column-width.provider';\nimport {\n  AXPColumnWidthMatcher,\n  AXPColumnWidthProvider,\n  ColumnWidthValue,\n  IColumnWithWidth,\n} from './column-width.types';\n\n//#region ----   Column Width Service   ----\n\n/**\n * Service for resolving column widths based on registered providers\n * Supports matching by column name (priority) and widget type (fallback)\n * Uses multi-provider pattern for extensibility\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPColumnWidthService {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly providers: AXPColumnWidthProvider[] = inject(AXP_COLUMN_WIDTH_PROVIDER, {\n    optional: true,\n  }) ?? [];\n\n  //#region ----   Public Methods   ----\n\n  /**\n   * Resolve width for a column based on registered providers\n   * Only returns a width if column doesn't already have one set\n   *\n   * @param column Column to resolve width for\n   * @returns Resolved width string (normalized) or undefined if no match or column already has width\n   */\n  resolveWidth(column: IColumnWithWidth): string | undefined {\n    // If column already has a width set, don't override\n    const existingWidth = column.width || column.options?.width;\n    if (existingWidth) {\n      return undefined;\n    }\n\n    // Get widget type from column (support both widget.type and showAs.type)\n    const widgetType = column.widget?.type || column.showAs?.type;\n\n    // Collect all matchers from all providers\n    const allMatchers = this.collectMatchers();\n\n    // Try name-based matches first (higher priority)\n    const nameMatch = this.findNameMatch(column.name, allMatchers);\n    if (nameMatch) {\n      return this.normalizeWidth(nameMatch.width);\n    }\n\n    // Fallback to widget-type matches (case-insensitive)\n    if (widgetType) {\n      const widgetMatch = this.findWidgetTypeMatch(widgetType, allMatchers);\n      if (widgetMatch) {\n        return this.normalizeWidth(widgetMatch.width);\n      }\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Apply resolved width to a column (mutates the column)\n   * Only applies if column doesn't already have a width\n   *\n   * @param column Column to apply width to\n   * @returns true if width was applied, false if column already had width or no match found\n   */\n  applyWidth(column: IColumnWithWidth): boolean {\n    const width = this.resolveWidth(column);\n    if (!width) {\n      return false;\n    }\n\n    // Apply to the appropriate property\n    if (column.options) {\n      column.options.width = width;\n    } else {\n      column.width = width;\n    }\n\n    return true;\n  }\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  /**\n   * Collect all matchers from all providers, sorted by provider priority and matcher priority\n   */\n  private collectMatchers(): Array<{ matcher: AXPColumnWidthMatcher; providerPriority: number }> {\n    const allMatchers: Array<{ matcher: AXPColumnWidthMatcher; providerPriority: number }> = [];\n\n    for (const provider of this.providers) {\n      const providerPriority = provider.priority ?? 100;\n      for (const matcher of provider.matchers) {\n        allMatchers.push({\n          matcher,\n          providerPriority,\n        });\n      }\n    }\n\n    // Sort by provider priority (descending), then by matcher priority (descending)\n    allMatchers.sort((a, b) => {\n      if (a.providerPriority !== b.providerPriority) {\n        return b.providerPriority - a.providerPriority; // Higher priority first\n      }\n      const priorityA = a.matcher.priority ?? 0;\n      const priorityB = b.matcher.priority ?? 0;\n      return priorityB - priorityA; // Higher priority first\n    });\n\n    return allMatchers;\n  }\n\n  /**\n   * Find first matching matcher by column name\n   * Name matches take precedence over widget type matches\n   */\n  private findNameMatch(\n    columnName: string,\n    allMatchers: Array<{ matcher: AXPColumnWidthMatcher; providerPriority: number }>,\n  ): AXPColumnWidthMatcher | undefined {\n    for (const { matcher } of allMatchers) {\n      if (!matcher.name) {\n        continue; // Skip if no name matcher\n      }\n\n      if (typeof matcher.name === 'string') {\n        // Exact string match (case-sensitive for names)\n        if (matcher.name === columnName) {\n          return matcher;\n        }\n      } else if (matcher.name instanceof RegExp) {\n        // RegExp match\n        if (matcher.name.test(columnName)) {\n          return matcher;\n        }\n      }\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Find first matching matcher by widget type (case-insensitive)\n   */\n  private findWidgetTypeMatch(\n    widgetType: string,\n    allMatchers: Array<{ matcher: AXPColumnWidthMatcher; providerPriority: number }>,\n  ): AXPColumnWidthMatcher | undefined {\n    const widgetTypeLower = widgetType.toLowerCase();\n\n    for (const { matcher } of allMatchers) {\n      if (!matcher.widgetType) {\n        continue; // Skip if no widget type matcher\n      }\n\n      if (typeof matcher.widgetType === 'string') {\n        // Case-insensitive string match\n        if (matcher.widgetType.toLowerCase() === widgetTypeLower) {\n          return matcher;\n        }\n      } else if (matcher.widgetType instanceof RegExp) {\n        // RegExp match (should already be case-insensitive if needed, but we'll test case-insensitively)\n        // Create a new regex with case-insensitive flag if not already present\n        let regex = matcher.widgetType;\n        if (!regex.flags.includes('i')) {\n          regex = new RegExp(regex.source, regex.flags + 'i');\n        }\n        if (regex.test(widgetType)) {\n          return matcher;\n        }\n      }\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Normalize width value to string format\n   * Numbers are converted to pixels (e.g., 150 -> '150px')\n   * Strings are preserved as-is (supports any CSS unit)\n   */\n  private normalizeWidth(width: ColumnWidthValue): string {\n    if (typeof width === 'number') {\n      return `${width}px`;\n    }\n    return width;\n  }\n\n  //#endregion\n}\n\n//#endregion\n","//#region ----   Column Width Types   ----\n\n/**\n * Column width value can be a number (converted to pixels) or a string with any CSS unit\n * @example 150 (becomes '150px'), '300px', '50%', '2rem', '20ch'\n */\nexport type ColumnWidthValue = string | number;\n\n/**\n * Matcher for column name - can be exact string match or RegExp pattern\n * @example 'title', /^user/, /.*name$/i\n */\nexport type ColumnNameMatcher = string | RegExp;\n\n/**\n * Matcher for widget type - can be exact string match or RegExp pattern (case-insensitive)\n * @example 'text-box', /^date/, /.*editor$/i\n */\nexport type WidgetTypeMatcher = string | RegExp;\n\n/**\n * Defines a single width matching rule\n */\nexport interface AXPColumnWidthMatcher {\n  /**\n   * Match by column name (exact string or RegExp pattern)\n   * Takes precedence over widgetType matching\n   * @example 'title', /^user/, /.*name$/i\n   */\n  name?: ColumnNameMatcher;\n\n  /**\n   * Match by widget type (exact string or RegExp pattern, case-insensitive)\n   * Used as fallback when name doesn't match\n   * @example 'text-box', /^date/, /.*editor$/i\n   */\n  widgetType?: WidgetTypeMatcher;\n\n  /**\n   * Width value to apply if this matcher matches\n   * Numbers are converted to pixels (e.g., 150 -> '150px')\n   * Strings can include any CSS unit (e.g., '300px', '50%', '2rem')\n   */\n  width: ColumnWidthValue;\n\n  /**\n   * Priority for this matcher within the provider (higher = more specific, applied first)\n   * Default: 0\n   */\n  priority?: number;\n}\n\n/**\n * Provider configuration for column width rules\n */\nexport interface AXPColumnWidthProvider {\n  /**\n   * Array of matchers to evaluate\n   * Evaluated in priority order (highest first), then by match type (name before widgetType)\n   */\n  matchers: AXPColumnWidthMatcher[];\n\n  /**\n   * Priority for this provider relative to other providers (higher = applied first)\n   * Default: 100\n   */\n  priority?: number;\n}\n\n/**\n * Generic column interface for width resolution\n * Works with any column type that has these properties\n */\nexport interface IColumnWithWidth {\n  /**\n   * Column name\n   */\n  name: string;\n\n  /**\n   * Current width (if already set)\n   */\n  width?: string;\n\n  /**\n   * Widget type information (optional)\n   */\n  widget?: {\n    type: string;\n  };\n\n  /**\n   * Additional options that might contain width\n   */\n  options?: {\n    width?: string;\n  };\n\n  /**\n   * For entity columns - showAs configuration\n   */\n  showAs?: {\n    type: string;\n  };\n}\n\n//#endregion\n","import { AXPColumnWidthProvider } from './column-width.types';\n\n//#region ----   Default Column Width Provider   ----\n\n/**\n * Default column width configuration\n * Migrated from DEFAULT_COLUMN_WIDTHS in column-width.middleware.ts\n * Provides sensible defaults for common column names\n */\nexport const defaultColumnWidthProvider: AXPColumnWidthProvider = {\n    priority: 100,\n    matchers: [\n        // Priority: name-based matches (higher priority = more specific)\n        { name: 'code', width: '150px', priority: 10 },\n        { name: 'name', width: '250px', priority: 10 },\n        { name: 'title', width: '250px', priority: 10 },\n        { name: 'description', width: '350px', priority: 10 },\n        { name: 'note', width: '350px', priority: 10 },\n        { name: 'notes', width: '350px', priority: 10 },\n        { name: 'content', width: '500px', priority: 10 },\n        { name: 'level', width: '100px', priority: 10 },\n        { name: 'order', width: '100px', priority: 10 },\n        { name: 'phones', width: '300px', priority: 10 },\n        { name: 'emails', width: '300px', priority: 10 },\n    ],\n};\n\n//#endregion\n","import { Directive, Type } from '@angular/core';\nimport { AXPContextData, AXPOptionsData } from '@acorex/platform/contracts';\n\nexport interface AXPComponentSlotConfig {\n  name: string;\n  priority?: number;\n  component?: Type<any>;\n  condition?: ((context?: AXPContextData) => boolean | Promise<boolean>) | string;\n  features?: string[];\n  loadComponent?: () => Type<any> | Promise<Type<any>>;\n  options?: AXPOptionsData | (() => AXPOptionsData) | (() => Promise<AXPOptionsData>);\n}\n\nexport interface AXPComponentSlotModuleConfigs {\n  [slotName: string]: AXPComponentSlotConfig[];\n}\n\n@Directive()\nexport abstract class AXPComponentSlot {\n  host: any;\n}\n","//#region ---- Imports ----\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport type AXPDebugData = Record<string, unknown>;\n\n/** Lazy factory — evaluated only when the log method actually emits. */\nexport type AXPDebugDataFactory = () => AXPDebugData;\n\nexport type AXPDebugDataInput = AXPDebugData | AXPDebugDataFactory;\n\n//#endregion\n\n//#region ---- Debug Service ----\n\n/**\n * Platform debug and trace logging.\n * Call `trace` / `traceGroup` for diagnostics (gated by tenant Debug Mode).\n * Call `warn` / `error` for always-on console output.\n *\n * Debug Mode is applied via `setDebugMode()` (wired from settings in platform common).\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPDebugService {\n  //#region ---- Static Access ----\n\n  /** Root instance for call sites outside injection context (e.g. middleware). */\n  static instance: AXPDebugService | undefined;\n\n  //#endregion\n\n  //#region ---- State ----\n\n  private debugModeEnabled = false;\n\n  //#endregion\n\n  //#region ---- Lifecycle ----\n\n  constructor() {\n    AXPDebugService.instance = this;\n  }\n\n  //#endregion\n\n  //#region ---- Debug Mode ----\n\n  isDebugMode(): boolean {\n    return this.debugModeEnabled;\n  }\n\n  setDebugMode(enabled: boolean): void {\n    this.debugModeEnabled = enabled;\n  }\n\n  //#endregion\n\n  //#region ---- Trace API ----\n\n  /**\n   * @param namespace Module/feature namespace (kebab-case). Filter console with `[AXP:<namespace>]`.\n   * @param title Short area name (component, service, middleware).\n   * @param message What happened.\n   * @param data Optional structured payload, or a factory evaluated only when Debug Mode is on.\n   */\n  trace(namespace: string, title: string, message: string, data?: AXPDebugDataInput): void {\n    if (!this.debugModeEnabled) {\n      return;\n    }\n\n    this.log('log', namespace, title, message, data);\n  }\n\n  /**\n   * Same as {@link trace} but emits a collapsible console group (useful for multi-field payloads).\n   */\n  traceGroup(namespace: string, title: string, message: string, data?: AXPDebugDataInput): void {\n    if (!this.debugModeEnabled) {\n      return;\n    }\n\n    const resolved = this.resolveData(data);\n    console.groupCollapsed(this.formatPrefix(namespace, title, message));\n\n    if (resolved != null) {\n      for (const [key, value] of Object.entries(resolved)) {\n        if (value !== undefined) {\n          console.log(key, value);\n        }\n      }\n    }\n\n    console.groupEnd();\n  }\n\n  warn(namespace: string, title: string, message: string, data?: AXPDebugDataInput): void {\n    this.log('warn', namespace, title, message, data);\n  }\n\n  error(namespace: string, title: string, message: string, data?: AXPDebugDataInput): void {\n    this.log('error', namespace, title, message, data);\n  }\n\n  //#endregion\n\n  //#region ---- Utility Methods ----\n\n  private formatPrefix(namespace: string, title: string, message: string): string {\n    return `[AXP:${namespace}] ${title} — ${message}`;\n  }\n\n  private resolveData(data?: AXPDebugDataInput): AXPDebugData | undefined {\n    if (data == null) {\n      return undefined;\n    }\n\n    return typeof data === 'function' ? data() : data;\n  }\n\n  private log(\n    level: 'log' | 'warn' | 'error',\n    namespace: string,\n    title: string,\n    message: string,\n    data?: AXPDebugDataInput,\n  ): void {\n    const prefix = this.formatPrefix(namespace, title, message);\n    const resolved = this.resolveData(data);\n\n    if (resolved != null) {\n      console[level](prefix, resolved);\n      return;\n    }\n\n    console[level](prefix);\n  }\n\n  //#endregion\n}\n\n//#endregion\n","/** Trace namespace for form dirty-state diagnostics (lookup/select revert, discard, baseline). */\nexport const FORM_DIRTY_TRACE_NS = 'FORM STATE';\n","import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';\nimport { cloneDeep, has, isEmpty, isEqual, isPlainObject, unset } from 'lodash-es';\nimport { computed } from '@angular/core';\nimport {\n  getSmart,\n  isFormContextDirty,\n  isFormValueEqual,\n  isSelectionValueEqual,\n  setSmart,\n  summarizeFormContextDirtyDiff,\n  type AXPContextChangeEvent,\n  type AXPContextData,\n  type AXPContextPatchOptions,\n  type AXPContextState,\n  type AXPContextUpdateOptions,\n  type AXPContextUpdateOrigin,\n} from '@acorex/platform/contracts';\nimport { AXPDebugService } from '../debug/debug.service';\nimport { FORM_DIRTY_TRACE_NS } from './form-dirty-trace.constants';\n\n//#region ---- Context signal store ----\n\nexport const AXPContextStore = signalStore(\n  withState(() => ({\n    data: {} as AXPContextData,\n    state: 'initiated' as AXPContextState,\n    /** Last committed / saved baseline — discard reverts to this snapshot. */\n    savedSnapshot: {} as AXPContextData,\n    previousSnapshot: {} as AXPContextData,\n    /** True after a user-origin update since the last {@link commitSaved}. */\n    userEditedSinceCommit: false,\n    lastChange: {\n      state: 'initiated',\n    } as AXPContextChangeEvent,\n  })),\n\n  withComputed(({ data, state, lastChange, savedSnapshot, previousSnapshot, userEditedSinceCommit }) => ({\n    isChanged: computed(() => state() === 'changed'),\n    isReset: computed(() => state() === 'restored'),\n    isInitiated: computed(() => state() === 'initiated'),\n    isEmpty: computed(() => Object.keys(data()).length === 0),\n    isSavedCommitted: computed(() => !isEmpty(savedSnapshot())),\n    hasUserEditedSinceCommit: computed(() => userEditedSinceCommit()),\n    isDirty: computed(() => {\n      const saved = savedSnapshot();\n      if (isEmpty(saved)) {\n        return false;\n      }\n      if (!userEditedSinceCommit()) {\n        return false;\n      }\n      return isFormContextDirty(data(), saved);\n    }),\n    snapshot: computed(() => cloneDeep(data())),\n    saved: computed(() => cloneDeep(savedSnapshot())),\n    /** @deprecated Use {@link saved} — only saved baseline is tracked. */\n    initial: computed(() => cloneDeep(savedSnapshot())),\n    previous: computed(() => cloneDeep(previousSnapshot())),\n    changeEvent: computed(() => lastChange()),\n  })),\n\n  withMethods((store) => {\n    const traceDirty = (\n      title: string,\n      message: string,\n      data?: () => Record<string, unknown>,\n    ): void => {\n      AXPDebugService.instance?.trace(FORM_DIRTY_TRACE_NS, title, message, data);\n    };\n\n    const traceDirtyState = (reason: string, data?: Record<string, unknown>, path?: string): void => {\n      const saved = store.savedSnapshot();\n      const current = store.data();\n      const hasSaved = !isEmpty(saved);\n      const contextDirty = hasSaved && isFormContextDirty(current, saved);\n\n      traceDirty('context-store', reason, () => ({\n        path,\n        userEditedSinceCommit: store.userEditedSinceCommit(),\n        isSavedCommitted: hasSaved,\n        isFormContextDirty: contextDirty,\n        isDirty: store.isDirty(),\n        ...(hasSaved\n          ? {\n              dirtyPaths: contextDirty ? summarizeFormContextDirtyDiff(current, saved) : [],\n            }\n          : {}),\n        ...data,\n      }));\n    };\n\n    const updateValue = (path: string, value: any, options?: AXPContextUpdateOptions) => {\n      const currentData = cloneDeep(store.data());\n      const oldValue = getSmart(currentData, path);\n      const hasSaved = !isEmpty(store.savedSnapshot());\n      const saved = store.savedSnapshot();\n      const savedAtPath = hasSaved ? getSmart(saved, path) : undefined;\n      const origin = options?.origin ?? 'system';\n\n      if (hasSaved && isSelectionValueEqual(value, savedAtPath) && !isEqual(value, savedAtPath)) {\n        value = cloneDeep(savedAtPath);\n      }\n\n      if (hasSaved && !isEqual(value, savedAtPath) && isFormValueEqual(value, savedAtPath)) {\n        value = cloneDeep(savedAtPath);\n      }\n\n      const isArrayLengthChange =\n        Array.isArray(value) && (!Array.isArray(oldValue) || value.length !== oldValue.length);\n\n      /** Same selection id as baseline but different object shape (lookup/select item vs scalar). */\n      const needsSavedShapeRestore =\n        hasSaved && isSelectionValueEqual(value, savedAtPath) && !isFormValueEqual(value, savedAtPath);\n\n      if (!isArrayLengthChange && isEqual(oldValue, value) && !needsSavedShapeRestore) {\n        traceDirty('context-store', 'updateValue skipped (lodash isEqual)', () => ({\n          path,\n          origin,\n          oldValue,\n          value,\n          needsSavedShapeRestore,\n          selectionEqualToSaved: hasSaved ? isSelectionValueEqual(value, savedAtPath) : null,\n          savedAtPath,\n        }));\n        return;\n      }\n\n      const shouldNormalizeSavedShape =\n        hasSaved && isSelectionValueEqual(value, savedAtPath) && !isEqual(oldValue, value);\n\n      if (\n        !isArrayLengthChange &&\n        isFormValueEqual(oldValue, value) &&\n        !shouldNormalizeSavedShape &&\n        !needsSavedShapeRestore\n      ) {\n        traceDirty('context-store', 'updateValue skipped (isFormValueEqual)', () => ({\n          path,\n          origin,\n          oldValue,\n          value,\n          needsSavedShapeRestore,\n          shouldNormalizeSavedShape,\n          selectionEqualToSaved: hasSaved ? isSelectionValueEqual(value, savedAtPath) : null,\n          savedAtPath,\n        }));\n        return;\n      }\n\n      const updatedData = setSmart(currentData, path, value);\n      const isStillDirty = hasSaved && isFormContextDirty(updatedData, saved);\n      const nextUserEdited = isStillDirty\n        ? origin === 'user'\n          ? true\n          : store.userEditedSinceCommit()\n        : false;\n      const changeEvent: AXPContextChangeEvent = {\n        oldValue,\n        newValue: value,\n        path,\n        state: 'changed',\n        data: updatedData,\n        origin,\n      };\n\n      patchState(store, {\n        previousSnapshot: store.snapshot(),\n        data: updatedData,\n        state: 'changed',\n        lastChange: changeEvent,\n        userEditedSinceCommit: nextUserEdited,\n      });\n\n      traceDirty('context-store', 'updateValue applied', () => ({\n        path,\n        origin,\n        oldValue,\n        newValue: value,\n        savedAtPath,\n        selectionEqualToSaved: hasSaved ? isSelectionValueEqual(value, savedAtPath) : null,\n        formValueEqualToSaved: hasSaved ? isFormValueEqual(value, savedAtPath) : null,\n        needsSavedShapeRestore,\n        isStillDirty,\n        nextUserEdited,\n        isDirty: !isEmpty(saved) && nextUserEdited && isStillDirty,\n        dirtyPaths: isStillDirty ? summarizeFormContextDirtyDiff(updatedData, saved) : [],\n      }));\n    };\n\n    const applyObjectPaths = (\n      obj: Record<string, unknown>,\n      options?: AXPContextUpdateOptions,\n      prefix = '',\n    ): void => {\n      for (const [key, value] of Object.entries(obj ?? {})) {\n        const path = prefix ? `${prefix}.${key}` : key;\n        if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n          applyObjectPaths(value as Record<string, unknown>, options, path);\n        } else {\n          updateValue(path, value, options);\n        }\n      }\n    };\n\n    const removePathFromContext = (path: string, origin: AXPContextUpdateOrigin = 'system') => {\n      const currentData = cloneDeep(store.data());\n      if (!has(currentData, path)) {\n        return;\n      }\n\n      unset(currentData, path);\n\n      const parts = path.split('.');\n      for (let i = parts.length - 1; i > 0; i--) {\n        const parentPath = parts.slice(0, i).join('.');\n        const parentObj = getSmart(currentData, parentPath);\n        if (isPlainObject(parentObj) && isEmpty(Object.keys(parentObj))) {\n          unset(currentData, parentPath);\n        }\n      }\n\n      const saved = store.savedSnapshot();\n      const isStillDirty = !isEmpty(saved) && isFormContextDirty(currentData, saved);\n\n      patchState(store, {\n        previousSnapshot: store.snapshot(),\n        data: currentData,\n        state: 'changed',\n        lastChange: {\n          path,\n          state: 'changed',\n          data: currentData,\n          origin,\n        },\n        userEditedSinceCommit: isStillDirty\n          ? origin === 'user'\n            ? true\n            : store.userEditedSinceCommit()\n          : false,\n      });\n\n      traceDirty('context-store', 'removePathFromContext', () => ({\n        path,\n        origin,\n        isStillDirty,\n        dirtyPaths: isStillDirty ? summarizeFormContextDirtyDiff(currentData, saved) : [],\n      }));\n    };\n\n    const syncPathToSavedBaseline = (path: string, options?: AXPContextUpdateOptions) => {\n      const saved = store.savedSnapshot();\n      if (isEmpty(saved)) {\n        return;\n      }\n\n      const origin = options?.origin ?? 'system';\n      if (has(saved, path)) {\n        updateValue(path, cloneDeep(getSmart(saved, path)), { origin });\n        return;\n      }\n\n      removePathFromContext(path, origin);\n    };\n\n    const revertToSaved = () => {\n      const savedData = store.saved();\n      const changeEvent: AXPContextChangeEvent = {\n        oldValue: cloneDeep(store.data()),\n        newValue: cloneDeep(savedData),\n        path: '',\n        state: 'restored',\n        data: savedData,\n      };\n\n      patchState(store, {\n        previousSnapshot: store.snapshot(),\n        data: savedData,\n        state: 'restored',\n        lastChange: changeEvent,\n        userEditedSinceCommit: false,\n      });\n\n      traceDirtyState('revertToSaved');\n    };\n\n    return {\n      update(path: string, value: any, options?: AXPContextUpdateOptions) {\n        updateValue(path, value, options);\n      },\n\n      applyObjectPaths,\n\n      /** Aligns a context path with the saved baseline (restore value or remove if absent). */\n      syncPathToSavedBaseline,\n\n      patch(context: Record<string, any>, options?: AXPContextPatchOptions) {\n        const currentData = cloneDeep(store.data());\n        const updatedData = { ...currentData, ...context };\n        const changeEvent: AXPContextChangeEvent = {\n          state: 'patch',\n          data: updatedData,\n        };\n\n        const syncedSnapshot = cloneDeep(updatedData);\n\n        patchState(store, {\n          ...(options?.updateSaved\n            ? { savedSnapshot: syncedSnapshot, previousSnapshot: syncedSnapshot }\n            : { previousSnapshot: store.snapshot() }),\n          data: updatedData,\n          state: 'changed',\n          lastChange: changeEvent,\n        });\n      },\n\n      /** Reverts live data to the last saved snapshot. */\n      revertToSaved,\n\n      reset() {\n        revertToSaved();\n      },\n\n      /** Loads live data; saved baseline is committed separately via {@link commitSaved}. */\n      set(initialData: any) {\n        const currentData = store.data();\n        if (isFormValueEqual(currentData, initialData)) {\n          return;\n        }\n\n        const changeEvent: AXPContextChangeEvent = {\n          oldValue: null,\n          newValue: cloneDeep(initialData),\n          path: '',\n          state: 'initiated',\n          data: initialData,\n        };\n\n        patchState(store, {\n          previousSnapshot: store.snapshot(),\n          data: initialData,\n          state: 'initiated',\n          lastChange: changeEvent,\n          userEditedSinceCommit: false,\n        });\n      },\n\n      getValue(path: string) {\n        return getSmart(store.data(), path);\n      },\n\n      getSavedValue(path: string) {\n        return getSmart(store.savedSnapshot(), path);\n      },\n\n      hasValue(path: string) {\n        return has(store.data(), path);\n      },\n\n      /** Marks the current data as the saved baseline. */\n      commitSaved() {\n        const snapshot = cloneDeep(store.data());\n        patchState(store, {\n          savedSnapshot: snapshot,\n          previousSnapshot: snapshot,\n          state: 'initiated',\n          userEditedSinceCommit: false,\n          lastChange: {\n            state: 'initiated',\n            data: snapshot,\n          },\n        });\n        traceDirtyState('commitSaved');\n      },\n\n      /** Merges parent-bound entity fields without resetting the saved baseline. */\n      applyParentBind(merged: AXPContextData) {\n        if (isFormValueEqual(store.data(), merged)) {\n          return;\n        }\n\n        patchState(store, {\n          data: merged,\n        });\n      },\n    };\n  }),\n);\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXFormatService } from '@acorex/core/format';\nimport { get } from 'lodash-es';\n\nimport type { AXPContextEvalPipe, AXPContextEvalPipeSpec } from './context-eval.types';\n\n//#endregion\n\n//#region ---- Pipe normalization ----\n\n/** Normalizes shorthand pipe names to `{ type, options? }` specs. */\nexport function normalizeContextEvalPipes(pipes: AXPContextEvalPipe[]): AXPContextEvalPipeSpec[] {\n  return pipes.map((pipe) => (typeof pipe === 'string' ? { type: pipe } : pipe));\n}\n\n//#endregion\n\n//#region ---- Pipe application ----\n\n/**\n * Applies a left-to-right formatter pipeline via {@link AXFormatService}.\n * Unknown formatters fall back to a trimmed string representation.\n */\nexport function applyContextEvalPipes(\n  value: unknown,\n  pipes: AXPContextEvalPipe[] | undefined,\n  formatService: AXFormatService,\n): unknown {\n  if (!pipes?.length) {\n    return value;\n  }\n\n  let current = value;\n  for (const pipe of normalizeContextEvalPipes(pipes)) {\n    try {\n      current = formatService.format(current, pipe.type, pipe.options);\n    } catch {\n      current = current == null ? '' : String(current);\n    }\n  }\n\n  return current;\n}\n\n/** Reads a nested path from data and optionally applies display pipes. */\nexport function contextEvalWithPipes(\n  data: Record<string, unknown>,\n  path: string,\n  formatService: AXFormatService,\n  pipes?: AXPContextEvalPipe[],\n): unknown {\n  return applyContextEvalPipes(get(data, path), pipes, formatService);\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXFormatService } from '@acorex/core/format';\nimport { inject, Injectable } from '@angular/core';\nimport { get } from 'lodash-es';\n\nimport { applyContextEvalPipes } from './context-eval-pipes.util';\nimport type { AXPContextEvalFn, AXPContextEvalOptions } from './context-eval.types';\n\n//#endregion\n\n/**\n * Builds sync `context.eval(path, { pipes })` functions backed by {@link AXFormatService}.\n * Supports built-in and custom formatters registered on {@link AXFormatModule}.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPContextEvalFactory {\n  //#region ---- Services & Dependencies ----\n\n  private readonly formatService = inject(AXFormatService);\n\n  //#endregion\n\n  //#region ---- Factory ----\n\n  /** Creates a sync eval function for the given record/context data object. */\n  create(data: Record<string, unknown>): AXPContextEvalFn {\n    return (path: string, options?: AXPContextEvalOptions) => {\n      const raw = get(data, path);\n      return applyContextEvalPipes(raw, options?.pipes, this.formatService);\n    };\n  }\n\n  /** Creates `{ eval }` scope object for expression evaluator scopes. */\n  createScope(data: Record<string, unknown>): { eval: AXPContextEvalFn } {\n    return { eval: this.create(data) };\n  }\n\n  /**\n   * Display-tier scope that re-reads data on each eval (for live stores / changing row context).\n   */\n  createLiveScope(getData: () => Record<string, unknown>): { eval: AXPContextEvalFn } {\n    return {\n      eval: (path: string, options?: AXPContextEvalOptions) =>\n        this.create(getData())(path, options),\n    };\n  }\n\n  //#endregion\n}\n","//#region ---- Types ----\n\n/** Registered {@link AXFormatService} formatter name (e.g. `date`, `translate`, custom). */\nexport type AXPContextEvalPipeName = string;\n\nexport interface AXPContextEvalPipeSpec {\n  type: AXPContextEvalPipeName;\n  options?: Record<string, unknown>;\n}\n\n/** Shorthand pipe name or full spec with formatter options. */\nexport type AXPContextEvalPipe = AXPContextEvalPipeName | AXPContextEvalPipeSpec;\n\nexport interface AXPContextEvalOptions {\n  pipes?: AXPContextEvalPipe[];\n}\n\nexport type AXPContextEvalFn = (path: string, options?: AXPContextEvalOptions) => unknown;\n\n//#endregion\n","//#region ---- Template normalization ----\n\n/**\n * Normalizes display templates before {@link AXPExpressionEvaluatorService} evaluation.\n * Converts simple dot paths (e.g. `{{ position.title }}`) to `context.eval(\"position.title\")`\n * so row data is read from scope.context instead of bare JavaScript identifiers.\n */\nexport function normalizeExpressionTemplate(template: string): string {\n  let normalized = template.replace(\n    /\\{\\{\\s*context\\.eval\\(['\"]([^'\"]+)['\"]\\)\\s*\\}\\}/g,\n    '{{ context.eval(\"$1\") }}',\n  );\n\n  if (!normalized.includes('{{')) {\n    normalized = normalized.replace(/\\{/g, '{{').replace(/\\}/g, '}}');\n  }\n\n  return normalized.replace(\n    /\\{\\{\\s*(?!context\\.)([\\w]+(?:\\.[\\w]+)*)\\s*\\}\\}/g,\n    '{{ context.eval(\"$1\") }}',\n  );\n}\n\n//#endregion\n","import { Injectable, InjectionToken, Injector, inject } from '@angular/core';\nimport { AXPExpressionEvaluatorScope } from './expression-evaluator.service';\n\nexport interface AXPExpressionEvaluatorScopeProvider {\n    provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void>;\n}\n\nexport class AXPExpressionEvaluatorScopeProviderContext {\n    private scopes: AXPExpressionEvaluatorScope = {};\n    addScope(namespace: string, functions: { [name: string]: Function }) {\n        this.scopes[namespace] = { ...this.scopes[namespace], ...functions };\n    }\n    getScopes(): AXPExpressionEvaluatorScope {\n        return this.scopes;\n    }\n}\nexport type AXPExpressionEvaluatorScopeProviders = AXPExpressionEvaluatorScopeProvider[] | (() => AXPExpressionEvaluatorScopeProvider[]);\n\nexport const AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER = new InjectionToken<AXPExpressionEvaluatorScopeProviders>(\n    'AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER'\n);\n\n@Injectable({ providedIn: 'root' })\nexport class AXPExpressionEvaluatorScopeProviderService {\n    private readonly injector = inject(Injector);\n    private cache: AXPExpressionEvaluatorScope | null = null;\n\n    private async load(): Promise<void> {\n        if (this.cache) return;\n        const raw = this.injector.get(AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, [], { optional: true });\n        const providers: AXPExpressionEvaluatorScopeProvider[] = Array.isArray(raw)\n            ? raw\n            : typeof raw === 'function'\n              ? raw()\n              : [];\n        const context = new AXPExpressionEvaluatorScopeProviderContext();\n        for (const provider of providers) {\n            // Resolve lazy-loaded providers (provideLazyProvider useFactory returns Promise<Provider>)\n            const resolved = await Promise.resolve(provider);\n            if (!resolved || typeof resolved.provide !== 'function') {\n                continue;\n            }\n            await resolved.provide(context);\n        }\n        this.cache = context.getScopes();\n    }\n\n    public async getScopesAsync(): Promise<AXPExpressionEvaluatorScope> {\n        await this.load();\n        return this.cache || {};\n    }\n} ","import { Injectable, inject } from '@angular/core';\nimport { AXPExpressionEvaluatorScopeProviderService } from './expression-evaluator-scope-provider.service';\nimport { normalizeExpressionTemplate } from './expression-template-normalize.util';\n\nexport type AXPExpressionEvaluatorScope = { [name: string]: { [name: string]: Function } };\n\n@Injectable({ providedIn: 'root' })\nexport class AXPExpressionEvaluatorService {\n  // Memoization cache for compiled expressions\n  private expressionCache = new Map<string, Function>();\n  private providerService = inject(AXPExpressionEvaluatorScopeProviderService);\n\n  private getOrCompileFunction(expression: string): Function {\n    if (!this.expressionCache.has(expression)) {\n      // Check if expression contains multiple statements (has semicolons or newlines)\n      const hasMultipleStatements = expression.includes(';') || expression.includes('\\n');\n\n      let fn: Function;\n      if (hasMultipleStatements) {\n        // For multiple statements, execute them in sequence and return the last expression\n        fn = new Function('scope', `with (scope) { return (async function() { ${expression} })(); }`);\n      } else {\n        // For single expressions, use return\n        fn = new Function('scope', `with (scope) { return (async function() { return ${expression}; })(); }`);\n      }\n\n      this.expressionCache.set(expression, fn);\n    }\n    return this.expressionCache.get(expression)!;\n  }\n\n  private async getMergedScope(userScope: AXPExpressionEvaluatorScope): Promise<AXPExpressionEvaluatorScope> {\n    const pluginScopes = await this.providerService.getScopesAsync();\n    // Merge pluginScopes and userScope (userScope takes precedence)\n    return { ...pluginScopes, ...userScope };\n  }\n\n  public async evaluate(source: any | any[], scope: AXPExpressionEvaluatorScope = {}): Promise<any> {\n    try {\n      const mergedScope = await this.getMergedScope(scope);\n      if (typeof source === 'string' && source.includes('{{')) {\n        return await this.evaluateStringExpression(source, mergedScope);\n      } else if (Array.isArray(source)) {\n        const evaluatedArray = [];\n        for (const item of source) {\n          evaluatedArray.push(await this.evaluate(item, mergedScope));\n        }\n        return evaluatedArray;\n      } else if (typeof source === 'object' && source !== null) {\n        const evaluatedObject: any = {};\n        for (const key in source) {\n          if (source.hasOwnProperty(key)) {\n            evaluatedObject[key] = await this.evaluate(source[key], mergedScope);\n          }\n        }\n        return evaluatedObject;\n      } else {\n        return source;\n      }\n    } catch (error: unknown) {\n      console.error('Expression evaluator - Error evaluating expression:', source, error);\n      return false;\n    }\n  }\n\n  private async evaluateStringExpression(templateExpression: string, scope: AXPExpressionEvaluatorScope): Promise<any> {\n    const normalizedTemplate = normalizeExpressionTemplate(templateExpression);\n\n    // Check if the input is exactly a single {{ ... }} expression (handle multiline)\n    const exactMatch = normalizedTemplate.match(/^\\s*\\{\\{\\s*([\\s\\S]*?)\\s*\\}\\}\\s*$/);\n    if (exactMatch) {\n      const expression = exactMatch[1];\n      const sandbox = this.getOrCompileFunction(expression);\n      const result = await sandbox(scope);\n      return result;\n    }\n    // Otherwise, interpolate all {{ ... }} expressions in the string\n    const regex = /\\{\\{\\s*([\\s\\S]*?)\\s*\\}\\}/g;\n    // Collect all matches and their positions\n    const matches = [];\n    let match;\n    while ((match = regex.exec(normalizedTemplate)) !== null) {\n      matches.push({\n        expression: match[1],\n        start: match.index,\n        end: regex.lastIndex,\n        raw: match[0],\n      });\n    }\n    // Evaluate all expressions in parallel\n    const values = await Promise.all(\n      matches.map((m) => {\n        const sandbox = this.getOrCompileFunction(m.expression);\n        return sandbox(scope);\n      }),\n    );\n    // Reconstruct the string with evaluated values\n    let result = '';\n    let lastIndex = 0;\n    matches.forEach((m, i) => {\n      result += normalizedTemplate.slice(lastIndex, m.start);\n      const value = values[i];\n      result += value !== undefined && value !== null ? value : '';\n      lastIndex = m.end;\n    });\n    result += normalizedTemplate.slice(lastIndex);\n    return result;\n  }\n\n  public isExpression(expression: string): boolean {\n    if (typeof expression === 'string') {\n      return expression.trim().startsWith('{{') && expression.trim().endsWith('}}');\n    }\n    return false;\n  }\n}\n","import { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n  selector: 'axp-component-slot-placeholder',\n  template: `<div>\n    <ax-skeleton class=\"ax-w-full ax-h-10 ax-rounded-md\"></ax-skeleton>\n  </div>`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AXSkeletonModule],\n  standalone: true,\n})\nexport class AXPComponentSlotPlaceholderComponent {}\n\n","import { Injectable, Injector } from \"@angular/core\";\nimport { AXPComponentSlotConfig } from \"./component-slot.types\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class AXPComponentSlotRegistryService {\n\n    private registry = new Map<string, AXPComponentSlotConfig[]>();\n\n    register(slotName: string, config: AXPComponentSlotConfig) {\n        let configs = this.registry.get(slotName) || [];\n\n        // Check if the component is already registered in this slot\n        const isDuplicate = configs.some(existingConfig => existingConfig.name === config.name);\n\n        if (!isDuplicate) {\n            configs = [...configs, config]; // Add the new configuration\n            this.registry.set(slotName, configs);\n        }\n    }\n\n    get(slotName: string): AXPComponentSlotConfig[] {\n        return this.registry.get(slotName) || [];\n    }\n}","import {\n  ComponentRef,\n  computed,\n  Directive,\n  effect,\n  ElementRef,\n  inject,\n  Injector,\n  input,\n  OnInit,\n  runInInjectionContext,\n  signal,\n  Type,\n  ViewContainerRef,\n} from '@angular/core';\nimport { sortBy } from 'lodash-es';\nimport { AXPContextData } from '@acorex/platform/contracts';\nimport { AXPContextStore } from '../context/context-store.service';\nimport { AXPExpressionEvaluatorService } from '../expression-evaluator';\nimport { AXPComponentSlotPlaceholderComponent } from './component-slot-placeholder.component';\nimport { AXPComponentSlotRegistryService } from './component-slot-registery.service';\n\n@Directive({\n  selector: 'axp-component-slot',\n  standalone: false,\n  exportAs: 'slot',\n})\nexport class AXPComponentSlotDirective implements OnInit {\n  name = input.required<string>();\n  host = input<any>();\n  context = input<any>();\n\n  private elementRef = inject(ElementRef);\n  private registryService = inject(AXPComponentSlotRegistryService);\n  private injector = inject(Injector);\n  private evaluator = inject(AXPExpressionEvaluatorService);\n  public viewContainerRef = inject(ViewContainerRef);\n  public contextStore = inject(AXPContextStore);\n\n  public isEmpty = computed(() => this._viewCount() === 0);\n\n  // Create a signal to store the count of children\n  private _viewCount = signal(0);\n\n  // Track component references for updates\n  private componentRefs: ComponentRef<any>[] = [];\n\n  // Track placeholder references for replacement\n  private placeholderRefs: Map<number, ComponentRef<AXPComponentSlotPlaceholderComponent>> = new Map();\n\n  constructor() {\n    // Watch for context changes and update component instances\n    effect(() => {\n      const currentContext = this.context();\n      const currentHost = this.host();\n\n      // Update all component references with new context and host\n      this.componentRefs.forEach((componentRef) => {\n        if (componentRef.instance) {\n          Object.assign(componentRef.instance, {\n            host: currentHost,\n            context: currentContext,\n          });\n        }\n      });\n    });\n  }\n\n  async ngOnInit() {\n    await this.loadComponents();\n    // Update the signal after loading\n    this._viewCount.set(this.viewContainerRef.length);\n  }\n\n  async loadComponents() {\n    this.viewContainerRef.clear();\n    // Clear previous component references\n    this.componentRefs = [];\n    this.placeholderRefs.clear();\n\n    const configs = sortBy(this.registryService.get(this.name()), (c) => c.priority ?? 0);\n    if (!configs) {\n      console.error(`No component found for slot ${this.name()}`);\n      return;\n    }\n\n    // Evaluate conditions and check features in parallel for performance\n    const results = await Promise.all(\n      configs.map(async (c) => {\n        // Check condition if provided\n        const conditionPassed = c.condition ? await this.evaluateCondition(c.condition) : true;\n\n        // Check features if provided\n        // const featuresPassed =\n        //   c.features && c.features.length > 0 ? this.sessionService.isFeatureEnabled(...c.features) : true;\n\n        return {\n          config: c,\n          // visible: conditionPassed && featuresPassed,\n          visible: conditionPassed,\n        };\n      }),\n    );\n\n    // Filter visible components while preserving priority order\n    const slots = results.filter((r) => r.visible).map((r) => r.config);\n\n    // Create skeleton placeholders immediately in priority order\n    slots.forEach((config, index) => {\n      const placeholderRef = this.viewContainerRef.createComponent(AXPComponentSlotPlaceholderComponent);\n      this.placeholderRefs.set(index, placeholderRef);\n    });\n\n    // Load all components in parallel and replace placeholders as they become ready\n    const loadPromises = slots.map(async (config, index) => {\n      let component!: Type<any> | null | undefined;\n      let options: { [key: string]: unknown } = {};\n\n      // load component\n      if (typeof config.loadComponent === 'function') {\n        await runInInjectionContext(this.injector, async () => {\n          component = await config.loadComponent?.();\n        });\n      } else if (config.component) {\n        component = config.component;\n      }\n\n      // load options\n      if (typeof config.options === 'function') {\n        await runInInjectionContext(this.injector, async () => {\n          const fun = config.options as Function;\n          options = await fun();\n        });\n      } else if (config.options) {\n        options = await this.evaluator.evaluate(config.options, {});\n      }\n\n      // Replace placeholder with actual component as soon as it's ready\n      if (!component) {\n        console.warn(`Component failed to load for slot ${this.name()} at index ${index}`);\n        // Remove placeholder if component failed to load\n        const placeholderRef = this.placeholderRefs.get(index);\n        if (placeholderRef) {\n          placeholderRef.destroy();\n          this.placeholderRefs.delete(index);\n        }\n        return;\n      }\n\n      // Get the placeholder reference at this index\n      const placeholderRef = this.placeholderRefs.get(index);\n      if (!placeholderRef) {\n        console.warn(`Placeholder not found for index ${index}`);\n        return;\n      }\n\n      // Get the index of the placeholder in the view container\n      const placeholderIndex = this.viewContainerRef.indexOf(placeholderRef.hostView);\n\n      // Remove the placeholder\n      placeholderRef.destroy();\n      this.placeholderRefs.delete(index);\n\n      // Create the actual component at the same position\n      const componentRef = this.viewContainerRef.createComponent(component, { index: placeholderIndex });\n\n      // Store the component reference for future updates\n      this.componentRefs.push(componentRef);\n\n      Object.assign(componentRef.instance, {\n        host: this.host(),\n        context: this.context(),\n        ...options,\n      });\n    });\n\n    // Wait for all components to finish loading (they render as they become ready)\n    await Promise.all(loadPromises);\n  }\n\n  private async evaluateCondition(condition: string | ((context?: AXPContextData) => boolean | Promise<boolean>)) {\n    if (typeof condition === 'string') {\n      const result = await this.evaluator.evaluate(condition, {});\n      return result;\n    }\n    return condition(this.contextStore.data());\n    //return condition(this.context());\n  }\n}\n","import { Inject, ModuleWithProviders, NgModule, Optional } from '@angular/core';\nimport { AXPComponentSlotModuleConfigs } from './component-slot.types';\nimport { AXPComponentSlotRegistryService } from './component-slot-registery.service';\nimport { AXPComponentSlotDirective } from './component-slot.directive';\n\n@NgModule({\n    declarations: [AXPComponentSlotDirective],\n    exports: [AXPComponentSlotDirective]\n})\nexport class AXPComponentSlotModule {\n\n    static forRoot(configs?: AXPComponentSlotModuleConfigs): ModuleWithProviders<AXPComponentSlotModule> {\n        return {\n            ngModule: AXPComponentSlotModule,\n            providers: [\n                {\n                    provide: 'AXPComponentSlotModuleFactory',\n                    useFactory: (registry: AXPComponentSlotRegistryService) => () => {\n                        if (configs) {\n                            for (const [key, value] of Object.entries(configs)) {\n                                value.forEach(v => {\n                                    registry.register(key, v);\n                                })\n                            }\n                        }\n                    },\n                    deps: [AXPComponentSlotRegistryService],\n                    multi: true\n                }\n            ]\n        };\n    }\n\n    static forChild(configs?: AXPComponentSlotModuleConfigs): ModuleWithProviders<AXPComponentSlotModule> {\n        return {\n            ngModule: AXPComponentSlotModule,\n            providers: [\n                {\n                    provide: 'AXPComponentSlotModuleFactory',\n                    useFactory: (registry: AXPComponentSlotRegistryService) => () => {\n                        if (configs) {\n                            for (const [key, value] of Object.entries(configs)) {\n                                value.forEach(v => {\n                                    registry.register(key, v);\n                                })\n                            }\n                        }\n                    },\n                    deps: [AXPComponentSlotRegistryService],\n                    multi: true\n                }\n\n            ]\n        };\n    }\n\n    /**\n     * @ignore\n     */\n    constructor(@Optional() @Inject('AXPComponentSlotModuleFactory') instances: any[]) {\n        instances?.forEach(f => {\n            f();\n        });\n    }\n\n}\n","//#region ---- AI metadata ----\n\n/**\n * Compact hints for assembling platform context into LLM system prompts.\n * Mirrors fields used by {@link AXPAiPlatformRuntimeContext} and the mock engine runtime prompt\n * formatter — keep labels short and values bounded.\n */\nexport interface AXPContextDefinitionAiHints {\n  /**\n   * Short English label for bullet lists (e.g. `UI locale`, `Current instant (UTC, ISO 8601)`).\n   */\n  promptLabel?: string;\n\n  /**\n   * One-line guidance for the model (when to use this value, what not to ask the user).\n   */\n  usageHint?: string;\n\n  /**\n   * When `false`, this definition is omitted from AI system-prompt assembly. Default `true`.\n   */\n  includeInSystemPrompt?: boolean;\n\n  /**\n   * How to stringify the value compactly in prompts.\n   */\n  valueKind?: 'string' | 'number' | 'boolean' | 'instant' | 'locale' | 'dateTime' | 'object';\n\n  /**\n   * When `true`, the value must not be sent to the model (PII, secrets, tokens).\n   */\n  sensitive?: boolean;\n\n  /**\n   * Sort order when rendering the AI context block (lower first).\n   */\n  order?: number;\n}\n\n//#endregion\n\n//#region ---- Definition ----\n\n/**\n * Describes a named platform context key (e.g. `currentDate`, `language`).\n */\nexport interface AXPContextDefinition {\n  /** Stable identifier used as the context key and in expressions. */\n  name: string;\n\n  /** Human-readable title for designers and tooling. */\n  title: string;\n\n  /** What this context represents and when consumers should use it. */\n  description: string;\n\n  /** Optional metadata for AI system-prompt assembly. */\n  ai?: AXPContextDefinitionAiHints;\n}\n\n//#endregion\n","import { InjectionToken } from '@angular/core';\nimport type { AXPContextDefinition } from './context-definition.types';\n\n//#region ---- Provider contract ----\n\nexport interface AXPContextDefinitionProvider {\n  items(): Promise<AXPContextDefinition[]>;\n}\n\nexport const AXP_CONTEXT_DEFINITION_PROVIDER = new InjectionToken<AXPContextDefinitionProvider[]>(\n  'AXP_CONTEXT_DEFINITION_PROVIDER',\n);\n\n//#endregion\n","import { inject, Injectable } from '@angular/core';\nimport {\n  AXP_CONTEXT_DEFINITION_PROVIDER,\n  type AXPContextDefinitionProvider,\n} from './context-definition.provider';\nimport type { AXPContextDefinition } from './context-definition.types';\n\n//#region ---- Aggregator service ----\n\n/**\n * Collects {@link AXPContextDefinition} entries from all registered {@link AXPContextDefinitionProvider} instances.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPContextDefinitionProviderService implements AXPContextDefinitionProvider {\n  //#region ---- Services & Dependencies ----\n\n  private readonly providers = inject(AXP_CONTEXT_DEFINITION_PROVIDER, { optional: true });\n\n  //#endregion\n\n  //#region ---- Public API ----\n\n  async items(): Promise<AXPContextDefinition[]> {\n    const items: AXPContextDefinition[] = [];\n\n    if (!Array.isArray(this.providers)) {\n      return items;\n    }\n\n    for (const raw of this.providers) {\n      const provider = await Promise.resolve(raw);\n      if (provider && typeof provider.items === 'function') {\n        items.push(...(await provider.items()));\n      }\n    }\n\n    return items;\n  }\n\n  async get(name: string): Promise<AXPContextDefinition | undefined> {\n    return (await this.items()).find((d) => d.name === name);\n  }\n\n  //#endregion\n}\n\n//#endregion\n","\nexport class AXPDataGenerator {\n  static uuid(): string {\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (char) => {\n      const random = (Math.random() * 16) | 0;\n      const value = char === 'x' ? random : (random & 0x3) | 0x8;\n      return value.toString(16);\n    });\n  }\n\n  static number(max: number): number;\n  static number(min: number, max: number): number;\n  static number(...args: number[]): number {\n    let min = 0;\n    let max = 100;\n    if (args.length == 1) max = args[0];\n    if (args.length == 2) {\n      min = args[0];\n      max = args[1];\n    }\n    return Math.floor(Math.random() * (max - min + 1)) + min;\n  }\n\n  static date(): Date;\n  static date(start: Date): Date;\n  static date(start: Date, end: Date): Date;\n  static date(...args: any[]): Date {\n    let start = new Date(2000, 0, 1);\n    let end = new Date();\n\n    if (args.length === 1) {\n      start = args[0];\n    } else if (args.length === 2) {\n      start = args[0];\n      end = args[1];\n    }\n\n    const startTime = start.getTime();\n    const endTime = end.getTime();\n    return new Date(startTime + Math.random() * (endTime - startTime));\n  }\n\n  static array<T>(length: number = 5, generator: () => T): T[] {\n    return Array.from({ length }, generator);\n  }\n\n  static pick<T>(items: T[]): T;\n  static pick<T>(items: T[], count: number): T[];\n  static pick<T>(...args: any[]): T | T[] {\n    if (args.length < 1) {\n      throw new Error('Invalid parameters');\n    }\n    const items: T[] = args[0];\n    const count: number = args[1] ?? 1;\n    if (count < 1) {\n      throw new Error('Count must be at least 1');\n    }\n\n    // If the count is greater than the number of items, just return a shuffled copy of the array\n    if (count >= items.length) {\n      return [...items].sort(() => Math.random() - 0.5);\n    }\n\n    // Shuffle the array and slice the first 'count' elements\n    const shuffled = items.slice();\n    for (let i = shuffled.length - 1; i > 0; i--) {\n      const j = Math.floor(Math.random() * (i + 1));\n      [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]]; // Swap elements\n    }\n    return count == 1 ? shuffled.slice(0, count)[0] : shuffled.slice(0, count);\n  }\n\n  static string(length: number = 10): string {\n    const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n    return Array.from({ length }, () => chars.charAt(Math.floor(Math.random() * chars.length))).join('');\n  }\n\n  static boolean(): boolean {\n    return Math.random() >= 0.5;\n  }\n\n  static item<T>(array: T[] = []): T | undefined {\n    return array.length > 0 ? array[Math.floor(Math.random() * array.length)] : undefined;\n  }\n\n  static color(format: 'hsl' | 'rgb' | 'hex' = 'hex'): string {\n    // Generate HSL values with safe ranges for good contrast\n    const h = Math.floor(Math.random() * 360);\n    const s = Math.floor(Math.random() * 20) + 60; // 60% - 80%\n    const l = Math.floor(Math.random() * 20) + 40; // 40% - 60%\n\n    if (format === 'hsl') {\n      return `hsl(${h}, ${s}%, ${l}%)`;\n    }\n\n    // Convert HSL to RGB\n    const { r, g, b } = this.hslToRgb(h, s / 100, l / 100);\n\n    if (format === 'rgb') {\n      return `rgb(${r}, ${g}, ${b})`;\n    }\n\n    // Convert RGB to HEX\n    const toHex = (val: number) => val.toString(16).padStart(2, '0');\n    return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n  }\n\n  //TODO: move or read from utils\n  private static hslToRgb(h: number, s: number, l: number): { r: number; g: number; b: number } {\n    const c = (1 - Math.abs(2 * l - 1)) * s;\n    const x = c * (1 - Math.abs((h / 60) % 2 - 1));\n    const m = l - c / 2;\n    let r = 0, g = 0, b = 0;\n\n    if (h < 60) [r, g, b] = [c, x, 0];\n    else if (h < 120) [r, g, b] = [x, c, 0];\n    else if (h < 180) [r, g, b] = [0, c, x];\n    else if (h < 240) [r, g, b] = [0, x, c];\n    else if (h < 300) [r, g, b] = [x, 0, c];\n    else[r, g, b] = [c, 0, x];\n\n    return {\n      r: Math.round((r + m) * 255),\n      g: Math.round((g + m) * 255),\n      b: Math.round((b + m) * 255)\n    };\n  }\n\n  static alphanumeric(length: number = 10): string {\n    const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n    return Array.from({ length }, () => chars.charAt(Math.floor(Math.random() * chars.length))).join('');\n  }\n  static alphabet(length: number = 10): string {\n    const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n    return Array.from({ length }, () => chars.charAt(Math.floor(Math.random() * chars.length))).join('');\n  }\n\n  static phone(): string {\n    const areaCode = this.number(100, 999);\n    const exchangeCode = this.number(100, 999);\n    const lineNumber = this.number(1000, 9999);\n    return `${areaCode}-${exchangeCode}-${lineNumber}`;\n  }\n\n  static firstName(): string {\n    const firstNames = ['John', 'Allen', 'Jak', 'Rose', 'Kate', 'Liam', 'Olivia', 'Noah', 'Emma', 'Ava'];\n    return this.pick(firstNames);\n  }\n\n  static lastName(): string {\n    const lastNames = ['Gates', 'Jonsen', 'Smith', 'Ford', 'Jakson', 'Brown', 'Johnson', 'Williams', 'Jones', 'Garcia'];\n    return this.pick(lastNames);\n  }\n\n  static email(): string;\n  static email(firstName: string, lastName: string): string;\n  static email(...args: any[]): string {\n    const domains = ['gmail.com', 'yahoo.com', 'outlook.com', 'example.com'];\n    const domain = this.pick(domains);\n    const separator = this.pick(['.', '_', '']);\n    const randomSuffix = this.boolean() ? this.number(1, 99).toString() : '';\n\n    if (args.length === 2) {\n      const firstName = args[0].toLowerCase();\n      const lastName = args[1].toLowerCase();\n      return `${firstName}${separator}${lastName}${randomSuffix}@${domain}`;\n    } else {\n      const firstName = this.firstName().toLowerCase();\n      const lastName = this.lastName().toLowerCase();\n      return `${firstName}${separator}${lastName}${randomSuffix}@${domain}`;\n    }\n  }\n\n  static country(): string {\n    const countries = ['USA', 'Canada', 'Mexico', 'Germany', 'France', 'Japan', 'Australia'];\n    return this.pick(countries);\n  }\n\n  static city(): string {\n    const cities = ['Los Angeles', 'Toronto', 'Vancouver', 'Berlin', 'Paris', 'Tokyo', 'Sydney'];\n    return this.pick(cities);\n  }\n\n  static state(): string {\n    const states = ['NY', 'CA', 'TX', 'ON', 'BC', 'NSW', 'BER', 'IDF', 'TYO'];\n    return this.pick(states);\n  }\n\n  static address(): string {\n    const streets = ['Main St', 'High St', 'Maple Ave', 'Oak St', 'Pine St', 'Cedar St'];\n    const streetNumber = this.number(100, 9999);\n    const street = this.pick(streets);\n    const city = this.city();\n    const state = this.state();\n    const zip = this.number(10000, 99999);\n    const country = this.country();\n    return `${streetNumber} ${street}, ${city}, ${state} ${zip}, ${country}`;\n  }\n\n  static avatar(): string {\n    return `https://avatar.iran.liara.run/public/${this.pick([35, 22, 16, 6, 31])}`;\n    //return `https://i.pravatar.cc/300?u=${this.uuid()}`;\n  }\n}\n","import { extractValue } from \"@acorex/platform/contracts\";\nexport type AXPValueTransformerFunction = (value: any) => any;\n\nexport type AXPValueTransformerFunctions = {\n    getter?: AXPValueTransformerFunction;\n    setter?: AXPValueTransformerFunction;\n};\n\nexport function objectKeyValueTransforms(keyName: string): AXPValueTransformerFunctions {\n    return {\n        getter: (value: any) => {\n            return extractValue(value, keyName);\n        },\n        setter: (value: any) => {\n            return extractValue(value, keyName);\n        },\n    };\n}","import { AXDataSource } from '@acorex/cdk/common';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXPFilterDefinition, AXPMaybePromise, AXPOptionsData } from '@acorex/platform/contracts';\n\nexport interface AXPDataSourceDataFieldDefinition {\n  name: string;\n  title: string;\n  datatype: string;\n  type: string;\n  options?: AXPOptionsData;\n}\n\nexport type AXPLazyDataSource<T = unknown> = AXPMaybePromise<AXDataSource<T>>;\nexport type AXPDataSourceArray<T = unknown> = AXPMaybePromise<Array<T>>;\nexport type AXPDataSourceValue<T = unknown> = AXPMaybePromise<T>;\nexport type AXPDataSourceType<T = any> = AXPLazyDataSource<T> | AXPDataSourceArray<T> | AXPDataSourceValue<T>;\nexport type AXPDataSourceSample<T = any> = AXPDataSourceArray<T> | AXPDataSourceValue<T>;\nexport interface AXPDataSourceDefinition<T = any> {\n  name: string;\n  title: string;\n  valueField?: {\n    name: string;\n    title: string;\n  };\n  textField?: {\n    name: string;\n    title: string;\n  };\n  columns: AXPDataSourceDataFieldDefinition[];\n  filters: AXPFilterDefinition[];\n  samples?: AXPDataSourceSample<T>;\n  visible?: boolean;\n  source: () => AXPDataSourceType<T>;\n}\n\nexport interface AXPDataSourceDefinitionProvider {\n  items(): Promise<AXPDataSourceDefinition[]>;\n}\n\nexport const AXP_DATASOURCE_DEFINITION_PROVIDER = new InjectionToken<AXPDataSourceDefinitionProvider[]>(\n  'AXP_DATASOURCE_TYPE_PROVIDER',\n);\n\n@Injectable({ providedIn: 'root' })\nexport class AXPDataSourceDefinitionProviderService implements AXPDataSourceDefinitionProvider {\n  private providers = inject(AXP_DATASOURCE_DEFINITION_PROVIDER, { optional: true });\n\n  async items(): Promise<AXPDataSourceDefinition[]> {\n    const items: AXPDataSourceDefinition[] = [];\n\n    // Load from DI tokens; resolve lazy providers (provideLazyProvider uses useFactory that returns Promise<T>)\n    if (Array.isArray(this.providers)) {\n      for (const raw of this.providers) {\n        const provider = await Promise.resolve(raw);\n        if (provider && typeof provider.items === 'function') {\n          set(provider, '__parent__', this);\n          items.push(...(await provider.items()));\n        }\n      }\n    }\n\n    return items;\n  }\n\n  async get<T = any>(name: string): Promise<AXPDataSourceDefinition<T> | undefined> {\n    return (await this.items()).find((c) => c.name == name);\n  }\n}\n","//#region ----   Imports   ----\n\nimport { AXDataSource, convertArrayToDataSource } from '@acorex/cdk/common';\nimport { inject, Injectable } from '@angular/core';\nimport { castArray, get, isNil, isString } from 'lodash-es';\nimport { filter, Observable, ReplaySubject, take } from 'rxjs';\nimport {\n  AXPDataSourceDefinition,\n  AXPDataSourceDefinitionProviderService,\n  AXPDataSourceSample,\n} from './datasource-definition-provider.service';\n\n//#endregion\n\n//#region ----   Types   ----\n\nexport interface AXPDataSourceQueryOptions {\n  /** Field used as AXDataSource key / widget valueField. Defaults to definition valueField.name or `id`. */\n  valueField?: string;\n  /** When true, resolve from definition.samples instead of source(). */\n  useSamples?: boolean;\n  /** Retry definition lookup while registry providers are still loading. */\n  waitForRegistry?: boolean;\n  /** Max attempts when waitForRegistry is true (default 20). */\n  maxRegistryAttempts?: number;\n  /** Delay between registry retry attempts in ms (default 50). */\n  registryRetryDelayMs?: number;\n}\n\nexport interface AXPDataSourceQueryResult {\n  name: string;\n  ready: boolean;\n  dataSource: AXDataSource | null;\n  definition?: AXPDataSourceDefinition;\n  valueField: string;\n  textField: string;\n  error?: unknown;\n}\n\ninterface AXPDataSourceQueryEntry {\n  name: string;\n  cacheKey: string;\n  readySubject: ReplaySubject<AXPDataSourceQueryResult>;\n  loadPromise?: Promise<AXPDataSourceQueryResult>;\n  result?: AXPDataSourceQueryResult;\n}\n\n//#endregion\n\n/**\n * Resolves registry-backed {@link AXDataSource} instances and exposes readiness (`isReady`, `whenReady`)\n * so widgets do not bind selected values before the provider datasource is available.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPDataSourceQueryService {\n  //#region ----   Services & State   ----\n\n  private readonly definitionService = inject(AXPDataSourceDefinitionProviderService);\n\n  private readonly entries = new Map<string, AXPDataSourceQueryEntry>();\n\n  //#endregion\n\n  //#region ----   Public API   ----\n\n  /**\n   * Returns true when the named registry datasource has been resolved for the given options.\n   */\n  isReady(name: string, options?: AXPDataSourceQueryOptions): boolean {\n    const entry = this.entries.get(this.buildCacheKey(name, options));\n    return entry?.result?.ready === true && entry.result.dataSource != null;\n  }\n\n  /**\n   * Emits once when the registry datasource is resolved (or fails) for the given options.\n   */\n  whenReady(name: string, options?: AXPDataSourceQueryOptions): Observable<AXPDataSourceQueryResult> {\n    return this.ensureLoading(name, options).readySubject.asObservable().pipe(\n      filter((result) => result.ready),\n      take(1),\n    );\n  }\n\n  /**\n   * Resolves and returns the {@link AXDataSource} for a registry name, waiting for providers when needed.\n   */\n  async getDataSource(name: string, options?: AXPDataSourceQueryOptions): Promise<AXDataSource | null> {\n    const result = await this.resolve(name, options);\n    return result.dataSource;\n  }\n\n  /**\n   * Resolves the registry datasource, then looks up one or more keys via `byKey`.\n   */\n  async queryByKey(name: string, key: unknown, options?: AXPDataSourceQueryOptions): Promise<unknown> {\n    if (isNil(key)) {\n      return null;\n    }\n\n    const result = await this.resolve(name, options);\n    const dataSource = result.dataSource;\n    if (!dataSource?.config?.byKey) {\n      return null;\n    }\n\n    if (Array.isArray(key)) {\n      const items = await Promise.all(key.map((k) => dataSource.config.byKey!(k)));\n      return items.filter((item) => item != null);\n    }\n\n    return (await dataSource.config.byKey(key)) ?? null;\n  }\n\n  /**\n   * Fully resolves a registry datasource (definition + AXDataSource instance).\n   */\n  async resolve(name: string, options?: AXPDataSourceQueryOptions): Promise<AXPDataSourceQueryResult> {\n    const entry = this.ensureLoading(name, options);\n    if (entry.result?.ready) {\n      return entry.result;\n    }\n    return entry.loadPromise!;\n  }\n\n  /**\n   * Clears cached query state. Pass a registry name to invalidate one datasource, or omit to clear all.\n   */\n  invalidate(name?: string): void {\n    if (!name) {\n      this.entries.clear();\n      return;\n    }\n\n    const prefix = `${name}::`;\n    for (const key of [...this.entries.keys()]) {\n      if (key === name || key.startsWith(prefix)) {\n        this.entries.delete(key);\n      }\n    }\n  }\n\n  //#endregion\n\n  //#region ----   Loading   ----\n\n  private ensureLoading(name: string, options?: AXPDataSourceQueryOptions): AXPDataSourceQueryEntry {\n    const cacheKey = this.buildCacheKey(name, options);\n    let entry = this.entries.get(cacheKey);\n    if (!entry) {\n      entry = {\n        name,\n        cacheKey,\n        readySubject: new ReplaySubject<AXPDataSourceQueryResult>(1),\n      };\n      this.entries.set(cacheKey, entry);\n      entry.loadPromise = this.loadEntry(entry, name, options);\n    }\n    return entry;\n  }\n\n  private async loadEntry(\n    entry: AXPDataSourceQueryEntry,\n    name: string,\n    options?: AXPDataSourceQueryOptions,\n  ): Promise<AXPDataSourceQueryResult> {\n    const pending: AXPDataSourceQueryResult = {\n      name,\n      ready: false,\n      dataSource: null,\n      valueField: options?.valueField ?? 'id',\n      textField: 'title',\n    };\n\n    try {\n      const definition = await this.waitForDefinition(name, options);\n      if (!definition) {\n        const failed: AXPDataSourceQueryResult = {\n          ...pending,\n          ready: true,\n          error: new Error(`Data source '${name}' was not found in the registry`),\n        };\n        entry.result = failed;\n        entry.readySubject.next(failed);\n        return failed;\n      }\n\n      const valueField = options?.valueField ?? definition.valueField?.name ?? 'id';\n      const textField = definition.textField?.name ?? 'title';\n      const dataSource = await this.createDataSource(definition, {\n        ...options,\n        valueField,\n      });\n      const translated = dataSource ? this.wrapTranslatedDataSource(dataSource, textField) : null;\n\n      const success: AXPDataSourceQueryResult = {\n        name,\n        ready: true,\n        dataSource: translated,\n        definition,\n        valueField,\n        textField,\n      };\n      entry.result = success;\n      entry.readySubject.next(success);\n      return success;\n    } catch (error) {\n      const failed: AXPDataSourceQueryResult = {\n        ...pending,\n        ready: true,\n        error,\n      };\n      entry.result = failed;\n      entry.readySubject.next(failed);\n      return failed;\n    }\n  }\n\n  private async waitForDefinition(\n    name: string,\n    options?: AXPDataSourceQueryOptions,\n  ): Promise<AXPDataSourceDefinition | undefined> {\n    const waitForRegistry = options?.waitForRegistry ?? true;\n    const maxAttempts = options?.maxRegistryAttempts ?? 20;\n    const retryDelayMs = options?.registryRetryDelayMs ?? 50;\n    const attempts = waitForRegistry ? maxAttempts : 1;\n\n    for (let attempt = 0; attempt < attempts; attempt++) {\n      const definition = await this.definitionService.get(name);\n      if (definition) {\n        return definition;\n      }\n      if (attempt < attempts - 1) {\n        await this.sleep(retryDelayMs);\n      }\n    }\n\n    return undefined;\n  }\n\n  private async createDataSource(\n    definition: AXPDataSourceDefinition,\n    options: AXPDataSourceQueryOptions & { valueField: string },\n  ): Promise<AXDataSource | null> {\n    if (options.useSamples && definition.samples) {\n      const samples = await this.resolveSamples(definition.samples);\n      return convertArrayToDataSource(samples, {\n        key: options.valueField,\n        pageSize: 500,\n      });\n    }\n\n    const sourceResult = definition.source();\n    const resolved = await Promise.resolve(sourceResult);\n\n    if (resolved instanceof AXDataSource) {\n      this.applyValueFieldAsKey(resolved, options.valueField);\n      return resolved;\n    }\n\n    if (Array.isArray(resolved)) {\n      return convertArrayToDataSource(resolved, {\n        key: options.valueField,\n        pageSize: 500,\n      });\n    }\n\n    return null;\n  }\n\n  private async resolveSamples(samples: AXPDataSourceSample): Promise<unknown[]> {\n    return castArray(await Promise.resolve(samples));\n  }\n\n  private applyValueFieldAsKey(dataSource: AXDataSource, valueField: string): void {\n    if (dataSource.config?.key !== valueField) {\n      dataSource.config = { ...dataSource.config, key: valueField };\n    }\n  }\n\n  private wrapTranslatedDataSource(dataSource: AXDataSource, textField: string): AXDataSource {\n    const config = dataSource.config;\n    if (!config) {\n      return dataSource;\n    }\n\n    const originalByKey = config.byKey;\n    const originalLoad = config.load;\n\n    if (originalByKey) {\n      config.byKey = async (key: unknown) => this.translateItem(await originalByKey(key), textField);\n    }\n\n    if (originalLoad) {\n      config.load = async (event: unknown) => {\n        const result = await originalLoad(event as never);\n        if (!result?.items?.length) {\n          return result;\n        }\n        return {\n          ...result,\n          items: result.items.map((item: unknown) => this.translateItem(item, textField)),\n        };\n      };\n    }\n\n    return dataSource;\n  }\n\n  private translateItem(item: unknown, textField: string): unknown {\n    if (item == null || typeof item !== 'object') {\n      return item;\n    }\n    const title = get(item, textField);\n    // Keep i18n keys for UI widgets (ax-select-box translate pipe) so labels react to locale changes.\n    if (isString(title) && title.startsWith('@')) {\n      return item;\n    }\n    return item;\n  }\n\n  private buildCacheKey(name: string, options?: AXPDataSourceQueryOptions): string {\n    const valueField = options?.valueField ?? '';\n    const useSamples = options?.useSamples ? '1' : '0';\n    return `${name}::${valueField}::${useSamples}`;\n  }\n\n  private sleep(ms: number): Promise<void> {\n    return new Promise((resolve) => setTimeout(resolve, ms));\n  }\n\n  //#endregion\n}\n","// src/app/directives/grid-layout.directive.ts\n\nimport { Directive, ElementRef, ViewContainerRef, computed, inject } from '@angular/core';\n\n@Directive({\n    selector: '[axp-content-checker]',\n    standalone: true,\n    exportAs: 'checker'\n})\nexport class AXPContentCheckerDirective {\n\n    public viewContainerRef = inject(ViewContainerRef);\n    public elementRef: ElementRef<HTMLDivElement> = inject(ElementRef<HTMLDivElement>);\n\n    public isEmpty = computed(() => this.viewContainerRef.length === 0);\n}\n","import { Directive, HostListener, Output, EventEmitter } from '@angular/core';\n\n@Directive({\n    selector: '[onDblClick]'\n})\nexport class AXPDblClickDirective {\n    @Output() onDblClick = new EventEmitter<Event>();\n\n    private lastTap = 0;\n    private readonly doubleTapThreshold = 300; // milliseconds\n\n    // Listen for the native dblclick event (desktop)\n    @HostListener('dblclick', ['$event'])\n    handleOnDblClick(event: Event): void {\n        this.onDblClick.emit(event);\n    }\n\n    // Listen for touchend events (mobile)\n    @HostListener('touchend', ['$event'])\n    onTouchEnd(event: TouchEvent): void {\n        const currentTime = new Date().getTime();\n        const tapGap = currentTime - this.lastTap;\n\n        if (tapGap > 0 && tapGap < this.doubleTapThreshold) {\n            // Detected a double-tap\n            this.onDblClick.emit(event);\n            event.preventDefault(); // Optionally prevent further default actions\n        }\n        this.lastTap = currentTime;\n    }\n}\n","import { Directive, ElementRef, input, OnInit, effect } from '@angular/core';\nimport { set, get } from 'lodash-es';\n\n@Directive({\n    selector: '[axp-data]',\n    standalone: true\n})\nexport class AXPElementDataDirective implements OnInit {\n\n    data = input<any>(null, { alias: 'axp-data' });\n    path = input<string>('__data__', { alias: 'axp-data-path' });\n\n    constructor(private elementRef: ElementRef<HTMLElement>) { }\n\n    ngOnInit() {\n        // Initial data setup\n        set(this.elementRef.nativeElement, this.path(), this.data());\n    }\n\n    // Effect to update element data when inputs change\n    private updateEffect = effect(() => {\n        const currentData = this.data();\n        const currentPath = this.path();\n        set(this.elementRef.nativeElement, currentPath, currentData);\n    });\n\n    /**\n     * Get data from the element\n     */\n    getData(): any {\n        return get(this.elementRef.nativeElement, this.path());\n    }\n\n    /**\n     * Update data at runtime\n     */\n    setData(data: any) {\n        set(this.elementRef.nativeElement, this.path(), data);\n    }\n} ","// src/app/directives/grid-layout.directive.ts\n\nimport { Directive, ElementRef, Renderer2, OnChanges, SimpleChanges, input } from '@angular/core';\nimport { AXPGridLayoutOptions, AXPGridPlacement } from '@acorex/platform/contracts';\n\n@Directive({\n    selector: '[axp-grid-layout]',\n    standalone: true,\n})\nexport class AXPGridLayoutDirective implements OnChanges {\n    options = input.required<AXPGridLayoutOptions>({ alias: 'axp-grid-layout' });\n\n    constructor(private el: ElementRef, private renderer: Renderer2) { }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes['options']) {\n            this.applyTailwindClasses();\n        }\n    }\n\n    private applyTailwindClasses(): void {\n        const placement = this.options()?.positions;\n        if (!placement) return;\n        // Clear existing grid classes\n        this.clearClasses();\n\n        // Apply new grid classes based on the input options\n        this.setClasses(placement.sm, '');\n        this.setClasses(placement.md, 'md:');\n        this.setClasses(placement.lg, 'lg:');\n        this.setClasses(placement.xl, 'xl:');\n        this.setClasses(placement.xxl, '2xl:');\n    }\n\n    private setClasses(placement: AXPGridPlacement | undefined, prefix: string): void {\n        if (placement == null) return;\n\n        const colStart = placement.colStart ? `${prefix}ax-col-start-${placement.colStart}` : '';\n        const colEnd = placement.colEnd ? `${prefix}ax-col-end-${placement.colEnd}` : '';\n        const colSpan = placement.colSpan ? `${prefix}ax-col-span-${placement.colSpan}` : '';\n        const rowStart = placement.rowStart ? `${prefix}ax-row-start-${placement.rowStart}` : '';\n        const rowEnd = placement.rowEnd ? `${prefix}ax-row-end-${placement.rowEnd}` : '';\n        const rowSpan = placement.rowSpan ? `${prefix}ax-row-span-${placement.rowSpan}` : '';\n        const order = placement.order ? `${prefix}ax-order-${placement.order}` : ''; // Handling order\n\n        [colStart, colEnd, colSpan, rowStart, rowEnd, rowSpan, order].forEach(cls => {\n            if (cls) {\n                this.renderer.addClass(this.el.nativeElement, cls);\n            }\n        });\n    }\n\n    private clearClasses(): void {\n        const currentClasses = this.el.nativeElement.className.split(' ');\n        currentClasses.forEach((className: string) => {\n            if (className.startsWith('ax-col-') || className.startsWith('ax-row-') || className.startsWith('ax-order-')) {\n                this.renderer.removeClass(this.el.nativeElement, className);\n            }\n        });\n    }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type AXPDistributedEventListenerProviderToken<T> =\n  | AXPDistributedEventListenerProvider<T>\n  | Promise<AXPDistributedEventListenerProvider<T>>;\n\nexport const AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER = new InjectionToken<AXPDistributedEventListenerProviderToken<any>[]>(\n  'AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER'\n);\n\nexport interface AXPDistributedEventListenerProvider<TInput = any, TOutput = void> {\n  key: string;\n  execute(data: TInput): Promise<TOutput> | TOutput;\n\n  priority?: number;\n}","//#region ----   Imports   ----\n\nimport { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\nimport { AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, AXPDistributedEventListenerProvider } from './distributed-event-listener.provider';\n\n//#endregion\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPDistributedEventListenerService {\n  //#region ----   Providers & Caches   ----\n\n  private readonly listenerProviders = inject(AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, { optional: true }) || [];\n  private readonly injector = inject(Injector);\n\n  /** Cache for listeners by key. */\n  private listenersByKey: Map<string, AXPDistributedEventListenerProvider<any>[]> = new Map();\n  \n  /** Flag to track if providers have been loaded */\n  private providersLoaded = false;\n  \n  //#endregion\n\n  //#region ----   Public API   ----\n\n  /**\n   * Dispatches an event to all registered listeners for the given key.\n   * @param key The event key.\n   * @param data The event data to pass to listeners.\n   */\n  async dispatch(key: string, data?: any): Promise<void> {\n    const providers = await this.resolveProviders();\n    const matched = providers.filter(p => p.key === key);\n\n    if (!matched.length) {\n      return;\n    }\n\n    for (const provider of matched) {\n      try {\n        await Promise.resolve(\n          runInInjectionContext(this.injector, () => provider.execute(data))\n        );\n      } catch (err) {\n        console.error(`[AXPDistributedEventListenerService] Provider for key='${key}' failed`, err);\n      }\n    }\n  }\n\n/**\n   * Dispatch with async response (first matching provider, with retry/timeout)\n   */\npublic async dispatchAsync<T, R>(\n  key: string,\n  data: T,\n  options: { timeout: number; retries: number; retryDelay: number } = {\n    timeout: 60_000,\n    retries: 3,\n    retryDelay: 1000,\n  }\n): Promise<R> {\n  const providers = await this.resolveProviders();\n  const matched = providers.filter(p => p.key === key);\n\n  if (!matched.length) {\n    throw new Error(`No provider found for key='${key}'`);\n  }\n\n  const attempt = (n: number): Promise<R> => {\n    return new Promise<R>((resolve, reject) => {\n      let finished = false;\n\n      const timer = setTimeout(() => {\n        if (!finished) {\n          if (n < options.retries) {          \n            resolve(attempt(n + 1));\n          } else {\n            reject(\n              new Error(`Timeout: no response for key='${key}' after ${options.retries} attempts.`)\n            );\n          }\n        }\n      }, options.timeout);\n\n      try {\n        const provider = matched[0];\n        const result = runInInjectionContext(this.injector, () =>\n          provider.execute(data)\n        );\n\n        Promise.resolve(result)\n          .then((r: any) => {\n            finished = true;\n            clearTimeout(timer);\n            resolve(r);\n          })\n          .catch(err => {\n            finished = true;\n            clearTimeout(timer);\n            reject(err);\n          });\n      } catch (err) {\n        clearTimeout(timer);\n        reject(err);\n      }\n    });\n  };\n\n  return attempt(0);\n}\n\n /**\n   * Resolve all providers (handle both direct provider and Promise<provider>)\n   */\n private async resolveProviders(): Promise<AXPDistributedEventListenerProvider<any>[]> {\n  return Promise.all(\n    this.listenerProviders.map(p =>\n      p instanceof Promise ? p : Promise.resolve(p)\n    )\n  );\n}\n\n\n  /**\n   * Returns all listeners for a specific event key.\n   * @param key The event key.\n   * @returns Array of listeners for the key.\n   */\n  async getListeners(key: string): Promise<AXPDistributedEventListenerProvider<any>[]> {\n    await this.ensureProvidersLoaded();\n    return this.listenersByKey.get(key) || [];\n  }\n\n  /**\n   * Returns all registered event keys.\n   * @returns Array of all event keys that have listeners.\n   */\n  async getRegisteredKeys(): Promise<string[]> {\n    await this.ensureProvidersLoaded();\n    return Array.from(this.listenersByKey.keys());\n  }\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  /**\n   * Ensures that all providers have been loaded and cached.\n   */\n  private async ensureProvidersLoaded(): Promise<void> {\n    if (this.providersLoaded) {\n      return;\n    }\n\n    // Resolve all providers\n    const resolvedProviders = await Promise.all(this.listenerProviders);\n\n    // Group listeners by key\n    for (const provider of resolvedProviders) {\n      if (provider) {\n        const existingListeners = this.listenersByKey.get(provider.key) || [];\n        existingListeners.push(provider);\n        this.listenersByKey.set(provider.key, existingListeners);\n      }\n    }\n\n    this.providersLoaded = true;\n  }\n\n  //#endregion\n\n  //#region ----   Cache Management   ----\n\n  /** Clears the listeners cache and forces reload on next access. */\n  clearListenersCache(): void {\n    this.listenersByKey.clear();\n    this.providersLoaded = false;\n  }\n\n  //#endregion\n}","import { Injectable, OnDestroy } from '@angular/core';\nimport { isUndefined } from 'lodash-es';\nimport { Observable, Subject } from 'rxjs';\nimport { AXPDataGenerator } from '../data/data-generator';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPBroadcastEventService implements OnDestroy {\n  private channel: BroadcastChannel;\n  private eventSubjects = new Map<string, Subject<{ data: any; requestId?: string }>>();\n  private pendingRequests = new Map<string, (response: any) => void>();\n  private multiTabEventHistory = new Set<string>(); // Prevent duplicate processing of the same event\n  private readonly instanceId = AXPDataGenerator.uuid();\n\n  constructor() {\n    this.channel = new BroadcastChannel('platform_global_events');\n\n    // Handle incoming messages\n    this.channel.onmessage = (event) => {\n      const { type, payload, requestId, response, sourceId } = event.data;\n      // Prevent processing the same event multiple times (multi-tab synchronization)\n      if (requestId && this.multiTabEventHistory.has(requestId)) {\n        return;\n      }\n\n      if (requestId) {\n        this.multiTabEventHistory.add(requestId); // Store processed requestId\n        setTimeout(() => this.multiTabEventHistory.delete(requestId), 10000); // Cleanup after 10 sec\n      }\n\n      // Handle responses to pending requests\n      if (requestId && !isUndefined(response) && this.pendingRequests.has(requestId)) {\n        this.pendingRequests.get(requestId)!(response);\n        this.pendingRequests.delete(requestId);\n        return;\n      }\n\n      // Handle normal broadcast events\n      // Ignore events originating from this same instance to avoid double-delivery\n      if (sourceId && sourceId === this.instanceId) {\n        return;\n      }\n      if (type && this.eventSubjects.has(type)) {\n        this.eventSubjects.get(type)!.next({ data: payload, requestId });\n      }\n    };\n  }\n\n  /**\n   * Publish an event without expecting a response\n   */\n  public publish<T>(type: string, payload?: T): void {\n    this.channel.postMessage({ type, payload, sourceId: this.instanceId });\n    // Local echo so same-tab listeners receive the event as well\n    if (this.eventSubjects.has(type)) {\n      this.eventSubjects.get(type)!.next({ data: payload });\n    }\n  }\n\n  /**\n   * Subscribe to an event\n   */\n  public listen<T>(type: string): Observable<{ data: T; requestId?: string }> {\n    if (!this.eventSubjects.has(type)) {\n      this.eventSubjects.set(type, new Subject<{ data: T; requestId?: string }>());\n    }\n    return this.eventSubjects.get(type)!.asObservable();\n  }\n\n  /**\n   * Unsubscribe from an event\n   */\n  public unsubscribe(type: string): void {\n    if (this.eventSubjects.has(type)) {\n      this.eventSubjects.get(type)!.complete();\n      this.eventSubjects.delete(type);\n    }\n  }\n\n  /**\n   * Send a message and wait for a response with retry logic\n   */\n  public async sendAndWaitForResponse<T, R>(\n    type: string,\n    payload?: T,\n    options: { timeout: number; retries: number; retryDelay: number } = {\n      timeout: 60 * 60 * 1000,\n      retries: 3,\n      retryDelay: 1000,\n    },\n  ): Promise<R> {\n    const requestId = AXPDataGenerator.uuid();\n\n    const attemptRequest = (attempt: number): Promise<R> => {\n      return new Promise<R>((resolve, reject) => {\n        this.pendingRequests.set(requestId, resolve);\n\n        this.channel.postMessage({ type, payload, requestId });\n\n        setTimeout(() => {\n          if (this.pendingRequests.has(requestId)) {\n            this.pendingRequests.delete(requestId);\n            if (attempt < options.retries) {\n              console.warn(`Retrying request '${type}' (${attempt + 1}/${options.retries})...`);\n              resolve(attemptRequest(attempt + 1)); // Retry request\n            } else {\n              reject(new Error(`Timeout: No response received for event '${type}' after ${options.retries} attempts.`));\n            }\n          }\n        }, options.timeout);\n      });\n    };\n\n    return attemptRequest(0);\n  }\n\n  /**\n   * Respond to a request\n   */\n  public respondToRequest(requestId: string, response: any): void {\n    if (!requestId) {\n      console.warn('Invalid requestId. Cannot send response.');\n      return;\n    }\n    this.channel.postMessage({ requestId, response });\n  }\n\n  /**\n   * Cleanup when the service is destroyed\n   */\n  ngOnDestroy(): void {\n    this.channel.close();\n\n    // Complete all subjects\n    this.eventSubjects.forEach((subject) => subject.complete());\n    this.eventSubjects.clear();\n\n    // Reject all pending requests to avoid dangling promises\n    this.pendingRequests.forEach((resolve, requestId) => {\n      resolve(Promise.reject(new Error(`Service destroyed. Request ${requestId} was not completed.`)));\n    });\n    this.pendingRequests.clear();\n\n    // Cleanup multi-tab event history\n    this.multiTabEventHistory.clear();\n  }\n}\n","import { Injectable, Injector, inject, runInInjectionContext } from '@angular/core';\nimport {\n  AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n  AXPDistributedEventListenerProvider,\n} from '../distributed-events/distributed-event-listener.provider';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPHookService {\n  private readonly listenerProviders =\n    inject(AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, { optional: true }) || [];\n  private readonly injector = inject(Injector);\n\n  /**\n   * Resolve all providers (handle both direct providers and Promise<provider>)\n   */\n  private async resolveProviders(): Promise<AXPDistributedEventListenerProvider<any, any>[]> {\n    return Promise.all(\n      this.listenerProviders.map(p =>\n        p instanceof Promise ? p : Promise.resolve(p)\n      )\n    );\n  }\n\n  /**\n   * Fire sync hooks (fire-and-forget).\n   * All providers with the given key will be executed.\n   * Execution is not awaited.\n   */\n  public fire<T>(key: string, data: T): void {\n    this.resolveProviders().then(providers => {\n      providers\n        .filter(p => p.key === key)\n        .sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0))\n        .forEach(p => {\n          try {\n            runInInjectionContext(this.injector, () => p.execute(data));\n          } catch (err) {\n            console.error(`[AXPHookService] Hook '${key}' failed`, err);\n          }\n        });\n    });\n  }\n\n  /**\n   * Run async hooks sequentially (waterfall).\n   * The output of each hook is passed as input to the next hook.\n   * Returns the final merged data after all hooks are executed.\n   */\n  public async runAsync<T>(key: string, initialData: T): Promise<T> {\n    const providers = (await this.resolveProviders())\n      .filter(p => p.key === key)\n      .sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n    let data = initialData;\n    for (const p of providers) {\n      data = await Promise.resolve(\n        runInInjectionContext(this.injector, () => p.execute(data))\n      );\n    }\n    return data;\n  }\n}\n","//#region ---- Overlay Layer DOM Utilities ----\n\n/** Acorex overlay root (modal shell, popup, dialog). */\nexport const AX_OVERLAY_CONTAINER_SELECTOR = '.ax-overlay-container';\n\n/** Anchored widget panel inside an overlay (select, date picker, dropdown). */\nexport const AX_OVERLAY_PANE_SELECTOR = '.ax-overlay-pane';\n\n/**\n * True when a visible overlay layer is foreground (modal, popup, widget popover/picker).\n */\nexport function hasForegroundOverlayLayer(document: Document): boolean {\n  if (getVisibleAnchoredOverlayPanes(document).length > 0) {\n    return true;\n  }\n\n  return getVisibleOverlayContainers(document).length > 0;\n}\n\n/**\n * Returns visible anchored overlay panes (widget popovers/pickers).\n */\nexport function getVisibleAnchoredOverlayPanes(document: Document): HTMLElement[] {\n  return Array.from(document.querySelectorAll<HTMLElement>(AX_OVERLAY_PANE_SELECTOR)).filter(isVisibleOverlayElement);\n}\n\n/**\n * Visible anchored panes that are not contained by `excludeContainer` (e.g. dialog shell).\n */\nexport function getNestedVisibleOverlayPanes(\n  document: Document,\n  excludeContainer: HTMLElement | null,\n): HTMLElement[] {\n  return getVisibleAnchoredOverlayPanes(document).filter(\n    (pane) => !excludeContainer?.contains(pane),\n  );\n}\n\n/**\n * Collects visible overlay containers in stacking order (later / higher z-index wins).\n */\nexport function getVisibleOverlayContainers(document: Document): HTMLElement[] {\n  return Array.from(document.querySelectorAll<HTMLElement>(AX_OVERLAY_CONTAINER_SELECTOR))\n    .filter(isVisibleOverlayElement)\n    .sort(compareOverlayStackOrder);\n}\n\n/** Topmost visible overlay container, if any. */\nexport function getTopVisibleOverlayContainer(document: Document): HTMLElement | null {\n  const containers = getVisibleOverlayContainers(document);\n  return containers.length ? containers[containers.length - 1] : null;\n}\n\n/** Nearest overlay container ancestor of `element`. */\nexport function findOverlayContainerAncestor(element: HTMLElement): HTMLElement | null {\n  return element.closest<HTMLElement>(AX_OVERLAY_CONTAINER_SELECTOR);\n}\n\n/**\n * Returns true when the overlay element is rendered and visible in the viewport.\n */\nexport function isVisibleOverlayElement(element: Element): boolean {\n  if (!(element instanceof HTMLElement)) {\n    return false;\n  }\n\n  const style = getComputedStyle(element);\n  if (style.display === 'none' || style.visibility === 'hidden' || Number(style.opacity) === 0) {\n    return false;\n  }\n\n  const rect = element.getBoundingClientRect();\n  return rect.width > 0 && rect.height > 0;\n}\n\nfunction compareOverlayStackOrder(a: HTMLElement, b: HTMLElement): number {\n  const za = Number(getComputedStyle(a).zIndex) || 0;\n  const zb = Number(getComputedStyle(b).zIndex) || 0;\n  if (za !== zb) {\n    return za - zb;\n  }\n\n  const position = a.compareDocumentPosition(b);\n  if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n    return -1;\n  }\n  if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n    return 1;\n  }\n\n  return 0;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n  AXPKeyboardShortcutChord,\n  AXPKeyboardShortcutDirectionBehavior,\n} from '@acorex/platform/contracts';\nimport { hasForegroundOverlayLayer } from '../overlay/overlay-layer.util';\n\n//#endregion\n\nexport { hasForegroundOverlayLayer } from '../overlay/overlay-layer.util';\n\nexport interface AXPKeyboardShortcutFormatOptions {\n  directionBehavior?: AXPKeyboardShortcutDirectionBehavior;\n  /** From `AXLocaleService.activeProfile().i18nMeta?.rtl`. */\n  isRtl?: boolean;\n  /** Chord was already passed through `resolveDisplayShortcutChord` (e.g. help `displayChords`). */\n  skipDirectionResolve?: boolean;\n}\n\nconst HORIZONTAL_DIRECTIONAL_KEY_MIRRORS: Readonly<Record<string, string>> = {\n  arrowleft: 'arrowright',\n  arrowright: 'arrowleft',\n  left: 'right',\n  right: 'left',\n  '[': ']',\n  ']': '[',\n};\n\n/** Maps a horizontal direction key to its RTL semantic counterpart. */\nexport function mirrorHorizontalDirectionalKey(key: string): string {\n  const normalized = normalizeShortcutToken(key);\n  return HORIZONTAL_DIRECTIONAL_KEY_MIRRORS[normalized] ?? normalized;\n}\n\n/** True when the chord's primary key is a horizontal direction key (`←`/`→`, `[`/`]`). */\nexport function isHorizontalDirectionalShortcutKey(key: string): boolean {\n  return normalizeShortcutToken(key) in HORIZONTAL_DIRECTIONAL_KEY_MIRRORS;\n}\n\n/**\n * Resolves direction behavior for a chord.\n * Horizontal direction keys default to `semantic`; others default to `physical`.\n * An explicit binding value always wins.\n */\nexport function resolveEffectiveDirectionBehavior(\n  chord: AXPKeyboardShortcutChord,\n  explicit?: AXPKeyboardShortcutDirectionBehavior,\n): AXPKeyboardShortcutDirectionBehavior {\n  if (explicit === 'physical' || explicit === 'semantic') {\n    return explicit;\n  }\n\n  const { key } = parseKeyboardShortcutChord(chord);\n  return isHorizontalDirectionalShortcutKey(key) ? 'semantic' : 'physical';\n}\n\n/** Resolves the key the user presses for a semantically registered chord in RTL. */\nexport function resolveSemanticDirectionalKey(\n  storedKey: string,\n  rtl: boolean,\n): string {\n  const normalized = normalizeShortcutToken(storedKey);\n  if (!rtl) {\n    return normalized;\n  }\n  return mirrorHorizontalDirectionalKey(normalized);\n}\n\n/** Chord string with directional key mirrored for RTL display/matching when semantic. */\nexport function resolveDisplayShortcutChord(\n  chord: AXPKeyboardShortcutChord,\n  isRtl: boolean,\n  explicitDirectionBehavior?: AXPKeyboardShortcutDirectionBehavior,\n): string {\n  const directionBehavior = resolveEffectiveDirectionBehavior(chord, explicitDirectionBehavior);\n  const parts = chord\n    .trim()\n    .split('+')\n    .map((part) => part.trim())\n    .filter(Boolean);\n  if (parts.length === 0) {\n    return chord;\n  }\n\n  const keyPart = parts.pop() ?? '';\n  const rtl = directionBehavior === 'semantic' && isRtl;\n  const resolvedKey = resolveSemanticDirectionalKey(keyPart, rtl);\n  return [...parts, resolvedKey].join('+');\n}\n\n//#region ---- Keyboard Shortcut Utilities ----\n\ninterface ParsedShortcut {\n  ctrl: boolean;\n  shift: boolean;\n  alt: boolean;\n  meta: boolean;\n  key: string;\n}\n\nconst MODIFIER_ALIASES: Record<string, keyof Pick<ParsedShortcut, 'ctrl' | 'shift' | 'alt' | 'meta'>> = {\n  ctrl: 'ctrl',\n  control: 'ctrl',\n  shift: 'shift',\n  alt: 'alt',\n  option: 'alt',\n  meta: 'meta',\n  cmd: 'meta',\n  command: 'meta',\n  win: 'meta',\n};\n\nconst KEY_DISPLAY_MAC: Record<string, string> = {\n  ctrl: '⌃',\n  control: '⌃',\n  shift: '⇧',\n  alt: '⌥',\n  option: '⌥',\n  meta: '⌘',\n  cmd: '⌘',\n  command: '⌘',\n  win: '⌘',\n  enter: '↵',\n  escape: 'Esc',\n  esc: 'Esc',\n  home: 'Home',\n  arrowleft: '←',\n  arrowright: '→',\n  arrowup: '↑',\n  arrowdown: '↓',\n  pageup: 'PgUp',\n  pagedown: 'PgDn',\n  backspace: '⌫',\n  delete: '⌦',\n  space: 'Space',\n};\n\n/**\n * Parses a shortcut chord such as `Enter`, `Escape`, or `ctrl+shift+s`.\n */\nexport function parseKeyboardShortcutChord(chord: AXPKeyboardShortcutChord): ParsedShortcut {\n  const parts = chord\n    .trim()\n    .toLowerCase()\n    .split('+')\n    .map((part) => part.trim())\n    .filter(Boolean);\n\n  const key = normalizeShortcutToken(parts.pop() ?? '');\n  const parsed: ParsedShortcut = {\n    ctrl: false,\n    shift: false,\n    alt: false,\n    meta: false,\n    key,\n  };\n\n  for (const part of parts) {\n    const alias = MODIFIER_ALIASES[part];\n    if (alias) {\n      parsed[alias] = true;\n    }\n  }\n\n  return parsed;\n}\n\n/**\n * Returns true when the keyboard event matches the given chord.\n * On macOS, `ctrl+*` chords also match `meta+*` for common platform shortcuts.\n */\nexport function matchesKeyboardShortcutChord(\n  event: KeyboardEvent,\n  chord: AXPKeyboardShortcutChord,\n  options?: AXPKeyboardShortcutFormatOptions,\n): boolean {\n  const parsed = parseKeyboardShortcutChord(chord);\n  const mac = isMacPlatform();\n  const directionBehavior = resolveEffectiveDirectionBehavior(chord, options?.directionBehavior);\n\n  if (!matchesShortcutModifiers(parsed, event, mac)) {\n    return false;\n  }\n\n  const actualKey = normalizeShortcutEventKey(event);\n  const expectedKey = normalizeShortcutToken(parsed.key);\n  const rtlSemantic =\n    directionBehavior === 'semantic' &&\n    options?.isRtl === true &&\n    isHorizontalDirectionalShortcutKey(expectedKey);\n\n  if (rtlSemantic) {\n    return actualKey === mirrorHorizontalDirectionalKey(expectedKey);\n  }\n\n  return actualKey === expectedKey;\n}\n\n/**\n * Matches modifier keys for a parsed chord.\n * `ctrl+alt` chords also accept AltGraph (Windows) so layout-produced characters still match physical keys.\n */\nfunction matchesShortcutModifiers(parsed: ParsedShortcut, event: KeyboardEvent, mac: boolean): boolean {\n  if (parsed.shift !== event.shiftKey) {\n    return false;\n  }\n\n  const altGraph = hasAltGraphModifier(event);\n\n  if (parsed.ctrl && parsed.alt) {\n    if (altGraph) {\n      return true;\n    }\n\n    return event.ctrlKey && event.altKey;\n  }\n\n  if (parsed.alt !== event.altKey) {\n    return false;\n  }\n\n  if (parsed.meta) {\n    if (!event.metaKey) {\n      return false;\n    }\n    return true;\n  }\n\n  if (parsed.ctrl) {\n    if (mac) {\n      return event.metaKey || event.ctrlKey;\n    }\n    return event.ctrlKey;\n  }\n\n  if (event.ctrlKey || event.metaKey) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction hasAltGraphModifier(event: KeyboardEvent): boolean {\n  return typeof event.getModifierState === 'function' && event.getModifierState('AltGraph');\n}\n\n/**\n * Formats one chord for UI display (OS-aware modifier symbols).\n */\nexport function formatKeyboardShortcutChord(\n  chord: AXPKeyboardShortcutChord,\n  options?: AXPKeyboardShortcutFormatOptions,\n): string {\n  const directionBehavior = resolveEffectiveDirectionBehavior(chord, options?.directionBehavior);\n  const resolvedChord = options?.skipDirectionResolve\n    ? chord\n    : resolveDisplayShortcutChord(chord, options?.isRtl === true, directionBehavior);\n\n  const mac = isMacPlatform();\n  const parts = resolvedChord\n    .trim()\n    .split('+')\n    .map((part) => part.trim())\n    .filter(Boolean);\n\n  if (parts.length === 0) {\n    return '';\n  }\n\n  const keyPart = normalizeShortcutToken(parts.pop() ?? '');\n  const modifierParts = parts.map((part) => formatShortcutPart(part.toLowerCase(), mac));\n  const keyDisplay = formatShortcutPart(keyPart, mac);\n\n  if (mac) {\n    return [...modifierParts, keyDisplay].join('');\n  }\n\n  return [...modifierParts, keyDisplay].join('+');\n}\n\n/**\n * Formats multiple chords as a single display string (e.g. `← / PgUp`).\n */\nexport function formatKeyboardShortcutChords(\n  chords: readonly AXPKeyboardShortcutChord[],\n  options?: AXPKeyboardShortcutFormatOptions,\n): string {\n  return chords.map((chord) => formatKeyboardShortcutChord(chord, options)).join(' / ');\n}\n\n/** Maps a chord to `ax-kbd-item` key parts (modifiers + display symbols). */\nexport function chordToKbdItemKeys(\n  chord: AXPKeyboardShortcutChord,\n  options?: AXPKeyboardShortcutFormatOptions,\n): string[] {\n  const directionBehavior = resolveEffectiveDirectionBehavior(chord, options?.directionBehavior);\n  const resolvedChord = options?.skipDirectionResolve\n    ? chord\n    : resolveDisplayShortcutChord(chord, options?.isRtl === true, directionBehavior);\n\n  const mac = isMacPlatform();\n  const symbolKeys: Record<string, string> = {\n    arrowleft: '←',\n    arrowright: '→',\n    arrowup: '↑',\n    arrowdown: '↓',\n    pageup: 'PgUp',\n    pagedown: 'PgDn',\n    enter: '↵',\n    escape: 'Esc',\n    esc: 'Esc',\n    space: 'Space',\n    '[': '[',\n    ']': ']',\n  };\n\n  return resolvedChord\n    .trim()\n    .split('+')\n    .map((part) => part.trim())\n    .filter(Boolean)\n    .map((part) => {\n      const normalized = part.toLowerCase();\n      if (mac && (normalized === 'ctrl' || normalized === 'control')) {\n        return '⌘';\n      }\n      return symbolKeys[normalized] ?? part;\n    });\n}\n\n/**\n * When focus is in a native edit control, avoid stealing plain key shortcuts.\n */\nexport function isKeyboardTargetInsideEditableField(target: EventTarget | null): boolean {\n  if (!(target instanceof HTMLElement)) {\n    return false;\n  }\n\n  if (target.isContentEditable) {\n    return true;\n  }\n\n  const field = target.closest<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>(\n    'input, textarea, select',\n  );\n  if (!field || field.disabled) {\n    return false;\n  }\n\n  if (field instanceof HTMLInputElement) {\n    const type = field.type;\n    if (\n      type === 'hidden' ||\n      type === 'checkbox' ||\n      type === 'radio' ||\n      type === 'button' ||\n      type === 'submit' ||\n      type === 'reset' ||\n      type === 'file' ||\n      field.readOnly\n    ) {\n      return false;\n    }\n    return true;\n  }\n\n  if (field instanceof HTMLTextAreaElement) {\n    return !field.readOnly;\n  }\n\n  return true;\n}\n\n/**\n * Returns true when Esc should close an open widget overlay first (select, date picker, popover, modal).\n * Used by the global shortcut registry so page-level Esc bindings do not swallow overlay dismiss.\n */\nexport function shouldDeferEscapeToOpenOverlay(document: Document): boolean {\n  return hasForegroundOverlayLayer(document);\n}\n\nexport function isMacPlatform(): boolean {\n  if (typeof navigator === 'undefined') {\n    return false;\n  }\n  return /Mac|iPhone|iPad|iPod/i.test(navigator.userAgent);\n}\n\nfunction normalizeShortcutToken(key: string): string {\n  const normalized = key.trim().toLowerCase();\n  if (normalized === 'esc') {\n    return 'escape';\n  }\n  if (normalized === 'left') {\n    return 'arrowleft';\n  }\n  if (normalized === 'right') {\n    return 'arrowright';\n  }\n  if (normalized === 'up') {\n    return 'arrowup';\n  }\n  if (normalized === 'down') {\n    return 'arrowdown';\n  }\n  if (normalized === '[' || normalized === 'bracketleft') {\n    return '[';\n  }\n  if (normalized === ']' || normalized === 'bracketright') {\n    return ']';\n  }\n  return normalized;\n}\n\nfunction normalizeShortcutEventKey(event: KeyboardEvent): string {\n  if (event.key === 'Enter') {\n    return 'enter';\n  }\n  if (event.key === 'Escape') {\n    return 'escape';\n  }\n  if (event.key === 'Home') {\n    return 'home';\n  }\n  if (event.key === ' ') {\n    return 'space';\n  }\n  if (event.key === '[' || event.code === 'BracketLeft') {\n    return '[';\n  }\n  if (event.key === ']' || event.code === 'BracketRight') {\n    return ']';\n  }\n\n  const codeMatch = event.code.match(/^Key([A-Z])$/);\n  if (codeMatch) {\n    return codeMatch[1].toLowerCase();\n  }\n\n  const digitMatch = event.code.match(/^Digit([0-9])$/);\n  if (digitMatch) {\n    return digitMatch[1];\n  }\n\n  if (event.key.length === 1) {\n    return event.key.toLowerCase();\n  }\n\n  const fnMatch = event.code.match(/^F(\\d+)$/);\n  if (fnMatch) {\n    return `f${fnMatch[1]}`;\n  }\n\n  return event.key.toLowerCase();\n}\n\nfunction formatShortcutPart(part: string, mac: boolean): string {\n  const normalized = normalizeShortcutToken(part);\n\n  if (mac && KEY_DISPLAY_MAC[normalized]) {\n    return KEY_DISPLAY_MAC[normalized];\n  }\n\n  if (!mac && MODIFIER_ALIASES[normalized]) {\n    return normalized.charAt(0).toUpperCase() + normalized.slice(1);\n  }\n\n  if (KEY_DISPLAY_MAC[normalized]) {\n    return KEY_DISPLAY_MAC[normalized];\n  }\n\n  if (normalized.length === 1) {\n    return normalized.toUpperCase();\n  }\n\n  return normalized.charAt(0).toUpperCase() + normalized.slice(1);\n}\n\n//#endregion\n","//#region ---- Keyboard Shortcut Declaration Utilities ----\n\nimport type {\n  AXPKeyboardShortcut,\n  AXPKeyboardShortcutChord,\n  AXPKeyboardShortcutConfig,\n  AXPResolvedKeyboardShortcut,\n} from '@acorex/platform/contracts';\n\n/**\n * Normalizes a declarative shortcut (`'ctrl+s'` or `{ keys: 'home', allowInEditableFields: false }`).\n */\nexport function normalizeKeyboardShortcut(shortcut: AXPKeyboardShortcut): AXPResolvedKeyboardShortcut | undefined {\n  if (typeof shortcut === 'string') {\n    const chord = shortcut.trim();\n    if (!chord) {\n      return undefined;\n    }\n\n    return { keys: [chord] };\n  }\n\n  return normalizeKeyboardShortcutConfig(shortcut);\n}\n\n/**\n * Normalizes an array of declarative shortcuts. Empty or invalid entries are skipped.\n */\nexport function normalizeKeyboardShortcuts(\n  shortcuts?: readonly AXPKeyboardShortcut[],\n): AXPResolvedKeyboardShortcut[] {\n  if (!shortcuts?.length) {\n    return [];\n  }\n\n  const result: AXPResolvedKeyboardShortcut[] = [];\n\n  for (const shortcut of shortcuts) {\n    const normalized = normalizeKeyboardShortcut(shortcut);\n    if (normalized) {\n      result.push(normalized);\n    }\n  }\n\n  return result;\n}\n\n/** Returns the first chord from declarative shortcuts (for UI hints such as `ax-kbd`). */\nexport function getPrimaryKeyboardShortcutChord(\n  shortcuts?: readonly AXPKeyboardShortcut[],\n): AXPKeyboardShortcutChord | undefined {\n  return normalizeKeyboardShortcuts(shortcuts)[0]?.keys[0];\n}\n\nfunction normalizeKeyboardShortcutConfig(\n  shortcut: AXPKeyboardShortcutConfig,\n): AXPResolvedKeyboardShortcut | undefined {\n  const keys = Array.isArray(shortcut.keys) ? shortcut.keys : [shortcut.keys];\n  const normalizedKeys = keys.map((chord) => chord.trim()).filter(Boolean);\n\n  if (normalizedKeys.length === 0) {\n    return undefined;\n  }\n\n  return {\n    keys: normalizedKeys,\n    allowInEditableFields: shortcut.allowInEditableFields,\n    when: shortcut.when,\n    directionBehavior: shortcut.directionBehavior,\n  };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { computed, DestroyRef, ElementRef, inject, Injectable, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { DOCUMENT } from '@angular/common';\nimport { AXLocaleService } from '@acorex/core/locale';\n\nimport type {\n  AXPKeyboardShortcutBinding,\n  AXPKeyboardShortcutChord,\n  AXPKeyboardShortcutHelpEntry,\n  AXPKeyboardShortcutRegistration,\n} from '@acorex/platform/contracts';\nimport { AXPKeyboardShortcutPriority } from '@acorex/platform/contracts';\nimport {\n  formatKeyboardShortcutChords,\n  hasForegroundOverlayLayer,\n  isKeyboardTargetInsideEditableField,\n  matchesKeyboardShortcutChord,\n  resolveDisplayShortcutChord,\n  resolveEffectiveDirectionBehavior,\n  shouldDeferEscapeToOpenOverlay,\n} from './keyboard-shortcut.util';\n\n//#endregion\n\n//#region ---- Internal Types ----\n\ninterface RegisteredShortcutScope extends AXPKeyboardShortcutRegistration {\n  registrationId: string;\n  elementRef?: ElementRef<HTMLElement>;\n}\n\nexport interface AXPKeyboardShortcutRegisterOptions extends AXPKeyboardShortcutRegistration {\n  /** Auto-unregister when the owner is destroyed. */\n  owner: DestroyRef;\n\n  /** When set, shortcuts are active only while the element is connected to the document. */\n  elementRef?: ElementRef<HTMLElement>;\n}\n\n//#endregion\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPKeyboardShortcutRegistry {\n  //#region ---- Services & Dependencies ----\n\n  private readonly document = inject(DOCUMENT);\n  private readonly localeService = inject(AXLocaleService);\n  private readonly activeProfile = toSignal(this.localeService.profileChanged$, {\n    initialValue: this.localeService.activeProfile(),\n  });\n  private readonly registrations = signal<RegisteredShortcutScope[]>([]);\n  private helpDialogHandler: (() => void | Promise<void>) | null = null;\n  private listenerAttached = false;\n\n  //#endregion\n\n  //#region ---- Computed Properties ----\n\n  /** Active shortcut entries for the help dialog. */\n  readonly helpEntries = computed(() => {\n    this.activeProfile();\n    return this.buildHelpEntries();\n  });\n\n  //#endregion\n\n  //#region ---- Public Methods ----\n\n  /**\n   * Registers a scope of shortcuts. Unregisters automatically when `owner` is destroyed.\n   */\n  register(options: AXPKeyboardShortcutRegisterOptions): void {\n    const { owner, ...registrationOptions } = options;\n    const registrationId = `${options.id}-${this.createRegistrationId()}`;\n    const entry: RegisteredShortcutScope = {\n      ...registrationOptions,\n      registrationId,\n      priority: options.priority ?? 0,\n    };\n\n    this.registrations.update((items) => [\n      ...items.filter((item) => item.id !== options.id),\n      entry,\n    ]);\n    this.ensureListener();\n\n    try {\n      owner.onDestroy(() => {\n        this.unregister(registrationId);\n      });\n    } catch {\n      // Owner view was already destroyed (e.g. async registration after navigation).\n      this.unregister(registrationId);\n    }\n  }\n\n  /**\n   * Wires the F1 help dialog opener (provided by platform/common).\n   */\n  setHelpDialogHandler(handler: () => void | Promise<void>): void {\n    this.helpDialogHandler = handler;\n    this.ensureHelpShortcutRegistered();\n  }\n\n  /** OS-aware display string for UI hints. */\n  formatDisplayKeys(chords: readonly AXPKeyboardShortcutChord[]): string {\n    return formatKeyboardShortcutChords(chords, { isRtl: this.isRtlProfile() });\n  }\n\n  //#endregion\n\n  //#region ---- Private Methods ----\n\n  private ensureHelpShortcutRegistered(): void {\n    const alreadyRegistered = this.registrations().some((entry) => entry.id === 'system:keyboard-shortcuts-help');\n    if (alreadyRegistered || !this.helpDialogHandler) {\n      return;\n    }\n\n    const handler = this.helpDialogHandler;\n\n    const entry: RegisteredShortcutScope = {\n      registrationId: 'system:keyboard-shortcuts-help',\n      id: 'system:keyboard-shortcuts-help',\n      priority: -1,\n      scope: '@general:keyboard-shortcuts.groups.system',\n      shortcuts: [\n        {\n          keys: ['f1'],\n          title: '@general:keyboard-shortcuts.help-action',\n          allowInEditableFields: true,\n          handler: () => {\n            void handler();\n          },\n        },\n      ],\n    };\n\n    this.registrations.update((items) => [...items, entry]);\n    this.ensureListener();\n  }\n\n  private createRegistrationId(): string {\n    if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n      return crypto.randomUUID();\n    }\n    return `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n  }\n\n  private unregister(registrationId: string): void {\n    this.registrations.update((items) => items.filter((item) => item.registrationId !== registrationId));\n  }\n\n  private ensureListener(): void {\n    if (this.listenerAttached || typeof this.document === 'undefined') {\n      return;\n    }\n\n    this.document.addEventListener('keydown', this.onDocumentKeyDown, true);\n    this.listenerAttached = true;\n  }\n\n  private readonly onDocumentKeyDown = (event: KeyboardEvent): void => {\n    if (event.key === 'Escape' && shouldDeferEscapeToOpenOverlay(this.document)) {\n      return;\n    }\n\n    if (event.key === 'F1') {\n      event.preventDefault();\n      event.stopImmediatePropagation();\n      if (hasForegroundOverlayLayer(this.document)) {\n        return;\n      }\n    }\n\n    const candidates = this.resolveActiveCandidates(event);\n    if (candidates.length === 0) {\n      return;\n    }\n\n    const match = candidates[0];\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    void match.binding.handler(event);\n  };\n\n  private resolveActiveCandidates(event: KeyboardEvent): ActiveCandidate[] {\n    const editable = isKeyboardTargetInsideEditableField(event.target);\n    const candidates: ActiveCandidate[] = [];\n\n    for (const registration of this.registrations()) {\n      if (!this.isRegistrationActive(registration)) {\n        continue;\n      }\n\n      const priority = registration.priority ?? 0;\n\n      for (const binding of registration.shortcuts) {\n        if (binding.when && !binding.when()) {\n          continue;\n        }\n\n        if (editable && !binding.allowInEditableFields) {\n          continue;\n        }\n\n        for (const chord of binding.keys) {\n          const directionBehavior = resolveEffectiveDirectionBehavior(chord, binding.directionBehavior);\n          if (\n            !matchesKeyboardShortcutChord(event, chord, {\n              directionBehavior,\n              isRtl: this.isRtlProfile(),\n            })\n          ) {\n            continue;\n          }\n\n          candidates.push({\n            priority,\n            registration,\n            binding,\n            chord,\n          });\n          break;\n        }\n      }\n    }\n\n    return candidates.sort((a, b) => b.priority - a.priority);\n  }\n\n  private isRegistrationActive(registration: RegisteredShortcutScope): boolean {\n    if (registration.when && !registration.when()) {\n      return false;\n    }\n\n    const element = registration.elementRef?.nativeElement;\n    if (element && !this.document.contains(element)) {\n      return false;\n    }\n\n    return true;\n  }\n\n  private isRtlProfile(): boolean {\n    return this.activeProfile()?.i18nMeta?.rtl === true;\n  }\n\n  private buildHelpEntries(): AXPKeyboardShortcutHelpEntry[] {\n    const entries: AXPKeyboardShortcutHelpEntry[] = [];\n    const isRtl = this.isRtlProfile();\n\n    for (const registration of this.registrations()) {\n      if (!this.isRegistrationActive(registration)) {\n        continue;\n      }\n\n      if (registration.id === 'system:keyboard-shortcuts-help') {\n        continue;\n      }\n\n      const priority = registration.priority ?? 0;\n\n      for (const binding of registration.shortcuts) {\n        const displayChords = binding.keys.map((chord) => {\n          const directionBehavior = resolveEffectiveDirectionBehavior(chord, binding.directionBehavior);\n          return resolveDisplayShortcutChord(chord, isRtl, directionBehavior);\n        });\n\n        entries.push({\n          registrationId: registration.registrationId,\n          bindingTitle: binding.title,\n          chords: [...binding.keys],\n          displayChords,\n          displayKeys: formatKeyboardShortcutChords(displayChords, { skipDirectionResolve: true }),\n          scope: registration.scope,\n          group: binding.group ?? registration.group,\n          priority,\n        });\n      }\n    }\n\n    return entries.sort((a, b) => b.priority - a.priority || a.bindingTitle.localeCompare(b.bindingTitle));\n  }\n\n  //#endregion\n}\n\ninterface ActiveCandidate {\n  priority: number;\n  registration: RegisteredShortcutScope;\n  binding: AXPKeyboardShortcutBinding;\n  chord: AXPKeyboardShortcutChord;\n}\n\n//#endregion\n","//#region ---- Dialog Action Shortcut Utilities ----\n\nimport type { AXPKeyboardShortcut, AXPKeyboardShortcutChord } from '@acorex/platform/contracts';\nimport { normalizeKeyboardShortcuts } from './keyboard-shortcut-declaration.util';\n\n/** Resolved chord string used by dialog footer shortcut matching. */\nexport type AXPDialogActionShortcut = AXPKeyboardShortcutChord;\n\nexport const DEFAULT_CANCEL_DIALOG_ACTION_SHORTCUTS: readonly AXPDialogActionShortcut[] = ['Esc'];\nexport const DEFAULT_SUBMIT_DIALOG_ACTION_SHORTCUTS: readonly AXPDialogActionShortcut[] = ['Enter', 'ctrl+s'];\n\nconst PRIMARY_DIALOG_ACTION_COMMANDS = new Set([\n  'submit',\n  'create',\n  'apply',\n  'save',\n  'select',\n  'entity-form-done',\n  'upload-image',\n]);\n\nexport interface AXPDialogActionOptions {\n  /**\n   * Additional keyboard shortcuts for this action (e.g. `'ctrl+s'` or `{ keys: 'ctrl+s' }`).\n   * Merged with built-in defaults for `cancel` / `submit`. Pass `[]` to disable all shortcuts.\n   */\n  shortcuts?: AXPKeyboardShortcut[];\n}\n\ninterface ParsedShortcut {\n  ctrl: boolean;\n  shift: boolean;\n  alt: boolean;\n  meta: boolean;\n  key: string;\n}\n\n/**\n * Parses a shortcut string such as `Enter`, `Escape`, or `ctrl+shift+s`.\n */\nexport function parseDialogActionShortcut(shortcut: string): ParsedShortcut {\n  const parts = shortcut\n    .trim()\n    .toLowerCase()\n    .split('+')\n    .map((part) => part.trim())\n    .filter(Boolean);\n\n  const key = normalizeShortcutToken(parts.pop() ?? '');\n  return {\n    ctrl: parts.includes('ctrl') || parts.includes('control'),\n    shift: parts.includes('shift'),\n    alt: parts.includes('alt') || parts.includes('option'),\n    meta: parts.includes('meta') || parts.includes('cmd') || parts.includes('command'),\n    key,\n  };\n}\n\n/**\n * Returns true when the keyboard event matches the given shortcut definition.\n */\nexport function matchesDialogActionShortcut(event: KeyboardEvent, shortcut: string): boolean {\n  const parsed = parseDialogActionShortcut(shortcut);\n\n  if (parsed.ctrl !== event.ctrlKey) {\n    return false;\n  }\n  if (parsed.shift !== event.shiftKey) {\n    return false;\n  }\n  if (parsed.alt !== event.altKey) {\n    return false;\n  }\n  if (parsed.meta !== event.metaKey) {\n    return false;\n  }\n\n  return normalizeShortcutKey(event) === normalizeShortcutToken(parsed.key);\n}\n\n/**\n * Resolves footer action shortcuts: defaults when omitted, merge when extras are provided, none when `[]`.\n */\nexport function resolveDialogActionShortcuts(\n  defaults: readonly AXPKeyboardShortcut[],\n  overrides?: readonly AXPKeyboardShortcut[],\n): AXPDialogActionShortcut[] | undefined {\n  if (overrides !== undefined) {\n    if (overrides.length === 0) {\n      return undefined;\n    }\n    return flattenDialogActionShortcutChords([...defaults, ...overrides]);\n  }\n  return flattenDialogActionShortcutChords(defaults);\n}\n\n/**\n * Applies built-in footer shortcuts when actions are declared without `shortcuts`\n * (e.g. workflow `show-layout-popup` raw action config).\n */\nexport function resolveConfiguredFooterActionShortcuts(\n  command: string | undefined,\n  explicit?: readonly AXPKeyboardShortcut[],\n): AXPDialogActionShortcut[] | undefined {\n  if (explicit !== undefined) {\n    return resolveDialogActionShortcuts([], explicit);\n  }\n\n  if (command === 'cancel') {\n    return resolveDialogActionShortcuts(DEFAULT_CANCEL_DIALOG_ACTION_SHORTCUTS, undefined);\n  }\n\n  if (command && PRIMARY_DIALOG_ACTION_COMMANDS.has(command)) {\n    return resolveDialogActionShortcuts(DEFAULT_SUBMIT_DIALOG_ACTION_SHORTCUTS, undefined);\n  }\n\n  return undefined;\n}\n\nfunction flattenDialogActionShortcutChords(\n  shortcuts: readonly AXPKeyboardShortcut[],\n): AXPDialogActionShortcut[] | undefined {\n  const chords = normalizeKeyboardShortcuts(shortcuts).flatMap((shortcut) => shortcut.keys);\n  const deduped = dedupeDialogActionShortcuts(chords);\n  return deduped.length ? deduped : undefined;\n}\n\nfunction dedupeDialogActionShortcuts(shortcuts: AXPDialogActionShortcut[]): AXPDialogActionShortcut[] {\n  const seen = new Set<string>();\n  const result: AXPDialogActionShortcut[] = [];\n  for (const shortcut of shortcuts) {\n    const token = normalizeShortcutToken(shortcut);\n    if (!token || seen.has(token)) {\n      continue;\n    }\n    seen.add(token);\n    result.push(shortcut.trim());\n  }\n  return result;\n}\n\nfunction normalizeShortcutToken(key: string): string {\n  const normalized = key.trim().toLowerCase();\n  if (normalized === 'esc') {\n    return 'escape';\n  }\n  return normalized;\n}\n\n/**\n * Whether a dialog footer shortcut may fire while focus is inside an editable field.\n */\nexport function isDialogShortcutAllowedInEditableField(shortcut: string): boolean {\n  const parsed = parseDialogActionShortcut(shortcut);\n  const isPlainEnter = parsed.key === 'enter' && !parsed.ctrl && !parsed.shift && !parsed.alt && !parsed.meta;\n  return !isPlainEnter;\n}\n\n/**\n * Normalizes dialog footer chord strings for {@link AXPKeyboardShortcutRegistry} (`Esc` → `escape`).\n */\nexport function normalizeDialogActionShortcutChord(shortcut: string): string {\n  const parts = shortcut\n    .trim()\n    .split('+')\n    .map((part) => part.trim())\n    .filter(Boolean);\n\n  if (parts.length === 0) {\n    return shortcut.trim();\n  }\n\n  const key = normalizeShortcutToken(parts.pop() ?? '');\n  const modifiers = parts.map((part) => part.toLowerCase());\n  return modifiers.length ? `${modifiers.join('+')}+${key}` : key;\n}\n\n/**\n * Whether a shortcut should fire given the current focus target.\n * Enter without modifiers is suppressed in multiline / rich-text fields.\n */\nexport function shouldTriggerDialogActionShortcut(event: KeyboardEvent, shortcut: string): boolean {\n  const parsed = parseDialogActionShortcut(shortcut);\n  const isPlainEnter = parsed.key === 'enter' && !parsed.ctrl && !parsed.shift && !parsed.alt && !parsed.meta;\n\n  if (!isPlainEnter) {\n    return true;\n  }\n\n  return !isKeyboardTargetMultilineEditable(event.target);\n}\n\nfunction normalizeShortcutKey(event: KeyboardEvent): string {\n  if (event.key === 'Enter') {\n    return 'enter';\n  }\n  if (event.key === 'Escape') {\n    return 'escape';\n  }\n  if (event.key === ' ') {\n    return 'space';\n  }\n  if (event.key.length === 1) {\n    return event.key.toLowerCase();\n  }\n\n  const codeMatch = event.code.match(/^Key([A-Z])$/);\n  if (codeMatch) {\n    return codeMatch[1].toLowerCase();\n  }\n\n  const digitMatch = event.code.match(/^Digit([0-9])$/);\n  if (digitMatch) {\n    return digitMatch[1];\n  }\n\n  return event.key.toLowerCase();\n}\n\nfunction isKeyboardTargetMultilineEditable(target: EventTarget | null): boolean {\n  if (!(target instanceof HTMLElement)) {\n    return false;\n  }\n  if (target.isContentEditable) {\n    return true;\n  }\n\n  const textarea = target.closest('textarea');\n  if (textarea && !textarea.readOnly && !textarea.disabled) {\n    return true;\n  }\n\n  const richText = target.closest('[contenteditable=\"true\"]');\n  return richText instanceof HTMLElement;\n}\n\n//#endregion\n","//#region ---- Popup Footer Keyboard Shortcuts ----\n\nimport { DestroyRef, effect, ElementRef, inject, untracked } from '@angular/core';\n\nimport type { AXPKeyboardShortcut, AXPKeyboardShortcutBinding } from '@acorex/platform/contracts';\nimport { AXPKeyboardShortcutPriority } from '@acorex/platform/contracts';\nimport { AXPKeyboardShortcutRegistry } from './keyboard-shortcut-registry.service';\nimport {\n  isDialogShortcutAllowedInEditableField,\n  normalizeDialogActionShortcutChord,\n  resolveConfiguredFooterActionShortcuts,\n} from './dialog-action-shortcuts.util';\n\nexport interface AXPPopupFooterShortcutAction {\n  /** i18n key or plain label for the help dialog. */\n  title: string;\n  /** Used to resolve default chords (`cancel` → Esc, `submit`/`save`/`select` → Enter/Ctrl+S). */\n  command: string;\n  shortcuts?: readonly AXPKeyboardShortcut[];\n  disabled?: () => boolean;\n  hidden?: () => boolean;\n  handler: () => void | Promise<void>;\n}\n\nexport interface AXPPopupFooterKeyboardShortcutsOptions {\n  registry: AXPKeyboardShortcutRegistry;\n  owner: DestroyRef;\n  elementRef: ElementRef<HTMLElement>;\n  id: string;\n  scope?: string;\n  when?: () => boolean;\n  actions: readonly AXPPopupFooterShortcutAction[];\n}\n\n/**\n * Registers popup footer shortcuts at modal priority so they win over page bindings and stop bubbling.\n */\nexport function registerPopupFooterKeyboardShortcuts(options: AXPPopupFooterKeyboardShortcutsOptions): void {\n  const group = '@general:keyboard-shortcuts.groups.dialog';\n  const scope = options.scope ?? group;\n  const shortcuts: AXPKeyboardShortcutBinding[] = [];\n\n  for (const action of options.actions) {\n    if (action.hidden?.()) {\n      continue;\n    }\n\n    const chords =\n      action.shortcuts !== undefined\n        ? resolveConfiguredFooterActionShortcuts(action.command, action.shortcuts)\n        : resolveConfiguredFooterActionShortcuts(action.command, undefined);\n\n    if (!chords?.length) {\n      continue;\n    }\n\n    for (const shortcut of chords) {\n      shortcuts.push({\n        keys: [normalizeDialogActionShortcutChord(shortcut)],\n        title: action.title,\n        group,\n        allowInEditableFields: isDialogShortcutAllowedInEditableField(shortcut),\n        when: () => {\n          if (options.when && !options.when()) {\n            return false;\n          }\n          if (action.hidden?.()) {\n            return false;\n          }\n          if (action.disabled?.()) {\n            return false;\n          }\n          return true;\n        },\n        handler: () => {\n          void action.handler();\n        },\n      });\n    }\n  }\n\n  options.registry.register({\n    owner: options.owner,\n    elementRef: options.elementRef,\n    id: options.id,\n    priority: AXPKeyboardShortcutPriority.Modal,\n    scope,\n    when: options.when,\n    shortcuts,\n  });\n}\n\nexport interface AXPPopupFooterKeyboardShortcutsSetupConfig {\n  id?: string;\n  scope?: string;\n  when?: () => boolean;\n}\n\n/**\n * Binds footer shortcuts for AXPopupService-hosted components. Call from the popup constructor.\n */\nexport function setupPopupFooterKeyboardShortcuts(\n  getActions: () => AXPPopupFooterShortcutAction[],\n  config?: AXPPopupFooterKeyboardShortcutsSetupConfig,\n): void {\n  const destroyRef = inject(DestroyRef);\n  const elementRef = inject(ElementRef) as ElementRef<HTMLElement>;\n  const registry = inject(AXPKeyboardShortcutRegistry);\n  const id = config?.id ?? 'popup-footer';\n\n  effect(() => {\n    getActions();\n    config?.when?.();\n    untracked(() => {\n      registerPopupFooterKeyboardShortcuts({\n        registry,\n        owner: destroyRef,\n        elementRef,\n        id,\n        scope: config?.scope,\n        when: config?.when,\n        actions: getActions(),\n      });\n    });\n  });\n}\n\n//#endregion\n","/** Global overlay flag + task count ({@link AXPLayoutThemeService}). */\nexport const OVERLAY_LAYOUT_TRACE_NS = 'OVERLAY-LAYOUT';\n\n/** Root shell loading dialog sync ({@link AXPRootLayoutComponent}). */\nexport const OVERLAY_ROOT_LAYOUT_TRACE_NS = 'OVERLAY-ROOT-LAYOUT';\n\n/** Details view page load and overlay release orchestration. */\nexport const OVERLAY_DETAILS_VIEW_TRACE_NS = 'OVERLAY-DETAILS-VIEW';\n\n/** Widget tree mount / settle polling ({@link AXPWidgetContainerComponent}). */\nexport const OVERLAY_WIDGET_SETTLE_TRACE_NS = 'OVERLAY-WIDGET-SETTLE';\n","//#region ----   Imports   ----\n\n\n//#endregion\n\n//#region ----   Feature Definition Types   ----\n\n/**\n * Feature definition in module manifest.\n * Defines available features with default values.\n */\nexport interface AXPModuleFeatureDefinition {\n    /**\n     * Feature title (translation key or literal)\n     */\n    title: string;\n\n    /**\n     * Feature description (translation key or literal)\n     */\n    description?: string;\n\n    /**\n     * Default value for the feature.\n     * Used when user doesn't have explicit feature value.\n     */\n    defaultValue: boolean | number | string | string[] | null;\n\n    /**\n     * Type hint for validation and UI rendering\n     */\n    type?: 'boolean' | 'number' | 'string' | 'array';\n\n    /**\n     * Widget interface for feature configuration UI (optional)\n     */\n    interface?: {\n        type: string;\n        options?: Record<string, any>;\n    };\n}\n\n/**\n * Feature definition in array format (with key).\n * Used when features are defined as an array in manifest.\n */\nexport interface AXPModuleFeatureDefinitionWithKey extends AXPModuleFeatureDefinition {\n    /**\n     * Full feature key (ModuleName.FeatureKey format).\n     * When using array format, this must be provided.\n     */\n    key: string;\n}\n\n//#endregion\n\n//#region ----   Manifest Types   ----\n\n/**\n * Module manifest structure.\n * Defines module metadata and dependencies.\n * Features are provided via AXP_FEATURE_DEFINITION_PROVIDER token.\n */\nexport interface AXPModuleManifest {\n    /**\n     * Module name (must match RootConfig.module.name)\n     */\n    name: string;\n\n    /**\n     * Module version\n     */\n    version: string;\n\n    /**\n     * Module title (can reference const.ts or be translation key)\n     */\n    title: string;\n\n    /**\n     * Module description (optional)\n     */\n    description?: string;\n\n    /**\n     * Module icon (can reference const.ts)\n     */\n    icon?: string;\n\n    /**\n     * i18n scope name (can reference const.ts)\n     */\n    i18n?: string;\n\n    /**\n     * Module dependencies.\n     * Simple array format: module names (e.g., \"MeasurementCore\") or feature keys (e.g., \"DataManagement.MetaDataDefinitions\").\n     * Features use ModuleName.FeatureKey format (dot separator).\n     */\n    dependencies?: string[];\n\n    /**\n     * Whether this module is required (always enabled, cannot be disabled).\n     * Required modules like 'auth' and 'common' are always available.\n     */\n    required?: boolean;\n\n    /**\n     * Additional metadata\n     */\n    metadata?: {\n        [key: string]: any;\n    };\n}\n\n/**\n * Full feature name with module prefix.\n * Format: ModuleName.FeatureKey\n */\nexport type AXPFeatureName = string;\n\n/**\n * Feature definition with full name.\n */\nexport interface AXPFeatureDefinition extends AXPModuleFeatureDefinition {\n    /**\n     * Full feature name (ModuleName.FeatureKey)\n     */\n    name: AXPFeatureName;\n\n    /**\n     * Module name\n     */\n    module: string;\n\n    /**\n     * Feature key (short name)\n     */\n    key: string;\n}\n\n//#endregion\n\n","//#region ----   Provider Interfaces   ----\n\nimport { InjectionToken } from '@angular/core';\nimport { AXPModuleManifest } from './module-manifest.types';\n\n/**\n * Session service interface for module provider operations.\n * Implementation: @acorex/platform/auth\n */\nexport interface AXPISessionService {\n    isLoading$: any;\n    status$: any;\n    tenant: any | null;\n    application: any | null;\n    user: any | null;\n}\n\n/**\n * Injection token for session service.\n * Implementation: @acorex/platform/auth\n */\nexport const AXP_SESSION_SERVICE = new InjectionToken<AXPISessionService>(\n    'AXP_SESSION_SERVICE'\n);\n\n/**\n * Injection token for module manifest providers.\n * Modules register their manifest providers using this token.\n */\nexport const AXP_MODULE_MANIFEST_PROVIDER = new InjectionToken<AXPModuleManifest[]>(\n    'AXP_MODULE_MANIFEST_PROVIDER'\n);\n\n//#endregion\n\n\n\n\n","//#region ----   Imports   ----\n\nimport { InjectionToken } from '@angular/core';\nimport { AXPModuleFeatureDefinition } from './module-manifest.types';\n\n//#endregion\n\n//#region ----   Feature Definition Provider Interface   ----\n\n/**\n * Context for feature definition providers.\n * Allows providers to add additional feature definitions dynamically.\n */\nexport class AXPFeatureDefinitionProviderContext {\n    private readonly features: Map<string, AXPModuleFeatureDefinition> = new Map();\n\n    /**\n     * Add a feature definition.\n     * @param key Full feature key (ModuleName:FeatureKey format with colon separator)\n     * @param definition Feature definition\n     */\n    addFeature(key: string, definition: AXPModuleFeatureDefinition): void {\n        this.features.set(key, definition);\n    }\n\n    /**\n     * Get all feature definitions.\n     */\n    getFeatures(): Map<string, AXPModuleFeatureDefinition> {\n        return this.features;\n    }\n}\n\n/**\n * Interface for feature definition providers.\n * Used to dynamically provide feature definitions for modules.\n */\nexport interface AXPFeatureDefinitionProvider {\n    /**\n     * Provide feature definitions.\n     * @param context Context for adding feature definitions\n     */\n    provide(context: AXPFeatureDefinitionProviderContext): Promise<void>;\n}\n\n/**\n * Injection token for feature definition providers.\n */\nexport const AXP_FEATURE_DEFINITION_PROVIDER = new InjectionToken<AXPFeatureDefinitionProvider[]>(\n    'AXP_FEATURE_DEFINITION_PROVIDER',\n    {\n        providedIn: 'root',\n        factory: () => [],\n    }\n);\n\n//#endregion\n\n","//#region ----   Imports   ----\n\nimport { Injectable, inject, Injector } from '@angular/core';\nimport { AXPModuleManifest, AXPFeatureDefinition, AXPFeatureName } from './module-manifest.types';\nimport { AXP_MODULE_MANIFEST_PROVIDER } from './provider-interfaces';\nimport { AXP_FEATURE_DEFINITION_PROVIDER, AXPFeatureDefinitionProviderContext } from './feature-definition.provider';\n\n//#endregion\n\n//#region ----   Registry Service   ----\n\n/**\n * Registry service for module manifests.\n * Collects and manages all registered module manifests.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPModuleManifestRegistry {\n    //#region ----   Fields   ----\n\n    private readonly manifests = new Map<string, AXPModuleManifest>();\n    private readonly featureDefinitions = new Map<AXPFeatureName, AXPFeatureDefinition>();\n    private readonly injector = inject(Injector);\n    private initializationPromise: Promise<void> | null = null;\n    private isInitialized = false;\n\n    //#endregion\n\n    //#region ----   Initialization   ----\n\n    /**\n     * Initialize registry by loading all manifest providers.\n     * Should be called during app startup.\n     * Safe to call multiple times - will only initialize once.\n     */\n    async initialize(): Promise<void> {\n        // If already initialized, return immediately\n        if (this.isInitialized) {\n            return;\n        }\n\n        // If initialization is in progress, wait for it\n        if (this.initializationPromise) {\n            return this.initializationPromise;\n        }\n\n        // Start initialization\n        this.initializationPromise = this._doInitialize();\n        await this.initializationPromise;\n    }\n\n    /**\n     * Internal initialization logic.\n     */\n    private async _doInitialize(): Promise<void> {\n        // Get manifests from injector (using useValue, they are provided directly)\n        let manifests: AXPModuleManifest[];\n        try {\n            const injectedManifests = this.injector.get(AXP_MODULE_MANIFEST_PROVIDER, []);\n            manifests = Array.isArray(injectedManifests) ? injectedManifests : injectedManifests ? [injectedManifests] : [];\n        } catch (error) {\n            console.error('Failed to get manifest providers from injector:', error);\n            manifests = [];\n        }\n\n        // Register all manifests directly\n        const registerPromises = manifests.map(async (manifest: AXPModuleManifest) => {\n            try {\n                // Validate manifest\n                if (!manifest) {\n                    console.error('Invalid manifest:', manifest);\n                    return;\n                }\n                await this.register(manifest);\n            } catch (error) {\n                console.error(`Failed to register manifest:`, error);\n            }\n        });\n\n        await Promise.all(registerPromises);\n\n        // Load and register features from all feature definition providers\n        await this.loadFeatureDefinitions();\n\n        this.isInitialized = true;\n    }\n\n    //#endregion\n\n    //#region ----   Manifest Management   ----\n\n    /**\n     * Register a module manifest.\n     */\n    async register(manifest: AXPModuleManifest): Promise<void> {\n        // Validate manifest\n        if (!manifest.name) {\n            throw new Error('Manifest must have a name');\n        }\n\n        if (!manifest.version) {\n            throw new Error(`Manifest for module '${manifest.name}' must have a version`);\n        }\n\n        // Register manifest\n        this.manifests.set(manifest.name, manifest);\n    }\n\n    /**\n     * Get manifest for a module.\n     */\n    get(moduleName: string): AXPModuleManifest | undefined {\n        return this.manifests.get(moduleName);\n    }\n\n    /**\n     * Get all registered manifests.\n     */\n    getAll(): AXPModuleManifest[] {\n        return Array.from(this.manifests.values());\n    }\n\n    /**\n     * Check if a module manifest is registered.\n     */\n    has(moduleName: string): boolean {\n        return this.manifests.has(moduleName);\n    }\n\n    /**\n     * Load feature definitions from all registered feature definition providers.\n     * Features are automatically associated with modules based on the module name in the feature key.\n     */\n    private async loadFeatureDefinitions(): Promise<void> {\n        try {\n            const featureProviders = this.injector.get(AXP_FEATURE_DEFINITION_PROVIDER, []);\n            if (!featureProviders || featureProviders.length === 0) {\n                return;\n            }\n\n            const context = new AXPFeatureDefinitionProviderContext();\n\n            // Call all providers to collect features\n            for (const provider of featureProviders) {\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            // Register all features and associate them with their modules\n            const features = context.getFeatures();\n            for (const [key, definition] of features.entries()) {\n                // Extract module name from key (format: ModuleName:FeatureKey)\n                const [moduleName, ...keyParts] = key.split(':');\n                const shortKey = keyParts.join(':');\n\n                // Verify that the module exists\n                if (!this.has(moduleName)) {\n                    console.warn(`Feature '${key}' references unknown module '${moduleName}'. Skipping.`);\n                    continue;\n                }\n\n                // Register feature definition\n                this.registerFeatureDefinition({\n                    ...definition,\n                    name: key,\n                    module: moduleName,\n                    key: shortKey,\n                });\n            }\n        } catch (error) {\n            console.error('Failed to load feature definitions:', error);\n        }\n    }\n\n    //#endregion\n\n    //#region ----   Feature Definition Management   ----\n\n    /**\n     * Get all feature definitions from all manifests.\n     */\n    getAllFeatureDefinitions(): AXPFeatureDefinition[] {\n        return Array.from(this.featureDefinitions.values());\n    }\n\n    /**\n     * Get feature definition by full name.\n     */\n    getFeatureDefinition(featureName: AXPFeatureName): AXPFeatureDefinition | undefined {\n        return this.featureDefinitions.get(featureName);\n    }\n\n    /**\n     * Check if a feature is defined in any manifest.\n     */\n    isFeatureDefined(featureName: AXPFeatureName): boolean {\n        return this.featureDefinitions.has(featureName);\n    }\n\n    /**\n     * Get default value for a feature.\n     * Returns undefined if feature is not defined.\n     */\n    getFeatureDefault(featureName: AXPFeatureName): any {\n        const definition = this.getFeatureDefinition(featureName);\n        return definition?.defaultValue;\n    }\n\n    /**\n     * Get all feature definitions for a specific module.\n     */\n    getModuleFeatures(moduleName: string): AXPFeatureDefinition[] {\n        return Array.from(this.featureDefinitions.values()).filter((def) => def.module === moduleName);\n    }\n\n    /**\n     * Register a feature definition dynamically (e.g., from feature definition provider).\n     * Used to add features that are defined at runtime via AXP_FEATURE_DEFINITION_PROVIDER.\n     */\n    registerFeatureDefinition(definition: AXPFeatureDefinition): void {\n        this.featureDefinitions.set(definition.name, definition);\n    }\n\n    //#endregion\n\n    //#region ----   Dependency Checking   ----\n\n    /**\n     * Check if module dependencies are satisfied.\n     * Returns array of missing dependencies.\n     * Dependencies can be module names or feature keys (ModuleName.FeatureKey format).\n     */\n    checkDependencies(moduleName: string): {\n        missingModules: string[];\n        missingFeatures: string[];\n    } {\n        const manifest = this.get(moduleName);\n        if (!manifest?.dependencies || manifest.dependencies.length === 0) {\n            return { missingModules: [], missingFeatures: [] };\n        }\n\n        const missingModules: string[] = [];\n        const missingFeatures: string[] = [];\n\n        for (const dependency of manifest.dependencies) {\n            // If dependency contains a dot, it's a feature (ModuleName.FeatureKey)\n            if (dependency.includes('.')) {\n                // Convert dependency format (ModuleName.FeatureKey) to feature name format (ModuleName:Feature:FeatureKey)\n                const [moduleName, featureKey] = dependency.split('.');\n                const featureName = `${moduleName}:Feature:${featureKey}`;\n                if (!this.isFeatureDefined(featureName)) {\n                    missingFeatures.push(dependency);\n                }\n            } else {\n                // Otherwise, it's a module name\n                if (!this.has(dependency)) {\n                    missingModules.push(dependency);\n                }\n            }\n        }\n\n        return { missingModules, missingFeatures };\n    }\n\n    //#endregion\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { AXDataSource } from '@acorex/cdk/common';\nimport {\n  AXPDataSourceDefinition,\n  AXPDataSourceDefinitionProvider,\n} from '../data/datasource-definition-provider.service';\nimport { AXPFilterDefinition, AXPPlatformCoreDataSourceKeys } from '@acorex/platform/contracts';\nimport { inject } from '@angular/core';\nimport { AXPModuleManifestRegistry } from './module-manifest.registry';\n\n//#endregion\n\n//#region ---- Module manifests data source ----\n\n/**\n * Data source definition for module names/titles from {@link AXPModuleManifestRegistry}.\n */\nexport class AXPModuleManifestsDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n  //#region ---- Services & Dependencies ----\n\n  private readonly manifestRegistry = inject(AXPModuleManifestRegistry);\n\n  //#endregion\n\n  //#region ---- Public API ----\n\n  async items(): Promise<AXPDataSourceDefinition[]> {\n    return [\n      {\n        name: AXPPlatformCoreDataSourceKeys.ModuleManifests,\n        title: 'Module manifests',\n        source: () =>\n          new AXDataSource({\n            key: 'id',\n            load: async () => {\n              await this.manifestRegistry.initialize();\n              const list = this.manifestRegistry.getAll().map((m) => ({\n                id: m.name,\n                title: m.title || m.name,\n              }));\n              return { items: list, total: list.length };\n            },\n            byKey: async (key: unknown) => {\n              await this.manifestRegistry.initialize();\n              const m = this.manifestRegistry.getAll().find((x) => x.name === key);\n              return m ? { id: m.name, title: m.title || m.name } : undefined;\n            },\n            pageSize: 1000,\n          }),\n        columns: [\n          {\n            name: 'id',\n            title: 'ID',\n            datatype: 'string',\n            type: 'text-editor',\n          },\n          {\n            name: 'title',\n            title: 'Title',\n            datatype: 'string',\n            type: 'text-editor',\n          },\n        ],\n        filters: [\n          {\n            field: 'title',\n            title: 'Title',\n            operator: { type: 'equal' },\n            widget: { type: 'text-editor' },\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 { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject, provideAppInitializer } from '@angular/core';\nimport type { AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { AXPStartUpTask } from './app-startup.types';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPAppStartUpService {\n  private readonly translationService = inject(AXTranslationService);\n  private tasks: AXPStartUpTask[] = [];\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  registerTask(task: AXPStartUpTask) {\n    this.tasks.push(task);\n  }\n\n  async runAllTasks() {\n    for (const task of this.tasks.sort((a, b) => a.priority - b.priority)) {\n      await this.updateStatus(task.statusText);\n      await task.run();\n    }\n  }\n\n  private async updateStatus(status: AXPMultiLanguageString) {\n    const loadingText = document.querySelector('#loadingText');\n    if (loadingText) {\n      const translatedStatus = this.translationService.resolve(status);\n      loadingText.innerHTML = await this.translationService.translateAsync(translatedStatus);\n    }\n  }\n\n  //#endregion\n}\n\nfunction initAppFactory(appInitService: AXPAppStartUpService) {\n  return () => appInitService.runAllTasks();\n}\n\nexport const AXPAppStartUpProvider = provideAppInitializer(() => {\n  const initializerFn = initAppFactory(inject(AXPAppStartUpService));\n  return initializerFn();\n});\n","//#region ----   Imports   ----\n\nimport { Injector, NgModule } from '@angular/core';\nimport { AXPAppStartUpService } from '../startup/app-startup.service';\nimport { AXPModuleManifestRegistry } from './module-manifest.registry';\n\n//#endregion\n\n//#region ----   Module   ----\n\n/**\n * Module for managing module manifests initialization.\n * Handles the registration of manifest startup tasks.\n */\n@NgModule({\n  providers: [],\n})\nexport class AXPModuleManifestModule {\n  /**\n   * @ignore\n   * Initializes module manifest tasks on module construction.\n   */\n  constructor(\n    appInitService: AXPAppStartUpService,\n    injector: Injector,\n  ) {\n    const manifestRegistry = injector.get(AXPModuleManifestRegistry);\n\n    // Register manifest initialization task\n    appInitService.registerTask(\n      {\n        name: 'ModuleManifests',\n        statusText: '@general:app-startup.loading-module-manifests',\n        priority: 1, // Load early, before features/permissions\n        run: async () => {\n          await manifestRegistry.initialize();\n        },\n      }\n    );\n  }\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { Injectable, signal } from '@angular/core';\nimport type { AXPIdleSchedulerEnqueueOptions, AXPIdleSchedulerWaitOptions } from './idle-scheduler.types';\nimport { delay } from '@acorex/core/utils';\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst DEFAULT_IDLE_TIMEOUT_MS = 2_000;\nconst DEFAULT_MIN_IDLE_MS = 16;\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Schedules low-priority work during browser idle periods.\n * Pauses when the tab is hidden or when explicitly paused (e.g. user-initiated seeding).\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPIdleSchedulerService {\n  //#region ---- State ----\n\n  private pausedState = signal(false);\n\n  readonly paused = this.pausedState.asReadonly();\n\n  private queue: Array<{ key?: string; task: () => Promise<void> }> = [];\n\n  private running = false;\n\n  //#endregion\n\n  //#region ---- Public API ----\n\n  pause(): void {\n    this.pausedState.set(true);\n  }\n\n  resume(): void {\n    this.pausedState.set(false);\n    void this.drainQueue();\n  }\n\n  /**\n   * Resolves after the browser reports idle time, or after timeoutMs (whichever comes first).\n   */\n  waitForIdle(options?: AXPIdleSchedulerWaitOptions): Promise<void> {\n    const timeoutMs = options?.timeoutMs ?? DEFAULT_IDLE_TIMEOUT_MS;\n    const minIdleMs = options?.minIdleMs ?? DEFAULT_MIN_IDLE_MS;\n\n    if (this.pausedState() || typeof document !== 'undefined' && document.visibilityState === 'hidden') {\n      return delay(timeoutMs);\n    }\n\n    return new Promise((resolve) => {\n      let settled = false;\n      const finish = () => {\n        if (settled) return;\n        settled = true;\n        resolve();\n      };\n\n      const timeoutId = setTimeout(finish, timeoutMs);\n\n      if (typeof requestIdleCallback === 'function') {\n        requestIdleCallback(\n          () => {\n            clearTimeout(timeoutId);\n            finish();\n          },\n          { timeout: timeoutMs },\n        );\n      } else {\n        clearTimeout(timeoutId);\n        setTimeout(finish, minIdleMs);\n      }\n    });\n  }\n\n  /** Enqueues async work processed sequentially during idle slices. */\n  enqueue(task: () => Promise<void>, options?: AXPIdleSchedulerEnqueueOptions): void {\n    if (options?.key) {\n      this.queue = this.queue.filter((item) => item.key !== options.key);\n    }\n    this.queue.push({ key: options?.key, task });\n    void this.drainQueue();\n  }\n\n  //#endregion\n\n  //#region ---- Private ----\n\n  private async drainQueue(): Promise<void> {\n    if (this.running || this.pausedState()) {\n      return;\n    }\n\n    this.running = true;\n    try {\n      while (this.queue.length > 0 && !this.pausedState()) {\n        const next = this.queue.shift();\n        if (!next) break;\n\n        await this.waitForIdle();\n        try {\n          await next.task();\n        } catch (err) {\n          const message = err instanceof Error ? err.message : String(err);\n          console.error('[AXPIdleScheduler] Task failed:', message);\n        }\n      }\n    } finally {\n      this.running = false;\n      if (this.queue.length > 0 && !this.pausedState()) {\n        void this.drainQueue();\n      }\n    }\n  }\n\n  //#endregion\n}\n\n//#endregion\n","//#region ---- Idle scheduler types ----\n\nexport interface AXPIdleSchedulerWaitOptions {\n  /** Max wait before running anyway (ms). Default 2000. */\n  timeoutMs?: number;\n  /** Minimum idle period passed to requestIdleCallback. Default 16. */\n  minIdleMs?: number;\n}\n\nexport interface AXPIdleSchedulerEnqueueOptions {\n  /** Dedupe key — replaces pending task with the same key. */\n  key?: string;\n}\n\n//#endregion\n","//#region ----   Tag Types   ----\n\n/**\n * Represents a tag with text, color, and metadata\n */\nexport interface AXPTag {\n    id?: string;\n    title: string;\n    color: string;\n    description?: string;\n    scope?: 'system' | 'tenant' | 'user';\n}\n\n/**\n * Options for filtering tags\n */\nexport interface AXPTagFilterOptions {\n    scope?: ('system' | 'tenant' | 'user')[];\n    search?: string;\n}\n\n//#endregion\n\n","import { InjectionToken } from '@angular/core';\nimport { AXPTag } from './tag.types';\n\n//#region ----   Tag Provider   ----\n\n/**\n * Abstract class for tag providers\n * Implement this to provide tags from different sources (system, tenant, user, etc.)\n */\nexport abstract class AXPTagProvider {\n    /**\n     * Unique name for this provider (e.g., 'system', 'tenant', 'user')\n     */\n    abstract name: string;\n\n    /**\n     * Provide tags from this source\n     * @returns Promise of tags\n     */\n    abstract provide(): Promise<AXPTag[]>;\n\n    /**\n     * Create a new tag (optional - not all providers support creation)\n     * @param tag Tag to create\n     * @returns Created tag with id\n     */\n    async create?(tag: Omit<AXPTag, 'id'>): Promise<AXPTag> {\n        throw new Error(`Provider ${this.name} does not support tag creation`);\n    }\n\n    /**\n     * Update an existing tag (optional)\n     * @param tag Tag to update\n     * @returns Updated tag\n     */\n    async update?(tag: AXPTag): Promise<AXPTag> {\n        throw new Error(`Provider ${this.name} does not support tag updates`);\n    }\n\n    /**\n     * Delete a tag (optional)\n     * @param id Tag id to delete\n     */\n    async delete?(id: string): Promise<void> {\n        throw new Error(`Provider ${this.name} does not support tag deletion`);\n    }\n}\n\n/**\n * Injection token for tag providers\n * Use this to register multiple tag providers\n */\nexport const AXP_TAG_PROVIDER = new InjectionToken<AXPTagProvider[]>('AXP_TAG_PROVIDER');\n\n//#endregion\n\n","import { inject, Injectable } from '@angular/core';\nimport { AXPTag, AXPTagFilterOptions } from './tag.types';\nimport { AXP_TAG_PROVIDER, AXPTagProvider } from './tag.provider';\n\n//#region ----   Tag Service   ----\n\n/**\n * Service for managing tags from multiple providers\n * Aggregates tags from all registered providers\n */\n@Injectable({\n    providedIn: 'root',\n})\nexport class AXPTagService {\n\n    //#region ----   Dependencies   ----\n\n    private providers: AXPTagProvider[] = inject(AXP_TAG_PROVIDER, { optional: true }) ?? [];\n\n    //#endregion\n\n    //#region ----   State   ----\n\n    private cache: AXPTag[] | null = null;\n\n    //#endregion\n\n    //#region ----   Public API   ----\n\n    /**\n     * Get all tags from all providers\n     * @param options Filter options\n     * @returns Promise of tags\n     */\n    async getTags(options?: AXPTagFilterOptions): Promise<AXPTag[]> {\n        if (!this.cache) {\n            await this.loadTags();\n        }\n\n        let tags = this.cache!;\n\n        // Apply scope filter\n        if (options?.scope && options.scope.length > 0) {\n            tags = tags.filter((tag) => tag.scope && options.scope!.includes(tag.scope));\n        }\n\n        // Apply search filter\n        if (options?.search) {\n            const searchLower = options.search.toLowerCase();\n            tags = tags.filter(\n                (tag) =>\n                    tag.title.toLowerCase().includes(searchLower) ||\n                    tag.description?.toLowerCase().includes(searchLower),\n            );\n        }\n\n        return tags;\n    }\n\n    /**\n     * Create a new tag using the appropriate provider\n     * @param tag Tag to create\n     * @param providerName Provider to use (defaults to first writable provider)\n     * @returns Created tag\n     */\n    async createTag(tag: Omit<AXPTag, 'id'>, providerName?: string): Promise<AXPTag> {\n        const provider = providerName\n            ? this.providers.find((p) => p.name === providerName)\n            : this.providers.find((p) => p.create);\n\n        if (!provider || !provider.create) {\n            throw new Error('No writable tag provider available');\n        }\n\n        const createdTag = await provider.create(tag);\n\n        // Invalidate cache\n        this.cache = null;\n\n        return createdTag;\n    }\n\n    /**\n     * Update an existing tag\n     * @param tag Tag to update\n     * @returns Updated tag\n     */\n    async updateTag(tag: AXPTag): Promise<AXPTag> {\n        const provider = this.providers.find((p) => p.name === tag.scope && p.update);\n\n        if (!provider || !provider.update) {\n            throw new Error(`No provider found for updating tag with scope: ${tag.scope}`);\n        }\n\n        const updatedTag = await provider.update(tag);\n\n        // Invalidate cache\n        this.cache = null;\n\n        return updatedTag;\n    }\n\n    /**\n     * Delete a tag\n     * @param tagId Tag id to delete\n     * @param scope Tag scope\n     */\n    async deleteTag(tagId: string, scope: string): Promise<void> {\n        const provider = this.providers.find((p) => p.name === scope && p.delete);\n\n        if (!provider || !provider.delete) {\n            throw new Error(`No provider found for deleting tag with scope: ${scope}`);\n        }\n\n        await provider.delete(tagId);\n\n        // Invalidate cache\n        this.cache = null;\n    }\n\n    /**\n     * Reload tags from all providers\n     */\n    async reload(): Promise<void> {\n        this.cache = null;\n        await this.loadTags();\n    }\n\n    //#endregion\n\n    //#region ----   Private Methods   ----\n\n    /**\n     * Load tags from all providers\n     */\n    private async loadTags(): Promise<void> {\n        const allTags: AXPTag[] = [];\n\n        for (const provider of this.providers) {\n            try {\n                const tags = await provider.provide();\n                allTags.push(...tags);\n            } catch (error) {\n                console.error(`Error loading tags from provider ${provider.name}:`, error);\n            }\n        }\n\n        // Remove duplicates based on title (case-insensitive)\n        const uniqueTags = allTags.filter(\n            (tag, index, self) =>\n                index === self.findIndex((t) => t.title.toLowerCase() === tag.title.toLowerCase()),\n        );\n\n        this.cache = uniqueTags;\n    }\n\n    //#endregion\n}\n\n//#endregion\n\n","import { Type } from '@angular/core';\nimport { NavigationExtras } from '@angular/router';\nimport {\n  getSystemActions,\n  type AXPActionMenuItem,\n  type AXPSystemActionType,\n  type AXPMultiLanguageString,\n} from '@acorex/platform/contracts';\n\nexport type AXPNavigateActionOptions = {\n  router: {\n    path: string;\n    extras?: NavigationExtras & { target?: string };\n  };\n  modal: {\n    component: Type<unknown>;\n    title: AXPMultiLanguageString;\n    options?: unknown;\n  };\n};\n\nexport interface AXPNavigateActionCommand<T extends keyof AXPNavigateActionOptions> {\n  type: T;\n  options: AXPNavigateActionOptions[T];\n}\n\nexport function applySystemActionDefault(action: AXPActionMenuItem, type: AXPSystemActionType): AXPActionMenuItem {\n  const systemAction = getSystemActions(type);\n  return {\n    ...action,\n    name: action.name ?? systemAction.key,\n    title: action.title ?? systemAction.title,\n    icon: action.icon ?? systemAction.icon,\n    color: action.color ?? systemAction.color,\n  };\n}\n","import { Type } from '@angular/core';\n\nexport class AXPImageUrlLogoConfig {\n  constructor(\n    public url: string,\n    public width?: number,\n    public height?: number,\n  ) {}\n}\n\nexport class AXPComponentLogoConfig {\n  height?: number | undefined;\n  width?: number | undefined;\n  constructor(public component: Type<unknown>) {}\n}\n\nexport class AXPIconLogoConfig {\n  constructor(\n    public icon: string,\n    public color?: string,\n  ) {}\n}\n","import { AXCalendarService } from '@acorex/core/date-time';\nimport { inject, Pipe, PipeTransform, signal } from '@angular/core';\nimport { interval, Observable } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\n\n@Pipe({\n  name: 'countdown',\n  pure: false,\n  standalone: true,\n})\nexport class AXPCountdownPipe implements PipeTransform {\n  private calendarService = inject(AXCalendarService);\n\n  private countdownSignal = signal(this.setupTimer());\n\n  private targetDate: number = 0;\n  private prevValue = 0;\n\n  transform(value: number): Observable<string> {\n    if (this.prevValue != value) {\n      this.prevValue = value;\n      const expireTime = this.calendarService.calendar.add(new Date(), 'second', value).date;\n      this.updateTargetDate(expireTime.toISOString());\n    }\n    return this.countdownSignal();\n  }\n\n  private setupTimer() {\n    return interval(1000).pipe(\n      startWith(0),\n      map(() => {\n        const diff = this.targetDate - new Date().getTime();\n        if (diff < 0) {\n          return \"Time's up!\";\n        }\n\n        const times = [86400, 3600, 60, 1].map((seconds) => Math.floor((diff / 1000 / seconds) % (seconds === 1 ? 60 : 24)));\n        const labels = ['d', 'h', 'm', 's'];\n        return times\n          .map((t, i) => (t > 0 || i === 3 ? `${t}${labels[i]}` : ''))\n          .join(' ')\n          .trim();\n      })\n    );\n  }\n\n  private updateTargetDate(value: string) {\n    this.targetDate = new Date(value).getTime();\n  }\n}\n","import {\n  AXDataSourceCallbackResult,\n  AXDataSourceFilterOption,\n  AXDataSourceLoadCallback,\n  AXDataSourceQuery,\n  AXDataSourceSortOption,\n} from '@acorex/cdk/common';\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\nimport { endsWith, get, gt, gte, includes, isEmpty, isEqual, isNil, lt, lte, orderBy, startsWith } from 'lodash-es';\nimport { isLocaleStringMap } from '@acorex/platform/contracts';\n\nconst loggingEnabled = false; // Set to true to enable logging, false to disable\n\n//#region ---- Multilingual string helpers ----\n\n/**\n * Lowercased text for client-side filtering: plain string or all locale values joined.\n */\nfunction toFilterSearchText(value: unknown): string | undefined {\n  if (typeof value === 'string') {\n    return value.toLowerCase();\n  }\n\n  if (isLocaleStringMap(value)) {\n    return Object.values(value).join(' ').toLowerCase();\n  }\n\n  return undefined;\n}\n\nfunction toSortComparableValue(value: unknown, locale: string): string | number | boolean {\n  if (value == null) {\n    return '';\n  }\n\n  if (typeof value === 'number' || typeof value === 'boolean') {\n    return value;\n  }\n\n  if (typeof value === 'string') {\n    return value.toLocaleLowerCase(locale);\n  }\n\n  if (value instanceof Date) {\n    return value.getTime();\n  }\n\n  if (isLocaleStringMap(value)) {\n    return resolveMultiLanguageString(value, locale).toLocaleLowerCase(locale);\n  }\n\n  return String(value).toLocaleLowerCase(locale);\n}\n\nfunction filterValuesAreEqual(itemRaw: unknown, condRaw: unknown): boolean {\n  if (typeof condRaw === 'string' && isLocaleStringMap(itemRaw)) {\n    return Object.values(itemRaw).some((v) => v.toLowerCase() === condRaw.toLowerCase());\n  }\n\n  if (typeof itemRaw === 'string' && isLocaleStringMap(condRaw)) {\n    return Object.values(condRaw).some((v) => v.toLowerCase() === itemRaw.toLowerCase());\n  }\n\n  const itemScalar = typeof itemRaw === 'string' ? itemRaw.toLowerCase() : itemRaw;\n  const condScalar = typeof condRaw === 'string' ? condRaw.toLowerCase() : condRaw;\n  return isEqual(itemScalar, condScalar);\n}\n\n//#endregion\n\nfunction applyCondition(item: any, condition: AXDataSourceFilterOption) {\n  const rawValue = condition.field ? get(item, condition.field) : null;\n  const itemValue = typeof rawValue === 'string' ? rawValue.toLowerCase() : rawValue;\n  const conditionValue = typeof condition.value === 'string' ? condition.value.toLowerCase() : condition.value;\n\n  // Conditional Logging for debugging\n  if (loggingEnabled) {\n    console.log('Condition:', condition);\n    console.log('Item Value:', itemValue);\n    console.log('Condition Value:', conditionValue);\n  }\n\n  let result: boolean;\n  const valueToCompare = isNil(condition.field) || condition.field === '' ? conditionValue : itemValue;\n  const conditionType = condition?.operator?.type;\n  if (!conditionType) {\n    return true;\n  }\n\n  const op = String(conditionType);\n\n  switch (op) {\n    case 'equal':\n    case 'eq':\n      if (!isNil(condition.field) && condition.field !== '') {\n        result = filterValuesAreEqual(rawValue, condition.value);\n      } else {\n        result = isEqual(valueToCompare, conditionValue);\n      }\n      if (loggingEnabled) {\n        console.log('Equal check result:', result);\n      }\n      break;\n    case 'notEqual':\n    case 'ne':\n    case 'neq':\n      if (!isNil(condition.field) && condition.field !== '') {\n        result = !filterValuesAreEqual(rawValue, condition.value);\n      } else {\n        result = !isEqual(valueToCompare, conditionValue);\n      }\n      if (loggingEnabled) {\n        console.log('Not equal check result:', result);\n      }\n      break;\n    case 'greaterThan':\n    case 'gt':\n      result = gt(valueToCompare, conditionValue);\n      if (loggingEnabled) {\n        console.log('Greater than check result:', result);\n      }\n      break;\n    case 'lessThan':\n    case 'lt':\n      result = lt(valueToCompare, conditionValue);\n      if (loggingEnabled) {\n        console.log('Less than check result:', result);\n      }\n      break;\n    case 'greaterThanOrEqual':\n    case 'gte':\n      result = gte(valueToCompare, conditionValue);\n      if (loggingEnabled) {\n        console.log('Greater than or equal check result:', result);\n      }\n      break;\n    case 'lessThanOrEqual':\n    case 'lte':\n      result = lte(valueToCompare, conditionValue);\n      if (loggingEnabled) {\n        console.log('Less than or equal check result:', result);\n      }\n      break;\n    case 'contains': {\n      const needle =\n        toFilterSearchText(condition.value) ??\n        (condition.value == null ? '' : String(condition.value).toLowerCase());\n      const haystack = toFilterSearchText(rawValue);\n      if (haystack !== undefined) {\n        result = includes(haystack, needle);\n      } else if (Array.isArray(rawValue)) {\n        result = includes(\n          rawValue.map((val) => toFilterSearchText(val) ?? val.toString().toLowerCase()),\n          needle,\n        );\n      } else {\n        result = false;\n      }\n      if (loggingEnabled) {\n        console.log('Contains check result:', result);\n      }\n      break;\n    }\n    case 'in':\n      if (Array.isArray(conditionValue)) {\n        if (typeof valueToCompare === 'string') {\n          result = conditionValue.some((val) =>\n            typeof val === 'string' ? val.toLowerCase() === valueToCompare : val === valueToCompare,\n          );\n        } else if (isLocaleStringMap(rawValue)) {\n          const localeValues = Object.values(rawValue).map((v) => v.toLowerCase());\n          result = localeValues.some((localeVal) =>\n            conditionValue.some((val) =>\n              typeof val === 'string' ? val.toLowerCase() === localeVal : val === localeVal,\n            ),\n          );\n        } else if (Array.isArray(valueToCompare)) {\n          result = valueToCompare.some((val) =>\n            conditionValue.some((condVal) =>\n              typeof val === 'string' && typeof condVal === 'string'\n                ? val.toLowerCase() === condVal.toLowerCase()\n                : val === condVal,\n            ),\n          );\n        } else {\n          result = conditionValue.includes(valueToCompare);\n        }\n      } else {\n        result = false;\n      }\n      if (loggingEnabled) {\n        console.log('In check result:', result);\n      }\n      break;\n    case 'notContains': {\n      const needleNc =\n        toFilterSearchText(condition.value) ??\n        (condition.value == null ? '' : String(condition.value).toLowerCase());\n      const haystackNc = toFilterSearchText(rawValue);\n      if (haystackNc !== undefined) {\n        result = !includes(haystackNc, needleNc);\n      } else if (Array.isArray(rawValue)) {\n        result = !includes(\n          rawValue.map((val) => toFilterSearchText(val) ?? val.toString().toLowerCase()),\n          needleNc,\n        );\n      } else {\n        result = false;\n      }\n      if (loggingEnabled) {\n        console.log('Not contains check result:', result);\n      }\n      break;\n    }\n    case 'startsWith': {\n      const prefix =\n        toFilterSearchText(condition.value) ??\n        (condition.value == null ? '' : String(condition.value).toLowerCase());\n      const haystackSw = toFilterSearchText(rawValue);\n      result = haystackSw !== undefined && startsWith(haystackSw, prefix);\n      if (loggingEnabled) {\n        console.log('Starts with check result:', result);\n      }\n      break;\n    }\n    case 'endsWith': {\n      const suffix =\n        toFilterSearchText(condition.value) ??\n        (condition.value == null ? '' : String(condition.value).toLowerCase());\n      const haystackEw = toFilterSearchText(rawValue);\n      result = haystackEw !== undefined && endsWith(haystackEw, suffix);\n      if (loggingEnabled) {\n        console.log('Ends with check result:', result);\n      }\n      break;\n    }\n    case 'isEmpty':\n      result = isEmpty(valueToCompare);\n      if (loggingEnabled) {\n        console.log('Is empty check result:', result);\n      }\n      break;\n    case 'isNull':\n      result = isNil(valueToCompare);\n      if (loggingEnabled) {\n        console.log('Is null check result:', result);\n      }\n      break;\n    case 'isNotEmpty':\n      result = !isEmpty(valueToCompare);\n      if (loggingEnabled) {\n        console.log('Is not empty check result:', result);\n      }\n      break;\n    case 'between':\n      result = !isNil(valueToCompare) && valueToCompare >= (condition.value as { from: number; to: number }).from && valueToCompare <= (condition.value as { from: number; to: number }).to;\n      if (loggingEnabled) {\n        console.log('Between check result:', result);\n      }\n      break;\n    default:\n      result = true;\n      if (loggingEnabled) {\n        console.log('Default case, returning true');\n      }\n  }\n\n  // Apply negative flag if present on operator (invert the result)\n  const isNegative = !!condition?.operator?.negative;\n  return isNegative ? !result : result;\n}\n\nexport function applyFilterArray(\n  dataArray: any[],\n  filters?: AXDataSourceFilterOption[],\n  logic: 'and' | 'or' = 'and',\n): any[] {\n  if (filters && filters.length) {\n    return dataArray.filter((item) => {\n      if (logic === 'and') {\n        return filters.every((f) => {\n          return f.filters ? applyFilterArray([item], f.filters, f.logic).length > 0 : applyCondition(item, f);\n        });\n      } else {\n        // logic === 'or'\n        return filters.some((f) => {\n          return f.filters ? applyFilterArray([item], f.filters, f.logic).length > 0 : applyCondition(item, f);\n        });\n      }\n    });\n  } else {\n    return dataArray;\n  }\n}\n\nexport function applySortArray(\n  dataArray: any,\n  sorts: AXDataSourceSortOption[],\n  locale = 'en-US',\n) {\n  if (sorts && sorts.length > 0) {\n    const iteratees = sorts.map((s) => (item: unknown) => toSortComparableValue(get(item, s.field), locale));\n    const sortOrders = sorts.map((s) => (s.dir === 'desc' ? 'desc' : 'asc'));\n    return orderBy(dataArray, iteratees, sortOrders);\n  } else return dataArray;\n}\n\nexport function applyPagination<T>(dataArray: T[], skip: number, take: number): T[] {\n  return dataArray.slice(skip, skip + take);\n}\n\nexport async function applyQueryArray<T>(\n  dataArray: T[],\n  query: AXDataSourceQuery,\n): Promise<AXDataSourceCallbackResult<T>> {\n  let result = [...dataArray];\n\n  // Apply filtering\n  if (query.filter) {\n    result = applyFilterArray(result, [query.filter], query.filter.logic ?? 'and');\n  }\n\n  // Store total count before pagination\n  const total = result.length;\n\n  // Apply sorting\n  if (query.sort && query.sort.length > 0) {\n    result = applySortArray(result, query.sort);\n  }\n\n  // Apply pagination\n  result = applyPagination(result, query.skip, query.take);\n\n  return {\n    items: result,\n    total,\n  };\n}\n","import { computed, Injectable, signal } from '@angular/core';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n//#region ----   Type Definitions   ----\n\n/**\n * Screen Size Enum\n */\nexport enum AXPScreenSize {\n  Small = 'small',\n  Medium = 'medium',\n  Large = 'large',\n}\n\n/**\n * Device Type Enum\n */\nexport enum AXPDeviceType {\n  Mobile = 'mobile',\n  Tablet = 'tablet',\n  Desktop = 'desktop',\n}\n\n//#endregion\n\n//#region ----   Helper Functions   ----\n\n/**\n * Get the initial screen size based on window width\n */\nconst getScreenSize = (): AXPScreenSize => {\n  const width = window.innerWidth;\n  if (width <= 600) return AXPScreenSize.Small;\n  if (width <= 1024) return AXPScreenSize.Medium;\n  return AXPScreenSize.Large;\n};\n\n/**\n * Determine device type based on viewport width\n */\nconst getDeviceType = (): AXPDeviceType => {\n  const width = window.innerWidth;\n  if (width <= 600) {\n    return AXPDeviceType.Mobile;\n  } else if (width <= 1024) {\n    return AXPDeviceType.Tablet;\n  }\n  return AXPDeviceType.Desktop;\n};\n\n/**\n * Determine if the device supports touch\n */\nconst isTouchDevice = (): boolean => {\n  return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n};\n\n//#endregion\n\n//#region ----   Device Service   ----\n\n/**\n * Injectable service that provides reactive device and screen size information.\n * Monitors window resize events and updates signals accordingly.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPDeviceService {\n  //#region ----   State Signals   ----\n\n  /**\n   * Current screen size (Small, Medium, Large)\n   */\n  readonly screenSize = signal<AXPScreenSize>(getScreenSize());\n\n  /**\n   * Current device type (Mobile, Tablet, Desktop)\n   */\n  readonly deviceType = signal<AXPDeviceType>(getDeviceType());\n\n  /**\n   * Whether the device supports touch input\n   */\n  readonly isTouchDevice = signal<boolean>(isTouchDevice());\n\n  //#endregion\n\n  //#region ----   Computed Signals   ----\n\n  /**\n   * Whether the screen size is Small\n   */\n  readonly isSmall = computed(() => this.screenSize() === AXPScreenSize.Small);\n\n  /**\n   * Whether the screen size is Medium\n   */\n  readonly isMedium = computed(() => this.screenSize() === AXPScreenSize.Medium);\n\n  /**\n   * Whether the screen size is Large\n   */\n  readonly isLarge = computed(() => this.screenSize() === AXPScreenSize.Large);\n\n  /**\n   * Whether the device is Mobile\n   */\n  readonly isMobileDevice = computed(() => this.deviceType() === AXPDeviceType.Mobile);\n\n  /**\n   * Whether the device is Tablet\n   */\n  readonly isTabletDevice = computed(() => this.deviceType() === AXPDeviceType.Tablet);\n\n  /**\n   * Whether the device is Desktop\n   */\n  readonly isDesktopDevice = computed(() => this.deviceType() === AXPDeviceType.Desktop);\n\n  /**\n   * Whether the device supports touch (alias for isTouchDevice)\n   */\n  readonly isTouchScreen = computed(() => this.isTouchDevice());\n\n  //#endregion\n\n  //#region ----   Private Properties   ----\n\n  private _resizeListener: Subscription | null = null;\n\n  //#endregion\n\n  //#region ----   Constructor & Lifecycle   ----\n\n  constructor() {\n    this._setupResizeListener();\n  }\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  /**\n   * Update screen size and device type based on window width\n   */\n  private _updateScreenSize(): void {\n    const width = window.innerWidth;\n    let newScreenSize: AXPScreenSize;\n\n    if (width <= 600) {\n      newScreenSize = AXPScreenSize.Small;\n    } else if (width <= 1024) {\n      newScreenSize = AXPScreenSize.Medium;\n    } else {\n      newScreenSize = AXPScreenSize.Large;\n    }\n\n    // Determine device type based on width to keep it reactive to devtools emulation\n    let newDeviceType: AXPDeviceType;\n    if (width <= 600) {\n      newDeviceType = AXPDeviceType.Mobile;\n    } else if (width <= 1024) {\n      newDeviceType = AXPDeviceType.Tablet;\n    } else {\n      newDeviceType = AXPDeviceType.Desktop;\n    }\n\n    if (newScreenSize !== this.screenSize() || newDeviceType !== this.deviceType()) {\n      this.screenSize.set(newScreenSize);\n      this.deviceType.set(newDeviceType);\n    }\n  }\n\n  /**\n   * Set up event listener for window resize\n   */\n  private _setupResizeListener(): void {\n    this._resizeListener = fromEvent(window, 'resize')\n      .pipe(debounceTime(250)) // 250ms debounce delay\n      .subscribe(() => {\n        this._updateScreenSize();\n      });\n  }\n\n  /**\n   * Remove event listener for window resize\n   */\n  private _removeResizeListener(): void {\n    if (this._resizeListener) {\n      this._resizeListener.unsubscribe();\n      this._resizeListener = null;\n    }\n  }\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  /**\n   * Clean up resources when service is destroyed\n   */\n  destroy(): void {\n    this._removeResizeListener();\n  }\n\n  //#endregion\n}\n\n//#endregion\n","import { Injectable } from '@angular/core';\n\n/**\n * Service for applying and resetting text highlighting within specified HTML elements.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXHighlightService {\n  private querySelector: string | null;\n  private searchValue: string | null;\n\n  constructor() { }\n\n  /**\n   * Highlights all occurrences of a search value within the elements matching the provided query selector.\n   *\n   * @param querySelector - CSS selector to identify target elements.\n   * @param searchValue - Text to search and highlight.\n   */\n  highlight(querySelector: string, searchValue: string): void {\n    this.clear();\n    if (!querySelector || !searchValue) {\n      return;\n    }\n    this.querySelector = querySelector;\n    this.searchValue = searchValue;\n    const elements = document.querySelectorAll(querySelector);\n    elements.forEach((element) => {\n      this.applyHighlight(element as HTMLElement);\n    });\n  }\n\n  /**\n   * Resets all highlighted text within the elements matching the previously used query selector.\n   */\n  public clear(): void {\n    const elements = document.querySelectorAll(`${this.querySelector}  .ax-highlight-text`);\n    elements.forEach((element) => {\n      let combinedText = '';\n      element.querySelectorAll('span').forEach((span) => {\n        combinedText += span.textContent;\n      });\n\n      const mergedSpan = document.createElement('span');\n      mergedSpan.textContent = combinedText;\n\n      element?.parentNode?.replaceChild(mergedSpan, element);\n    });\n  }\n\n  /**\n   * Applies highlighting to a specific element by matching text against the search value.\n   *\n   * @param element - The HTML element to apply highlights to.\n   */\n  private applyHighlight(element: HTMLElement): void {\n    const searchRegex = new RegExp(`(${this.searchValue})`, 'gi');\n    this.recursivelyHighlight(element, searchRegex);\n  }\n\n  /**\n   * Recursively applies highlighting to text nodes within an element.\n   *\n   * @param element - The current node being processed.\n   * @param searchRegex - Regular expression for matching text to highlight.\n   */\n  private recursivelyHighlight(element: Node, searchRegex: RegExp): void {\n    const childNodes = Array.from(element.childNodes);\n\n    childNodes.forEach((node) => {\n      if (node.nodeType === Node.TEXT_NODE) {\n        const textContent = node.textContent || '';\n        if (textContent.match(searchRegex)) {\n          const highlightedHTML = this.createHighlightedHTML(textContent, searchRegex);\n          const tempContainer = document.createElement('div');\n          tempContainer.innerHTML = highlightedHTML;\n\n          const fragment = document.createDocumentFragment();\n          Array.from(tempContainer.childNodes).forEach((child) => fragment.appendChild(child));\n\n          node.replaceWith(fragment);\n        }\n      } else if (node.nodeType === Node.ELEMENT_NODE) {\n        this.recursivelyHighlight(node, searchRegex);\n      }\n    });\n  }\n\n  /**\n   * Generates the HTML structure for highlighted text.\n   *\n   * @param textContent - The original text content to process.\n   * @param searchRegex - Regular expression for matching text to highlight.\n   * @returns A string of HTML with highlighted portions wrapped in span elements.\n   */\n  private createHighlightedHTML(textContent: string, searchRegex: RegExp): string {\n    let parts: string[] = [];\n    let match;\n    let lastIndex = 0;\n    let resultHTML = '<span class=\"ax-highlight-text\">';\n\n    while ((match = searchRegex.exec(textContent)) !== null) {\n      if (match.index > lastIndex) {\n        resultHTML += `<span>${textContent.slice(lastIndex, match.index)}</span>`;\n      }\n      resultHTML += `<span class=\"ax-highlight\">${match[0]}</span>`;\n      lastIndex = searchRegex.lastIndex;\n    }\n\n    if (lastIndex < textContent.length) {\n      resultHTML += `<span>${textContent.slice(lastIndex)}</span>`;\n    }\n\n    resultHTML += '</span>';\n\n    return resultHTML;\n  }\n}\n","import { inject, Injector, InjectionToken, Provider, runInInjectionContext } from '@angular/core';\n\n/**\n * Instantiates a class inside an injection context.\n * Use when a lazy provider manually calls `new` on a nested class that relies on `inject()`.\n *\n * @example\n * ```typescript\n * export class AXMAuthDataSourceProvider implements AXPDataSourceDefinitionProvider {\n *   constructor(private readonly injector: Injector) {}\n *\n *   async items() {\n *     const userActivity = instantiateWithInjectionContext(\n *       this.injector,\n *       AXMUserActivityDataSourceDefinition,\n *     );\n *     return [...(await userActivity.items())];\n *   }\n * }\n * ```\n */\nexport function instantiateWithInjectionContext<T>(\n  injector: Injector,\n  type: new (injector?: Injector) => T,\n): T {\n  return runInInjectionContext(injector, () => new type(injector));\n}\n\n/**\n * Creates a provider instance within an injection context.\n * The injector must be captured synchronously from the useFactory injection context.\n *\n * @param injector - Injector resolved synchronously inside `useFactory`\n * @param loader - Function that returns a promise resolving to the provider class\n * @returns Promise that resolves to the provider instance\n *\n * @example\n * ```typescript\n * useFactory: () => {\n *   const injector = inject(Injector);\n *   return createProviderWithInjectionContext(injector, () =>\n *     import('./settings.provider').then((m) => m.AXMSettingProvider),\n *   );\n * }\n * ```\n */\nexport async function createProviderWithInjectionContext<T>(\n  injector: Injector,\n  loader: () => Promise<new (injector?: Injector) => T>,\n): Promise<T> {\n  const ProviderClass = await loader();\n  return runInInjectionContext(injector, () => new ProviderClass(injector));\n}\n\n/**\n * Creates a provider configuration for lazy-loaded providers with injection context.\n * Simplifies provider registration in NgModule providers array.\n *\n * Captures `Injector` synchronously in `useFactory` (before any `await`) so injection\n * context is reliable after dynamic import and cache rebuilds.\n *\n * @param token - The injection token to provide\n * @param loader - Function that returns a promise resolving to the provider class\n * @param multi - Optional. Whether the provider is a multi-provider (array of values). Defaults to `true`. Pass `false` for a single provider.\n * @returns Provider configuration object\n *\n * @example\n * ```typescript\n * // Multi-provider (default)\n * provideLazyProvider(\n *   AXP_DATASOURCE_DEFINITION_PROVIDER,\n *   () => import('./datasource.provider').then(m => m.AXMDataSourceProvider)\n * )\n *\n * // Single provider\n * provideLazyProvider(\n *   SOME_TOKEN,\n *   () => import('./my.provider').then(m => m.MyProvider),\n *   false\n * )\n * ```\n */\nexport function provideLazyProvider<TProvider>(\n  token: InjectionToken<any>,\n  loader: () => Promise<new (injector?: Injector) => TProvider>,\n  multi: boolean = true,\n): Provider {\n  return {\n    provide: token,\n    useFactory: () => {\n      const injector = inject(Injector);\n      return createProviderWithInjectionContext(injector, loader);\n    },\n    multi,\n  };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["normalizeShortcutToken","i1.AXPAppStartUpService"],"mappings":"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"}