@acorex/platform 21.0.0-next.92 → 21.0.0-next.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-platform-common.mjs +9 -4
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-contracts.mjs +12 -1
- package/fesm2022/acorex-platform-contracts.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +2 -16
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain-contracts.mjs +0 -1
- package/fesm2022/acorex-platform-domain-contracts.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +4 -4
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +4 -3
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +4 -3
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity-attachments-page.component-CwG6n_Yb.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity-contracts.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity-file-list-popup.component--IeMZLIr.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +24 -4
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +5 -4
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core-contracts.mjs +141 -0
- package/fesm2022/acorex-platform-layout-widget-core-contracts.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widget-core.mjs +5 -132
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-BvFykMTH.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DIDziLAT.mjs} +2 -2
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DIDziLAT.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets.mjs +13 -440
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-runtime-contracts.mjs +166 -0
- package/fesm2022/acorex-platform-runtime-contracts.mjs.map +1 -0
- package/fesm2022/acorex-platform-runtime.mjs +1 -163
- package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-C7cT82K2.mjs → acorex-platform-themes-default-entity-master-modify-view.component-BP2dVnBQ.mjs} +3 -2
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BP2dVnBQ.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-DrUwqKKA.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default.mjs +4 -3
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/package.json +14 -6
- package/types/acorex-platform-common.d.ts +15 -5
- package/types/acorex-platform-contracts.d.ts +106 -4
- package/types/acorex-platform-core.d.ts +4 -101
- package/types/acorex-platform-layout-builder.d.ts +3 -3
- package/types/acorex-platform-layout-components.d.ts +4 -3
- package/types/acorex-platform-layout-designer.d.ts +2 -1
- package/types/acorex-platform-layout-entity-contracts.d.ts +2 -3
- package/types/acorex-platform-layout-entity.d.ts +12 -10
- package/types/acorex-platform-layout-views.d.ts +10 -9
- package/types/acorex-platform-layout-widget-core-contracts.d.ts +299 -0
- package/types/acorex-platform-layout-widget-core.d.ts +9 -301
- package/types/acorex-platform-layout-widgets.d.ts +55 -80
- package/types/acorex-platform-runtime-contracts.d.ts +275 -0
- package/types/acorex-platform-runtime.d.ts +4 -274
- package/types/acorex-platform-themes-default.d.ts +3 -3
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-BvFykMTH.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-C7cT82K2.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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/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/keyboard-shortcuts/keyboard-shortcut.types.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/data.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","// 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 ---- Types ----\n\n/**\n * Normalized keyboard chord (e.g. `ctrl+f`, `arrowleft`, `f1`).\n * Modifiers and key are joined with `+`.\n */\nexport type AXPKeyboardShortcutChord = string;\n\n/** Priority tier — higher values win when multiple bindings match. */\nexport enum AXPKeyboardShortcutPriority {\n Global = 0,\n Page = 10,\n Panel = 20,\n Modal = 100,\n}\n\n/**\n * How horizontal directional keys behave in RTL locale profiles (`activeProfile().i18nMeta?.rtl`).\n * - `physical`: arrow left always means left (grid navigation, etc.).\n * - `semantic`: arrows and `[` / `]` mirror so next/previous follow reading direction.\n */\nexport type AXPKeyboardShortcutDirectionBehavior = 'physical' | 'semantic';\n\nexport interface AXPKeyboardShortcutBinding {\n /**\n * One or more key chords that trigger this action.\n * Example: `['arrowleft', 'pageup']` or `['ctrl+f']`.\n */\n keys: AXPKeyboardShortcutChord[];\n\n /** i18n key (e.g. `@general:...`) or plain label for the help dialog. */\n title: string;\n\n /** Optional group label (i18n key or plain) for help dialog grouping. */\n group?: string;\n\n /** When true, fires even if focus is inside an editable field. Default false. */\n allowInEditableFields?: boolean;\n\n /** Optional runtime guard — binding is ignored when this returns false. */\n when?: () => boolean;\n\n /**\n * RTL handling for horizontal direction keys (`←`/`→`, `[`/`]`).\n * Omitted = auto (`semantic` for direction keys, `physical` otherwise). Set `physical` to opt out.\n */\n directionBehavior?: AXPKeyboardShortcutDirectionBehavior;\n\n handler: (event: KeyboardEvent) => void | Promise<void>;\n}\n\n/**\n * Declarative shortcut for menus, action items, and other config-driven bindings.\n * Use a chord string for defaults, or an object to override binding options (e.g. `allowInEditableFields`).\n */\nexport type AXPKeyboardShortcutConfig = Pick<\n AXPKeyboardShortcutBinding,\n 'allowInEditableFields' | 'when' | 'directionBehavior'\n> & {\n keys: AXPKeyboardShortcutChord | readonly AXPKeyboardShortcutChord[];\n};\n\nexport type AXPKeyboardShortcut = AXPKeyboardShortcutChord | AXPKeyboardShortcutConfig;\n\n/** Normalized declarative shortcut used when registering keyboard bindings. */\nexport interface AXPResolvedKeyboardShortcut {\n keys: AXPKeyboardShortcutChord[];\n allowInEditableFields?: boolean;\n when?: () => boolean;\n directionBehavior?: AXPKeyboardShortcutDirectionBehavior;\n}\n\nexport interface AXPKeyboardShortcutRegistration {\n /** Stable id for this registration scope (e.g. `task-board-navigator`). */\n id: string;\n\n /** Higher priority bindings win on conflict. */\n priority?: AXPKeyboardShortcutPriority | number;\n\n /** Scope label shown in the help dialog (i18n key or plain). */\n scope?: string;\n\n /** Default group for bindings without their own `group`. */\n group?: string;\n\n /** Optional runtime guard — registration is ignored when this returns false. */\n when?: () => boolean;\n\n shortcuts: AXPKeyboardShortcutBinding[];\n}\n\n/** Resolved entry for help UI. */\nexport interface AXPKeyboardShortcutHelpEntry {\n registrationId: string;\n bindingTitle: string;\n /** Raw chords for `ax-kbd-item` rendering (canonical registration). */\n chords: AXPKeyboardShortcutChord[];\n /** Chords adjusted for RTL display when `directionBehavior` is `semantic`. */\n displayChords: AXPKeyboardShortcutChord[];\n displayKeys: string;\n scope?: string;\n group?: string;\n priority: number;\n}\n\n//#endregion\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 './keyboard-shortcut.types';\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 './keyboard-shortcut.types';\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 AXPKeyboardShortcutPriority,\n AXPKeyboardShortcutRegistration,\n} from './keyboard-shortcut.types';\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\nexport { AXPKeyboardShortcutPriority } from './keyboard-shortcut.types';\n","//#region ---- Dialog Action Shortcut Utilities ----\n\nimport type { AXPKeyboardShortcut, AXPKeyboardShortcutChord } from './keyboard-shortcut.types';\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 './keyboard-shortcut.types';\nimport { AXPKeyboardShortcutPriority, 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 { AXStyleLookType } from '@acorex/cdk/common';\nimport {\n getSystemActions,\n type AXPActionMenuItem as AXPContractsActionMenuItem,\n type AXPSystemActionType,\n type AXPMultiLanguageString,\n} from '@acorex/platform/contracts';\nimport type { AXPKeyboardShortcut } from '../keyboard-shortcuts/keyboard-shortcut.types';\n\n/** CDK- and shortcut-aware action menu item (extends contracts base type). */\nexport type AXPActionMenuItem = Omit<AXPContractsActionMenuItem, 'look' | 'items'> & {\n look?: AXStyleLookType;\n items?: AXPActionMenuItem[];\n shortcuts?: AXPKeyboardShortcut[];\n};\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","//#region ---- Core-only data types (CDK-coupled) ----\n\nimport {\n AXDataSource,\n AXDataSourceFilterOption,\n AXDataSourceSortOption,\n} from '@acorex/cdk/common';\n\n/** CDK-aware data source reference used by platform widgets and datasources. */\nexport type AXPDataSource = string | AXDataSource | unknown[];\n\nexport interface AXPQueryRequest {\n skip: number;\n take: number;\n sort?: AXDataSourceSortOption[];\n filter?: AXDataSourceFilterOption;\n params?: Record<string, string>;\n}\n\n//#endregion\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 * Creates a provider instance within an injection context.\n * Handles dynamic import, injector resolution, and provider instantiation.\n * \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: () => createProviderWithInjectionContext(() => \n * import('./settings.provider').then(m => m.AXMSettingProvider)\n * )\n * ```\n */\nexport async function createProviderWithInjectionContext<T>(\n loader: () => Promise<new () => T>\n): Promise<T> {\n const injector = inject(Injector);\n const ProviderClass = await loader();\n return runInInjectionContext(injector, () => new ProviderClass());\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 * @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 () => TProvider>,\n multi: boolean = true\n): Provider {\n return {\n provide: token,\n useFactory: () => createProviderWithInjectionContext(loader),\n multi,\n };\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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"}
|
|
1
|
+
{"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/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","// 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 * Creates a provider instance within an injection context.\n * Handles dynamic import, injector resolution, and provider instantiation.\n * \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: () => createProviderWithInjectionContext(() => \n * import('./settings.provider').then(m => m.AXMSettingProvider)\n * )\n * ```\n */\nexport async function createProviderWithInjectionContext<T>(\n loader: () => Promise<new () => T>\n): Promise<T> {\n const injector = inject(Injector);\n const ProviderClass = await loader();\n return runInInjectionContext(injector, () => new ProviderClass());\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 * @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 () => TProvider>,\n multi: boolean = true\n): Provider {\n return {\n provide: token,\n useFactory: () => createProviderWithInjectionContext(loader),\n multi,\n };\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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"}
|